OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [char/] [drm-4.0/] [radeon_drv.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/* radeon_drv.h -- Private header for radeon driver -*- linux-c -*-
2
 *
3
 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
4
 * Copyright 2000 VA Linux Systems, Inc., Fremont, California.
5
 * All rights reserved.
6
 *
7
 * Permission is hereby granted, free of charge, to any person obtaining a
8
 * copy of this software and associated documentation files (the "Software"),
9
 * to deal in the Software without restriction, including without limitation
10
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11
 * and/or sell copies of the Software, and to permit persons to whom the
12
 * Software is furnished to do so, subject to the following conditions:
13
 *
14
 * The above copyright notice and this permission notice (including the next
15
 * paragraph) shall be included in all copies or substantial portions of the
16
 * Software.
17
 *
18
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21
 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
22
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24
 * DEALINGS IN THE SOFTWARE.
25
 *
26
 * Authors:
27
 *   Rickard E. (Rik) Faith <faith@valinux.com>
28
 *   Kevin E. Martin <martin@valinux.com>
29
 *   Gareth Hughes <gareth@valinux.com>
30
 *
31
 */
32
 
33
#ifndef __RADEON_DRV_H__
34
#define __RADEON_DRV_H__
35
 
36
typedef struct drm_radeon_freelist {
37
        unsigned int age;
38
        drm_buf_t *buf;
39
        struct drm_radeon_freelist *next;
40
        struct drm_radeon_freelist *prev;
41
} drm_radeon_freelist_t;
42
 
43
typedef struct drm_radeon_ring_buffer {
44
        u32 *start;
45
        u32 *end;
46
        int size;
47
        int size_l2qw;
48
 
49
        volatile u32 *head;
50
        u32 tail;
51
        u32 tail_mask;
52
        int space;
53
} drm_radeon_ring_buffer_t;
54
 
55
typedef struct drm_radeon_depth_clear_t {
56
        u32 rb3d_cntl;
57
        u32 rb3d_zstencilcntl;
58
        u32 se_cntl;
59
} drm_radeon_depth_clear_t;
60
 
61
typedef struct drm_radeon_private {
62
        drm_radeon_ring_buffer_t ring;
63
        drm_radeon_sarea_t *sarea_priv;
64
 
65
        int agp_size;
66
        u32 agp_vm_start;
67
        u32 agp_buffers_offset;
68
 
69
        int cp_mode;
70
        int cp_running;
71
 
72
        drm_radeon_freelist_t *head;
73
        drm_radeon_freelist_t *tail;
74
/* FIXME: ROTATE_BUFS is a hask to cycle through bufs until freelist
75
   code is used.  Note this hides a problem with the scratch register
76
   (used to keep track of last buffer completed) being written to before
77
   the last buffer has actually completed rendering. */
78
#define ROTATE_BUFS 1
79
#if ROTATE_BUFS
80
        int last_buf;
81
#endif
82
        volatile u32 *scratch;
83
 
84
        int usec_timeout;
85
        int is_pci;
86
 
87
        atomic_t idle_count;
88
 
89
        int page_flipping;
90
        int current_page;
91
        u32 crtc_offset;
92
        u32 crtc_offset_cntl;
93
 
94
        unsigned int color_fmt;
95
        unsigned int front_offset;
96
        unsigned int front_pitch;
97
        unsigned int back_offset;
98
        unsigned int back_pitch;
99
 
100
        unsigned int depth_fmt;
101
        unsigned int depth_offset;
102
        unsigned int depth_pitch;
103
 
104
        u32 front_pitch_offset;
105
        u32 back_pitch_offset;
106
        u32 depth_pitch_offset;
107
 
108
        drm_radeon_depth_clear_t depth_clear;
109
 
110
        drm_map_t *sarea;
111
        drm_map_t *fb;
112
        drm_map_t *mmio;
113
        drm_map_t *cp_ring;
114
        drm_map_t *ring_rptr;
115
        drm_map_t *buffers;
116
        drm_map_t *agp_textures;
117
} drm_radeon_private_t;
118
 
119
typedef struct drm_radeon_buf_priv {
120
        u32 age;
121
        int prim;
122
        int discard;
123
        int dispatched;
124
        drm_radeon_freelist_t *list_entry;
125
} drm_radeon_buf_priv_t;
126
 
127
                                /* radeon_drv.c */
128
extern int  radeon_version( struct inode *inode, struct file *filp,
129
                            unsigned int cmd, unsigned long arg );
130
extern int  radeon_open( struct inode *inode, struct file *filp );
131
extern int  radeon_release( struct inode *inode, struct file *filp );
132
extern int  radeon_ioctl( struct inode *inode, struct file *filp,
133
                          unsigned int cmd, unsigned long arg );
134
extern int  radeon_lock( struct inode *inode, struct file *filp,
135
                         unsigned int cmd, unsigned long arg );
136
extern int  radeon_unlock( struct inode *inode, struct file *filp,
137
                           unsigned int cmd, unsigned long arg );
138
 
139
                                /* radeon_cp.c */
140
extern int radeon_cp_init( struct inode *inode, struct file *filp,
141
                           unsigned int cmd, unsigned long arg );
142
extern int radeon_cp_start( struct inode *inode, struct file *filp,
143
                            unsigned int cmd, unsigned long arg );
144
extern int radeon_cp_stop( struct inode *inode, struct file *filp,
145
                           unsigned int cmd, unsigned long arg );
146
extern int radeon_cp_reset( struct inode *inode, struct file *filp,
147
                            unsigned int cmd, unsigned long arg );
148
extern int radeon_cp_idle( struct inode *inode, struct file *filp,
149
                           unsigned int cmd, unsigned long arg );
150
extern int radeon_engine_reset( struct inode *inode, struct file *filp,
151
                                unsigned int cmd, unsigned long arg );
152
extern int radeon_fullscreen( struct inode *inode, struct file *filp,
153
                              unsigned int cmd, unsigned long arg );
154
extern int radeon_cp_buffers( struct inode *inode, struct file *filp,
155
                              unsigned int cmd, unsigned long arg );
156
 
157
extern void radeon_freelist_reset( drm_device_t *dev );
158
extern drm_buf_t *radeon_freelist_get( drm_device_t *dev );
159
 
160
extern int radeon_wait_ring( drm_radeon_private_t *dev_priv, int n );
161
extern void radeon_update_ring_snapshot( drm_radeon_private_t *dev_priv );
162
 
163
extern int radeon_do_cp_idle( drm_radeon_private_t *dev_priv );
164
extern int radeon_do_cleanup_pageflip( drm_device_t *dev );
165
 
166
                                /* radeon_state.c */
167
extern int radeon_cp_clear( struct inode *inode, struct file *filp,
168
                            unsigned int cmd, unsigned long arg );
169
extern int radeon_cp_swap( struct inode *inode, struct file *filp,
170
                           unsigned int cmd, unsigned long arg );
171
extern int radeon_cp_vertex( struct inode *inode, struct file *filp,
172
                             unsigned int cmd, unsigned long arg );
173
extern int radeon_cp_indices( struct inode *inode, struct file *filp,
174
                              unsigned int cmd, unsigned long arg );
175
extern int radeon_cp_blit( struct inode *inode, struct file *filp,
176
                           unsigned int cmd, unsigned long arg );
177
extern int radeon_cp_stipple( struct inode *inode, struct file *filp,
178
                              unsigned int cmd, unsigned long arg );
179
extern int radeon_cp_indirect( struct inode *inode, struct file *filp,
180
                               unsigned int cmd, unsigned long arg );
181
 
182
                                /* radeon_bufs.c */
183
extern int radeon_addbufs(struct inode *inode, struct file *filp,
184
                          unsigned int cmd, unsigned long arg);
185
extern int radeon_mapbufs(struct inode *inode, struct file *filp,
186
                          unsigned int cmd, unsigned long arg);
187
 
188
                                /* radeon_context.c */
189
extern int  radeon_resctx(struct inode *inode, struct file *filp,
190
                          unsigned int cmd, unsigned long arg);
191
extern int  radeon_addctx(struct inode *inode, struct file *filp,
192
                          unsigned int cmd, unsigned long arg);
193
extern int  radeon_modctx(struct inode *inode, struct file *filp,
194
                          unsigned int cmd, unsigned long arg);
195
extern int  radeon_getctx(struct inode *inode, struct file *filp,
196
                          unsigned int cmd, unsigned long arg);
197
extern int  radeon_switchctx(struct inode *inode, struct file *filp,
198
                             unsigned int cmd, unsigned long arg);
199
extern int  radeon_newctx(struct inode *inode, struct file *filp,
200
                          unsigned int cmd, unsigned long arg);
201
extern int  radeon_rmctx(struct inode *inode, struct file *filp,
202
                         unsigned int cmd, unsigned long arg);
203
 
204
extern int  radeon_context_switch(drm_device_t *dev, int old, int new);
205
extern int  radeon_context_switch_complete(drm_device_t *dev, int new);
206
 
207
 
208
/* Register definitions, register access macros and drmAddMap constants
209
 * for Radeon kernel driver.
210
 */
211
 
212
#define RADEON_AUX_SCISSOR_CNTL         0x26f0
213
#       define RADEON_EXCLUSIVE_SCISSOR_0       (1 << 24)
214
#       define RADEON_EXCLUSIVE_SCISSOR_1       (1 << 25)
215
#       define RADEON_EXCLUSIVE_SCISSOR_2       (1 << 26)
216
#       define RADEON_SCISSOR_0_ENABLE          (1 << 28)
217
#       define RADEON_SCISSOR_1_ENABLE          (1 << 29)
218
#       define RADEON_SCISSOR_2_ENABLE          (1 << 30)
219
 
220
#define RADEON_BUS_CNTL                 0x0030
221
#       define RADEON_BUS_MASTER_DIS            (1 << 6)
222
 
223
#define RADEON_CLOCK_CNTL_DATA          0x000c
224
#       define RADEON_PLL_WR_EN                 (1 << 7)
225
#define RADEON_CLOCK_CNTL_INDEX         0x0008
226
#define RADEON_CONFIG_APER_SIZE         0x0108
227
#define RADEON_CRTC_OFFSET              0x0224
228
#define RADEON_CRTC_OFFSET_CNTL         0x0228
229
#       define RADEON_CRTC_TILE_EN              (1 << 15)
230
#       define RADEON_CRTC_OFFSET_FLIP_CNTL     (1 << 16)
231
 
232
#define RADEON_RB3D_COLORPITCH          0x1c48
233
#define RADEON_RB3D_DEPTHCLEARVALUE     0x1c30
234
#define RADEON_RB3D_DEPTHXY_OFFSET      0x1c60
235
 
236
#define RADEON_DP_GUI_MASTER_CNTL       0x146c
237
#       define RADEON_GMC_SRC_PITCH_OFFSET_CNTL (1 << 0)
238
#       define RADEON_GMC_DST_PITCH_OFFSET_CNTL (1 << 1)
239
#       define RADEON_GMC_BRUSH_SOLID_COLOR     (13 << 4)
240
#       define RADEON_GMC_BRUSH_NONE            (15 << 4)
241
#       define RADEON_GMC_DST_16BPP             (4 << 8)
242
#       define RADEON_GMC_DST_24BPP             (5 << 8)
243
#       define RADEON_GMC_DST_32BPP             (6 << 8)
244
#       define RADEON_GMC_DST_DATATYPE_SHIFT    8
245
#       define RADEON_GMC_SRC_DATATYPE_COLOR    (3 << 12)
246
#       define RADEON_DP_SRC_SOURCE_MEMORY      (2 << 24)
247
#       define RADEON_DP_SRC_SOURCE_HOST_DATA   (3 << 24)
248
#       define RADEON_GMC_CLR_CMP_CNTL_DIS      (1 << 28)
249
#       define RADEON_GMC_WR_MSK_DIS            (1 << 30)
250
#       define RADEON_ROP3_S                    0x00cc0000
251
#       define RADEON_ROP3_P                    0x00f00000
252
#define RADEON_DP_WRITE_MASK            0x16cc
253
#define RADEON_DST_PITCH_OFFSET         0x142c
254
#define RADEON_DST_PITCH_OFFSET_C       0x1c80
255
#       define RADEON_DST_TILE_LINEAR           (0 << 30)
256
#       define RADEON_DST_TILE_MACRO            (1 << 30)
257
#       define RADEON_DST_TILE_MICRO            (2 << 30)
258
#       define RADEON_DST_TILE_BOTH             (3 << 30)
259
 
260
#define RADEON_SCRATCH_REG0             0x15e0
261
#define RADEON_SCRATCH_REG1             0x15e4
262
#define RADEON_SCRATCH_REG2             0x15e8
263
#define RADEON_SCRATCH_REG3             0x15ec
264
#define RADEON_SCRATCH_REG4             0x15f0
265
#define RADEON_SCRATCH_REG5             0x15f4
266
#define RADEON_SCRATCH_UMSK             0x0770
267
#define RADEON_SCRATCH_ADDR             0x0774
268
 
269
#define RADEON_HOST_PATH_CNTL           0x0130
270
#       define RADEON_HDP_SOFT_RESET            (1 << 26)
271
#       define RADEON_HDP_WC_TIMEOUT_MASK       (7 << 28)
272
#       define RADEON_HDP_WC_TIMEOUT_28BCLK     (7 << 28)
273
 
274
#define RADEON_ISYNC_CNTL               0x1724
275
#       define RADEON_ISYNC_ANY2D_IDLE3D        (1 << 0)
276
#       define RADEON_ISYNC_ANY3D_IDLE2D        (1 << 1)
277
#       define RADEON_ISYNC_TRIG2D_IDLE3D       (1 << 2)
278
#       define RADEON_ISYNC_TRIG3D_IDLE2D       (1 << 3)
279
#       define RADEON_ISYNC_WAIT_IDLEGUI        (1 << 4)
280
#       define RADEON_ISYNC_CPSCRATCH_IDLEGUI   (1 << 5)
281
 
282
#define RADEON_MC_AGP_LOCATION          0x014c
283
#define RADEON_MC_FB_LOCATION           0x0148
284
#define RADEON_MCLK_CNTL                0x0012
285
 
286
#define RADEON_PP_BORDER_COLOR_0        0x1d40
287
#define RADEON_PP_BORDER_COLOR_1        0x1d44
288
#define RADEON_PP_BORDER_COLOR_2        0x1d48
289
#define RADEON_PP_CNTL                  0x1c38
290
#       define RADEON_SCISSOR_ENABLE            (1 <<  1)
291
#define RADEON_PP_LUM_MATRIX            0x1d00
292
#define RADEON_PP_MISC                  0x1c14
293
#define RADEON_PP_ROT_MATRIX_0          0x1d58
294
#define RADEON_PP_TXFILTER_0            0x1c54
295
#define RADEON_PP_TXFILTER_1            0x1c6c
296
#define RADEON_PP_TXFILTER_2            0x1c84
297
 
298
#define RADEON_RB2D_DSTCACHE_CTLSTAT    0x342c
299
#       define RADEON_RB2D_DC_FLUSH             (3 << 0)
300
#       define RADEON_RB2D_DC_FREE              (3 << 2)
301
#       define RADEON_RB2D_DC_FLUSH_ALL         0xf
302
#       define RADEON_RB2D_DC_BUSY              (1 << 31)
303
#define RADEON_RB3D_CNTL                0x1c3c
304
#       define RADEON_ALPHA_BLEND_ENABLE        (1 << 0)
305
#       define RADEON_PLANE_MASK_ENABLE         (1 << 1)
306
#       define RADEON_DITHER_ENABLE             (1 << 2)
307
#       define RADEON_ROUND_ENABLE              (1 << 3)
308
#       define RADEON_SCALE_DITHER_ENABLE       (1 << 4)
309
#       define RADEON_DITHER_INIT               (1 << 5)
310
#       define RADEON_ROP_ENABLE                (1 << 6)
311
#       define RADEON_STENCIL_ENABLE            (1 << 7)
312
#       define RADEON_Z_ENABLE                  (1 << 8)
313
#       define RADEON_DEPTH_XZ_OFFEST_ENABLE    (1 << 9)
314
#       define RADEON_ZBLOCK8                   (0 << 15)
315
#       define RADEON_ZBLOCK16                  (1 << 15)
316
#define RADEON_RB3D_DEPTHOFFSET         0x1c24
317
#define RADEON_RB3D_PLANEMASK           0x1d84
318
#define RADEON_RB3D_STENCILREFMASK      0x1d7c
319
#define RADEON_RB3D_ZCACHE_MODE         0x3250
320
#define RADEON_RB3D_ZCACHE_CTLSTAT      0x3254
321
#       define RADEON_RB3D_ZC_FLUSH             (1 << 0)
322
#       define RADEON_RB3D_ZC_FREE              (1 << 2)
323
#       define RADEON_RB3D_ZC_FLUSH_ALL         0x5
324
#       define RADEON_RB3D_ZC_BUSY              (1 << 31)
325
#define RADEON_RB3D_ZSTENCILCNTL        0x1c2c
326
#       define RADEON_Z_TEST_MASK               (7 << 4)
327
#       define RADEON_Z_TEST_ALWAYS             (7 << 4)
328
#       define RADEON_STENCIL_TEST_ALWAYS       (7 << 12)
329
#       define RADEON_STENCIL_S_FAIL_KEEP       (0 << 16)
330
#       define RADEON_STENCIL_ZPASS_KEEP        (0 << 20)
331
#       define RADEON_STENCIL_ZFAIL_KEEP        (0 << 20)
332
#       define RADEON_Z_WRITE_ENABLE            (1 << 30)
333
#define RADEON_RBBM_SOFT_RESET          0x00f0
334
#       define RADEON_SOFT_RESET_CP             (1 <<  0)
335
#       define RADEON_SOFT_RESET_HI             (1 <<  1)
336
#       define RADEON_SOFT_RESET_SE             (1 <<  2)
337
#       define RADEON_SOFT_RESET_RE             (1 <<  3)
338
#       define RADEON_SOFT_RESET_PP             (1 <<  4)
339
#       define RADEON_SOFT_RESET_E2             (1 <<  5)
340
#       define RADEON_SOFT_RESET_RB             (1 <<  6)
341
#       define RADEON_SOFT_RESET_HDP            (1 <<  7)
342
#define RADEON_RBBM_STATUS              0x0e40
343
#       define RADEON_RBBM_FIFOCNT_MASK         0x007f
344
#       define RADEON_RBBM_ACTIVE               (1 << 31)
345
#define RADEON_RE_LINE_PATTERN          0x1cd0
346
#define RADEON_RE_MISC                  0x26c4
347
#define RADEON_RE_TOP_LEFT              0x26c0
348
#define RADEON_RE_WIDTH_HEIGHT          0x1c44
349
#define RADEON_RE_STIPPLE_ADDR          0x1cc8
350
#define RADEON_RE_STIPPLE_DATA          0x1ccc
351
 
352
#define RADEON_SCISSOR_TL_0             0x1cd8
353
#define RADEON_SCISSOR_BR_0             0x1cdc
354
#define RADEON_SCISSOR_TL_1             0x1ce0
355
#define RADEON_SCISSOR_BR_1             0x1ce4
356
#define RADEON_SCISSOR_TL_2             0x1ce8
357
#define RADEON_SCISSOR_BR_2             0x1cec
358
#define RADEON_SE_COORD_FMT             0x1c50
359
#define RADEON_SE_CNTL                  0x1c4c
360
#       define RADEON_FFACE_CULL_CW             (0 << 0)
361
#       define RADEON_BFACE_SOLID               (3 << 1)
362
#       define RADEON_FFACE_SOLID               (3 << 3)
363
#       define RADEON_FLAT_SHADE_VTX_LAST       (3 << 6)
364
#       define RADEON_DIFFUSE_SHADE_FLAT        (1 << 8)
365
#       define RADEON_DIFFUSE_SHADE_GOURAUD     (2 << 8)
366
#       define RADEON_ALPHA_SHADE_FLAT          (1 << 10)
367
#       define RADEON_ALPHA_SHADE_GOURAUD       (2 << 10)
368
#       define RADEON_SPECULAR_SHADE_FLAT       (1 << 12)
369
#       define RADEON_SPECULAR_SHADE_GOURAUD    (2 << 12)
370
#       define RADEON_FOG_SHADE_FLAT            (1 << 14)
371
#       define RADEON_FOG_SHADE_GOURAUD         (2 << 14)
372
#       define RADEON_VPORT_XY_XFORM_ENABLE     (1 << 24)
373
#       define RADEON_VPORT_Z_XFORM_ENABLE      (1 << 25)
374
#       define RADEON_VTX_PIX_CENTER_OGL        (1 << 27)
375
#       define RADEON_ROUND_MODE_TRUNC          (0 << 28)
376
#       define RADEON_ROUND_PREC_8TH_PIX        (1 << 30)
377
#define RADEON_SE_CNTL_STATUS           0x2140
378
#define RADEON_SE_LINE_WIDTH            0x1db8
379
#define RADEON_SE_VPORT_XSCALE          0x1d98
380
#define RADEON_SURFACE_ACCESS_FLAGS     0x0bf8
381
#define RADEON_SURFACE_ACCESS_CLR       0x0bfc
382
#define RADEON_SURFACE_CNTL             0x0b00
383
#       define RADEON_SURF_TRANSLATION_DIS      (1 << 8)
384
#       define RADEON_NONSURF_AP0_SWP_MASK      (3 << 20)
385
#       define RADEON_NONSURF_AP0_SWP_LITTLE    (0 << 20)
386
#       define RADEON_NONSURF_AP0_SWP_BIG16     (1 << 20)
387
#       define RADEON_NONSURF_AP0_SWP_BIG32     (2 << 20)
388
#       define RADEON_NONSURF_AP1_SWP_MASK      (3 << 22)
389
#       define RADEON_NONSURF_AP1_SWP_LITTLE    (0 << 22)
390
#       define RADEON_NONSURF_AP1_SWP_BIG16     (1 << 22)
391
#       define RADEON_NONSURF_AP1_SWP_BIG32     (2 << 22)
392
#define RADEON_SURFACE0_INFO            0x0b0c
393
#       define RADEON_SURF_PITCHSEL_MASK        (0x1ff << 0)
394
#       define RADEON_SURF_TILE_MODE_MASK       (3 << 16)
395
#       define RADEON_SURF_TILE_MODE_MACRO      (0 << 16)
396
#       define RADEON_SURF_TILE_MODE_MICRO      (1 << 16)
397
#       define RADEON_SURF_TILE_MODE_32BIT_Z    (2 << 16)
398
#       define RADEON_SURF_TILE_MODE_16BIT_Z    (3 << 16)
399
#define RADEON_SURFACE0_LOWER_BOUND     0x0b04
400
#define RADEON_SURFACE0_UPPER_BOUND     0x0b08
401
#define RADEON_SURFACE1_INFO            0x0b1c
402
#define RADEON_SURFACE1_LOWER_BOUND     0x0b14
403
#define RADEON_SURFACE1_UPPER_BOUND     0x0b18
404
#define RADEON_SURFACE2_INFO            0x0b2c
405
#define RADEON_SURFACE2_LOWER_BOUND     0x0b24
406
#define RADEON_SURFACE2_UPPER_BOUND     0x0b28
407
#define RADEON_SURFACE3_INFO            0x0b3c
408
#define RADEON_SURFACE3_LOWER_BOUND     0x0b34
409
#define RADEON_SURFACE3_UPPER_BOUND     0x0b38
410
#define RADEON_SURFACE4_INFO            0x0b4c
411
#define RADEON_SURFACE4_LOWER_BOUND     0x0b44
412
#define RADEON_SURFACE4_UPPER_BOUND     0x0b48
413
#define RADEON_SURFACE5_INFO            0x0b5c
414
#define RADEON_SURFACE5_LOWER_BOUND     0x0b54
415
#define RADEON_SURFACE5_UPPER_BOUND     0x0b58
416
#define RADEON_SURFACE6_INFO            0x0b6c
417
#define RADEON_SURFACE6_LOWER_BOUND     0x0b64
418
#define RADEON_SURFACE6_UPPER_BOUND     0x0b68
419
#define RADEON_SURFACE7_INFO            0x0b7c
420
#define RADEON_SURFACE7_LOWER_BOUND     0x0b74
421
#define RADEON_SURFACE7_UPPER_BOUND     0x0b78
422
#define RADEON_SW_SEMAPHORE             0x013c
423
 
424
#define RADEON_WAIT_UNTIL               0x1720
425
#       define RADEON_WAIT_CRTC_PFLIP           (1 << 0)
426
#       define RADEON_WAIT_2D_IDLECLEAN         (1 << 16)
427
#       define RADEON_WAIT_3D_IDLECLEAN         (1 << 17)
428
#       define RADEON_WAIT_HOST_IDLECLEAN       (1 << 18)
429
 
430
#define RADEON_RB3D_ZMASKOFFSET         0x1c34
431
#define RADEON_RB3D_ZSTENCILCNTL        0x1c2c
432
#       define RADEON_DEPTH_FORMAT_16BIT_INT_Z  (0 << 0)
433
#       define RADEON_DEPTH_FORMAT_24BIT_INT_Z  (2 << 0)
434
 
435
 
436
/* CP registers */
437
#define RADEON_CP_ME_RAM_ADDR           0x07d4
438
#define RADEON_CP_ME_RAM_RADDR          0x07d8
439
#define RADEON_CP_ME_RAM_DATAH          0x07dc
440
#define RADEON_CP_ME_RAM_DATAL          0x07e0
441
 
442
#define RADEON_CP_RB_BASE               0x0700
443
#define RADEON_CP_RB_CNTL               0x0704
444
#define RADEON_CP_RB_RPTR_ADDR          0x070c
445
#define RADEON_CP_RB_RPTR               0x0710
446
#define RADEON_CP_RB_WPTR               0x0714
447
 
448
#define RADEON_CP_RB_WPTR_DELAY         0x0718
449
#       define RADEON_PRE_WRITE_TIMER_SHIFT     0
450
#       define RADEON_PRE_WRITE_LIMIT_SHIFT     23
451
 
452
#define RADEON_CP_IB_BASE               0x0738
453
 
454
#define RADEON_CP_CSQ_CNTL              0x0740
455
#       define RADEON_CSQ_CNT_PRIMARY_MASK      (0xff << 0)
456
#       define RADEON_CSQ_PRIDIS_INDDIS         (0 << 28)
457
#       define RADEON_CSQ_PRIPIO_INDDIS         (1 << 28)
458
#       define RADEON_CSQ_PRIBM_INDDIS          (2 << 28)
459
#       define RADEON_CSQ_PRIPIO_INDBM          (3 << 28)
460
#       define RADEON_CSQ_PRIBM_INDBM           (4 << 28)
461
#       define RADEON_CSQ_PRIPIO_INDPIO         (15 << 28)
462
 
463
#define RADEON_AIC_CNTL                 0x01d0
464
#       define RADEON_PCIGART_TRANSLATE_EN      (1 << 0)
465
 
466
/* CP command packets */
467
#define RADEON_CP_PACKET0               0x00000000
468
#       define RADEON_ONE_REG_WR                (1 << 15)
469
#define RADEON_CP_PACKET1               0x40000000
470
#define RADEON_CP_PACKET2               0x80000000
471
#define RADEON_CP_PACKET3               0xC0000000
472
#       define RADEON_3D_RNDR_GEN_INDX_PRIM     0x00002300
473
#       define RADEON_WAIT_FOR_IDLE             0x00002600
474
#       define RADEON_3D_DRAW_IMMD              0x00002900
475
#       define RADEON_3D_CLEAR_ZMASK            0x00003200
476
#       define RADEON_CNTL_HOSTDATA_BLT         0x00009400
477
#       define RADEON_CNTL_PAINT_MULTI          0x00009A00
478
#       define RADEON_CNTL_BITBLT_MULTI         0x00009B00
479
 
480
#define RADEON_CP_PACKET_MASK           0xC0000000
481
#define RADEON_CP_PACKET_COUNT_MASK     0x3fff0000
482
#define RADEON_CP_PACKET0_REG_MASK      0x000007ff
483
#define RADEON_CP_PACKET1_REG0_MASK     0x000007ff
484
#define RADEON_CP_PACKET1_REG1_MASK     0x003ff800
485
 
486
#define RADEON_VTX_Z_PRESENT                    (1 << 31)
487
 
488
#define RADEON_PRIM_TYPE_NONE                   (0 << 0)
489
#define RADEON_PRIM_TYPE_POINT                  (1 << 0)
490
#define RADEON_PRIM_TYPE_LINE                   (2 << 0)
491
#define RADEON_PRIM_TYPE_LINE_STRIP             (3 << 0)
492
#define RADEON_PRIM_TYPE_TRI_LIST               (4 << 0)
493
#define RADEON_PRIM_TYPE_TRI_FAN                (5 << 0)
494
#define RADEON_PRIM_TYPE_TRI_STRIP              (6 << 0)
495
#define RADEON_PRIM_TYPE_TRI_TYPE2              (7 << 0)
496
#define RADEON_PRIM_TYPE_RECT_LIST              (8 << 0)
497
#define RADEON_PRIM_TYPE_3VRT_POINT_LIST        (9 << 0)
498
#define RADEON_PRIM_TYPE_3VRT_LINE_LIST         (10 << 0)
499
#define RADEON_PRIM_WALK_IND                    (1 << 4)
500
#define RADEON_PRIM_WALK_LIST                   (2 << 4)
501
#define RADEON_PRIM_WALK_RING                   (3 << 4)
502
#define RADEON_COLOR_ORDER_BGRA                 (0 << 6)
503
#define RADEON_COLOR_ORDER_RGBA                 (1 << 6)
504
#define RADEON_MAOS_ENABLE                      (1 << 7)
505
#define RADEON_VTX_FMT_R128_MODE                (0 << 8)
506
#define RADEON_VTX_FMT_RADEON_MODE              (1 << 8)
507
#define RADEON_NUM_VERTICES_SHIFT               16
508
 
509
#define RADEON_COLOR_FORMAT_CI8         2
510
#define RADEON_COLOR_FORMAT_ARGB1555    3
511
#define RADEON_COLOR_FORMAT_RGB565      4
512
#define RADEON_COLOR_FORMAT_ARGB8888    6
513
#define RADEON_COLOR_FORMAT_RGB332      7
514
#define RADEON_COLOR_FORMAT_RGB8        9
515
#define RADEON_COLOR_FORMAT_ARGB4444    15
516
 
517
#define RADEON_TXF_8BPP_I               0
518
#define RADEON_TXF_16BPP_AI88           1
519
#define RADEON_TXF_8BPP_RGB332          2
520
#define RADEON_TXF_16BPP_ARGB1555       3
521
#define RADEON_TXF_16BPP_RGB565         4
522
#define RADEON_TXF_16BPP_ARGB4444       5
523
#define RADEON_TXF_32BPP_ARGB8888       6
524
#define RADEON_TXF_32BPP_RGBA8888       7
525
 
526
/* Constants */
527
#define RADEON_MAX_USEC_TIMEOUT         100000  /* 100 ms */
528
 
529
#define RADEON_LAST_FRAME_REG           RADEON_SCRATCH_REG0
530
#define RADEON_LAST_DISPATCH_REG        RADEON_SCRATCH_REG1
531
#define RADEON_LAST_CLEAR_REG           RADEON_SCRATCH_REG2
532
#define RADEON_LAST_DISPATCH            1
533
 
534
#define RADEON_MAX_VB_AGE               0x7fffffff
535
#define RADEON_MAX_VB_VERTS             (0xffff)
536
 
537
 
538
#define RADEON_BASE(reg)        ((u32)(dev_priv->mmio->handle))
539
#define RADEON_ADDR(reg)        (RADEON_BASE(reg) + reg)
540
 
541
#define RADEON_DEREF(reg)       *(__volatile__ u32 *)RADEON_ADDR(reg)
542
#define RADEON_READ(reg)        RADEON_DEREF(reg)
543
#define RADEON_WRITE(reg,val)   do { RADEON_DEREF(reg) = val; } while (0)
544
 
545
#define RADEON_DEREF8(reg)      *(__volatile__ u8 *)RADEON_ADDR(reg)
546
#define RADEON_READ8(reg)       RADEON_DEREF8(reg)
547
#define RADEON_WRITE8(reg,val)  do { RADEON_DEREF8(reg) = val; } while (0)
548
 
549
#define RADEON_WRITE_PLL(addr,val)                                            \
550
do {                                                                          \
551
        RADEON_WRITE8(RADEON_CLOCK_CNTL_INDEX,                                \
552
                      ((addr) & 0x1f) | RADEON_PLL_WR_EN);                    \
553
        RADEON_WRITE(RADEON_CLOCK_CNTL_DATA, (val));                          \
554
} while (0)
555
 
556
extern int RADEON_READ_PLL(drm_device_t *dev, int addr);
557
 
558
 
559
 
560
#define CP_PACKET0( reg, n )                                            \
561
        (RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2))
