1ab47cfaaSmrg/* 2ab47cfaaSmrg * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. 3ab47cfaaSmrg * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. 4ab47cfaaSmrg * 5ab47cfaaSmrg * Permission is hereby granted, free of charge, to any person obtaining a 6ab47cfaaSmrg * copy of this software and associated documentation files (the "Software"), 7ab47cfaaSmrg * to deal in the Software without restriction, including without limitation 8ab47cfaaSmrg * the rights to use, copy, modify, merge, publish, distribute, sub license, 9ab47cfaaSmrg * and/or sell copies of the Software, and to permit persons to whom the 10ab47cfaaSmrg * Software is furnished to do so, subject to the following conditions: 11ab47cfaaSmrg * 12ab47cfaaSmrg * The above copyright notice and this permission notice (including the 13ab47cfaaSmrg * next paragraph) shall be included in all copies or substantial portions 14ab47cfaaSmrg * of the Software. 15ab47cfaaSmrg * 16ab47cfaaSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17ab47cfaaSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18ab47cfaaSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 19ab47cfaaSmrg * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20ab47cfaaSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21ab47cfaaSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22ab47cfaaSmrg * DEALINGS IN THE SOFTWARE. 23ab47cfaaSmrg */ 24ab47cfaaSmrg 25aa9e3350Smrg#ifndef SAVAGE_DRM_H 26aa9e3350Smrg#define SAVAGE_DRM_H 27ab47cfaaSmrg 28aa9e3350Smrg#ifndef SAVAGE_SAREA_DEFINES 29aa9e3350Smrg#define SAVAGE_SAREA_DEFINES 30ab47cfaaSmrg 31ab47cfaaSmrg#define DRM_SAVAGE_MEM_PAGE (1UL<<12) 32ab47cfaaSmrg#define DRM_SAVAGE_MEM_WORK 32 33ab47cfaaSmrg#define DRM_SAVAGE_MEM_LOCATION_PCI 1 34ab47cfaaSmrg#define DRM_SAVAGE_MEM_LOCATION_AGP 2 35ab47cfaaSmrg#define DRM_SAVAGE_DMA_AGP_SIZE (16*1024*1024) 36ab47cfaaSmrg 37ab47cfaaSmrgtypedef struct drm_savage_alloc_cont_mem 38ab47cfaaSmrg{ 39ab47cfaaSmrg size_t size; /*size of buffer*/ 40ab47cfaaSmrg unsigned long type; /*4k page or word*/ 41ab47cfaaSmrg unsigned long alignment; 42ab47cfaaSmrg unsigned long location; /*agp or pci*/ 43ab47cfaaSmrg 44ab47cfaaSmrg unsigned long phyaddress; 45ab47cfaaSmrg unsigned long linear; 46ab47cfaaSmrg} drm_savage_alloc_cont_mem_t; 47ab47cfaaSmrg 48ab47cfaaSmrgtypedef struct drm_savage_get_physcis_address 49ab47cfaaSmrg{ 50ab47cfaaSmrg unsigned long v_address; 51ab47cfaaSmrg unsigned long p_address; 52ab47cfaaSmrg}drm_savage_get_physcis_address_t; 53ab47cfaaSmrg 54ab47cfaaSmrg/*ioctl number*/ 55ab47cfaaSmrg#define DRM_IOCTL_SAVAGE_ALLOC_CONTINUOUS_MEM \ 56ab47cfaaSmrg DRM_IOWR(0x40,drm_savage_alloc_cont_mem_t) 57ab47cfaaSmrg#define DRM_IOCTL_SAVAGE_GET_PHYSICS_ADDRESS \ 58ab47cfaaSmrg DRM_IOWR(0x41, drm_savage_get_physcis_address_t) 59ab47cfaaSmrg#define DRM_IOCTL_SAVAGE_FREE_CONTINUOUS_MEM \ 60ab47cfaaSmrg DRM_IOWR(0x42, drm_savage_alloc_cont_mem_t) 61ab47cfaaSmrg 62ab47cfaaSmrg#define SAVAGE_FRONT 0x1 63ab47cfaaSmrg#define SAVAGE_BACK 0x2 64ab47cfaaSmrg#define SAVAGE_DEPTH 0x4 65ab47cfaaSmrg#define SAVAGE_STENCIL 0x8 66ab47cfaaSmrg 67ab47cfaaSmrg/* What needs to be changed for the current vertex dma buffer? 68ab47cfaaSmrg */ 69ab47cfaaSmrg#define SAVAGE_UPLOAD_CTX 0x1 70ab47cfaaSmrg#define SAVAGE_UPLOAD_TEX0 0x2 71ab47cfaaSmrg#define SAVAGE_UPLOAD_TEX1 0x4 72ab47cfaaSmrg#define SAVAGE_UPLOAD_PIPE 0x8 /* <- seems should be removed, Jiayo Hsu */ 73ab47cfaaSmrg#define SAVAGE_UPLOAD_TEX0IMAGE 0x10 /* handled client-side */ 74ab47cfaaSmrg#define SAVAGE_UPLOAD_TEX1IMAGE 0x20 /* handled client-side */ 75ab47cfaaSmrg#define SAVAGE_UPLOAD_2D 0x40 76ab47cfaaSmrg#define SAVAGE_WAIT_AGE 0x80 /* handled client-side */ 77ab47cfaaSmrg#define SAVAGE_UPLOAD_CLIPRECTS 0x100 /* handled client-side */ 78ab47cfaaSmrg/*frank:add Buffer state 2001/11/15*/ 79ab47cfaaSmrg#define SAVAGE_UPLOAD_BUFFERS 0x200 80ab47cfaaSmrg/* original marked off in MGA drivers , Jiayo Hsu Oct.23,2001 */ 81ab47cfaaSmrg 82ab47cfaaSmrg/* Keep these small for testing. 83ab47cfaaSmrg */ 84ab47cfaaSmrg#define SAVAGE_NR_SAREA_CLIPRECTS 8 85ab47cfaaSmrg 862b2b4fcbSmrg/* 2 heaps (1 for card, 1 for agp), each divided into up to 128 87ab47cfaaSmrg * regions, subject to a minimum region size of (1<<16) == 64k. 88ab47cfaaSmrg * 89ab47cfaaSmrg * Clients may subdivide regions internally, but when sharing between 90ab47cfaaSmrg * clients, the region size is the minimum granularity. 91ab47cfaaSmrg */ 92ab47cfaaSmrg 93ab47cfaaSmrg#define SAVAGE_CARD_HEAP 0 94ab47cfaaSmrg#define SAVAGE_AGP_HEAP 1 95ab47cfaaSmrg#define SAVAGE_NR_TEX_HEAPS 2 96ab47cfaaSmrg#define SAVAGE_NR_TEX_REGIONS 16 /* num. of global texture manage list element*/ 97ab47cfaaSmrg#define SAVAGE_LOG_MIN_TEX_REGION_SIZE 16 /* each region 64K, Jiayo Hsu */ 98ab47cfaaSmrg 99aa9e3350Smrg#endif /* SAVAGE_SAREA_DEFINES */ 100ab47cfaaSmrg 101ab47cfaaSmrg/* drm_tex_region_t define in drm.h */ 102ab47cfaaSmrg 103ab47cfaaSmrgtypedef drm_tex_region_t drm_savage_tex_region_t; 104ab47cfaaSmrg 105ab47cfaaSmrg/* Setup registers for 2D, X server 106ab47cfaaSmrg */ 107ab47cfaaSmrgtypedef struct { 108ab47cfaaSmrg unsigned int pitch; 109ab47cfaaSmrg} drm_savage_server_regs_t; 110ab47cfaaSmrg 111ab47cfaaSmrg 112ab47cfaaSmrgtypedef struct _drm_savage_sarea { 113ab47cfaaSmrg /* The channel for communication of state information to the kernel 114ab47cfaaSmrg * on firing a vertex dma buffer. 115ab47cfaaSmrg */ 116ab47cfaaSmrg unsigned int setup[28]; /* 3D context registers */ 117ab47cfaaSmrg drm_savage_server_regs_t server_state; 118ab47cfaaSmrg 119ab47cfaaSmrg unsigned int dirty; 120ab47cfaaSmrg 121ab47cfaaSmrg unsigned int vertsize; /* vertext size */ 122ab47cfaaSmrg 123ab47cfaaSmrg /* The current cliprects, or a subset thereof. 124ab47cfaaSmrg */ 125ab47cfaaSmrg drm_clip_rect_t boxes[SAVAGE_NR_SAREA_CLIPRECTS]; 126ab47cfaaSmrg unsigned int nbox; 127ab47cfaaSmrg 128ab47cfaaSmrg /* Information about the most recently used 3d drawable. The 129ab47cfaaSmrg * client fills in the req_* fields, the server fills in the 130ab47cfaaSmrg * exported_ fields and puts the cliprects into boxes, above. 131ab47cfaaSmrg * 132ab47cfaaSmrg * The client clears the exported_drawable field before 133ab47cfaaSmrg * clobbering the boxes data. 134ab47cfaaSmrg */ 135ab47cfaaSmrg unsigned int req_drawable; /* the X drawable id */ 136ab47cfaaSmrg unsigned int req_draw_buffer; /* SAVAGE_FRONT or SAVAGE_BACK */ 137ab47cfaaSmrg 138ab47cfaaSmrg unsigned int exported_drawable; 139ab47cfaaSmrg unsigned int exported_index; 140ab47cfaaSmrg unsigned int exported_stamp; 141ab47cfaaSmrg unsigned int exported_buffers; 142ab47cfaaSmrg unsigned int exported_nfront; 143ab47cfaaSmrg unsigned int exported_nback; 144ab47cfaaSmrg int exported_back_x, exported_front_x, exported_w; 145ab47cfaaSmrg int exported_back_y, exported_front_y, exported_h; 146ab47cfaaSmrg drm_clip_rect_t exported_boxes[SAVAGE_NR_SAREA_CLIPRECTS]; 147ab47cfaaSmrg 148ab47cfaaSmrg /* Counters for aging textures and for client-side throttling. 149ab47cfaaSmrg */ 150ab47cfaaSmrg unsigned int status[4]; 151ab47cfaaSmrg 152ab47cfaaSmrg 153ab47cfaaSmrg /* LRU lists for texture memory in agp space and on the card. 154ab47cfaaSmrg */ 155ab47cfaaSmrg drm_tex_region_t texList[SAVAGE_NR_TEX_HEAPS][SAVAGE_NR_TEX_REGIONS+1]; 156ab47cfaaSmrg unsigned int texAge[SAVAGE_NR_TEX_HEAPS]; 157ab47cfaaSmrg 158ab47cfaaSmrg /* Mechanism to validate card state. 159ab47cfaaSmrg */ 160ab47cfaaSmrg int ctxOwner; 161ab47cfaaSmrg unsigned long shadow_status[64];/*too big?*/ 162ab47cfaaSmrg 163ab47cfaaSmrg /*agp offset*/ 164ab47cfaaSmrg unsigned long agp_offset; 165ab47cfaaSmrg} drm_savage_sarea_t,*drm_savage_sarea_ptr; 166ab47cfaaSmrg 167ab47cfaaSmrg 168ab47cfaaSmrg/* WARNING: If you change any of these defines, make sure to change the 169ab47cfaaSmrg * defines in the Xserver file (xf86drmMga.h) 170ab47cfaaSmrg */ 171ab47cfaaSmrg 172ab47cfaaSmrgtypedef struct drm_savage_init { 173ab47cfaaSmrg 174ab47cfaaSmrg unsigned long sarea_priv_offset; 175ab47cfaaSmrg 176ab47cfaaSmrg int chipset; 177ab47cfaaSmrg int sgram; 178ab47cfaaSmrg 179ab47cfaaSmrg unsigned int maccess; 180ab47cfaaSmrg 181ab47cfaaSmrg unsigned int fb_cpp; 182ab47cfaaSmrg unsigned int front_offset, front_pitch; 183ab47cfaaSmrg unsigned int back_offset, back_pitch; 184ab47cfaaSmrg 185ab47cfaaSmrg unsigned int depth_cpp; 186ab47cfaaSmrg unsigned int depth_offset, depth_pitch; 187ab47cfaaSmrg 188ab47cfaaSmrg unsigned int texture_offset[SAVAGE_NR_TEX_HEAPS]; 189ab47cfaaSmrg unsigned int texture_size[SAVAGE_NR_TEX_HEAPS]; 190ab47cfaaSmrg 191ab47cfaaSmrg unsigned long fb_offset; 192ab47cfaaSmrg unsigned long mmio_offset; 193ab47cfaaSmrg unsigned long status_offset; 194ab47cfaaSmrg#if 0 195ab47cfaaSmrg/*============================================================*/ 196ab47cfaaSmrg unsigned long warp_offset; 197ab47cfaaSmrg unsigned long primary_offset; 198ab47cfaaSmrg unsigned long buffers_offset; 199ab47cfaaSmrg/*============================================================*/ 200ab47cfaaSmrg#endif /*end #if 0 */ 201ab47cfaaSmrg} drm_savage_init_t; 202ab47cfaaSmrg 203ab47cfaaSmrgtypedef struct drm_savage_fullscreen { 204ab47cfaaSmrg enum { 205ab47cfaaSmrg SAVAGE_INIT_FULLSCREEN = 0x01, 206ab47cfaaSmrg SAVAGE_CLEANUP_FULLSCREEN = 0x02 207ab47cfaaSmrg } func; 208ab47cfaaSmrg} drm_savage_fullscreen_t; 209ab47cfaaSmrg 210ab47cfaaSmrgtypedef struct drm_savage_clear { 211ab47cfaaSmrg unsigned int flags; 212ab47cfaaSmrg unsigned int clear_color; 213ab47cfaaSmrg unsigned int clear_depth; 214ab47cfaaSmrg unsigned int color_mask; 215ab47cfaaSmrg unsigned int depth_mask; 216ab47cfaaSmrg} drm_savage_clear_t; 217ab47cfaaSmrg 218ab47cfaaSmrgtypedef struct drm_savage_vertex { 219ab47cfaaSmrg int idx; /* buffer to queue */ 220ab47cfaaSmrg int used; /* bytes in use */ 221ab47cfaaSmrg int discard; /* client finished with buffer? */ 222ab47cfaaSmrg} drm_savage_vertex_t; 223ab47cfaaSmrg 224ab47cfaaSmrgtypedef struct drm_savage_indices { 225ab47cfaaSmrg int idx; /* buffer to queue */ 226ab47cfaaSmrg unsigned int start; 227ab47cfaaSmrg unsigned int end; 228ab47cfaaSmrg int discard; /* client finished with buffer? */ 229ab47cfaaSmrg} drm_savage_indices_t; 230ab47cfaaSmrg 231ab47cfaaSmrgtypedef struct drm_savage_iload { 232ab47cfaaSmrg int idx; 233ab47cfaaSmrg unsigned int dstorg; 234ab47cfaaSmrg unsigned int length; 235ab47cfaaSmrg} drm_savage_iload_t; 236ab47cfaaSmrg 237ab47cfaaSmrgtypedef struct _drm_savage_blit { 238ab47cfaaSmrg unsigned int planemask; 239ab47cfaaSmrg unsigned int srcorg; 240ab47cfaaSmrg unsigned int dstorg; 241ab47cfaaSmrg int src_pitch, dst_pitch; 242ab47cfaaSmrg int delta_sx, delta_sy; 243ab47cfaaSmrg int delta_dx, delta_dy; 244ab47cfaaSmrg int height, ydir; /* flip image vertically */ 245ab47cfaaSmrg int source_pitch, dest_pitch; 246ab47cfaaSmrg} drm_savage_blit_t; 247ab47cfaaSmrg 248aa9e3350Smrg#endif /* SAVAGE_DRM_H */ 249