Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
813 serge 1
 
808 serge 2
#include "rhd_regs.h"
3
4
 
813 serge 5
#define IS_R500_3D   1
6
7
 
868 serge 8
813 serge 9
 
808 serge 10
    RHD_UNKNOWN = 0,
11
    RHD_R300,
812 serge 12
    RHD_R350,
13
    RHD_RV350,
14
    RHD_RV370,
15
    RHD_RV380,
16
    /* R500 */
808 serge 17
    RHD_RV505,
18
    RHD_RV515,
19
    RHD_RV516,
20
    RHD_R520,
21
    RHD_RV530,
22
    RHD_RV535,
23
    RHD_RV550,
24
    RHD_RV560,
25
    RHD_RV570,
26
    RHD_R580,
27
    /* R500 Mobility */
28
    RHD_M52,
29
    RHD_M54,
30
    RHD_M56,
31
    RHD_M58,
32
    RHD_M62,
33
    RHD_M64,
34
    RHD_M66,
35
    RHD_M68,
36
    RHD_M71,
37
    /* R500 integrated */
38
    RHD_RS600,
39
    RHD_RS690,
40
    RHD_RS740,
41
    /* R600 */
42
    RHD_R600,
43
    RHD_RV610,
44
    RHD_RV630,
45
    /* R600 Mobility */
46
    RHD_M72,
47
    RHD_M74,
48
    RHD_M76,
49
    /* RV670 came into existence after RV6x0 and M7x */
50
    RHD_RV670,
51
    RHD_R680,
52
    RHD_RV620,
53
    RHD_M82,
54
    RHD_RV635,
55
    RHD_M86,
56
    RHD_RS780,
812 serge 57
    RHD_CHIP_END
808 serge 58
};
59
60
 
61
    RHD_FAMILY_UNKNOWN = 0,
62
812 serge 63
 
64
65
 
66
    RHD_FAMILY_RS100,    /* U1 (IGP320M) or A3 (IGP320)*/
67
    RHD_FAMILY_RV200,
68
    RHD_FAMILY_RS200,    /* U2 (IGP330M/340M/350M) or A4 (IGP330/340/345/350), RS250 (IGP 7000) */
69
    RHD_FAMILY_R200,
70
    RHD_FAMILY_RV250,
71
    RHD_FAMILY_RS300,    /* RS300/RS350 */
72
    RHD_FAMILY_RV280,
73
74
 
75
    RHD_FAMILY_R350,
76
    RHD_FAMILY_RV350,
77
    RHD_FAMILY_RV380,    /* RV370/RV380/M22/M24 */
78
    RHD_FAMILY_R420,     /* R420/R423/M18 */
79
    RHD_FAMILY_RV410,    /* RV410, M26 */
80
    RHD_FAMILY_RS400,    /* xpress 200, 200m (RS400) Intel */
81
    RHD_FAMILY_RS480,    /* xpress 200, 200m (RS410/480/482/485) AMD */
82
83
 
808 serge 84
    RHD_FAMILY_R520,
85
    RHD_FAMILY_RV530,
86
    RHD_FAMILY_RV560,
87
    RHD_FAMILY_RV570,
88
    RHD_FAMILY_R580,
89
    RHD_FAMILY_RS690,
90
    RHD_FAMILY_R600,
91
    RHD_FAMILY_RV610,
92
    RHD_FAMILY_RV630,
93
    RHD_FAMILY_RV670,
94
    RHD_FAMILY_RV620,
95
    RHD_FAMILY_RV635,
812 serge 96
    RHD_FAMILY_RS780
97
};
808 serge 98
99
 
100
#define RHD_MMIO_BAR       2
101
102
 
103
#define RHD_MEM_FB         2
104
105
 