562
#define CP_PACKET0_TABLE( reg, n )                                      \
563
        (RADEON_CP_PACKET0 | RADEON_ONE_REG_WR | ((n) << 16) | ((reg) >> 2))
564
#define CP_PACKET1( reg0, reg1 )                                        \
565
        (RADEON_CP_PACKET1 | (((reg1) >> 2) << 15) | ((reg0) >> 2))
566
#define CP_PACKET2()                                                    \
567
        (RADEON_CP_PACKET2)
568
#define CP_PACKET3( pkt, n )                                            \
569
        (RADEON_CP_PACKET3 | (pkt) | ((n) << 16))
570
 
571
 
572
/* ================================================================
573
 * Engine control helper macros
574
 */
575
 
576
#define RADEON_WAIT_UNTIL_2D_IDLE()                                     \
577
do {                                                                    \
578
        OUT_RING( CP_PACKET0( RADEON_WAIT_UNTIL, 0 ) );                  \
579
        OUT_RING( (RADEON_WAIT_2D_IDLECLEAN |                           \
580
                   RADEON_WAIT_HOST_IDLECLEAN) );                       \
581
} while (0)
582
 
583
#define RADEON_WAIT_UNTIL_3D_IDLE()                                     \
584
do {                                                                    \
585
        OUT_RING( CP_PACKET0( RADEON_WAIT_UNTIL, 0 ) );                  \
586
        OUT_RING( (RADEON_WAIT_3D_IDLECLEAN |                           \
587
                   RADEON_WAIT_HOST_IDLECLEAN) );                       \
588
} while (0)
589
 
