Subversion Repositories Kolibri OS

Rev

Rev 876 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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