1*7688df22SAndroid Build Coastguard Worker /* mach64_drm.h -- Public header for the mach64 driver -*- linux-c -*- 2*7688df22SAndroid Build Coastguard Worker * Created: Thu Nov 30 20:04:32 2000 by [email protected] 3*7688df22SAndroid Build Coastguard Worker */ 4*7688df22SAndroid Build Coastguard Worker /* 5*7688df22SAndroid Build Coastguard Worker * Copyright 2000 Gareth Hughes 6*7688df22SAndroid Build Coastguard Worker * Copyright 2002 Frank C. Earl 7*7688df22SAndroid Build Coastguard Worker * Copyright 2002-2003 Leif Delgass 8*7688df22SAndroid Build Coastguard Worker * All Rights Reserved. 9*7688df22SAndroid Build Coastguard Worker * 10*7688df22SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 11*7688df22SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"), 12*7688df22SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation 13*7688df22SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense, 14*7688df22SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the 15*7688df22SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions: 16*7688df22SAndroid Build Coastguard Worker * 17*7688df22SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next 18*7688df22SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the 19*7688df22SAndroid Build Coastguard Worker * Software. 20*7688df22SAndroid Build Coastguard Worker * 21*7688df22SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22*7688df22SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23*7688df22SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24*7688df22SAndroid Build Coastguard Worker * THE COPYRIGHT OWNER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 25*7688df22SAndroid Build Coastguard Worker * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 26*7688df22SAndroid Build Coastguard Worker * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27*7688df22SAndroid Build Coastguard Worker * 28*7688df22SAndroid Build Coastguard Worker * Authors: 29*7688df22SAndroid Build Coastguard Worker * Gareth Hughes <[email protected]> 30*7688df22SAndroid Build Coastguard Worker * Frank C. Earl <[email protected]> 31*7688df22SAndroid Build Coastguard Worker * Leif Delgass <[email protected]> 32*7688df22SAndroid Build Coastguard Worker */ 33*7688df22SAndroid Build Coastguard Worker 34*7688df22SAndroid Build Coastguard Worker #ifndef __MACH64_DRM_H__ 35*7688df22SAndroid Build Coastguard Worker #define __MACH64_DRM_H__ 36*7688df22SAndroid Build Coastguard Worker 37*7688df22SAndroid Build Coastguard Worker /* WARNING: If you change any of these defines, make sure to change the 38*7688df22SAndroid Build Coastguard Worker * defines in the Xserver file (mach64_sarea.h) 39*7688df22SAndroid Build Coastguard Worker */ 40*7688df22SAndroid Build Coastguard Worker #ifndef __MACH64_SAREA_DEFINES__ 41*7688df22SAndroid Build Coastguard Worker #define __MACH64_SAREA_DEFINES__ 42*7688df22SAndroid Build Coastguard Worker 43*7688df22SAndroid Build Coastguard Worker /* What needs to be changed for the current vertex buffer? 44*7688df22SAndroid Build Coastguard Worker * GH: We're going to be pedantic about this. We want the card to do as 45*7688df22SAndroid Build Coastguard Worker * little as possible, so let's avoid having it fetch a whole bunch of 46*7688df22SAndroid Build Coastguard Worker * register values that don't change all that often, if at all. 47*7688df22SAndroid Build Coastguard Worker */ 48*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_DST_OFF_PITCH 0x0001 49*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_Z_OFF_PITCH 0x0002 50*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_Z_ALPHA_CNTL 0x0004 51*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_SCALE_3D_CNTL 0x0008 52*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_DP_FOG_CLR 0x0010 53*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_DP_WRITE_MASK 0x0020 54*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_DP_PIX_WIDTH 0x0040 55*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_SETUP_CNTL 0x0080 56*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_MISC 0x0100 57*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_TEXTURE 0x0200 58*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_TEX0IMAGE 0x0400 59*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_TEX1IMAGE 0x0800 60*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_CLIPRECTS 0x1000 /* handled client-side */ 61*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_CONTEXT 0x00ff 62*7688df22SAndroid Build Coastguard Worker #define MACH64_UPLOAD_ALL 0x1fff 63*7688df22SAndroid Build Coastguard Worker 64*7688df22SAndroid Build Coastguard Worker /* DMA buffer size 65*7688df22SAndroid Build Coastguard Worker */ 66*7688df22SAndroid Build Coastguard Worker #define MACH64_BUFFER_SIZE 16384 67*7688df22SAndroid Build Coastguard Worker 68*7688df22SAndroid Build Coastguard Worker /* Max number of swaps allowed on the ring 69*7688df22SAndroid Build Coastguard Worker * before the client must wait 70*7688df22SAndroid Build Coastguard Worker */ 71*7688df22SAndroid Build Coastguard Worker #define MACH64_MAX_QUEUED_FRAMES 3U 72*7688df22SAndroid Build Coastguard Worker 73*7688df22SAndroid Build Coastguard Worker /* Byte offsets for host blit buffer data 74*7688df22SAndroid Build Coastguard Worker */ 75*7688df22SAndroid Build Coastguard Worker #define MACH64_HOSTDATA_BLIT_OFFSET 104 76*7688df22SAndroid Build Coastguard Worker 77*7688df22SAndroid Build Coastguard Worker /* Keep these small for testing. 78*7688df22SAndroid Build Coastguard Worker */ 79*7688df22SAndroid Build Coastguard Worker #define MACH64_NR_SAREA_CLIPRECTS 8 80*7688df22SAndroid Build Coastguard Worker 81*7688df22SAndroid Build Coastguard Worker #define MACH64_CARD_HEAP 0 82*7688df22SAndroid Build Coastguard Worker #define MACH64_AGP_HEAP 1 83*7688df22SAndroid Build Coastguard Worker #define MACH64_NR_TEX_HEAPS 2 84*7688df22SAndroid Build Coastguard Worker #define MACH64_NR_TEX_REGIONS 64 85*7688df22SAndroid Build Coastguard Worker #define MACH64_LOG_TEX_GRANULARITY 16 86*7688df22SAndroid Build Coastguard Worker 87*7688df22SAndroid Build Coastguard Worker #define MACH64_TEX_MAXLEVELS 1 88*7688df22SAndroid Build Coastguard Worker 89*7688df22SAndroid Build Coastguard Worker #define MACH64_NR_CONTEXT_REGS 15 90*7688df22SAndroid Build Coastguard Worker #define MACH64_NR_TEXTURE_REGS 4 91*7688df22SAndroid Build Coastguard Worker 92*7688df22SAndroid Build Coastguard Worker #endif /* __MACH64_SAREA_DEFINES__ */ 93*7688df22SAndroid Build Coastguard Worker 94*7688df22SAndroid Build Coastguard Worker typedef struct { 95*7688df22SAndroid Build Coastguard Worker unsigned int dst_off_pitch; 96*7688df22SAndroid Build Coastguard Worker 97*7688df22SAndroid Build Coastguard Worker unsigned int z_off_pitch; 98*7688df22SAndroid Build Coastguard Worker unsigned int z_cntl; 99*7688df22SAndroid Build Coastguard Worker unsigned int alpha_tst_cntl; 100*7688df22SAndroid Build Coastguard Worker 101*7688df22SAndroid Build Coastguard Worker unsigned int scale_3d_cntl; 102*7688df22SAndroid Build Coastguard Worker 103*7688df22SAndroid Build Coastguard Worker unsigned int sc_left_right; 104*7688df22SAndroid Build Coastguard Worker unsigned int sc_top_bottom; 105*7688df22SAndroid Build Coastguard Worker 106*7688df22SAndroid Build Coastguard Worker unsigned int dp_fog_clr; 107*7688df22SAndroid Build Coastguard Worker unsigned int dp_write_mask; 108*7688df22SAndroid Build Coastguard Worker unsigned int dp_pix_width; 109*7688df22SAndroid Build Coastguard Worker unsigned int dp_mix; 110*7688df22SAndroid Build Coastguard Worker unsigned int dp_src; 111*7688df22SAndroid Build Coastguard Worker 112*7688df22SAndroid Build Coastguard Worker unsigned int clr_cmp_cntl; 113*7688df22SAndroid Build Coastguard Worker unsigned int gui_traj_cntl; 114*7688df22SAndroid Build Coastguard Worker 115*7688df22SAndroid Build Coastguard Worker unsigned int setup_cntl; 116*7688df22SAndroid Build Coastguard Worker 117*7688df22SAndroid Build Coastguard Worker unsigned int tex_size_pitch; 118*7688df22SAndroid Build Coastguard Worker unsigned int tex_cntl; 119*7688df22SAndroid Build Coastguard Worker unsigned int secondary_tex_off; 120*7688df22SAndroid Build Coastguard Worker unsigned int tex_offset; 121*7688df22SAndroid Build Coastguard Worker } drm_mach64_context_regs_t; 122*7688df22SAndroid Build Coastguard Worker 123*7688df22SAndroid Build Coastguard Worker typedef struct drm_mach64_sarea { 124*7688df22SAndroid Build Coastguard Worker /* The channel for communication of state information to the kernel 125*7688df22SAndroid Build Coastguard Worker * on firing a vertex dma buffer. 126*7688df22SAndroid Build Coastguard Worker */ 127*7688df22SAndroid Build Coastguard Worker drm_mach64_context_regs_t context_state; 128*7688df22SAndroid Build Coastguard Worker unsigned int dirty; 129*7688df22SAndroid Build Coastguard Worker unsigned int vertsize; 130*7688df22SAndroid Build Coastguard Worker 131*7688df22SAndroid Build Coastguard Worker /* The current cliprects, or a subset thereof. 132*7688df22SAndroid Build Coastguard Worker */ 133*7688df22SAndroid Build Coastguard Worker struct drm_clip_rect boxes[MACH64_NR_SAREA_CLIPRECTS]; 134*7688df22SAndroid Build Coastguard Worker unsigned int nbox; 135*7688df22SAndroid Build Coastguard Worker 136*7688df22SAndroid Build Coastguard Worker /* Counters for client-side throttling of rendering clients. 137*7688df22SAndroid Build Coastguard Worker */ 138*7688df22SAndroid Build Coastguard Worker unsigned int frames_queued; 139*7688df22SAndroid Build Coastguard Worker 140*7688df22SAndroid Build Coastguard Worker /* Texture memory LRU. 141*7688df22SAndroid Build Coastguard Worker */ 142*7688df22SAndroid Build Coastguard Worker struct drm_tex_region tex_list[MACH64_NR_TEX_HEAPS][MACH64_NR_TEX_REGIONS + 143*7688df22SAndroid Build Coastguard Worker 1]; 144*7688df22SAndroid Build Coastguard Worker unsigned int tex_age[MACH64_NR_TEX_HEAPS]; 145*7688df22SAndroid Build Coastguard Worker int ctx_owner; 146*7688df22SAndroid Build Coastguard Worker } drm_mach64_sarea_t; 147*7688df22SAndroid Build Coastguard Worker 148*7688df22SAndroid Build Coastguard Worker /* WARNING: If you change any of these defines, make sure to change the 149*7688df22SAndroid Build Coastguard Worker * defines in the Xserver file (mach64_common.h) 150*7688df22SAndroid Build Coastguard Worker */ 151*7688df22SAndroid Build Coastguard Worker 152*7688df22SAndroid Build Coastguard Worker /* Mach64 specific ioctls 153*7688df22SAndroid Build Coastguard Worker * The device specific ioctl range is 0x40 to 0x79. 154*7688df22SAndroid Build Coastguard Worker */ 155*7688df22SAndroid Build Coastguard Worker 156*7688df22SAndroid Build Coastguard Worker #define DRM_MACH64_INIT 0x00 157*7688df22SAndroid Build Coastguard Worker #define DRM_MACH64_IDLE 0x01 158*7688df22SAndroid Build Coastguard Worker #define DRM_MACH64_RESET 0x02 159*7688df22SAndroid Build Coastguard Worker #define DRM_MACH64_SWAP 0x03 160*7688df22SAndroid Build Coastguard Worker #define DRM_MACH64_CLEAR 0x04 161*7688df22SAndroid Build Coastguard Worker #define DRM_MACH64_VERTEX 0x05 162*7688df22SAndroid Build Coastguard Worker #define DRM_MACH64_BLIT 0x06 163*7688df22SAndroid Build Coastguard Worker #define DRM_MACH64_FLUSH 0x07 164*7688df22SAndroid Build Coastguard Worker #define DRM_MACH64_GETPARAM 0x08 165*7688df22SAndroid Build Coastguard Worker 166*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_MACH64_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_INIT, drm_mach64_init_t) 167*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_MACH64_IDLE DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_IDLE ) 168*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_MACH64_RESET DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_RESET ) 169*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_MACH64_SWAP DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_SWAP ) 170*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_MACH64_CLEAR DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_CLEAR, drm_mach64_clear_t) 171*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_MACH64_VERTEX DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_VERTEX, drm_mach64_vertex_t) 172*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_MACH64_BLIT DRM_IOW( DRM_COMMAND_BASE + DRM_MACH64_BLIT, drm_mach64_blit_t) 173*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_MACH64_FLUSH DRM_IO( DRM_COMMAND_BASE + DRM_MACH64_FLUSH ) 174*7688df22SAndroid Build Coastguard Worker #define DRM_IOCTL_MACH64_GETPARAM DRM_IOWR( DRM_COMMAND_BASE + DRM_MACH64_GETPARAM, drm_mach64_getparam_t) 175*7688df22SAndroid Build Coastguard Worker 176*7688df22SAndroid Build Coastguard Worker /* Buffer flags for clears 177*7688df22SAndroid Build Coastguard Worker */ 178*7688df22SAndroid Build Coastguard Worker #define MACH64_FRONT 0x1 179*7688df22SAndroid Build Coastguard Worker #define MACH64_BACK 0x2 180*7688df22SAndroid Build Coastguard Worker #define MACH64_DEPTH 0x4 181*7688df22SAndroid Build Coastguard Worker 182*7688df22SAndroid Build Coastguard Worker /* Primitive types for vertex buffers 183*7688df22SAndroid Build Coastguard Worker */ 184*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_POINTS 0x00000000 185*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_LINES 0x00000001 186*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_LINE_LOOP 0x00000002 187*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_LINE_STRIP 0x00000003 188*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_TRIANGLES 0x00000004 189*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_TRIANGLE_STRIP 0x00000005 190*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_TRIANGLE_FAN 0x00000006 191*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_QUADS 0x00000007 192*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_QUAD_STRIP 0x00000008 193*7688df22SAndroid Build Coastguard Worker #define MACH64_PRIM_POLYGON 0x00000009 194*7688df22SAndroid Build Coastguard Worker 195*7688df22SAndroid Build Coastguard Worker typedef enum _drm_mach64_dma_mode_t { 196*7688df22SAndroid Build Coastguard Worker MACH64_MODE_DMA_ASYNC, 197*7688df22SAndroid Build Coastguard Worker MACH64_MODE_DMA_SYNC, 198*7688df22SAndroid Build Coastguard Worker MACH64_MODE_MMIO 199*7688df22SAndroid Build Coastguard Worker } drm_mach64_dma_mode_t; 200*7688df22SAndroid Build Coastguard Worker 201*7688df22SAndroid Build Coastguard Worker typedef struct drm_mach64_init { 202*7688df22SAndroid Build Coastguard Worker enum { 203*7688df22SAndroid Build Coastguard Worker DRM_MACH64_INIT_DMA = 0x01, 204*7688df22SAndroid Build Coastguard Worker DRM_MACH64_CLEANUP_DMA = 0x02 205*7688df22SAndroid Build Coastguard Worker } func; 206*7688df22SAndroid Build Coastguard Worker 207*7688df22SAndroid Build Coastguard Worker unsigned long sarea_priv_offset; 208*7688df22SAndroid Build Coastguard Worker int is_pci; 209*7688df22SAndroid Build Coastguard Worker drm_mach64_dma_mode_t dma_mode; 210*7688df22SAndroid Build Coastguard Worker 211*7688df22SAndroid Build Coastguard Worker unsigned int fb_bpp; 212*7688df22SAndroid Build Coastguard Worker unsigned int front_offset, front_pitch; 213*7688df22SAndroid Build Coastguard Worker unsigned int back_offset, back_pitch; 214*7688df22SAndroid Build Coastguard Worker 215*7688df22SAndroid Build Coastguard Worker unsigned int depth_bpp; 216*7688df22SAndroid Build Coastguard Worker unsigned int depth_offset, depth_pitch; 217*7688df22SAndroid Build Coastguard Worker 218*7688df22SAndroid Build Coastguard Worker unsigned long fb_offset; 219*7688df22SAndroid Build Coastguard Worker unsigned long mmio_offset; 220*7688df22SAndroid Build Coastguard Worker unsigned long ring_offset; 221*7688df22SAndroid Build Coastguard Worker unsigned long buffers_offset; 222*7688df22SAndroid Build Coastguard Worker unsigned long agp_textures_offset; 223*7688df22SAndroid Build Coastguard Worker } drm_mach64_init_t; 224*7688df22SAndroid Build Coastguard Worker 225*7688df22SAndroid Build Coastguard Worker typedef struct drm_mach64_clear { 226*7688df22SAndroid Build Coastguard Worker unsigned int flags; 227*7688df22SAndroid Build Coastguard Worker int x, y, w, h; 228*7688df22SAndroid Build Coastguard Worker unsigned int clear_color; 229*7688df22SAndroid Build Coastguard Worker unsigned int clear_depth; 230*7688df22SAndroid Build Coastguard Worker } drm_mach64_clear_t; 231*7688df22SAndroid Build Coastguard Worker 232*7688df22SAndroid Build Coastguard Worker typedef struct drm_mach64_vertex { 233*7688df22SAndroid Build Coastguard Worker int prim; 234*7688df22SAndroid Build Coastguard Worker void *buf; /* Address of vertex buffer */ 235*7688df22SAndroid Build Coastguard Worker unsigned long used; /* Number of bytes in buffer */ 236*7688df22SAndroid Build Coastguard Worker int discard; /* Client finished with buffer? */ 237*7688df22SAndroid Build Coastguard Worker } drm_mach64_vertex_t; 238*7688df22SAndroid Build Coastguard Worker 239*7688df22SAndroid Build Coastguard Worker typedef struct drm_mach64_blit { 240*7688df22SAndroid Build Coastguard Worker void *buf; 241*7688df22SAndroid Build Coastguard Worker int pitch; 242*7688df22SAndroid Build Coastguard Worker int offset; 243*7688df22SAndroid Build Coastguard Worker int format; 244*7688df22SAndroid Build Coastguard Worker unsigned short x, y; 245*7688df22SAndroid Build Coastguard Worker unsigned short width, height; 246*7688df22SAndroid Build Coastguard Worker } drm_mach64_blit_t; 247*7688df22SAndroid Build Coastguard Worker 248*7688df22SAndroid Build Coastguard Worker typedef struct drm_mach64_getparam { 249*7688df22SAndroid Build Coastguard Worker enum { 250*7688df22SAndroid Build Coastguard Worker MACH64_PARAM_FRAMES_QUEUED = 0x01, 251*7688df22SAndroid Build Coastguard Worker MACH64_PARAM_IRQ_NR = 0x02 252*7688df22SAndroid Build Coastguard Worker } param; 253*7688df22SAndroid Build Coastguard Worker void *value; 254*7688df22SAndroid Build Coastguard Worker } drm_mach64_getparam_t; 255*7688df22SAndroid Build Coastguard Worker 256*7688df22SAndroid Build Coastguard Worker #endif 257