1/* r128_common.h -- common header definitions for R128 2D/3D/DRM suite
2 * Created: Sun Apr  9 18:16:28 2000 by kevin@precisioninsight.com
3 *
4 * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
5 * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas.
6 * All Rights Reserved.
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice (including the next
16 * paragraph) shall be included in all copies or substantial portions of the
17 * Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 * DEALINGS IN THE SOFTWARE.
26 *
27 * Author:
28 *   Gareth Hughes <gareth@valinux.com>
29 *   Kevin E. Martin <martin@valinux.com>
30 *
31 * Converted to common header format:
32 *   Jens Owen <jens@tungstengraphics.com>
33 *
34 */
35
36#ifndef _R128_COMMON_H_
37#define _R128_COMMON_H_
38
39#include <X11/Xmd.h>
40
41/*
42 * WARNING: If you change any of these defines, make sure to change
43 * the kernel include file as well (r128_drm.h)
44 */
45
46/* Driver specific DRM command indices
47 * NOTE: these are not OS specific, but they are driver specific
48 */
49#define DRM_R128_INIT           0x00
50#define DRM_R128_CCE_START      0x01
51#define DRM_R128_CCE_STOP       0x02
52#define DRM_R128_CCE_RESET      0x03
53#define DRM_R128_CCE_IDLE       0x04
54#define DRM_R128_UNDEFINED1     0x05
55#define DRM_R128_RESET          0x06
56#define DRM_R128_SWAP           0x07
57#define DRM_R128_CLEAR          0x08
58#define DRM_R128_VERTEX         0x09
59#define DRM_R128_INDICES        0x0a
60#define DRM_R128_BLIT           0x0b
61#define DRM_R128_DEPTH          0x0c
62#define DRM_R128_STIPPLE        0x0d
63#define DRM_R128_UNDEFINED2     0x0e
64#define DRM_R128_INDIRECT       0x0f
65#define DRM_R128_FULLSCREEN     0x10
66#define DRM_R128_CLEAR2         0x11
67#define DRM_R128_GETPARAM       0x12
68#define DRM_R128_FLIP           0x13
69
70#define DRM_R128_FRONT_BUFFER	0x1
71#define DRM_R128_BACK_BUFFER	0x2
72#define DRM_R128_DEPTH_BUFFER	0x4
73
74typedef struct {
75   enum {
76      DRM_R128_INIT_CCE    = 0x01,
77      DRM_R128_CLEANUP_CCE = 0x02
78   } func;
79   unsigned long sarea_priv_offset;
80   int is_pci;
81   int cce_mode;
82   int cce_secure;		/* FIXME: Deprecated, we should remove this */
83   int ring_size;
84   int usec_timeout;
85
86   unsigned int fb_bpp;
87   unsigned int front_offset, front_pitch;
88   unsigned int back_offset, back_pitch;
89   unsigned int depth_bpp;
90   unsigned int depth_offset, depth_pitch;
91   unsigned int span_offset;
92
93   unsigned long fb_offset;
94   unsigned long mmio_offset;
95   unsigned long ring_offset;
96   unsigned long ring_rptr_offset;
97   unsigned long buffers_offset;
98   unsigned long agp_textures_offset;
99} drmR128Init;
100
101typedef struct {
102   int flush;
103   int idle;
104} drmR128CCEStop;
105
106typedef struct {
107   int idx;
108   int start;
109   int end;
110   int discard;
111} drmR128Indirect;
112
113typedef struct {
114   int idx;
115   int pitch;
116   int offset;
117   int format;
118   unsigned short x, y;
119   unsigned short width, height;
120} drmR128Blit;
121
122typedef struct {
123   enum {
124      DRM_R128_WRITE_SPAN         = 0x01,
125      DRM_R128_WRITE_PIXELS       = 0x02,
126      DRM_R128_READ_SPAN          = 0x03,
127      DRM_R128_READ_PIXELS        = 0x04
128   } func;
129   int n;
130   int *x;
131   int *y;
132   unsigned int *buffer;
133   unsigned char *mask;
134} drmR128Depth;
135
136typedef struct {
137   int prim;
138   int idx;                        /* Index of vertex buffer */
139   int count;                      /* Number of vertices in buffer */
140   int discard;                    /* Client finished with buffer? */
141} drmR128Vertex;
142
143typedef struct {
144   unsigned int *mask;
145} drmR128Stipple;
146
147typedef struct {
148   unsigned int flags;
149   unsigned int clear_color;
150   unsigned int clear_depth;
151   unsigned int color_mask;
152   unsigned int depth_mask;
153} drmR128Clear;
154
155typedef struct {
156   enum {
157      DRM_R128_INIT_FULLSCREEN    = 0x01,
158      DRM_R128_CLEANUP_FULLSCREEN = 0x02
159   } func;
160} drmR128Fullscreen;
161
162typedef struct drm_r128_getparam {
163	int param;
164	int *value;
165} drmR128GetParam;
166
167#define R128_PARAM_IRQ_NR            1
168
169#endif
170