590
#define RADEON_WAIT_UNTIL_IDLE()                                        \
591
do {                                                                    \
592
        OUT_RING( CP_PACKET0( RADEON_WAIT_UNTIL, 0 ) );                  \
593
        OUT_RING( (RADEON_WAIT_2D_IDLECLEAN |                           \
594
                   RADEON_WAIT_3D_IDLECLEAN |                           \
595
                   RADEON_WAIT_HOST_IDLECLEAN) );                       \
596
} while (0)
597
 
598
#define RADEON_WAIT_UNTIL_PAGE_FLIPPED()                                \
599
do {                                                                    \
600
        OUT_RING( CP_PACKET0( RADEON_WAIT_UNTIL, 0 ) );                  \
601
        OUT_RING( RADEON_WAIT_CRTC_PFLIP );                             \
602
} while (0)
603
 
604
#define RADEON_FLUSH_CACHE()                                            \
605
do {                                                                    \
606
        OUT_RING( CP_PACKET0( RADEON_RB2D_DSTCACHE_CTLSTAT, 0 ) );       \
607
        OUT_RING( RADEON_RB2D_DC_FLUSH );                               \
608
} while (0)
609
 
610
#define RADEON_PURGE_CACHE()                                            \
611
do {                                                                    \
612
        OUT_RING( CP_PACKET0( RADEON_RB2D_DSTCACHE_CTLSTAT, 0 ) );       \
613
        OUT_RING( RADEON_RB2D_DC_FLUSH_ALL );                           \
614
} while (0)
615
 
