mga_drm.h
001:
002: jhartmann@precisioninsight.com
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028: <jhartmann@valinux.com>
029: <keith@tungstengraphics.com>
030:
031:
032: <gareth@valinux.com>
033:
034:
035: #ifndef __MGA_DRM_H__
036: #define __MGA_DRM_H__
037:
038: #include <drm/drm.h>
039:
040:
041:
042:
043:
044: #ifndef __MGA_SAREA_DEFINES__
045: #define __MGA_SAREA_DEFINES__
046:
047:
048:
049: #define MGA_F 0x1
050: #define MGA_A 0x2
051: #define MGA_S 0x4
052: #define MGA_T2 0x8
053:
054: #define MGA_WARP_TGZ 0
055: #define MGA_WARP_TGZF (MGA_F)
056: #define MGA_WARP_TGZA (MGA_A)
057: #define MGA_WARP_TGZAF (MGA_F|MGA_A)
058: #define MGA_WARP_TGZS (MGA_S)
059: #define MGA_WARP_TGZSF (MGA_S|MGA_F)
060: #define MGA_WARP_TGZSA (MGA_S|MGA_A)
061: #define MGA_WARP_TGZSAF (MGA_S|MGA_F|MGA_A)
062: #define MGA_WARP_T2GZ (MGA_T2)
063: #define MGA_WARP_T2GZF (MGA_T2|MGA_F)
064: #define MGA_WARP_T2GZA (MGA_T2|MGA_A)
065: #define MGA_WARP_T2GZAF (MGA_T2|MGA_A|MGA_F)
066: #define MGA_WARP_T2GZS (MGA_T2|MGA_S)
067: #define MGA_WARP_T2GZSF (MGA_T2|MGA_S|MGA_F)
068: #define MGA_WARP_T2GZSA (MGA_T2|MGA_S|MGA_A)
069: #define MGA_WARP_T2GZSAF (MGA_T2|MGA_S|MGA_F|MGA_A)
070:
071: #define MGA_MAX_G200_PIPES 8
072: #define MGA_MAX_G400_PIPES 16
073: #define MGA_MAX_WARP_PIPES MGA_MAX_G400_PIPES
074: #define MGA_WARP_UCODE_SIZE 32768
075:
076: #define MGA_CARD_TYPE_G200 1
077: #define MGA_CARD_TYPE_G400 2
078: #define MGA_CARD_TYPE_G450 3
079: #define MGA_CARD_TYPE_G550 4
080:
081: #define MGA_FRONT 0x1
082: #define MGA_BACK 0x2
083: #define MGA_DEPTH 0x4
084:
085:
086:
087: #define MGA_UPLOAD_CONTEXT 0x1
088: #define MGA_UPLOAD_TEX0 0x2
089: #define MGA_UPLOAD_TEX1 0x4
090: #define MGA_UPLOAD_PIPE 0x8
091: #define MGA_UPLOAD_TEX0IMAGE 0x10
092: #define MGA_UPLOAD_TEX1IMAGE 0x20
093: #define MGA_UPLOAD_2D 0x40
094: #define MGA_WAIT_AGE 0x80
095: #define MGA_UPLOAD_CLIPRECTS 0x100
096: #if 0
097: #define MGA_DMA_FLUSH 0x200
098:
099: #endif
100:
101:
102:
103: #define MGA_BUFFER_SIZE (1 << 16)
104: #define MGA_NUM_BUFFERS 128
105:
106:
107:
108: #define MGA_NR_SAREA_CLIPRECTS 8
109:
110:
111:
112:
113:
114:
115:
116:
117: #define MGA_CARD_HEAP 0
118: #define MGA_AGP_HEAP 1
119: #define MGA_NR_TEX_HEAPS 2
120: #define MGA_NR_TEX_REGIONS 16
121: #define MGA_LOG_MIN_TEX_REGION_SIZE 16
122:
123: #define DRM_MGA_IDLE_RETRY 2048
124:
125: #endif
126:
127:
128:
129: typedef struct {
130: unsigned int dstorg;
131: unsigned int maccess;
132: unsigned int plnwt;
133: unsigned int dwgctl;
134: unsigned int alphactrl;
135: unsigned int fogcolor;
136: unsigned int wflag;
137: unsigned int tdualstage0;
138: unsigned int tdualstage1;
139: unsigned int fcol;
140: unsigned int stencil;
141: unsigned int stencilctl;
142: } drm_mga_context_regs_t;
143:
144:
145:
146: typedef struct {
147: unsigned int pitch;
148: } drm_mga_server_regs_t;
149:
150:
151:
152: typedef struct {
153: unsigned int texctl;
154: unsigned int texctl2;
155: unsigned int texfilter;
156: unsigned int texbordercol;
157: unsigned int texorg;
158: unsigned int texwidth;
159: unsigned int texheight;
160: unsigned int texorg1;
161: unsigned int texorg2;
162: unsigned int texorg3;
163: unsigned int texorg4;
164: } drm_mga_texture_regs_t;
165:
166:
167:
168: typedef struct {
169: unsigned int head;
170: unsigned int wrap;
171: } drm_mga_age_t;
172:
173: typedef struct _drm_mga_sarea {
174:
175:
176:
177: drm_mga_context_regs_t context_state;
178: drm_mga_server_regs_t server_state;
179: drm_mga_texture_regs_t tex_state[2];
180: unsigned int warp_pipe;
181: unsigned int dirty;
182: unsigned int vertsize;
183:
184:
185:
186: struct drm_clip_rect boxes[MGA_NR_SAREA_CLIPRECTS];
187: unsigned int nbox;
188:
189:
190:
191:
192:
193:
194:
195:
196: unsigned int req_drawable;
197: unsigned int req_draw_buffer;
198:
199: unsigned int exported_drawable;
200: unsigned int exported_index;
201: unsigned int exported_stamp;
202: unsigned int exported_buffers;
203: unsigned int exported_nfront;
204: unsigned int exported_nback;
205: int exported_back_x, exported_front_x, exported_w;
206: int exported_back_y, exported_front_y, exported_h;
207: struct drm_clip_rect exported_boxes[MGA_NR_SAREA_CLIPRECTS];
208:
209:
210:
211: unsigned int status[4];
212: unsigned int last_wrap;
213:
214: drm_mga_age_t last_frame;
215: unsigned int last_enqueue;
216: unsigned int last_dispatch;
217: unsigned int last_quiescent;
218:
219:
220:
221: struct drm_tex_region texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS + 1];
222: unsigned int texAge[MGA_NR_TEX_HEAPS];
223:
224:
225:
226: int ctxOwner;
227: } drm_mga_sarea_t;
228:
229:
230:
231:
232: #define DRM_MGA_INIT 0x00
233: #define DRM_MGA_FLUSH 0x01
234: #define DRM_MGA_RESET 0x02
235: #define DRM_MGA_SWAP 0x03
236: #define DRM_MGA_CLEAR 0x04
237: #define DRM_MGA_VERTEX 0x05
238: #define DRM_MGA_INDICES 0x06
239: #define DRM_MGA_ILOAD 0x07
240: #define DRM_MGA_BLIT 0x08
241: #define DRM_MGA_GETPARAM 0x09
242:
243:
244:
245:
246: #define DRM_MGA_SET_FENCE 0x0a
247: #define DRM_MGA_WAIT_FENCE 0x0b
248: #define DRM_MGA_DMA_BOOTSTRAP 0x0c
249:
250: #define DRM_IOCTL_MGA_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INIT, drm_mga_init_t)
251: #define DRM_IOCTL_MGA_FLUSH DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_FLUSH, struct drm_lock)
252: #define DRM_IOCTL_MGA_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MGA_RESET)
253: #define DRM_IOCTL_MGA_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MGA_SWAP)
254: #define DRM_IOCTL_MGA_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_CLEAR, drm_mga_clear_t)
255: #define DRM_IOCTL_MGA_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_VERTEX, drm_mga_vertex_t)
256: #define DRM_IOCTL_MGA_INDICES DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INDICES, drm_mga_indices_t)
257: #define DRM_IOCTL_MGA_ILOAD DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t)
258: #define DRM_IOCTL_MGA_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t)
259: #define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t)
260: #define DRM_IOCTL_MGA_SET_FENCE DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_SET_FENCE, __u32)
261: #define DRM_IOCTL_MGA_WAIT_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_WAIT_FENCE, __u32)
262: #define DRM_IOCTL_MGA_DMA_BOOTSTRAP DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_DMA_BOOTSTRAP, drm_mga_dma_bootstrap_t)
263:
264: typedef struct _drm_mga_warp_index {
265: int installed;
266: unsigned long phys_addr;
267: int size;
268: } drm_mga_warp_index_t;
269:
270: typedef struct drm_mga_init {
271: enum {
272: MGA_INIT_DMA = 0x01,
273: MGA_CLEANUP_DMA = 0x02
274: } func;
275:
276: unsigned long sarea_priv_offset;
277:
278: int chipset;
279: int sgram;
280:
281: unsigned int maccess;
282:
283: unsigned int fb_cpp;
284: unsigned int front_offset, front_pitch;
285: unsigned int back_offset, back_pitch;
286:
287: unsigned int depth_cpp;
288: unsigned int depth_offset, depth_pitch;
289:
290: unsigned int texture_offset[MGA_NR_TEX_HEAPS];
291: unsigned int texture_size[MGA_NR_TEX_HEAPS];
292:
293: unsigned long fb_offset;
294: unsigned long mmio_offset;
295: unsigned long status_offset;
296: unsigned long warp_offset;
297: unsigned long primary_offset;
298: unsigned long buffers_offset;
299: } drm_mga_init_t;
300:
301: typedef struct drm_mga_dma_bootstrap {
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314: unsigned long texture_handle;
315: __u32 texture_size;
316:
317:
318:
319:
320:
321:
322:
323:
324: __u32 primary_size;
325:
326:
327:
328:
329:
330:
331:
332:
333:
334: __u32 secondary_bin_count;
335:
336:
337:
338:
339:
340:
341:
342:
343: __u32 secondary_bin_size;
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355: __u32 agp_mode;
356:
357:
358:
359:
360: __u8 agp_size;
361: } drm_mga_dma_bootstrap_t;
362:
363: typedef struct drm_mga_clear {
364: unsigned int flags;
365: unsigned int clear_color;
366: unsigned int clear_depth;
367: unsigned int color_mask;
368: unsigned int depth_mask;
369: } drm_mga_clear_t;
370:
371: typedef struct drm_mga_vertex {
372: int idx;
373: int used;
374: int discard;
375: } drm_mga_vertex_t;
376:
377: typedef struct drm_mga_indices {
378: int idx;
379: unsigned int start;
380: unsigned int end;
381: int discard;
382: } drm_mga_indices_t;
383:
384: typedef struct drm_mga_iload {
385: int idx;
386: unsigned int dstorg;
387: unsigned int length;
388: } drm_mga_iload_t;
389:
390: typedef struct _drm_mga_blit {
391: unsigned int planemask;
392: unsigned int srcorg;
393: unsigned int dstorg;
394: int src_pitch, dst_pitch;
395: int delta_sx, delta_sy;
396: int delta_dx, delta_dy;
397: int height, ydir;
398: int source_pitch, dest_pitch;
399: } drm_mga_blit_t;
400:
401:
402:
403:
404: #define MGA_PARAM_IRQ_NR 1
405:
406:
407:
408:
409:
410:
411:
412: #define MGA_PARAM_CARD_TYPE 2
413:
414: typedef struct drm_mga_getparam {
415: int param;
416: void *value;
417: } drm_mga_getparam_t;
418:
419: #endif
420:
© Andrew Scott 2006 -
2025,
All Rights Reserved