106
{
107
  CARD32            MMIOBase;
108
  CARD32            MMIOMapSize;
109
  CARD32            videoRam;
110
111
 
817 serge 112
  CARD32            PhisBase;
808 serge 113
  CARD32            FbIntAddress;      /* card internal address of FB */
114
  CARD32            FbMapSize;
115
116
 
117
  CARD32            FbFreeSize;
118
119
 
120
  unsigned int      FbScanoutStart;
121
  unsigned int      FbScanoutSize;
122
123
 
124
  enum RHD_FAMILIES ChipFamily;
812 serge 125
126
 
808 serge 127
128
 
129
130
 
131
  CARD32            devfn;
132
133
 
134
  CARD16            PciDeviceID;
135
136
 
137
  CARD16            subdevice_id;
138
139
 
140
  CARD32            ioBase[6];
141
  CARD32            memtype[6];
142
  CARD32            memsize[6];
143
144
 
145
  struct mem_block  *gart_heap;
146
147
 
148
  CARD32            displayHeight;
149
150
 
151
  CARD32            __ymin;
152
  CARD32            __xmax;
153
  CARD32            __ymax;
154
155
 
156
  CARD32            dst_pitch_offset;
157
  CARD32            surface_cntl;
158
159
 
160
  u32               ring_rp;
161
  u32               ring_wp;
162
163
 
811 serge 164
  Bool              has_tcl;
165
}RHD_t, *RHDPtr;
808 serge 166
167
 
168
169
 
170
 
815 serge 171
 
876 serge 172
#define R5XX_DP_BRUSH_FRGD_CLR            0x147c
173
#define R5XX_BRUSH_DATA0                  0x1480
174
#define R5XX_BRUSH_DATA1                  0x1484
175
815 serge 176
 
876 serge 177
#	define RADEON_GMC_DST_PITCH_OFFSET_CNTL	(1 << 1)
178
# define RADEON_GMC_BRUSH_SOLID_COLOR     (13 << 4)
179
# define RADEON_GMC_BRUSH_NONE            (15 << 4)
180
# define RADEON_GMC_DST_16BPP             (4 << 8)
181
# define RADEON_GMC_DST_24BPP             (5 << 8)
182
# define RADEON_GMC_DST_32BPP             (6 << 8)
183
# define RADEON_GMC_DST_DATATYPE_SHIFT     8
184
# define RADEON_GMC_SRC_DATATYPE_COLOR    (3 << 12)
185
# define RADEON_DP_SRC_SOURCE_MEMORY      (2 << 24)
186
# define RADEON_DP_SRC_SOURCE_HOST_DATA   (3 << 24)
187
# define RADEON_GMC_CLR_CMP_CNTL_DIS      (1 << 28)
188
# define RADEON_GMC_WR_MSK_DIS            (1 << 30)
189
# define RADEON_ROP3_S                 0x00cc0000
190
# define RADEON_ROP3_P                 0x00f00000
191
815 serge 192
 
876 serge 193
#define RADEON_CP_PACKET1              0x40000000
194
#define RADEON_CP_PACKET2              0x80000000
195
#define RADEON_CP_PACKET3              0xC0000000
196
197
 
198
# define RADEON_CNTL_BITBLT            0x00009200
199
# define RADEON_CNTL_TRANBLT           0x00009C00
200
201
 
202
# define RADEON_CNTL_PAINT_MULTI       0x00009A00
203
204
 
205
	(RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2))
206
207
 
208
	(RADEON_CP_PACKET1 | (((reg1) >> 2) << 11) | ((reg0) >> 2))
209
210
 
211
  (RADEON_CP_PACKET2)
212
213
 
214
	(RADEON_CP_PACKET3 | (pkt) | ((n) << 16))
215
216
 
217
  ring = rhd.ring_base;                 \
218
  write = rhd.ring_wp;                  \
219
} while (0)
220
221
 
222
223
 
224
	ring[write++] = (x);						\
225
} while (0)
226
227
 
228
do {									\
229
    OUT_RING(CP_PACKET0(reg, 0));					\
230
    OUT_RING(val);							\
231
} while (0)
232
233
 
234
235
 
236
  rhd.ring_wp = write & 0x1FFF;                       \
237
  /* Flush writes to ring */                          \
238
  DRM_MEMORYBARRIER();                                \
239
  /*GET_RING_HEAD( dev_priv );          */            \
240
  OUTREG( RADEON_CP_RB_WPTR, rhd.ring_wp);            \