616
#define RADEON_FLUSH_ZCACHE()                                           \
617
do {                                                                    \
618
        OUT_RING( CP_PACKET0( RADEON_RB3D_ZCACHE_CTLSTAT, 0 ) ); \
619
        OUT_RING( RADEON_RB3D_ZC_FLUSH );                               \
620
} while (0)
621
 
622
#define RADEON_PURGE_ZCACHE()                                           \
623
do {                                                                    \
624
        OUT_RING( CP_PACKET0( RADEON_RB3D_ZCACHE_CTLSTAT, 0 ) ); \
625
        OUT_RING( RADEON_RB3D_ZC_FLUSH_ALL );                           \
626
} while (0)
627
 
628
 
629
/* ================================================================
630
 * Misc helper macros
631
 */
632
 
633
#define VB_AGE_CHECK_WITH_RET( dev_priv )                               \
634
do {                                                                    \
635
        drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;          \
636
        if ( sarea_priv->last_dispatch >= RADEON_MAX_VB_AGE ) {         \
637
                int __ret = radeon_do_cp_idle( dev_priv );              \
638
                if ( __ret < 0 ) return __ret;                           \
639
                sarea_priv->last_dispatch = 0;                           \
640
                radeon_freelist_reset( dev );                           \
641
        }                                                               \
642
} while (0)
643
 
