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 
74 typedef 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 
101 typedef struct {
102    int flush;
103    int idle;
104 } drmR128CCEStop;
105 
106 typedef struct {
107    int idx;
108    int start;
109    int end;
110    int discard;
111 } drmR128Indirect;
112 
113 typedef 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 
122 typedef 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 
136 typedef 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 
143 typedef struct {
144    unsigned int *mask;
145 } drmR128Stipple;
146 
147 typedef 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 
155 typedef struct {
156    enum {
157       DRM_R128_INIT_FULLSCREEN    = 0x01,
158       DRM_R128_CLEANUP_FULLSCREEN = 0x02
159    } func;
160 } drmR128Fullscreen;
161 
162 typedef struct drm_r128_getparam {
163 	int param;
164 	int *value;
165 } drmR128GetParam;
166 
167 #define R128_PARAM_IRQ_NR            1
168 
169 #endif
170