241
	/* read from PCI bus to ensure correct posting */		\
242
  INREG( RADEON_CP_RB_RPTR );                         \
243
} while (0)
244
245
 
246
 
247
 
808 serge 248
    int			token;		/* id of the token */
249
    const char *	name;		/* token name */
250
} SymTabRec, *SymTabPtr;
251
252
 
813 serge 253
 
254
 
255
OUTREG8(CARD16 offset, u8 value)
256
{
257
  *(volatile CARD8 *)((CARD8 *)(rhd.MMIOBase + offset)) = value;
258
}
259
260
 
261
 
808 serge 262
{
263
  return *(volatile CARD32 *)((CARD8*)(rhd.MMIOBase + offset));
264
}
265
266
 
267
268
 
269
OUTREG(CARD16 offset, CARD32 value)
270
{
271
  *(volatile CARD32 *)((CARD8 *)(rhd.MMIOBase + offset)) = value;
272
}
273
274
 
275
{
276
  return *(volatile CARD32 *)((CARD8*)(rhdPtr->MMIOBase + offset));
277
}
278
279
 
280
MASKREG(CARD16 offset, CARD32 value, CARD32 mask)
281
{
282
  CARD32 tmp;
283
284
 
285
  tmp &= ~mask;
286
  tmp |= (value & mask);
287
  OUTREG(offset, tmp);
288
};
289
290
 
291
_RHDRegWrite(RHDPtr rhdPtr, CARD16 offset, CARD32 value)
292
{
293
  *(volatile CARD32 *)((CARD8 *)(rhdPtr->MMIOBase + offset)) = value;
294
}
295
296
 
297
_RHDRegMask(RHDPtr rhdPtr, CARD16 offset, CARD32 value, CARD32 mask)
298
{
299
  CARD32 tmp;
300
301
 
302
  tmp &= ~mask;
303
  tmp |= (value & mask);
304
  _RHDRegWrite(rhdPtr, offset, tmp);
305
};
306
307
 
308
309
 
310
#define RHDRegWrite(ptr, offset, value) _RHDRegWrite((ptr)->rhdPtr, (offset), (value))
311
#define RHDRegMask(ptr, offset, value, mask) _RHDRegMask((ptr)->rhdPtr, (offset), (value), (mask))
312
313
 
314
 
315
316
 
317
int rhdInitHeap(RHDPtr rhdPtr);
318
319
 
320
321
 
322
//  #define DBG(x)
323
324
 
325
typedef struct s_cursor
326
{
327
   u32   magic;                           // 'CURS'
328
   void  (*destroy)(struct s_cursor*);    // destructor
329
   u32   fd;                              // next object in list
330
   u32   bk;                              // prev object in list
331
   u32   pid;                             // owner id
332
333
 
334
   u32   hot_x;                           // hotspot coords
335
   u32   hot_y;
336
}cursor_t;
337
#pragma pack (pop)
338
339
 
340
#define LOAD_FROM_MEM    1
341
#define LOAD_INDIRECT    2
342
343
 
344
void __stdcall copy_cursor(void *img, void *src);
345
void destroy_cursor(cursor_t *cursor);
346
void __destroy_cursor(cursor_t *cursor);                // wrap
347
348
 
349
void __stdcall r500_SetCursor(cursor_t *cursor, int x, int y);
350
void __stdcall r500_CursorRestore(int x, int y);
351
352
 
353
813 serge 354
 
355
 
356
    u32_t x ;
357
    u32_t y ;
358
} xPointFixed;
359
360
 
361
362
 
363
364
 
365
366
 
367
#define IntToxFixed(i)  ((xFixed) (i) << XFIXED_BITS)
368
369
 
370
371
 
372
					 ((type) << 16) | \
373
					 ((a) << 12) | \
374
					 ((r) << 8) | \
375
					 ((g) << 4) | \
376
					 ((b)))
377
378
 
379
#define PICT_FORMAT_RGB(f)  (((f)      ) & 0xfff)
380
381
 
