12b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* savage_drm.h -- Public header for the savage driver 22b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * 32b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Copyright 2004 Felix Kuehling 42b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * All Rights Reserved. 52b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * 62b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Permission is hereby granted, free of charge, to any person obtaining a 72b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * copy of this software and associated documentation files (the "Software"), 82b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * to deal in the Software without restriction, including without limitation 92b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * the rights to use, copy, modify, merge, publish, distribute, sub license, 102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * and/or sell copies of the Software, and to permit persons to whom the 112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Software is furnished to do so, subject to the following conditions: 122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * 132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * The above copyright notice and this permission notice (including the 142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * next paragraph) shall be included in all copies or substantial portions 152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * of the Software. 162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * 172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * NON-INFRINGEMENT. IN NO EVENT SHALL FELIX KUEHLING BE LIABLE FOR 212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */ 252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#ifndef __SAVAGE_DRM_H__ 272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define __SAVAGE_DRM_H__ 282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#ifndef __SAVAGE_SAREA_DEFINES__ 302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define __SAVAGE_SAREA_DEFINES__ 312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* 2 heaps (1 for card, 1 for agp), each divided into upto 128 332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * regions, subject to a minimum region size of (1<<16) == 64k. 342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * 352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * Clients may subdivide regions internally, but when sharing between 362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * clients, the region size is the minimum granularity. 372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */ 382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_CARD_HEAP 0 402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_AGP_HEAP 1 412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_NR_TEX_HEAPS 2 422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_NR_TEX_REGIONS 16 432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_LOG_MIN_TEX_REGION_SIZE 16 442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#endif /* __SAVAGE_SAREA_DEFINES__ */ 462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct _drm_savage_sarea { 482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg /* LRU lists for texture memory in agp space and on the card. 492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */ 502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg struct drm_tex_region texList[SAVAGE_NR_TEX_HEAPS][SAVAGE_NR_TEX_REGIONS + 512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 1]; 522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; 532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg /* Mechanism to validate card state. 552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */ 562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg int ctxOwner; 572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_savage_sarea_t, *drm_savage_sarea_ptr; 582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Savage-specific ioctls 602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */ 612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_SAVAGE_BCI_INIT 0x00 622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_SAVAGE_BCI_CMDBUF 0x01 632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_SAVAGE_BCI_EVENT_EMIT 0x02 642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_SAVAGE_BCI_EVENT_WAIT 0x03 652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SAVAGE_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_INIT, drm_savage_init_t) 672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SAVAGE_CMDBUF DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_CMDBUF, drm_savage_cmdbuf_t) 682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SAVAGE_EVENT_EMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_EMIT, drm_savage_event_emit_t) 692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define DRM_IOCTL_SAVAGE_EVENT_WAIT DRM_IOW( DRM_COMMAND_BASE + DRM_SAVAGE_BCI_EVENT_WAIT, drm_savage_event_wait_t) 702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_DMA_PCI 1 722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_DMA_AGP 3 732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_savage_init { 742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg enum { 752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg SAVAGE_INIT_BCI = 1, 762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg SAVAGE_CLEANUP_BCI = 2 772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg } func; 782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int sarea_priv_offset; 792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg /* some parameters */ 812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int cob_size; 822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int bci_threshold_lo, bci_threshold_hi; 832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int dma_type; 842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg /* frame buffer layout */ 862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int fb_bpp; 872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int front_offset, front_pitch; 882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int back_offset, back_pitch; 892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int depth_bpp; 902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int depth_offset, depth_pitch; 912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg /* local textures */ 932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int texture_offset; 942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int texture_size; 952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg /* physical locations of non-permanent maps */ 972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned long status_offset; 982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned long buffers_offset; 992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned long agp_textures_offset; 1002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned long cmd_dma_offset; 1012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_savage_init_t; 1022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 1032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef union drm_savage_cmd_header drm_savage_cmd_header_t; 1042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_savage_cmdbuf { 1052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg /* command buffer in client's address space */ 1062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg drm_savage_cmd_header_t *cmd_addr; 1072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int size; /* size of the command buffer in 64bit units */ 1082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 1092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int dma_idx; /* DMA buffer index to use */ 1102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg int discard; /* discard DMA buffer when done */ 1112b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg /* vertex buffer in client's address space */ 1122b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int *vb_addr; 1132b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int vb_size; /* size of client vertex buffer in bytes */ 1142b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int vb_stride; /* stride of vertices in 32bit words */ 1152b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg /* boxes in client's address space */ 1162b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg struct drm_clip_rect *box_addr; 1172b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int nbox; /* number of clipping boxes */ 1182b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_savage_cmdbuf_t; 1192b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 1202b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_WAIT_2D 0x1 /* wait for 2D idle before updating event tag */ 1212b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_WAIT_3D 0x2 /* wait for 3D idle before updating event tag */ 1222b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_WAIT_IRQ 0x4 /* emit or wait for IRQ, not implemented yet */ 1232b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergtypedef struct drm_savage_event { 1242b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int count; 1252b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int flags; 1262b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg} drm_savage_event_emit_t, drm_savage_event_wait_t; 1272b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 1282b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Commands for the cmdbuf ioctl 1292b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */ 1302b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_CMD_STATE 0 /* a range of state registers */ 1312b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_CMD_DMA_PRIM 1 /* vertices from DMA buffer */ 1322b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_CMD_VB_PRIM 2 /* vertices from client vertex buffer */ 1332b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_CMD_DMA_IDX 3 /* indexed vertices from DMA buffer */ 1342b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_CMD_VB_IDX 4 /* indexed vertices client vertex buffer */ 1352b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_CMD_CLEAR 5 /* clear buffers */ 1362b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_CMD_SWAP 6 /* swap buffers */ 1372b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 1382b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Primitive types 1392b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg*/ 1402b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_PRIM_TRILIST 0 /* triangle list */ 1412b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_PRIM_TRISTRIP 1 /* triangle strip */ 1422b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_PRIM_TRIFAN 2 /* triangle fan */ 1432b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_PRIM_TRILIST_201 3 /* reorder verts for correct flat 1442b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg * shading on s3d */ 1452b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 1462b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Skip flags (vertex format) 1472b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */ 1482b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_Z 0x01 1492b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_W 0x02 1502b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_C0 0x04 1512b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_C1 0x08 1522b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_S0 0x10 1532b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_T0 0x20 1542b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_ST0 0x30 1552b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_S1 0x40 1562b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_T1 0x80 1572b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_ST1 0xc0 1582b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_ALL_S3D 0x3f 1592b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_SKIP_ALL_S4 0xff 1602b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 1612b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* Buffer names for clear command 1622b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */ 1632b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_FRONT 0x1 1642b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_BACK 0x2 1652b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#define SAVAGE_DEPTH 0x4 1662b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 1672b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg/* 64-bit command header 1682b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg */ 1692b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsbergunion drm_savage_cmd_header { 1702b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg struct { 1712b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char cmd; /* command */ 1722b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char pad0; 1732b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short pad1; 1742b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short pad2; 1752b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short pad3; 1762b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg } cmd; /* generic */ 1772b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg struct { 1782b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char cmd; 1792b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char global; /* need idle engine? */ 1802b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short count; /* number of consecutive registers */ 1812b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short start; /* first register */ 1822b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short pad3; 1832b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg } state; /* SAVAGE_CMD_STATE */ 1842b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg struct { 1852b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char cmd; 1862b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char prim; /* primitive type */ 1872b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short skip; /* vertex format (skip flags) */ 1882b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short count; /* number of vertices */ 1892b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short start; /* first vertex in DMA/vertex buffer */ 1902b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg } prim; /* SAVAGE_CMD_DMA_PRIM, SAVAGE_CMD_VB_PRIM */ 1912b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg struct { 1922b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char cmd; 1932b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char prim; 1942b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short skip; 1952b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short count; /* number of indices that follow */ 1962b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short pad3; 1972b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg } idx; /* SAVAGE_CMD_DMA_IDX, SAVAGE_CMD_VB_IDX */ 1982b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg struct { 1992b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char cmd; 2002b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned char pad0; 2012b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned short pad1; 2022b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int flags; 2032b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg } clear0; /* SAVAGE_CMD_CLEAR */ 2042b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg struct { 2052b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int mask; 2062b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg unsigned int value; 2072b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg } clear1; /* SAVAGE_CMD_CLEAR data */ 2082b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg}; 2092b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg 2102b42af9a2fd8e35e920d61a212ce6b9c85354289Kristian Høgsberg#endif 211