1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
|
/*
* Acceleration for the Creator and Creator3D framebuffer - register layout.
*
* Copyright (C) 1998,1999,2000 Jakub Jelinek (jakub@redhat.com)
* Copyright (C) 1998 Michal Rehacek (majkl@iname.com)
* Copyright (C) 1999 David S. Miller (davem@redhat.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* JAKUB JELINEK, MICHAL REHACEK, OR DAVID MILLER BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
/* $XFree86$ */
#ifndef FFBREGS_H
#define FFBREGS_H
/* Auxilliary clips. */
typedef struct {
volatile unsigned int min;
volatile unsigned int max;
} ffb_auxclip, *ffb_auxclipPtr;
/* FFB register set. */
typedef struct _ffb_fbc {
/* Next vertex registers, on the right we list which drawops
* use said register and the logical name the register has in
* that context.
*/ /* DESCRIPTION DRAWOP(NAME) */
/*0x00*/unsigned int pad1[3]; /* Reserved */
/*0x0c*/volatile unsigned int alpha; /* ALPHA Transparency */
/*0x10*/volatile unsigned int red; /* RED */
/*0x14*/volatile unsigned int green; /* GREEN */
/*0x18*/volatile unsigned int blue; /* BLUE */
/*0x1c*/volatile unsigned int z; /* DEPTH */
/*0x20*/volatile unsigned int y; /* Y triangle(DOYF) */
/* aadot(DYF) */
/* ddline(DYF) */
/* aaline(DYF) */
/*0x24*/volatile unsigned int x; /* X triangle(DOXF) */
/* aadot(DXF) */
/* ddline(DXF) */
/* aaline(DXF) */
/*0x28*/unsigned int pad2[2]; /* Reserved */
/*0x30*/volatile unsigned int ryf; /* Y (alias to DOYF) ddline(RYF) */
/* aaline(RYF) */
/* triangle(RYF) */
/*0x34*/volatile unsigned int rxf; /* X ddline(RXF) */
/* aaline(RXF) */
/* triangle(RXF) */
/*0x38*/unsigned int pad3[2]; /* Reserved */
/*0x40*/volatile unsigned int dmyf; /* Y (alias to DOYF) triangle(DMYF) */
/*0x44*/volatile unsigned int dmxf; /* X triangle(DMXF) */
/*0x48*/unsigned int pad4[2]; /* Reserved */
/*0x50*/volatile unsigned int ebyi; /* Y (alias to RYI) polygon(EBYI) */
/*0x54*/volatile unsigned int ebxi; /* X polygon(EBXI) */
/*0x58*/unsigned int pad5[2]; /* Reserved */
/*0x60*/volatile unsigned int by; /* Y brline(RYI) */
/* fastfill(OP) */
/* polygon(YI) */
/* rectangle(YI) */
/* bcopy(SRCY) */
/* vscroll(SRCY) */
/*0x64*/volatile unsigned int bx; /* X brline(RXI) */
/* polygon(XI) */
/* rectangle(XI) */
/* bcopy(SRCX) */
/* vscroll(SRCX) */
/* fastfill(GO) */
/*0x68*/volatile unsigned int dy; /* destination Y fastfill(DSTY) */
/* bcopy(DSRY) */
/* vscroll(DSRY) */
/*0x6c*/volatile unsigned int dx; /* destination X fastfill(DSTX) */
/* bcopy(DSTX) */
/* vscroll(DSTX) */
/*0x70*/volatile unsigned int bh; /* Y (alias to RYI) brline(DYI) */
/* dot(DYI) */
/* polygon(ETYI) */
/* Height fastfill(H) */
/* bcopy(H) */
/* vscroll(H) */
/* Y count fastfill(NY) */
/*0x74*/volatile unsigned int bw; /* X dot(DXI) */
/* brline(DXI) */
/* polygon(ETXI) */
/* fastfill(W) */
/* bcopy(W) */
/* vscroll(W) */
/* fastfill(NX) */
/*0x78*/unsigned int pad6[2]; /* Reserved */
/*0x80*/unsigned int pad7[32]; /* Reserved */
/* Setup Unit's vertex state register */
/*100*/ volatile unsigned int suvtx;
/*104*/ unsigned int pad8[63]; /* Reserved */
/* Frame Buffer Control Registers */
/*200*/ volatile unsigned int ppc; /* Pixel Processor Control */
/*204*/ volatile unsigned int wid; /* Current WID */
/*208*/ volatile unsigned int fg; /* FG data */
/*20c*/ volatile unsigned int bg; /* BG data */
/*210*/ volatile unsigned int consty; /* Constant Y */
/*214*/ volatile unsigned int constz; /* Constant Z */
/*218*/ volatile unsigned int xclip; /* X Clip */
/*21c*/ volatile unsigned int dcss; /* Depth Cue Scale Slope */
/*220*/ volatile unsigned int vclipmin; /* Viewclip XY Min Bounds */
/*224*/ volatile unsigned int vclipmax; /* Viewclip XY Max Bounds */
/*228*/ volatile unsigned int vclipzmin; /* Viewclip Z Min Bounds */
/*22c*/ volatile unsigned int vclipzmax; /* Viewclip Z Max Bounds */
/*230*/ volatile unsigned int dcsf; /* Depth Cue Scale Front Bound */
/*234*/ volatile unsigned int dcsb; /* Depth Cue Scale Back Bound */
/*238*/ volatile unsigned int dczf; /* Depth Cue Z Front */
/*23c*/ volatile unsigned int dczb; /* Depth Cue Z Back */
/*240*/ unsigned int pad9; /* Reserved */
/*244*/ volatile unsigned int blendc; /* Alpha Blend Control */
/*248*/ volatile unsigned int blendc1; /* Alpha Blend Color 1 */
/*24c*/ volatile unsigned int blendc2; /* Alpha Blend Color 2 */
/*250*/ volatile unsigned int fbramitc; /* FB RAM Interleave Test Control */
/*254*/ volatile unsigned int fbc; /* Frame Buffer Control */
/*258*/ volatile unsigned int rop; /* Raster OPeration */
/*25c*/ volatile unsigned int cmp; /* Frame Buffer Compare */
/*260*/ volatile unsigned int matchab; /* Buffer AB Match Mask */
/*264*/ volatile unsigned int matchc; /* Buffer C(YZ) Match Mask */
/*268*/ volatile unsigned int magnab; /* Buffer AB Magnitude Mask */
/*26c*/ volatile unsigned int magnc; /* Buffer C(YZ) Magnitude Mask */
/*270*/ volatile unsigned int fbcfg0; /* Frame Buffer Config 0 */
/*274*/ volatile unsigned int fbcfg1; /* Frame Buffer Config 1 */
/*278*/ volatile unsigned int fbcfg2; /* Frame Buffer Config 2 */
/*27c*/ volatile unsigned int fbcfg3; /* Frame Buffer Config 3 */
/*280*/ volatile unsigned int ppcfg; /* Pixel Processor Config */
/*284*/ volatile unsigned int pick; /* Picking Control */
/*288*/ volatile unsigned int fillmode; /* FillMode */
/*28c*/ volatile unsigned int fbramwac; /* FB RAM Write Address Control */
/*290*/ volatile unsigned int pmask; /* RGB PlaneMask */
/*294*/ volatile unsigned int xpmask; /* X PlaneMask */
/*298*/ volatile unsigned int ypmask; /* Y PlaneMask */
/*29c*/ volatile unsigned int zpmask; /* Z PlaneMask */
/*2a0*/ ffb_auxclip auxclip[4]; /* Auxilliary Viewport Clip */
/* New 3dRAM III support regs */
/*2c0*/ volatile unsigned int rawblend2;
/*2c4*/ volatile unsigned int rawpreblend;
/*2c8*/ volatile unsigned int rawstencil;
/*2cc*/ volatile unsigned int rawstencilctl;
/*2d0*/ volatile unsigned int threedram1;
/*2d4*/ volatile unsigned int threedram2;
/*2d8*/ volatile unsigned int passin;
/*2dc*/ volatile unsigned int rawclrdepth;
/*2e0*/ volatile unsigned int rawpmask;
/*2e4*/ volatile unsigned int rawcsrc;
/*2e8*/ volatile unsigned int rawmatch;
/*2ec*/ volatile unsigned int rawmagn;
/*2f0*/ volatile unsigned int rawropblend;
/*2f4*/ volatile unsigned int rawcmp;
/*2f8*/ volatile unsigned int rawwac;
/*2fc*/ volatile unsigned int fbramid;
/*300*/ volatile unsigned int drawop; /* Draw OPeration */
/*304*/ unsigned int pad10[2]; /* Reserved */
/*30c*/ volatile unsigned int lpat; /* Line Pattern control */
/*310*/ unsigned int pad11; /* Reserved */
/*314*/ volatile unsigned int fontxy; /* XY Font coordinate */
/*318*/ volatile unsigned int fontw; /* Font Width */
/*31c*/ volatile unsigned int fontinc; /* Font Increment */
/*320*/ volatile unsigned int font; /* Font bits */
/*324*/ unsigned int pad12[3]; /* Reserved */
/*330*/ volatile unsigned int blend2;
/*334*/ volatile unsigned int preblend;
/*338*/ volatile unsigned int stencil;
/*33c*/ volatile unsigned int stencilctl;
/*340*/ unsigned int pad13[4]; /* Reserved */
/*350*/ volatile unsigned int dcss1; /* Depth Cue Scale Slope 1 */
/*354*/ volatile unsigned int dcss2; /* Depth Cue Scale Slope 2 */
/*358*/ volatile unsigned int dcss3; /* Depth Cue Scale Slope 3 */
/*35c*/ volatile unsigned int widpmask;
/*360*/ volatile unsigned int dcs2;
/*364*/ volatile unsigned int dcs3;
/*368*/ volatile unsigned int dcs4;
/*36c*/ unsigned int pad14; /* Reserved */
/*370*/ volatile unsigned int dcd2;
/*374*/ volatile unsigned int dcd3;
/*378*/ volatile unsigned int dcd4;
/*37c*/ unsigned int pad15; /* Reserved */
/*380*/ volatile unsigned int pattern[32]; /* area Pattern */
/*400*/ unsigned int pad16[8]; /* Reserved */
/*420*/ volatile unsigned int reset; /* chip RESET */
/*424*/ unsigned int pad17[247]; /* Reserved */
/*800*/ volatile unsigned int devid; /* Device ID */
/*804*/ unsigned int pad18[63]; /* Reserved */
/*900*/ volatile unsigned int ucsr; /* User Control & Status Register */
/*904*/ unsigned int pad19[31]; /* Reserved */
/*980*/ volatile unsigned int mer; /* Mode Enable Register */
/*984*/ unsigned int pad20[1439]; /* Reserved */
} ffb_fbc, *ffb_fbcPtr;
/* Draw operations */
#define FFB_DRAWOP_DOT 0x00
#define FFB_DRAWOP_AADOT 0x01
#define FFB_DRAWOP_BRLINECAP 0x02
#define FFB_DRAWOP_BRLINEOPEN 0x03
#define FFB_DRAWOP_DDLINE 0x04
#define FFB_DRAWOP_AALINE 0x05
#define FFB_DRAWOP_TRIANGLE 0x06
#define FFB_DRAWOP_POLYGON 0x07
#define FFB_DRAWOP_RECTANGLE 0x08
#define FFB_DRAWOP_FASTFILL 0x09
#define FFB_DRAWOP_BCOPY 0x0a /* Not implemented in any FFB, VIS is faster */
#define FFB_DRAWOP_VSCROLL 0x0b /* Up to 12x faster than BCOPY, 3-4x faster than VIS */
/* FastFill operation codes. */
#define FFB_FASTFILL_PAGE 0x01
#define FFB_FASTFILL_BLOCK 0x02
#define FFB_FASTFILL_COLOR_BLK 0x03
#define FFB_FASTFILL_BLOCK_X 0x04
/* Spanfill Unit Line Pattern */
#define FFB_LPAT_SCALEPTR 0xf0000000
#define FFB_LPAT_SCALEPTR_SHIFT 28
#define FFB_LPAT_PATPTR 0x0f000000
#define FFB_LPAT_PATPTR_SHIFT 24
#define FFB_LPAT_SCALEVAL 0x00f00000
#define FFB_LPAT_SCALEVAL_SHIFT 20
#define FFB_LPAT_PATLEN 0x000f0000
#define FFB_LPAT_PATLEN_SHIFT 16
#define FFB_LPAT_PATTERN 0x0000ffff
#define FFB_LPAT_PATTERN_SHIFT 0
/* Pixel processor control */
/* Force WID */
#define FFB_PPC_FW_DISABLE 0x800000
#define FFB_PPC_FW_ENABLE 0xc00000
#define FFB_PPC_FW_MASK 0xc00000
/* Auxiliary clip */
#define FFB_PPC_ACE_DISABLE 0x040000
#define FFB_PPC_ACE_AUX_SUB 0x080000
#define FFB_PPC_ACE_AUX_ADD 0x0c0000
#define FFB_PPC_ACE_MASK 0x0c0000
/* Depth cue */
#define FFB_PPC_DCE_DISABLE 0x020000
#define FFB_PPC_DCE_ENABLE 0x030000
#define FFB_PPC_DCE_MASK 0x030000
/* Alpha blend */
#define FFB_PPC_ABE_DISABLE 0x008000
#define FFB_PPC_ABE_ENABLE 0x00c000
#define FFB_PPC_ABE_MASK 0x00c000
/* View clip */
#define FFB_PPC_VCE_DISABLE 0x001000
#define FFB_PPC_VCE_2D 0x002000
#define FFB_PPC_VCE_3D 0x003000
#define FFB_PPC_VCE_MASK 0x003000
/* Area pattern */
#define FFB_PPC_APE_DISABLE 0x000800
#define FFB_PPC_APE_ENABLE 0x000c00
#define FFB_PPC_APE_MASK 0x000c00
/* Transparent background */
#define FFB_PPC_TBE_OPAQUE 0x000200
#define FFB_PPC_TBE_TRANSPARENT 0x000300
#define FFB_PPC_TBE_MASK 0x000300
/* Z source */
#define FFB_PPC_ZS_VAR 0x000080
#define FFB_PPC_ZS_CONST 0x0000c0
#define FFB_PPC_ZS_MASK 0x0000c0
/* Y source */
#define FFB_PPC_YS_VAR 0x000020
#define FFB_PPC_YS_CONST 0x000030
#define FFB_PPC_YS_MASK 0x000030
/* X source */
#define FFB_PPC_XS_WID 0x000004
#define FFB_PPC_XS_VAR 0x000008
#define FFB_PPC_XS_CONST 0x00000c
#define FFB_PPC_XS_MASK 0x00000c
/* Color (BGR) source */
#define FFB_PPC_CS_VAR 0x000002
#define FFB_PPC_CS_CONST 0x000003
#define FFB_PPC_CS_MASK 0x000003
/* X Clip */
#define FFB_XCLIP_XREF 0x000000ff
#define FFB_XCLIP_TEST_MASK 0x00070000
#define FFB_XCLIP_TEST_ALWAYS 0x00000000
#define FFB_XCLIP_TEST_GT 0x00010000
#define FFB_XCLIP_TEST_EQ 0x00020000
#define FFB_XCLIP_TEST_GE 0x00030000
#define FFB_XCLIP_TEST_NEVER 0x00040000
#define FFB_XCLIP_TEST_LE 0x00050000
#define FFB_XCLIP_TEST_NE 0x00060000
#define FFB_XCLIP_TEST_LT 0x00070000
/* FB Control register */
/* Write buffer dest */
#define FFB_FBC_WB_A 0x20000000
#define FFB_FBC_WB_B 0x40000000
#define FFB_FBC_WB_AB 0x60000000
#define FFB_FBC_WB_C 0x80000000
#define FFB_FBC_WB_AC 0xa0000000
#define FFB_FBC_WB_BC 0xc0000000
#define FFB_FBC_WB_ABC 0xe0000000
#define FFB_FBC_WB_MASK 0xe0000000
/* Write enable */
#define FFB_FBC_WE_FORCEOFF 0x00100000
#define FFB_FBC_WE_FORCEON 0x00200000
#define FFB_FBC_WE_USE_WMASK 0x00300000
#define FFB_FBC_WE_MASK 0x00300000
/* Write group mode */
#define FFB_FBC_WM_RSVD 0x00040000
#define FFB_FBC_WM_COMBINED 0x00080000
#define FFB_FBC_WM_SEPARATE 0x000c0000
#define FFB_FBC_WM_MASK 0x000c0000
/* Read buffer src */
#define FFB_FBC_RB_A 0x00004000
#define FFB_FBC_RB_B 0x00008000
#define FFB_FBC_RB_C 0x0000c000
#define FFB_FBC_RB_MASK 0x0000c000
/* Stereo buf dest */
#define FFB_FBC_SB_LEFT 0x00001000
#define FFB_FBC_SB_RIGHT 0x00002000
#define FFB_FBC_SB_BOTH 0x00003000
#define FFB_FBC_SB_MASK 0x00003000
/* Z plane group enable */
#define FFB_FBC_ZE_OFF 0x00000400
#define FFB_FBC_ZE_ON 0x00000800
#define FFB_FBC_ZE_MASK 0x00000c00
/* Y plane group enable */
#define FFB_FBC_YE_OFF 0x00000100
#define FFB_FBC_YE_ON 0x00000200
#define FFB_FBC_YE_MASK 0x00000300
/* X plane group enable */
#define FFB_FBC_XE_OFF 0x00000040
#define FFB_FBC_XE_ON 0x00000080
#define FFB_FBC_XE_MASK 0x000000c0
/* B plane group enable */
#define FFB_FBC_BE_OFF 0x00000010
#define FFB_FBC_BE_ON 0x00000020
#define FFB_FBC_BE_MASK 0x00000030
/* G plane group enable */
#define FFB_FBC_GE_OFF 0x00000004
#define FFB_FBC_GE_ON 0x00000008
#define FFB_FBC_GE_MASK 0x0000000c
/* R plane group enable */
#define FFB_FBC_RE_OFF 0x00000001
#define FFB_FBC_RE_ON 0x00000002
#define FFB_FBC_RE_MASK 0x00000003
/* Combined */
#define FFB_FBC_RGBE_OFF 0x00000015
#define FFB_FBC_RGBE_ON 0x0000002a
#define FFB_FBC_RGBE_MASK 0x0000003f
/* Raster OP */
#define FFB_ROP_YZ_MASK 0x008f0000
#define FFB_ROP_X_MASK 0x00008f00
#define FFB_ROP_RGB_MASK 0x0000008f
/* Now the rops themselves which get shifted into the
* above fields.
*/
#define FFB_ROP_EDIT_BIT 0x80
#define FFB_ROP_ZERO 0x80
#define FFB_ROP_NEW_AND_OLD 0x81
#define FFB_ROP_NEW_AND_NOLD 0x82
#define FFB_ROP_NEW 0x83
#define FFB_ROP_NNEW_AND_OLD 0x84
#define FFB_ROP_OLD 0x85
#define FFB_ROP_NEW_XOR_OLD 0x86
#define FFB_ROP_NEW_OR_OLD 0x87
#define FFB_ROP_NNEW_AND_NOLD 0x88
#define FFB_ROP_NNEW_XOR_NOLD 0x89
#define FFB_ROP_NOLD 0x8a
#define FFB_ROP_NEW_OR_NOLD 0x8b
#define FFB_ROP_NNEW 0x8c
#define FFB_ROP_NNEW_OR_OLD 0x8d
#define FFB_ROP_NNEW_OR_NOLD 0x8e
#define FFB_ROP_ONES 0x8f
/* FB Compare */
#define FFB_CMP_MATCHC_MASK 0x8f000000
#define FFB_CMP_MAGNC_MASK 0x00870000
#define FFB_CMP_MATCHAB_MASK 0x0000ff00
#define FFB_CMP_MAGNAB_MASK 0x000000ff
/* Compare Match codes */
#define FFB_CMP_MATCH_EDIT_BIT 0x80
#define FFB_CMP_MATCH_ALWAYS 0x80
#define FFB_CMP_MATCH_NEVER 0x81
#define FFB_CMP_MATCH_EQ 0x82
#define FFB_CMP_MATCH_NE 0x83
#define FFB_CMP_MATCH_A_ALWAYS 0xc0
#define FFB_CMP_MATCH_B_ALWAYS 0xa0
/* Compare Magnitude codes */
#define FFB_CMP_MAGN_EDIT_BIT 0x80
#define FFB_CMP_MAGN_ALWAYS 0x80
#define FFB_CMP_MAGN_GT 0x81
#define FFB_CMP_MAGN_EQ 0x82
#define FFB_CMP_MAGN_GE 0x83
#define FFB_CMP_MAGN_NEVER 0x84
#define FFB_CMP_MAGN_LE 0x85
#define FFB_CMP_MAGN_NE 0x86
#define FFB_CMP_MAGN_LT 0x87
#define FFB_CMP_MAGN_A_ALWAYS 0xc0
#define FFB_CMP_MAGN_B_ALWAYS 0xa0
/* User Control and Status */
#define FFB_UCSR_FIFO_MASK 0x00000fff
#define FFB_UCSR_PICK_NO_HIT 0x00020000
#define FFB_UCSR_PICK_HIT 0x00030000
#define FFB_UCSR_PICK_DISABLE 0x00080000
#define FFB_UCSR_PICK_ENABLE 0x000c0000
#define FFB_UCSR_FB_BUSY 0x01000000
#define FFB_UCSR_RP_BUSY 0x02000000
#define FFB_UCSR_ALL_BUSY (FFB_UCSR_RP_BUSY|FFB_UCSR_FB_BUSY)
#define FFB_UCSR_READ_ERR 0x40000000
#define FFB_UCSR_FIFO_OVFL 0x80000000
#define FFB_UCSR_ALL_ERRORS (FFB_UCSR_READ_ERR|FFB_UCSR_FIFO_OVFL)
/* Mode Enable Register */
#define FFB_MER_EIRA 0x00000080 /* Enable read-ahead, increasing */
#define FFB_MER_EDRA 0x000000c0 /* Enable read-ahead, decreasing */
#define FFB_MER_DRA 0x00000040 /* No read-ahead */
/* FBram Config 0 */
#define FFB_FBCFG0_RFTIME 0xff800000
#define FFB_FBCFG0_XMAX 0x007c0000
#define FFB_FBCFG0_YMAX 0x0003ffc0
#define FFB_FBCFG0_RES_MASK 0x00000030
#define FFB_FBCFG0_RES_HIGH 0x00000030 /* 1920x1360 */
#define FFB_FBCFG0_RES_STD 0x00000020 /* 1280x1024 */
#define FFB_FBCFG0_RES_STEREO 0x00000010 /* 960x580 */
#define FFB_FBCFG0_RES_PRTRAIT 0x00000000 /* 1280x2048 */
#define FFB_FBCFG0_ITRLACE 0x00000000
#define FFB_FBCFG0_SEQUENTIAL 0x00000008
#define FFB_FBCFG0_DRENA 0x00000004
#define FFB_FBCFG0_BPMODE 0x00000002
#define FFB_FBCFG0_RFRSH_RST 0x00000001
typedef struct _ffb_dac {
volatile unsigned int cfg;
volatile unsigned int cfgdata;
volatile unsigned int cur;
volatile unsigned int curdata;
} ffb_dac, *ffb_dacPtr;
/* Writing 2 32-bit registers at a time using 64-bit stores. -DaveM */
#if defined(__GNUC__) && defined(USE_VIS)
/* 64-bit register writing support.
* Note: "lo" means "low address".
*/
#define FFB_WRITE64_COMMON(__regp, __lo32, __hi32, REG0, REG1) \
do { __extension__ register unsigned int __r0 __asm__(""#REG0); \
__extension__ register unsigned int __r1 __asm__(""#REG1); \
__r0 = (__lo32); \
__r1 = (__hi32); \
__asm__ __volatile__ ("sllx\t%0, 32, %%g1\n\t" \
"srl\t%1, 0, %1\n\t" \
"or\t%%g1, %1, %%g1\n\t" \
"stx\t%%g1, %2" \
: : "r" (__r0), "r" (__r1), "m" (*(__regp)) : "g1"); \
} while(0)
#define FFB_WRITE64P(__regp, __srcp) \
do { __asm__ __volatile__ ("ldx\t%0, %%g2;" \
"stx\t%%g2, %1" \
: : "m" (*(__srcp)), "m" (*(__regp)) \
: "g2"); \
} while(0)
#define FFB_WRITE64(__regp, __lo32, __hi32) \
FFB_WRITE64_COMMON(__regp, __lo32, __hi32, g2, g3)
#define FFB_WRITE64_2(__regp, __lo32, __hi32) \
FFB_WRITE64_COMMON(__regp, __lo32, __hi32, g4, g5)
#define FFB_WRITE64_3(__regp, __lo32, __hi32) \
FFB_WRITE64_COMMON(__regp, __lo32, __hi32, o4, o5)
#else /* Do not use 64-bit writes. */
#define FFB_WRITE64(__regp, __lo32, __hi32) \
do { volatile unsigned int *__p = (__regp); \
*__p = (__lo32); \
*(__p + 1) = (__hi32); \
} while(0)
#define FFB_WRITE64P(__regp, __srcp) \
do { volatile unsigned int *__p = (__regp); \
unsigned int *__q = (__srcp); \
*__p = *__q; \
*(__p + 1) = *(__q + 1); \
} while(0)
#define FFB_WRITE64_2(__regp, __lo32, __hi32) \
FFB_WRITE64(__regp, __lo32, __hi32)
#define FFB_WRITE64_3(__regp, __lo32, __hi32) \
FFB_WRITE64(__regp, __lo32, __hi32)
#endif
#endif /* FFBREGS_H */
|