i810_drm.h
001: #ifndef _I810_DRM_H_
002: #define _I810_DRM_H_
003:
004:
005:
006:
007:
008: #ifndef _I810_DEFINES_
009: #define _I810_DEFINES_
010:
011: #define I810_DMA_BUF_ORDER 12
012: #define I810_DMA_BUF_SZ (1<<I810_DMA_BUF_ORDER)
013: #define I810_DMA_BUF_NR 256
014: #define I810_NR_SAREA_CLIPRECTS 8
015:
016:
017:
018: #define I810_NR_TEX_REGIONS 64
019: #define I810_LOG_MIN_TEX_REGION_SIZE 16
020: #endif
021:
022: #define I810_UPLOAD_TEX0IMAGE 0x1
023: #define I810_UPLOAD_TEX1IMAGE 0x2
024: #define I810_UPLOAD_CTX 0x4
025: #define I810_UPLOAD_BUFFERS 0x8
026: #define I810_UPLOAD_TEX0 0x10
027: #define I810_UPLOAD_TEX1 0x20
028: #define I810_UPLOAD_CLIPRECTS 0x40
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043: #define I810_DESTREG_DI0 0
044: #define I810_DESTREG_DI1 1
045: #define I810_DESTREG_DV0 2
046: #define I810_DESTREG_DV1 3
047: #define I810_DESTREG_DR0 4
048: #define I810_DESTREG_DR1 5
049: #define I810_DESTREG_DR2 6
050: #define I810_DESTREG_DR3 7
051: #define I810_DESTREG_DR4 8
052: #define I810_DEST_SETUP_SIZE 10
053:
054:
055:
056: #define I810_CTXREG_CF0 0
057: #define I810_CTXREG_CF1 1
058: #define I810_CTXREG_ST0 2
059: #define I810_CTXREG_ST1 3
060: #define I810_CTXREG_VF 4
061: #define I810_CTXREG_MT 5
062: #define I810_CTXREG_MC0 6
063: #define I810_CTXREG_MC1 7
064: #define I810_CTXREG_MC2 8
065: #define I810_CTXREG_MA0 9
066: #define I810_CTXREG_MA1 10
067: #define I810_CTXREG_MA2 11
068: #define I810_CTXREG_SDM 12
069: #define I810_CTXREG_FOG 13
070: #define I810_CTXREG_B1 14
071: #define I810_CTXREG_B2 15
072: #define I810_CTXREG_LCS 16
073: #define I810_CTXREG_PV 17
074: #define I810_CTXREG_ZA 18
075: #define I810_CTXREG_AA 19
076: #define I810_CTX_SETUP_SIZE 20
077:
078:
079:
080: #define I810_TEXREG_MI0 0
081: #define I810_TEXREG_MI1 1
082: #define I810_TEXREG_MI2 2
083: #define I810_TEXREG_MI3 3
084: #define I810_TEXREG_MF 4
085: #define I810_TEXREG_MLC 5
086: #define I810_TEXREG_MLL 6
087: #define I810_TEXREG_MCS 7
088: #define I810_TEX_SETUP_SIZE 8
089:
090:
091:
092: #define I810_FRONT 0x1
093: #define I810_BACK 0x2
094: #define I810_DEPTH 0x4
095:
096: typedef enum _drm_i810_init_func {
097: I810_INIT_DMA = 0x01,
098: I810_CLEANUP_DMA = 0x02,
099: I810_INIT_DMA_1_4 = 0x03
100: } drm_i810_init_func_t;
101:
102:
103: typedef struct _drm_i810_init {
104: drm_i810_init_func_t func;
105: unsigned int mmio_offset;
106: unsigned int buffers_offset;
107: int sarea_priv_offset;
108: unsigned int ring_start;
109: unsigned int ring_end;
110: unsigned int ring_size;
111: unsigned int front_offset;
112: unsigned int back_offset;
113: unsigned int depth_offset;
114: unsigned int overlay_offset;
115: unsigned int overlay_physical;
116: unsigned int w;
117: unsigned int h;
118: unsigned int pitch;
119: unsigned int pitch_bits;
120: } drm_i810_init_t;
121:
122:
123: typedef struct _drm_i810_pre12_init {
124: drm_i810_init_func_t func;
125: unsigned int mmio_offset;
126: unsigned int buffers_offset;
127: int sarea_priv_offset;
128: unsigned int ring_start;
129: unsigned int ring_end;
130: unsigned int ring_size;
131: unsigned int front_offset;
132: unsigned int back_offset;
133: unsigned int depth_offset;
134: unsigned int w;
135: unsigned int h;
136: unsigned int pitch;
137: unsigned int pitch_bits;
138: } drm_i810_pre12_init_t;
139:
140:
141:
142:
143: typedef struct _drm_i810_tex_region {
144: unsigned char next, prev;
145: unsigned char in_use;
146: int age;
147: } drm_i810_tex_region_t;
148:
149: typedef struct _drm_i810_sarea {
150: unsigned int ContextState[I810_CTX_SETUP_SIZE];
151: unsigned int BufferState[I810_DEST_SETUP_SIZE];
152: unsigned int TexState[2][I810_TEX_SETUP_SIZE];
153: unsigned int dirty;
154:
155: unsigned int nbox;
156: struct drm_clip_rect boxes[I810_NR_SAREA_CLIPRECTS];
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174: drm_i810_tex_region_t texList[I810_NR_TEX_REGIONS + 1];
175:
176: int texAge;
177: int last_enqueue;
178: int last_dispatch;
179: int last_quiescent;
180: int ctxOwner;
181:
182: int vertex_prim;
183:
184: int pf_enabled;
185: int pf_active;
186: int pf_current_page;
187: } drm_i810_sarea_t;
188:
189:
190:
191:
192:
193:
194:
195:
196: #define DRM_I810_INIT 0x00
197: #define DRM_I810_VERTEX 0x01
198: #define DRM_I810_CLEAR 0x02
199: #define DRM_I810_FLUSH 0x03
200: #define DRM_I810_GETAGE 0x04
201: #define DRM_I810_GETBUF 0x05
202: #define DRM_I810_SWAP 0x06
203: #define DRM_I810_COPY 0x07
204: #define DRM_I810_DOCOPY 0x08
205: #define DRM_I810_OV0INFO 0x09
206: #define DRM_I810_FSTATUS 0x0a
207: #define DRM_I810_OV0FLIP 0x0b
208: #define DRM_I810_MC 0x0c
209: #define DRM_I810_RSTATUS 0x0d
210: #define DRM_I810_FLIP 0x0e
211:
212: #define DRM_IOCTL_I810_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I810_INIT, drm_i810_init_t)
213: #define DRM_IOCTL_I810_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_I810_VERTEX, drm_i810_vertex_t)
214: #define DRM_IOCTL_I810_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_I810_CLEAR, drm_i810_clear_t)
215: #define DRM_IOCTL_I810_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_I810_FLUSH)
216: #define DRM_IOCTL_I810_GETAGE DRM_IO( DRM_COMMAND_BASE + DRM_I810_GETAGE)
217: #define DRM_IOCTL_I810_GETBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_I810_GETBUF, drm_i810_dma_t)
218: #define DRM_IOCTL_I810_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_I810_SWAP)
219: #define DRM_IOCTL_I810_COPY DRM_IOW( DRM_COMMAND_BASE + DRM_I810_COPY, drm_i810_copy_t)
220: #define DRM_IOCTL_I810_DOCOPY DRM_IO( DRM_COMMAND_BASE + DRM_I810_DOCOPY)
221: #define DRM_IOCTL_I810_OV0INFO DRM_IOR( DRM_COMMAND_BASE + DRM_I810_OV0INFO, drm_i810_overlay_t)
222: #define DRM_IOCTL_I810_FSTATUS DRM_IO ( DRM_COMMAND_BASE + DRM_I810_FSTATUS)
223: #define DRM_IOCTL_I810_OV0FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I810_OV0FLIP)
224: #define DRM_IOCTL_I810_MC DRM_IOW( DRM_COMMAND_BASE + DRM_I810_MC, drm_i810_mc_t)
225: #define DRM_IOCTL_I810_RSTATUS DRM_IO ( DRM_COMMAND_BASE + DRM_I810_RSTATUS)
226: #define DRM_IOCTL_I810_FLIP DRM_IO ( DRM_COMMAND_BASE + DRM_I810_FLIP)
227:
228: typedef struct _drm_i810_clear {
229: int clear_color;
230: int clear_depth;
231: int flags;
232: } drm_i810_clear_t;
233:
234:
235:
236:
237:
238:
239: typedef struct _drm_i810_vertex {
240: int idx;
241: int used;
242: int discard;
243: } drm_i810_vertex_t;
244:
245: typedef struct _drm_i810_copy_t {
246: int idx;
247: int used;
248: void *address;
249: } drm_i810_copy_t;
250:
251: #define PR_TRIANGLES (0x0<<18)
252: #define PR_TRISTRIP_0 (0x1<<18)
253: #define PR_TRISTRIP_1 (0x2<<18)
254: #define PR_TRIFAN (0x3<<18)
255: #define PR_POLYGON (0x4<<18)
256: #define PR_LINES (0x5<<18)
257: #define PR_LINESTRIP (0x6<<18)
258: #define PR_RECTS (0x7<<18)
259: #define PR_MASK (0x7<<18)
260:
261: typedef struct drm_i810_dma {
262: void *virtual;
263: int request_idx;
264: int request_size;
265: int granted;
266: } drm_i810_dma_t;
267:
268: typedef struct _drm_i810_overlay_t {
269: unsigned int offset;
270: unsigned int physical;
271: } drm_i810_overlay_t;
272:
273: typedef struct _drm_i810_mc {
274: int idx;
275: int used;
276: int num_blocks;
277: int *length;
278: unsigned int last_render;
279: } drm_i810_mc_t;
280:
281: #endif
282:
© Andrew Scott 2006 -
2025,
All Rights Reserved