644
#define RADEON_DISPATCH_AGE( age )                                      \
645
do {                                                                    \
646
        OUT_RING( CP_PACKET0( RADEON_LAST_DISPATCH_REG, 0 ) );           \
647
        OUT_RING( age );                                                \
648
} while (0)
649
 
650
#define RADEON_FRAME_AGE( age )                                         \
651
do {                                                                    \
652
        OUT_RING( CP_PACKET0( RADEON_LAST_FRAME_REG, 0 ) );              \
653
        OUT_RING( age );                                                \
654
} while (0)
655
 
656
#define RADEON_CLEAR_AGE( age )                                         \
657
do {                                                                    \
658
        OUT_RING( CP_PACKET0( RADEON_LAST_CLEAR_REG, 0 ) );              \
659
        OUT_RING( age );                                                \
660
} while (0)
661
 
662
 
663
/* ================================================================
664
 * Ring control
665
 */
666
 
667
#define radeon_flush_write_combine()    mb()
668
 
669
 
670
#define RADEON_VERBOSE  0
671
 
672
#define RING_LOCALS     int write; unsigned int mask; volatile u32 *ring;
673
 
674
#define BEGIN_RING( n ) do {                                            \
675
        if ( RADEON_VERBOSE ) {                                         \
676
                DRM_INFO( "BEGIN_RING( %d ) in %s\n",                   \
677
                           n, __FUNCTION__ );                           \
678
        }                                                               \