382
#define PICT_TYPE_A     1
383
#define PICT_TYPE_ARGB	2
384
#define PICT_TYPE_ABGR	3
385
#define PICT_TYPE_COLOR	4
386
#define PICT_TYPE_GRAY	5
387
388
 
389
   PICT_a8r8g8b8 =	PICT_FORMAT(32,PICT_TYPE_ARGB,8,8,8,8),
390
   PICT_x8r8g8b8 =	PICT_FORMAT(32,PICT_TYPE_ARGB,0,8,8,8),
391
   PICT_a8b8g8r8 =	PICT_FORMAT(32,PICT_TYPE_ABGR,8,8,8,8),
392
   PICT_x8b8g8r8 =	PICT_FORMAT(32,PICT_TYPE_ABGR,0,8,8,8),
393
394
 
395
   PICT_r8g8b8 =	PICT_FORMAT(24,PICT_TYPE_ARGB,0,8,8,8),
396
   PICT_b8g8r8 =	PICT_FORMAT(24,PICT_TYPE_ABGR,0,8,8,8),
397
398
 
399
   PICT_r5g6b5 =	PICT_FORMAT(16,PICT_TYPE_ARGB,0,5,6,5),
400
   PICT_b5g6r5 =	PICT_FORMAT(16,PICT_TYPE_ABGR,0,5,6,5),
401
402
 
403
   PICT_x1r5g5b5 =	PICT_FORMAT(16,PICT_TYPE_ARGB,0,5,5,5),
404
   PICT_a1b5g5r5 =	PICT_FORMAT(16,PICT_TYPE_ABGR,1,5,5,5),
405
   PICT_x1b5g5r5 =	PICT_FORMAT(16,PICT_TYPE_ABGR,0,5,5,5),
406
   PICT_a4r4g4b4 =	PICT_FORMAT(16,PICT_TYPE_ARGB,4,4,4,4),
407
   PICT_x4r4g4b4 =	PICT_FORMAT(16,PICT_TYPE_ARGB,0,4,4,4),
408
   PICT_a4b4g4r4 =	PICT_FORMAT(16,PICT_TYPE_ABGR,4,4,4,4),
409
   PICT_x4b4g4r4 =	PICT_FORMAT(16,PICT_TYPE_ABGR,0,4,4,4),
410
411
 
412
   PICT_a8 =		PICT_FORMAT(8,PICT_TYPE_A,8,0,0,0),
413
   PICT_r3g3b2 =	PICT_FORMAT(8,PICT_TYPE_ARGB,0,3,3,2),
414
   PICT_b2g3r3 =	PICT_FORMAT(8,PICT_TYPE_ABGR,0,3,3,2),
415
   PICT_a2r2g2b2 =	PICT_FORMAT(8,PICT_TYPE_ARGB,2,2,2,2),
416
   PICT_a2b2g2r2 =	PICT_FORMAT(8,PICT_TYPE_ABGR,2,2,2,2),
417
418
 
419
   PICT_g8 =		PICT_FORMAT(8,PICT_TYPE_GRAY,0,0,0,0),
420
421
 
422
423
 
424
   PICT_x4g4 =		PICT_FORMAT(8,PICT_TYPE_GRAY,0,0,0,0),
425
426
 
427
   PICT_a4 =		PICT_FORMAT(4,PICT_TYPE_A,4,0,0,0),
428
   PICT_r1g2b1 =	PICT_FORMAT(4,PICT_TYPE_ARGB,0,1,2,1),
429
   PICT_b1g2r1 =	PICT_FORMAT(4,PICT_TYPE_ABGR,0,1,2,1),
430
   PICT_a1r1g1b1 =	PICT_FORMAT(4,PICT_TYPE_ARGB,1,1,1,1),
431
   PICT_a1b1g1r1 =	PICT_FORMAT(4,PICT_TYPE_ABGR,1,1,1,1),
432
433
 
434
   PICT_g4 =		PICT_FORMAT(4,PICT_TYPE_GRAY,0,0,0,0),
435
436
 
437
   PICT_a1 =		PICT_FORMAT(1,PICT_TYPE_A,1,0,0,0),
438
439
 
440
} PictFormatShort;
441
442
 
829 serge 443