1*e57b9183Scg149915 /* 2*e57b9183Scg149915 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 3*e57b9183Scg149915 * Use is subject to license terms. 4*e57b9183Scg149915 */ 5*e57b9183Scg149915 /* 6*e57b9183Scg149915 * radeon_drm.h -- Public header for the radeon driver -*- linux-c -*- 7*e57b9183Scg149915 * 8*e57b9183Scg149915 * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas. 9*e57b9183Scg149915 * Copyright 2000 VA Linux Systems, Inc., Fremont, California. 10*e57b9183Scg149915 * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas. 11*e57b9183Scg149915 * All rights reserved. 12*e57b9183Scg149915 * 13*e57b9183Scg149915 * Permission is hereby granted, free of charge, to any person obtaining a 14*e57b9183Scg149915 * copy of this software and associated documentation files (the "Software"), 15*e57b9183Scg149915 * to deal in the Software without restriction, including without limitation 16*e57b9183Scg149915 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 17*e57b9183Scg149915 * and/or sell copies of the Software, and to permit persons to whom the 18*e57b9183Scg149915 * Software is furnished to do so, subject to the following conditions: 19*e57b9183Scg149915 * 20*e57b9183Scg149915 * The above copyright notice and this permission notice (including the next 21*e57b9183Scg149915 * paragraph) shall be included in all copies or substantial portions of the 22*e57b9183Scg149915 * Software. 23*e57b9183Scg149915 * 24*e57b9183Scg149915 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 25*e57b9183Scg149915 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 26*e57b9183Scg149915 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 27*e57b9183Scg149915 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 28*e57b9183Scg149915 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 29*e57b9183Scg149915 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 30*e57b9183Scg149915 * DEALINGS IN THE SOFTWARE. 31*e57b9183Scg149915 * 32*e57b9183Scg149915 * Authors: 33*e57b9183Scg149915 * Kevin E. Martin <martin@valinux.com> 34*e57b9183Scg149915 * Gareth Hughes <gareth@valinux.com> 35*e57b9183Scg149915 * Keith Whitwell <keith@tungstengraphics.com> 36*e57b9183Scg149915 */ 37*e57b9183Scg149915 38*e57b9183Scg149915 #pragma ident "%Z%%M% %I% %E% SMI" 39*e57b9183Scg149915 40*e57b9183Scg149915 #ifndef __RADEON_DRM_H__ 41*e57b9183Scg149915 #define __RADEON_DRM_H__ 42*e57b9183Scg149915 43*e57b9183Scg149915 /* 44*e57b9183Scg149915 * WARNING: If you change any of these defines, make sure to change the 45*e57b9183Scg149915 * defines in the X server file (radeon_sarea.h) 46*e57b9183Scg149915 */ 47*e57b9183Scg149915 #ifndef __RADEON_SAREA_DEFINES__ 48*e57b9183Scg149915 #define __RADEON_SAREA_DEFINES__ 49*e57b9183Scg149915 50*e57b9183Scg149915 /* 51*e57b9183Scg149915 * Old style state flags, required for sarea interface (1.1 and 1.2 52*e57b9183Scg149915 * clears) and 1.2 drm_vertex2 ioctl. 53*e57b9183Scg149915 */ 54*e57b9183Scg149915 #define RADEON_UPLOAD_CONTEXT 0x00000001 55*e57b9183Scg149915 #define RADEON_UPLOAD_VERTFMT 0x00000002 56*e57b9183Scg149915 #define RADEON_UPLOAD_LINE 0x00000004 57*e57b9183Scg149915 #define RADEON_UPLOAD_BUMPMAP 0x00000008 58*e57b9183Scg149915 #define RADEON_UPLOAD_MASKS 0x00000010 59*e57b9183Scg149915 #define RADEON_UPLOAD_VIEWPORT 0x00000020 60*e57b9183Scg149915 #define RADEON_UPLOAD_SETUP 0x00000040 61*e57b9183Scg149915 #define RADEON_UPLOAD_TCL 0x00000080 62*e57b9183Scg149915 #define RADEON_UPLOAD_MISC 0x00000100 63*e57b9183Scg149915 #define RADEON_UPLOAD_TEX0 0x00000200 64*e57b9183Scg149915 #define RADEON_UPLOAD_TEX1 0x00000400 65*e57b9183Scg149915 #define RADEON_UPLOAD_TEX2 0x00000800 66*e57b9183Scg149915 #define RADEON_UPLOAD_TEX0IMAGES 0x00001000 67*e57b9183Scg149915 #define RADEON_UPLOAD_TEX1IMAGES 0x00002000 68*e57b9183Scg149915 #define RADEON_UPLOAD_TEX2IMAGES 0x00004000 69*e57b9183Scg149915 #define RADEON_UPLOAD_CLIPRECTS 0x00008000 70*e57b9183Scg149915 /* handled client-side */ 71*e57b9183Scg149915 #define RADEON_REQUIRE_QUIESCENCE 0x00010000 72*e57b9183Scg149915 #define RADEON_UPLOAD_ZBIAS 0x00020000 73*e57b9183Scg149915 /* version 1.2 and newer */ 74*e57b9183Scg149915 #define RADEON_UPLOAD_ALL 0x003effff 75*e57b9183Scg149915 #define RADEON_UPLOAD_CONTEXT_ALL 0x003e01ff 76*e57b9183Scg149915 77*e57b9183Scg149915 /* 78*e57b9183Scg149915 * New style per-packet identifiers for use in cmd_buffer ioctl with 79*e57b9183Scg149915 * the RADEON_EMIT_PACKET command. Comments relate new packets to old 80*e57b9183Scg149915 * state bits and the packet size: 81*e57b9183Scg149915 */ 82*e57b9183Scg149915 #define RADEON_EMIT_PP_MISC 0 /* context/7 */ 83*e57b9183Scg149915 #define RADEON_EMIT_PP_CNTL 1 /* context/3 */ 84*e57b9183Scg149915 #define RADEON_EMIT_RB3D_COLORPITCH 2 /* context/1 */ 85*e57b9183Scg149915 #define RADEON_EMIT_RE_LINE_PATTERN 3 /* line/2 */ 86*e57b9183Scg149915 #define RADEON_EMIT_SE_LINE_WIDTH 4 /* line/1 */ 87*e57b9183Scg149915 #define RADEON_EMIT_PP_LUM_MATRIX 5 /* bumpmap/1 */ 88*e57b9183Scg149915 #define RADEON_EMIT_PP_ROT_MATRIX_0 6 /* bumpmap/2 */ 89*e57b9183Scg149915 #define RADEON_EMIT_RB3D_STENCILREFMASK 7 /* masks/3 */ 90*e57b9183Scg149915 #define RADEON_EMIT_SE_VPORT_XSCALE 8 /* viewport/6 */ 91*e57b9183Scg149915 #define RADEON_EMIT_SE_CNTL 9 /* setup/2 */ 92*e57b9183Scg149915 #define RADEON_EMIT_SE_CNTL_STATUS 10 /* setup/1 */ 93*e57b9183Scg149915 #define RADEON_EMIT_RE_MISC 11 /* misc/1 */ 94*e57b9183Scg149915 #define RADEON_EMIT_PP_TXFILTER_0 12 /* tex0/6 */ 95*e57b9183Scg149915 #define RADEON_EMIT_PP_BORDER_COLOR_0 13 /* tex0/1 */ 96*e57b9183Scg149915 #define RADEON_EMIT_PP_TXFILTER_1 14 /* tex1/6 */ 97*e57b9183Scg149915 #define RADEON_EMIT_PP_BORDER_COLOR_1 15 /* tex1/1 */ 98*e57b9183Scg149915 #define RADEON_EMIT_PP_TXFILTER_2 16 /* tex2/6 */ 99*e57b9183Scg149915 #define RADEON_EMIT_PP_BORDER_COLOR_2 17 /* tex2/1 */ 100*e57b9183Scg149915 #define RADEON_EMIT_SE_ZBIAS_FACTOR 18 /* zbias/2 */ 101*e57b9183Scg149915 #define RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT 19 /* tcl/11 */ 102*e57b9183Scg149915 #define RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED 20 /* material/17 */ 103*e57b9183Scg149915 #define R200_EMIT_PP_TXCBLEND_0 21 /* tex0/4 */ 104*e57b9183Scg149915 #define R200_EMIT_PP_TXCBLEND_1 22 /* tex1/4 */ 105*e57b9183Scg149915 #define R200_EMIT_PP_TXCBLEND_2 23 /* tex2/4 */ 106*e57b9183Scg149915 #define R200_EMIT_PP_TXCBLEND_3 24 /* tex3/4 */ 107*e57b9183Scg149915 #define R200_EMIT_PP_TXCBLEND_4 25 /* tex4/4 */ 108*e57b9183Scg149915 #define R200_EMIT_PP_TXCBLEND_5 26 /* tex5/4 */ 109*e57b9183Scg149915 #define R200_EMIT_PP_TXCBLEND_6 27 /* /4 */ 110*e57b9183Scg149915 #define R200_EMIT_PP_TXCBLEND_7 28 /* /4 */ 111*e57b9183Scg149915 #define R200_EMIT_TCL_LIGHT_MODEL_CTL_0 29 /* tcl/7 */ 112*e57b9183Scg149915 #define R200_EMIT_TFACTOR_0 30 /* tf/7 */ 113*e57b9183Scg149915 #define R200_EMIT_VTX_FMT_0 31 /* vtx/5 */ 114*e57b9183Scg149915 #define R200_EMIT_VAP_CTL 32 /* vap/1 */ 115*e57b9183Scg149915 #define R200_EMIT_MATRIX_SELECT_0 33 /* msl/5 */ 116*e57b9183Scg149915 #define R200_EMIT_TEX_PROC_CTL_2 34 /* tcg/5 */ 117*e57b9183Scg149915 #define R200_EMIT_TCL_UCP_VERT_BLEND_CTL 35 /* tcl/1 */ 118*e57b9183Scg149915 #define R200_EMIT_PP_TXFILTER_0 36 /* tex0/6 */ 119*e57b9183Scg149915 #define R200_EMIT_PP_TXFILTER_1 37 /* tex1/6 */ 120*e57b9183Scg149915 #define R200_EMIT_PP_TXFILTER_2 38 /* tex2/6 */ 121*e57b9183Scg149915 #define R200_EMIT_PP_TXFILTER_3 39 /* tex3/6 */ 122*e57b9183Scg149915 #define R200_EMIT_PP_TXFILTER_4 40 /* tex4/6 */ 123*e57b9183Scg149915 #define R200_EMIT_PP_TXFILTER_5 41 /* tex5/6 */ 124*e57b9183Scg149915 #define R200_EMIT_PP_TXOFFSET_0 42 /* tex0/1 */ 125*e57b9183Scg149915 #define R200_EMIT_PP_TXOFFSET_1 43 /* tex1/1 */ 126*e57b9183Scg149915 #define R200_EMIT_PP_TXOFFSET_2 44 /* tex2/1 */ 127*e57b9183Scg149915 #define R200_EMIT_PP_TXOFFSET_3 45 /* tex3/1 */ 128*e57b9183Scg149915 #define R200_EMIT_PP_TXOFFSET_4 46 /* tex4/1 */ 129*e57b9183Scg149915 #define R200_EMIT_PP_TXOFFSET_5 47 /* tex5/1 */ 130*e57b9183Scg149915 #define R200_EMIT_VTE_CNTL 48 /* vte/1 */ 131*e57b9183Scg149915 #define R200_EMIT_OUTPUT_VTX_COMP_SEL 49 /* vtx/1 */ 132*e57b9183Scg149915 #define R200_EMIT_PP_TAM_DEBUG3 50 /* tam/1 */ 133*e57b9183Scg149915 #define R200_EMIT_PP_CNTL_X 51 /* cst/1 */ 134*e57b9183Scg149915 #define R200_EMIT_RB3D_DEPTHXY_OFFSET 52 /* cst/1 */ 135*e57b9183Scg149915 #define R200_EMIT_RE_AUX_SCISSOR_CNTL 53 /* cst/1 */ 136*e57b9183Scg149915 #define R200_EMIT_RE_SCISSOR_TL_0 54 /* cst/2 */ 137*e57b9183Scg149915 #define R200_EMIT_RE_SCISSOR_TL_1 55 /* cst/2 */ 138*e57b9183Scg149915 #define R200_EMIT_RE_SCISSOR_TL_2 56 /* cst/2 */ 139*e57b9183Scg149915 #define R200_EMIT_SE_VAP_CNTL_STATUS 57 /* cst/1 */ 140*e57b9183Scg149915 #define R200_EMIT_SE_VTX_STATE_CNTL 58 /* cst/1 */ 141*e57b9183Scg149915 #define R200_EMIT_RE_POINTSIZE 59 /* cst/1 */ 142*e57b9183Scg149915 #define R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0 60 /* cst/4 */ 143*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_FACES_0 61 144*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_OFFSETS_0 62 145*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_FACES_1 63 146*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_OFFSETS_1 64 147*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_FACES_2 65 148*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_OFFSETS_2 66 149*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_FACES_3 67 150*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_OFFSETS_3 68 151*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_FACES_4 69 152*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_OFFSETS_4 70 153*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_FACES_5 71 154*e57b9183Scg149915 #define R200_EMIT_PP_CUBIC_OFFSETS_5 72 155*e57b9183Scg149915 #define RADEON_EMIT_PP_TEX_SIZE_0 73 156*e57b9183Scg149915 #define RADEON_EMIT_PP_TEX_SIZE_1 74 157*e57b9183Scg149915 #define RADEON_EMIT_PP_TEX_SIZE_2 75 158*e57b9183Scg149915 #define R200_EMIT_RB3D_BLENDCOLOR 76 159*e57b9183Scg149915 #define R200_EMIT_TCL_POINT_SPRITE_CNTL 77 160*e57b9183Scg149915 #define RADEON_EMIT_PP_CUBIC_FACES_0 78 161*e57b9183Scg149915 #define RADEON_EMIT_PP_CUBIC_OFFSETS_T0 79 162*e57b9183Scg149915 #define RADEON_EMIT_PP_CUBIC_FACES_1 80 163*e57b9183Scg149915 #define RADEON_EMIT_PP_CUBIC_OFFSETS_T1 81 164*e57b9183Scg149915 #define RADEON_EMIT_PP_CUBIC_FACES_2 82 165*e57b9183Scg149915 #define RADEON_EMIT_PP_CUBIC_OFFSETS_T2 83 166*e57b9183Scg149915 #define R200_EMIT_PP_TRI_PERF_CNTL 84 167*e57b9183Scg149915 #define R200_EMIT_PP_AFS_0 85 168*e57b9183Scg149915 #define R200_EMIT_PP_AFS_1 86 169*e57b9183Scg149915 #define R200_EMIT_ATF_TFACTOR 87 170*e57b9183Scg149915 #define R200_EMIT_PP_TXCTLALL_0 88 171*e57b9183Scg149915 #define R200_EMIT_PP_TXCTLALL_1 89 172*e57b9183Scg149915 #define R200_EMIT_PP_TXCTLALL_2 90 173*e57b9183Scg149915 #define R200_EMIT_PP_TXCTLALL_3 91 174*e57b9183Scg149915 #define R200_EMIT_PP_TXCTLALL_4 92 175*e57b9183Scg149915 #define R200_EMIT_PP_TXCTLALL_5 93 176*e57b9183Scg149915 #define R200_EMIT_VAP_PVS_CNTL 94 177*e57b9183Scg149915 #define RADEON_MAX_STATE_PACKETS 95 178*e57b9183Scg149915 179*e57b9183Scg149915 /* 180*e57b9183Scg149915 * Commands understood by cmd_buffer ioctl. More can be added but 181*e57b9183Scg149915 * obviously these can't be removed or changed: 182*e57b9183Scg149915 */ 183*e57b9183Scg149915 #define RADEON_CMD_PACKET 1 184*e57b9183Scg149915 /* emit one of the register packets above */ 185*e57b9183Scg149915 #define RADEON_CMD_SCALARS 2 /* emit scalar data */ 186*e57b9183Scg149915 #define RADEON_CMD_VECTORS 3 /* emit vector data */ 187*e57b9183Scg149915 #define RADEON_CMD_DMA_DISCARD 4 /* discard current dma buf */ 188*e57b9183Scg149915 #define RADEON_CMD_PACKET3 5 /* emit hw packet */ 189*e57b9183Scg149915 #define RADEON_CMD_PACKET3_CLIP 6 190*e57b9183Scg149915 /* emit hw packet wrapped in cliprects */ 191*e57b9183Scg149915 #define RADEON_CMD_SCALARS2 7 /* r200 stopgap */ 192*e57b9183Scg149915 193*e57b9183Scg149915 /* 194*e57b9183Scg149915 * emit hw wait commands -- note: 195*e57b9183Scg149915 * doesn't make the cpu wait, just 196*e57b9183Scg149915 * the graphics hardware 197*e57b9183Scg149915 */ 198*e57b9183Scg149915 #define RADEON_CMD_WAIT 8 199*e57b9183Scg149915 200*e57b9183Scg149915 #define RADEON_CMD_VECLINEAR 9 /* another r200 stopgap */ 201*e57b9183Scg149915 typedef union { 202*e57b9183Scg149915 int i; 203*e57b9183Scg149915 struct { 204*e57b9183Scg149915 unsigned char cmd_type, pad0, pad1, pad2; 205*e57b9183Scg149915 } header; 206*e57b9183Scg149915 struct { 207*e57b9183Scg149915 unsigned char cmd_type, packet_id, pad0, pad1; 208*e57b9183Scg149915 } packet; 209*e57b9183Scg149915 struct { 210*e57b9183Scg149915 unsigned char cmd_type, offset, stride, count; 211*e57b9183Scg149915 } scalars; 212*e57b9183Scg149915 struct { 213*e57b9183Scg149915 unsigned char cmd_type, offset, stride, count; 214*e57b9183Scg149915 } vectors; 215*e57b9183Scg149915 struct { 216*e57b9183Scg149915 unsigned char cmd_type, addr_lo, addr_hi, count; 217*e57b9183Scg149915 } veclinear; 218*e57b9183Scg149915 struct { 219*e57b9183Scg149915 unsigned char cmd_type, buf_idx, pad0, pad1; 220*e57b9183Scg149915 } dma; 221*e57b9183Scg149915 struct { 222*e57b9183Scg149915 unsigned char cmd_type, flags, pad0, pad1; 223*e57b9183Scg149915 } wait; 224*e57b9183Scg149915 } drm_radeon_cmd_header_t; 225*e57b9183Scg149915 226*e57b9183Scg149915 #define RADEON_WAIT_2D 0x1 227*e57b9183Scg149915 #define RADEON_WAIT_3D 0x2 228*e57b9183Scg149915 229*e57b9183Scg149915 /* Allowed parameters for R300_CMD_PACKET3 */ 230*e57b9183Scg149915 #define R300_CMD_PACKET3_CLEAR 0 231*e57b9183Scg149915 #define R300_CMD_PACKET3_RAW 1 232*e57b9183Scg149915 233*e57b9183Scg149915 /* 234*e57b9183Scg149915 * Commands understood by cmd_buffer ioctl for R300. 235*e57b9183Scg149915 * The interface has not been stabilized, so some of these may be removed 236*e57b9183Scg149915 * and eventually reordered before stabilization. 237*e57b9183Scg149915 */ 238*e57b9183Scg149915 #define R300_CMD_PACKET0 1 239*e57b9183Scg149915 #define R300_CMD_VPU 2 /* emit vertex program upload */ 240*e57b9183Scg149915 #define R300_CMD_PACKET3 3 /* emit a packet3 */ 241*e57b9183Scg149915 242*e57b9183Scg149915 /* emit sequence ending 3d rendering */ 243*e57b9183Scg149915 #define R300_CMD_END3D 4 244*e57b9183Scg149915 245*e57b9183Scg149915 #define R300_CMD_CP_DELAY 5 246*e57b9183Scg149915 #define R300_CMD_DMA_DISCARD 6 247*e57b9183Scg149915 #define R300_CMD_WAIT 7 248*e57b9183Scg149915 #define R300_WAIT_2D 0x1 249*e57b9183Scg149915 #define R300_WAIT_3D 0x2 250*e57b9183Scg149915 #define R300_WAIT_2D_CLEAN 0x3 251*e57b9183Scg149915 #define R300_WAIT_3D_CLEAN 0x4 252*e57b9183Scg149915 #define R300_CMD_SCRATCH 8 253*e57b9183Scg149915 /* 254*e57b9183Scg149915 * sys/user.h defines u 255*e57b9183Scg149915 */ 256*e57b9183Scg149915 typedef union { 257*e57b9183Scg149915 unsigned int u; 258*e57b9183Scg149915 struct { 259*e57b9183Scg149915 unsigned char cmd_type, pad0, pad1, pad2; 260*e57b9183Scg149915 } header; 261*e57b9183Scg149915 struct { 262*e57b9183Scg149915 unsigned char cmd_type, count, reglo, reghi; 263*e57b9183Scg149915 } packet0; 264*e57b9183Scg149915 struct { 265*e57b9183Scg149915 unsigned char cmd_type, count, adrlo, adrhi; 266*e57b9183Scg149915 } vpu; 267*e57b9183Scg149915 struct { 268*e57b9183Scg149915 unsigned char cmd_type, packet, pad0, pad1; 269*e57b9183Scg149915 } packet3; 270*e57b9183Scg149915 struct { 271*e57b9183Scg149915 unsigned char cmd_type, packet; 272*e57b9183Scg149915 unsigned short count; /* amount of packet2 to emit */ 273*e57b9183Scg149915 } delay; 274*e57b9183Scg149915 struct { 275*e57b9183Scg149915 unsigned char cmd_type, buf_idx, pad0, pad1; 276*e57b9183Scg149915 } dma; 277*e57b9183Scg149915 struct { 278*e57b9183Scg149915 unsigned char cmd_type, flags, pad0, pad1; 279*e57b9183Scg149915 } wait; 280*e57b9183Scg149915 struct { 281*e57b9183Scg149915 unsigned char cmd_type, reg, n_bufs, flags; 282*e57b9183Scg149915 } scratch; 283*e57b9183Scg149915 } drm_r300_cmd_header_t; 284*e57b9183Scg149915 285*e57b9183Scg149915 #define RADEON_FRONT 0x1 286*e57b9183Scg149915 #define RADEON_BACK 0x2 287*e57b9183Scg149915 #define RADEON_DEPTH 0x4 288*e57b9183Scg149915 #define RADEON_STENCIL 0x8 289*e57b9183Scg149915 #define RADEON_CLEAR_FASTZ 0x80000000 290*e57b9183Scg149915 #define RADEON_USE_HIERZ 0x40000000 291*e57b9183Scg149915 #define RADEON_USE_COMP_ZBUF 0x20000000 292*e57b9183Scg149915 293*e57b9183Scg149915 /* Primitive types */ 294*e57b9183Scg149915 #define RADEON_POINTS 0x1 295*e57b9183Scg149915 #define RADEON_LINES 0x2 296*e57b9183Scg149915 #define RADEON_LINE_STRIP 0x3 297*e57b9183Scg149915 #define RADEON_TRIANGLES 0x4 298*e57b9183Scg149915 #define RADEON_TRIANGLE_FAN 0x5 299*e57b9183Scg149915 #define RADEON_TRIANGLE_STRIP 0x6 300*e57b9183Scg149915 301*e57b9183Scg149915 /* Vertex/indirect buffer size */ 302*e57b9183Scg149915 #define RADEON_BUFFER_SIZE 65536 303*e57b9183Scg149915 304*e57b9183Scg149915 /* Byte offsets for indirect buffer data */ 305*e57b9183Scg149915 #define RADEON_INDEX_PRIM_OFFSET 20 306*e57b9183Scg149915 307*e57b9183Scg149915 #define RADEON_SCRATCH_REG_OFFSET 32 308*e57b9183Scg149915 309*e57b9183Scg149915 #define RADEON_NR_SAREA_CLIPRECTS 12 310*e57b9183Scg149915 311*e57b9183Scg149915 /* 312*e57b9183Scg149915 * There are 2 heaps (local/GART). Each region within a heap is a 313*e57b9183Scg149915 * minimum of 64k, and there are at most 64 of them per heap. 314*e57b9183Scg149915 */ 315*e57b9183Scg149915 #define RADEON_LOCAL_TEX_HEAP 0 316*e57b9183Scg149915 #define RADEON_GART_TEX_HEAP 1 317*e57b9183Scg149915 #define RADEON_NR_TEX_HEAPS 2 318*e57b9183Scg149915 #define RADEON_NR_TEX_REGIONS 64 319*e57b9183Scg149915 #define RADEON_LOG_TEX_GRANULARITY 16 320*e57b9183Scg149915 321*e57b9183Scg149915 #define RADEON_MAX_TEXTURE_LEVELS 12 322*e57b9183Scg149915 #define RADEON_MAX_TEXTURE_UNITS 3 323*e57b9183Scg149915 324*e57b9183Scg149915 #define RADEON_MAX_SURFACES 8 325*e57b9183Scg149915 326*e57b9183Scg149915 /* 327*e57b9183Scg149915 * Blits have strict offset rules. All blit offset must be aligned on 328*e57b9183Scg149915 * a 1K-byte boundary. 329*e57b9183Scg149915 */ 330*e57b9183Scg149915 #define RADEON_OFFSET_SHIFT 10 331*e57b9183Scg149915 #define RADEON_OFFSET_ALIGN (1 << RADEON_OFFSET_SHIFT) 332*e57b9183Scg149915 #define RADEON_OFFSET_MASK (RADEON_OFFSET_ALIGN - 1) 333*e57b9183Scg149915 334*e57b9183Scg149915 #endif /* __RADEON_SAREA_DEFINES__ */ 335*e57b9183Scg149915 336*e57b9183Scg149915 typedef struct { 337*e57b9183Scg149915 unsigned int red; 338*e57b9183Scg149915 unsigned int green; 339*e57b9183Scg149915 unsigned int blue; 340*e57b9183Scg149915 unsigned int alpha; 341*e57b9183Scg149915 } radeon_color_regs_t; 342*e57b9183Scg149915 343*e57b9183Scg149915 typedef struct { 344*e57b9183Scg149915 /* Context state */ 345*e57b9183Scg149915 unsigned int pp_misc; /* 0x1c14 */ 346*e57b9183Scg149915 unsigned int pp_fog_color; 347*e57b9183Scg149915 unsigned int re_solid_color; 348*e57b9183Scg149915 unsigned int rb3d_blendcntl; 349*e57b9183Scg149915 unsigned int rb3d_depthoffset; 350*e57b9183Scg149915 unsigned int rb3d_depthpitch; 351*e57b9183Scg149915 unsigned int rb3d_zstencilcntl; 352*e57b9183Scg149915 353*e57b9183Scg149915 unsigned int pp_cntl; /* 0x1c38 */ 354*e57b9183Scg149915 unsigned int rb3d_cntl; 355*e57b9183Scg149915 unsigned int rb3d_coloroffset; 356*e57b9183Scg149915 unsigned int re_width_height; 357*e57b9183Scg149915 unsigned int rb3d_colorpitch; 358*e57b9183Scg149915 unsigned int se_cntl; 359*e57b9183Scg149915 360*e57b9183Scg149915 /* Vertex format state */ 361*e57b9183Scg149915 unsigned int se_coord_fmt; /* 0x1c50 */ 362*e57b9183Scg149915 363*e57b9183Scg149915 /* Line state */ 364*e57b9183Scg149915 unsigned int re_line_pattern; /* 0x1cd0 */ 365*e57b9183Scg149915 unsigned int re_line_state; 366*e57b9183Scg149915 367*e57b9183Scg149915 unsigned int se_line_width; /* 0x1db8 */ 368*e57b9183Scg149915 369*e57b9183Scg149915 /* Bumpmap state */ 370*e57b9183Scg149915 unsigned int pp_lum_matrix; /* 0x1d00 */ 371*e57b9183Scg149915 372*e57b9183Scg149915 unsigned int pp_rot_matrix_0; /* 0x1d58 */ 373*e57b9183Scg149915 unsigned int pp_rot_matrix_1; 374*e57b9183Scg149915 375*e57b9183Scg149915 /* Mask state */ 376*e57b9183Scg149915 unsigned int rb3d_stencilrefmask; /* 0x1d7c */ 377*e57b9183Scg149915 unsigned int rb3d_ropcntl; 378*e57b9183Scg149915 unsigned int rb3d_planemask; 379*e57b9183Scg149915 380*e57b9183Scg149915 /* Viewport state */ 381*e57b9183Scg149915 unsigned int se_vport_xscale; /* 0x1d98 */ 382*e57b9183Scg149915 unsigned int se_vport_xoffset; 383*e57b9183Scg149915 unsigned int se_vport_yscale; 384*e57b9183Scg149915 unsigned int se_vport_yoffset; 385*e57b9183Scg149915 unsigned int se_vport_zscale; 386*e57b9183Scg149915 unsigned int se_vport_zoffset; 387*e57b9183Scg149915 388*e57b9183Scg149915 /* Setup state */ 389*e57b9183Scg149915 unsigned int se_cntl_status; /* 0x2140 */ 390*e57b9183Scg149915 391*e57b9183Scg149915 /* Misc state */ 392*e57b9183Scg149915 unsigned int re_top_left; /* 0x26c0 */ 393*e57b9183Scg149915 unsigned int re_misc; 394*e57b9183Scg149915 } drm_radeon_context_regs_t; 395*e57b9183Scg149915 396*e57b9183Scg149915 typedef struct { 397*e57b9183Scg149915 /* Zbias state */ 398*e57b9183Scg149915 unsigned int se_zbias_factor; /* 0x1dac */ 399*e57b9183Scg149915 unsigned int se_zbias_constant; 400*e57b9183Scg149915 } drm_radeon_context2_regs_t; 401*e57b9183Scg149915 402*e57b9183Scg149915 /* Setup registers for each texture unit */ 403*e57b9183Scg149915 typedef struct { 404*e57b9183Scg149915 unsigned int pp_txfilter; 405*e57b9183Scg149915 unsigned int pp_txformat; 406*e57b9183Scg149915 unsigned int pp_txoffset; 407*e57b9183Scg149915 unsigned int pp_txcblend; 408*e57b9183Scg149915 unsigned int pp_txablend; 409*e57b9183Scg149915 unsigned int pp_tfactor; 410*e57b9183Scg149915 unsigned int pp_border_color; 411*e57b9183Scg149915 } drm_radeon_texture_regs_t; 412*e57b9183Scg149915 413*e57b9183Scg149915 typedef struct { 414*e57b9183Scg149915 unsigned int start; 415*e57b9183Scg149915 unsigned int finish; 416*e57b9183Scg149915 unsigned int prim:8; 417*e57b9183Scg149915 unsigned int stateidx:8; 418*e57b9183Scg149915 unsigned int numverts:16; /* overloaded as offset/64 for elt prims */ 419*e57b9183Scg149915 unsigned int vc_format; /* vertex format */ 420*e57b9183Scg149915 } drm_radeon_prim_t; 421*e57b9183Scg149915 422*e57b9183Scg149915 typedef struct { 423*e57b9183Scg149915 drm_radeon_context_regs_t context; 424*e57b9183Scg149915 drm_radeon_texture_regs_t tex[RADEON_MAX_TEXTURE_UNITS]; 425*e57b9183Scg149915 drm_radeon_context2_regs_t context2; 426*e57b9183Scg149915 unsigned int dirty; 427*e57b9183Scg149915 } drm_radeon_state_t; 428*e57b9183Scg149915 429*e57b9183Scg149915 typedef struct { 430*e57b9183Scg149915 /* 431*e57b9183Scg149915 * The channel for communication of state information to the 432*e57b9183Scg149915 * kernel on firing a vertex buffer with either of the 433*e57b9183Scg149915 * obsoleted vertex/index ioctls. 434*e57b9183Scg149915 */ 435*e57b9183Scg149915 drm_radeon_context_regs_t context_state; 436*e57b9183Scg149915 drm_radeon_texture_regs_t tex_state[RADEON_MAX_TEXTURE_UNITS]; 437*e57b9183Scg149915 unsigned int dirty; 438*e57b9183Scg149915 unsigned int vertsize; 439*e57b9183Scg149915 unsigned int vc_format; 440*e57b9183Scg149915 441*e57b9183Scg149915 /* The current cliprects, or a subset thereof. */ 442*e57b9183Scg149915 drm_clip_rect_t boxes[RADEON_NR_SAREA_CLIPRECTS]; 443*e57b9183Scg149915 unsigned int nbox; 444*e57b9183Scg149915 445*e57b9183Scg149915 /* Counters for client-side throttling of rendering clients. */ 446*e57b9183Scg149915 unsigned int last_frame; 447*e57b9183Scg149915 unsigned int last_dispatch; 448*e57b9183Scg149915 unsigned int last_clear; 449*e57b9183Scg149915 450*e57b9183Scg149915 drm_tex_region_t 451*e57b9183Scg149915 tex_list[RADEON_NR_TEX_HEAPS][RADEON_NR_TEX_REGIONS + 1]; 452*e57b9183Scg149915 unsigned int tex_age[RADEON_NR_TEX_HEAPS]; 453*e57b9183Scg149915 int ctx_owner; 454*e57b9183Scg149915 int pfState; /* number of 3d windows (0,1,2ormore) */ 455*e57b9183Scg149915 int pfCurrentPage; /* which buffer is being displayed? */ 456*e57b9183Scg149915 int crtc2_base; /* CRTC2 frame offset */ 457*e57b9183Scg149915 int tiling_enabled; /* set by drm, read by 2d + 3d clients */ 458*e57b9183Scg149915 } drm_radeon_sarea_t; 459*e57b9183Scg149915 460*e57b9183Scg149915 /* 461*e57b9183Scg149915 * WARNING: If you change any of these defines, make sure to change the 462*e57b9183Scg149915 * defines in the Xserver file (xf86drmRadeon.h) 463*e57b9183Scg149915 * 464*e57b9183Scg149915 * KW: actually it's illegal to change any of this (backwards compatibility). 465*e57b9183Scg149915 */ 466*e57b9183Scg149915 467*e57b9183Scg149915 /* 468*e57b9183Scg149915 * Radeon specific ioctls 469*e57b9183Scg149915 * The device specific ioctl range is 0x40 to 0x79. 470*e57b9183Scg149915 */ 471*e57b9183Scg149915 #define DRM_RADEON_CP_INIT 0x00 472*e57b9183Scg149915 #define DRM_RADEON_CP_START 0x01 473*e57b9183Scg149915 #define DRM_RADEON_CP_STOP 0x02 474*e57b9183Scg149915 #define DRM_RADEON_CP_RESET 0x03 475*e57b9183Scg149915 #define DRM_RADEON_CP_IDLE 0x04 476*e57b9183Scg149915 #define DRM_RADEON_RESET 0x05 477*e57b9183Scg149915 #define DRM_RADEON_FULLSCREEN 0x06 478*e57b9183Scg149915 #define DRM_RADEON_SWAP 0x07 479*e57b9183Scg149915 #define DRM_RADEON_CLEAR 0x08 480*e57b9183Scg149915 #define DRM_RADEON_VERTEX 0x09 481*e57b9183Scg149915 #define DRM_RADEON_INDICES 0x0A 482*e57b9183Scg149915 #define DRM_RADEON_NOT_USED 483*e57b9183Scg149915 #define DRM_RADEON_STIPPLE 0x0C 484*e57b9183Scg149915 #define DRM_RADEON_INDIRECT 0x0D 485*e57b9183Scg149915 #define DRM_RADEON_TEXTURE 0x0E 486*e57b9183Scg149915 #define DRM_RADEON_VERTEX2 0x0F 487*e57b9183Scg149915 #define DRM_RADEON_CMDBUF 0x10 488*e57b9183Scg149915 #define DRM_RADEON_GETPARAM 0x11 489*e57b9183Scg149915 #define DRM_RADEON_FLIP 0x12 490*e57b9183Scg149915 #define DRM_RADEON_ALLOC 0x13 491*e57b9183Scg149915 #define DRM_RADEON_FREE 0x14 492*e57b9183Scg149915 #define DRM_RADEON_INIT_HEAP 0x15 493*e57b9183Scg149915 #define DRM_RADEON_IRQ_EMIT 0x16 494*e57b9183Scg149915 #define DRM_RADEON_IRQ_WAIT 0x17 495*e57b9183Scg149915 #define DRM_RADEON_CP_RESUME 0x18 496*e57b9183Scg149915 #define DRM_RADEON_SETPARAM 0x19 497*e57b9183Scg149915 #define DRM_RADEON_SURF_ALLOC 0x1a 498*e57b9183Scg149915 #define DRM_RADEON_SURF_FREE 0x1b 499*e57b9183Scg149915 500*e57b9183Scg149915 #define DRM_IOCTL_RADEON_CP_INIT \ 501*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) 502*e57b9183Scg149915 #define DRM_IOCTL_RADEON_CP_START \ 503*e57b9183Scg149915 DRM_IO(DRM_COMMAND_BASE + DRM_RADEON_CP_START) 504*e57b9183Scg149915 #define DRM_IOCTL_RADEON_CP_STOP \ 505*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t) 506*e57b9183Scg149915 #define DRM_IOCTL_RADEON_CP_RESET \ 507*e57b9183Scg149915 DRM_IO(DRM_COMMAND_BASE + DRM_RADEON_CP_RESET) 508*e57b9183Scg149915 #define DRM_IOCTL_RADEON_CP_IDLE \ 509*e57b9183Scg149915 DRM_IO(DRM_COMMAND_BASE + DRM_RADEON_CP_IDLE) 510*e57b9183Scg149915 #define DRM_IOCTL_RADEON_RESET \ 511*e57b9183Scg149915 DRM_IO(DRM_COMMAND_BASE + DRM_RADEON_RESET) 512*e57b9183Scg149915 #define DRM_IOCTL_RADEON_FULLSCREEN \ 513*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_FULLSCREEN, \ 514*e57b9183Scg149915 drm_radeon_fullscreen_t) 515*e57b9183Scg149915 #define DRM_IOCTL_RADEON_SWAP \ 516*e57b9183Scg149915 DRM_IO(DRM_COMMAND_BASE + DRM_RADEON_SWAP) 517*e57b9183Scg149915 #define DRM_IOCTL_RADEON_CLEAR \ 518*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_CLEAR, drm_radeon_clear_t) 519*e57b9183Scg149915 #define DRM_IOCTL_RADEON_VERTEX \ 520*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_VERTEX, drm_radeon_vertex_t) 521*e57b9183Scg149915 #define DRM_IOCTL_RADEON_INDICES \ 522*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_INDICES, drm_radeon_indices_t) 523*e57b9183Scg149915 #define DRM_IOCTL_RADEON_STIPPLE \ 524*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_STIPPLE, drm_radeon_stipple_t) 525*e57b9183Scg149915 #define DRM_IOCTL_RADEON_INDIRECT \ 526*e57b9183Scg149915 DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INDIRECT, drm_radeon_indirect_t) 527*e57b9183Scg149915 #define DRM_IOCTL_RADEON_TEXTURE \ 528*e57b9183Scg149915 DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_TEXTURE, drm_radeon_texture_t) 529*e57b9183Scg149915 #define DRM_IOCTL_RADEON_VERTEX2 \ 530*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_VERTEX2, drm_radeon_vertex2_t) 531*e57b9183Scg149915 #define DRM_IOCTL_RADEON_CMDBUF \ 532*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_CMDBUF, drm_radeon_cmd_buffer_t) 533*e57b9183Scg149915 #define DRM_IOCTL_RADEON_GETPARAM \ 534*e57b9183Scg149915 DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GETPARAM, drm_radeon_getparam_t) 535*e57b9183Scg149915 #define DRM_IOCTL_RADEON_FLIP \ 536*e57b9183Scg149915 DRM_IO(DRM_COMMAND_BASE + DRM_RADEON_FLIP) 537*e57b9183Scg149915 #define DRM_IOCTL_RADEON_ALLOC \ 538*e57b9183Scg149915 DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_ALLOC, drm_radeon_mem_alloc_t) 539*e57b9183Scg149915 #define DRM_IOCTL_RADEON_FREE \ 540*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_FREE, drm_radeon_mem_free_t) 541*e57b9183Scg149915 #define DRM_IOCTL_RADEON_INIT_HEAP \ 542*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_INIT_HEAP, \ 543*e57b9183Scg149915 drm_radeon_mem_init_heap_t) 544*e57b9183Scg149915 #define DRM_IOCTL_RADEON_IRQ_EMIT \ 545*e57b9183Scg149915 DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_IRQ_EMIT, drm_radeon_irq_emit_t) 546*e57b9183Scg149915 #define DRM_IOCTL_RADEON_IRQ_WAIT \ 547*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_IRQ_WAIT, drm_radeon_irq_wait_t) 548*e57b9183Scg149915 #define DRM_IOCTL_RADEON_CP_RESUME \ 549*e57b9183Scg149915 DRM_IO(DRM_COMMAND_BASE + DRM_RADEON_CP_RESUME) 550*e57b9183Scg149915 #define DRM_IOCTL_RADEON_SETPARAM \ 551*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_SETPARAM, drm_radeon_setparam_t) 552*e57b9183Scg149915 #define DRM_IOCTL_RADEON_SURF_ALLOC \ 553*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_SURF_ALLOC, \ 554*e57b9183Scg149915 drm_radeon_surface_alloc_t) 555*e57b9183Scg149915 #define DRM_IOCTL_RADEON_SURF_FREE \ 556*e57b9183Scg149915 DRM_IOW(DRM_COMMAND_BASE + DRM_RADEON_SURF_FREE, \ 557*e57b9183Scg149915 drm_radeon_surface_free_t) 558*e57b9183Scg149915 559*e57b9183Scg149915 typedef struct drm_radeon_init { 560*e57b9183Scg149915 enum { 561*e57b9183Scg149915 RADEON_INIT_CP = 0x01, 562*e57b9183Scg149915 RADEON_CLEANUP_CP = 0x02, 563*e57b9183Scg149915 RADEON_INIT_R200_CP = 0x03, 564*e57b9183Scg149915 RADEON_INIT_R300_CP = 0x04 565*e57b9183Scg149915 } func; 566*e57b9183Scg149915 unsigned long sarea_priv_offset; 567*e57b9183Scg149915 int is_pci; /* for overriding only */ 568*e57b9183Scg149915 int cp_mode; 569*e57b9183Scg149915 int gart_size; 570*e57b9183Scg149915 int ring_size; 571*e57b9183Scg149915 int usec_timeout; 572*e57b9183Scg149915 573*e57b9183Scg149915 unsigned int fb_bpp; 574*e57b9183Scg149915 unsigned int front_offset, front_pitch; 575*e57b9183Scg149915 unsigned int back_offset, back_pitch; 576*e57b9183Scg149915 unsigned int depth_bpp; 577*e57b9183Scg149915 unsigned int depth_offset, depth_pitch; 578*e57b9183Scg149915 579*e57b9183Scg149915 unsigned long fb_offset DEPRECATED; /* deprecated */ 580*e57b9183Scg149915 unsigned long mmio_offset DEPRECATED; /* deprecated */ 581*e57b9183Scg149915 unsigned long ring_offset; 582*e57b9183Scg149915 unsigned long ring_rptr_offset; 583*e57b9183Scg149915 unsigned long buffers_offset; 584*e57b9183Scg149915 unsigned long gart_textures_offset; 585*e57b9183Scg149915 } drm_radeon_init_t; 586*e57b9183Scg149915 587*e57b9183Scg149915 typedef struct drm_radeon_cp_stop { 588*e57b9183Scg149915 int flush; 589*e57b9183Scg149915 int idle; 590*e57b9183Scg149915 } drm_radeon_cp_stop_t; 591*e57b9183Scg149915 592*e57b9183Scg149915 typedef struct drm_radeon_fullscreen { 593*e57b9183Scg149915 enum { 594*e57b9183Scg149915 RADEON_INIT_FULLSCREEN = 0x01, 595*e57b9183Scg149915 RADEON_CLEANUP_FULLSCREEN = 0x02 596*e57b9183Scg149915 } func; 597*e57b9183Scg149915 } drm_radeon_fullscreen_t; 598*e57b9183Scg149915 599*e57b9183Scg149915 #define CLEAR_X1 0 600*e57b9183Scg149915 #define CLEAR_Y1 1 601*e57b9183Scg149915 #define CLEAR_X2 2 602*e57b9183Scg149915 #define CLEAR_Y2 3 603*e57b9183Scg149915 #define CLEAR_DEPTH 4 604*e57b9183Scg149915 605*e57b9183Scg149915 typedef union drm_radeon_clear_rect { 606*e57b9183Scg149915 float f[5]; 607*e57b9183Scg149915 unsigned int ui[5]; 608*e57b9183Scg149915 } drm_radeon_clear_rect_t; 609*e57b9183Scg149915 610*e57b9183Scg149915 typedef struct drm_radeon_clear { 611*e57b9183Scg149915 unsigned int flags; 612*e57b9183Scg149915 unsigned int clear_color; 613*e57b9183Scg149915 unsigned int clear_depth; 614*e57b9183Scg149915 unsigned int color_mask; 615*e57b9183Scg149915 unsigned int depth_mask; /* misnamed field: should be stencil */ 616*e57b9183Scg149915 drm_radeon_clear_rect_t __user *depth_boxes; 617*e57b9183Scg149915 } drm_radeon_clear_t; 618*e57b9183Scg149915 619*e57b9183Scg149915 typedef struct drm_radeon_vertex { 620*e57b9183Scg149915 int prim; 621*e57b9183Scg149915 int idx; /* Index of vertex buffer */ 622*e57b9183Scg149915 int count; /* Number of vertices in buffer */ 623*e57b9183Scg149915 int discard; /* Client finished with buffer? */ 624*e57b9183Scg149915 } drm_radeon_vertex_t; 625*e57b9183Scg149915 626*e57b9183Scg149915 typedef struct drm_radeon_indices { 627*e57b9183Scg149915 int prim; 628*e57b9183Scg149915 int idx; 629*e57b9183Scg149915 int start; 630*e57b9183Scg149915 int end; 631*e57b9183Scg149915 int discard; /* Client finished with buffer? */ 632*e57b9183Scg149915 } drm_radeon_indices_t; 633*e57b9183Scg149915 634*e57b9183Scg149915 /* 635*e57b9183Scg149915 * v1.2 - obsoletes drm_radeon_vertex and drm_radeon_indices 636*e57b9183Scg149915 * - allows multiple primitives and state changes in a single ioctl 637*e57b9183Scg149915 * - supports driver change to emit native primitives 638*e57b9183Scg149915 */ 639*e57b9183Scg149915 typedef struct drm_radeon_vertex2 { 640*e57b9183Scg149915 int idx; /* Index of vertex buffer */ 641*e57b9183Scg149915 int discard; /* Client finished with buffer? */ 642*e57b9183Scg149915 int nr_states; 643*e57b9183Scg149915 drm_radeon_state_t __user *state; 644*e57b9183Scg149915 int nr_prims; 645*e57b9183Scg149915 drm_radeon_prim_t __user *prim; 646*e57b9183Scg149915 } drm_radeon_vertex2_t; 647*e57b9183Scg149915 648*e57b9183Scg149915 /* 649*e57b9183Scg149915 * v1.3 - obsoletes drm_radeon_vertex2 650*e57b9183Scg149915 * - allows arbitarily large cliprect list 651*e57b9183Scg149915 * - allows updating of tcl packet, vector and scalar state 652*e57b9183Scg149915 * - allows memory-efficient description of state updates 653*e57b9183Scg149915 * - allows state to be emitted without a primitive 654*e57b9183Scg149915 * (for clears, ctx switches) 655*e57b9183Scg149915 * - allows more than one dma buffer to be referenced per ioctl 656*e57b9183Scg149915 * - supports tcl driver 657*e57b9183Scg149915 * - may be extended in future versions with new cmd types, packets 658*e57b9183Scg149915 */ 659*e57b9183Scg149915 typedef struct drm_radeon_cmd_buffer { 660*e57b9183Scg149915 int bufsz; 661*e57b9183Scg149915 char __user *buf; 662*e57b9183Scg149915 int nbox; 663*e57b9183Scg149915 drm_clip_rect_t __user *boxes; 664*e57b9183Scg149915 } drm_radeon_cmd_buffer_t; 665*e57b9183Scg149915 666*e57b9183Scg149915 typedef struct drm_radeon_tex_image { 667*e57b9183Scg149915 unsigned int x, y; /* Blit coordinates */ 668*e57b9183Scg149915 unsigned int width, height; 669*e57b9183Scg149915 const void __user *data; 670*e57b9183Scg149915 } drm_radeon_tex_image_t; 671*e57b9183Scg149915 672*e57b9183Scg149915 typedef struct drm_radeon_texture { 673*e57b9183Scg149915 unsigned int offset; 674*e57b9183Scg149915 int pitch; 675*e57b9183Scg149915 int format; 676*e57b9183Scg149915 int width; /* Texture image coordinates */ 677*e57b9183Scg149915 int height; 678*e57b9183Scg149915 drm_radeon_tex_image_t __user *image; 679*e57b9183Scg149915 } drm_radeon_texture_t; 680*e57b9183Scg149915 681*e57b9183Scg149915 typedef struct drm_radeon_stipple { 682*e57b9183Scg149915 unsigned int __user *mask; 683*e57b9183Scg149915 } drm_radeon_stipple_t; 684*e57b9183Scg149915 685*e57b9183Scg149915 typedef struct drm_radeon_indirect { 686*e57b9183Scg149915 int idx; 687*e57b9183Scg149915 int start; 688*e57b9183Scg149915 int end; 689*e57b9183Scg149915 int discard; 690*e57b9183Scg149915 } drm_radeon_indirect_t; 691*e57b9183Scg149915 692*e57b9183Scg149915 /* enum for card type parameters */ 693*e57b9183Scg149915 #define RADEON_CARD_PCI 0 694*e57b9183Scg149915 #define RADEON_CARD_AGP 1 695*e57b9183Scg149915 #define RADEON_CARD_PCIE 2 696*e57b9183Scg149915 697*e57b9183Scg149915 /* 698*e57b9183Scg149915 * 1.3: An ioctl to get parameters that aren't available to the 3d 699*e57b9183Scg149915 * client any other way. 700*e57b9183Scg149915 */ 701*e57b9183Scg149915 702*e57b9183Scg149915 /* card offset of 1st GART buffer */ 703*e57b9183Scg149915 #define RADEON_PARAM_GART_BUFFER_OFFSET 1 704*e57b9183Scg149915 705*e57b9183Scg149915 #define RADEON_PARAM_LAST_FRAME 2 706*e57b9183Scg149915 #define RADEON_PARAM_LAST_DISPATCH 3 707*e57b9183Scg149915 #define RADEON_PARAM_LAST_CLEAR 4 708*e57b9183Scg149915 /* Added with DRM version 1.6. */ 709*e57b9183Scg149915 #define RADEON_PARAM_IRQ_NR 5 710*e57b9183Scg149915 #define RADEON_PARAM_GART_BASE 6 /* offset of GART base */ 711*e57b9183Scg149915 /* Added with DRM version 1.8. */ 712*e57b9183Scg149915 #define RADEON_PARAM_REGISTER_HANDLE 7 /* for drmMap() */ 713*e57b9183Scg149915 #define RADEON_PARAM_STATUS_HANDLE 8 714*e57b9183Scg149915 #define RADEON_PARAM_SAREA_HANDLE 9 715*e57b9183Scg149915 #define RADEON_PARAM_GART_TEX_HANDLE 10 716*e57b9183Scg149915 #define RADEON_PARAM_SCRATCH_OFFSET 11 717*e57b9183Scg149915 #define RADEON_PARAM_CARD_TYPE 12 718*e57b9183Scg149915 #define RADEON_PARAM_VBLANK_CRTC 13 719*e57b9183Scg149915 #define RADEON_PARAM_FB_LOCATION 14 720*e57b9183Scg149915 721*e57b9183Scg149915 typedef struct drm_radeon_getparam { 722*e57b9183Scg149915 int param; 723*e57b9183Scg149915 void __user *value; 724*e57b9183Scg149915 } drm_radeon_getparam_t; 725*e57b9183Scg149915 726*e57b9183Scg149915 /* 1.6: Set up a memory manager for regions of shared memory: */ 727*e57b9183Scg149915 #define RADEON_MEM_REGION_GART 1 728*e57b9183Scg149915 #define RADEON_MEM_REGION_FB 2 729*e57b9183Scg149915 730*e57b9183Scg149915 typedef struct drm_radeon_mem_alloc { 731*e57b9183Scg149915 int region; 732*e57b9183Scg149915 int alignment; 733*e57b9183Scg149915 int size; 734*e57b9183Scg149915 int __user *region_offset; /* offset from start of fb or GART */ 735*e57b9183Scg149915 } drm_radeon_mem_alloc_t; 736*e57b9183Scg149915 737*e57b9183Scg149915 typedef struct drm_radeon_mem_free { 738*e57b9183Scg149915 int region; 739*e57b9183Scg149915 int region_offset; 740*e57b9183Scg149915 } drm_radeon_mem_free_t; 741*e57b9183Scg149915 742*e57b9183Scg149915 typedef struct drm_radeon_mem_init_heap { 743*e57b9183Scg149915 int region; 744*e57b9183Scg149915 int size; 745*e57b9183Scg149915 int start; 746*e57b9183Scg149915 } drm_radeon_mem_init_heap_t; 747*e57b9183Scg149915 748*e57b9183Scg149915 /* 1.6: Userspace can request & wait on irq's: */ 749*e57b9183Scg149915 typedef struct drm_radeon_irq_emit { 750*e57b9183Scg149915 int __user *irq_seq; 751*e57b9183Scg149915 } drm_radeon_irq_emit_t; 752*e57b9183Scg149915 753*e57b9183Scg149915 typedef struct drm_radeon_irq_wait { 754*e57b9183Scg149915 int irq_seq; 755*e57b9183Scg149915 } drm_radeon_irq_wait_t; 756*e57b9183Scg149915 757*e57b9183Scg149915 /* 758*e57b9183Scg149915 * 1.10: Clients tell the DRM where they think the framebuffer is located in 759*e57b9183Scg149915 * the card's address space, via a new generic ioctl to set parameters 760*e57b9183Scg149915 */ 761*e57b9183Scg149915 762*e57b9183Scg149915 typedef struct drm_radeon_setparam { 763*e57b9183Scg149915 unsigned int param; 764*e57b9183Scg149915 int64_t value; 765*e57b9183Scg149915 } drm_radeon_setparam_t; 766*e57b9183Scg149915 767*e57b9183Scg149915 /* determined framebuffer location */ 768*e57b9183Scg149915 #define RADEON_SETPARAM_FB_LOCATION 1 769*e57b9183Scg149915 770*e57b9183Scg149915 /* enable/disable color tiling */ 771*e57b9183Scg149915 #define RADEON_SETPARAM_SWITCH_TILING 2 772*e57b9183Scg149915 773*e57b9183Scg149915 /* PCI Gart Location */ 774*e57b9183Scg149915 #define RADEON_SETPARAM_PCIGART_LOCATION 3 775*e57b9183Scg149915 776*e57b9183Scg149915 /* Use new memory map */ 777*e57b9183Scg149915 #define RADEON_SETPARAM_NEW_MEMMAP 4 778*e57b9183Scg149915 779*e57b9183Scg149915 /* PCI GART Table Size */ 780*e57b9183Scg149915 #define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 781*e57b9183Scg149915 782*e57b9183Scg149915 /* VBLANK CRTC */ 783*e57b9183Scg149915 #define RADEON_SETPARAM_VBLANK_CRTC 6 784*e57b9183Scg149915 785*e57b9183Scg149915 786*e57b9183Scg149915 /* 1.14: Clients can allocate/free a surface */ 787*e57b9183Scg149915 typedef struct drm_radeon_surface_alloc { 788*e57b9183Scg149915 unsigned int address; 789*e57b9183Scg149915 unsigned int size; 790*e57b9183Scg149915 unsigned int flags; 791*e57b9183Scg149915 } drm_radeon_surface_alloc_t; 792*e57b9183Scg149915 793*e57b9183Scg149915 typedef struct drm_radeon_surface_free { 794*e57b9183Scg149915 unsigned int address; 795*e57b9183Scg149915 } drm_radeon_surface_free_t; 796*e57b9183Scg149915 797*e57b9183Scg149915 #define DRM_RADEON_VBLANK_CRTC1 1 798*e57b9183Scg149915 #define DRM_RADEON_VBLANK_CRTC2 2 799*e57b9183Scg149915 800*e57b9183Scg149915 #endif /* __RADEON_DRM_H__ */ 801