xref: /aosp_15_r20/external/libdrm/include/drm/mach64_drm.h (revision 7688df22e49036ff52a766b7101da3a49edadb8c)
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