679
        if ( dev_priv->ring.space < (n) * sizeof(u32) ) {               \
680
                radeon_wait_ring( dev_priv, (n) * sizeof(u32) );        \
681
        }                                                               \
682
        dev_priv->ring.space -= (n) * sizeof(u32);                      \
683
        ring = dev_priv->ring.start;                                    \
684
        write = dev_priv->ring.tail;                                    \
685
        mask = dev_priv->ring.tail_mask;                                \
686
} while (0)
687
 
688
#define ADVANCE_RING() do {                                             \
689
        if ( RADEON_VERBOSE ) {                                         \
690
                DRM_INFO( "ADVANCE_RING() tail=0x%06x wr=0x%06x\n",     \
691
                          write, dev_priv->ring.tail );                 \
692
        }                                                               \
693
        radeon_flush_write_combine();                                   \
694
        dev_priv->ring.tail = write;                                    \
695
        RADEON_WRITE( RADEON_CP_RB_WPTR, write );                       \
696
} while (0)
697
 
698
#define OUT_RING( x ) do {                                              \
699
        if ( RADEON_VERBOSE ) {                                         \
700
                DRM_INFO( "   OUT_RING( 0x%08x ) at 0x%x\n",            \
701
                           (unsigned int)(x), write );                  \
702
        }                                                               \
703
        ring[write++] = (x);                                            \
704
        write &= mask;                                                  \
705
} while (0)
706
 
707
#define RADEON_PERFORMANCE_BOXES        0
708
 
709
#endif /* __RADEON_DRV_H__ */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.