]> git.pld-linux.org Git - packages/XFree86.git/blame - XFree86-DEC.patch
- fixed path to xterm
[packages/XFree86.git] / XFree86-DEC.patch
CommitLineData
088a79c9 1diff -ur xc.orig/programs/Xserver/hw/xfree86/common/compiler.h xc/programs/Xserver/hw/xfree86/common/compiler.h
2--- xc.orig/programs/Xserver/hw/xfree86/common/compiler.h Fri Dec 8 22:58:34 2000
3+++ xc/programs/Xserver/hw/xfree86/common/compiler.h Sun Mar 18 17:23:33 2001
4@@ -1514,19 +1514,17 @@
5 /* Changed to kill noise generated by gcc's -Wcast-align */
6 #define MMIO_IN8(base, offset) (*xf86ReadMmio8)(base, offset)
7 #define MMIO_IN16(base, offset) (*xf86ReadMmio16)(base, offset)
8-# if defined (JENSEN_SUPPORT)
9 #define MMIO_IN32(base, offset) (*xf86ReadMmio32)(base, offset)
10+# if defined (JENSEN_SUPPORT)
11 #define MMIO_OUT32(base, offset, val) \
12 (*xf86WriteMmio32)((CARD32)(val), base, offset)
13 #define MMIO_ONB32(base, offset, val) \
14 (*xf86WriteMmioNB32)((CARD32)(val), base, offset)
15 # else
16-#define MMIO_IN32(base, offset) \
17- *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset))
18 #define MMIO_OUT32(base, offset, val) \
19 do { \
20- *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = (val); \
21 write_mem_barrier(); \
22+ *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = (val); \
23 } while (0)
24 #define MMIO_ONB32(base, offset, val) \
25 *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = (val)
26diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c
27--- xc.orig/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c Mon Dec 4 19:55:22 2000
28+++ xc/programs/Xserver/hw/xfree86/drivers/ati/r128_accel.c Sun Apr 1 20:51:03 2001
29@@ -838,6 +838,7 @@
30 if (info->scanline_direct) return;
31 --info->scanline_h;
32 while (left) {
33+ write_mem_barrier();
34 if (left <= 8) {
35 /* Last scanline - finish write to DATA_LAST */
36 if (info->scanline_h == 0) {
37@@ -980,6 +981,7 @@
38 if (info->scanline_direct) return;
39 --info->scanline_h;
40 while (left) {
41+ write_mem_barrier();
42 if (left <= 8) {
43 /* Last scanline - finish write to DATA_LAST */
44 if (info->scanline_h == 0) {
45diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c
46--- xc.orig/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c Sat Mar 17 17:57:15 2001
47+++ xc/programs/Xserver/hw/xfree86/drivers/ati/r128_driver.c Sun Mar 18 16:51:29 2001
48@@ -1016,8 +1016,8 @@
49 if (!xf86LoadSubModule(pScrn, "ddc")) return FALSE;
50 xf86LoaderReqSymLists(ddcSymbols, NULL);
51
52-#if defined(__powerpc__)
53- /* Int10 is broken on PPC */
54+#if defined(__powerpc__) || defined(__alpha__)
55+ /* Int10 is broken on PPC and some Alphas */
56 return TRUE;
57 #else
58 if (xf86LoadSubModule(pScrn, "vbe")) {
59@@ -1156,7 +1156,8 @@
60 static Bool R128PreInitInt10(ScrnInfoPtr pScrn)
61 {
62 R128InfoPtr info = R128PTR(pScrn);
63-#if 1
64+#if 1 && !defined(__alpha__)
65+ /* int10 is broken on some Alphas */
66 if (xf86LoadSubModule(pScrn, "int10")) {
67 xf86Int10InfoPtr pInt;
68 xf86DrvMsg(pScrn->scrnIndex,X_INFO,"initializing int10\n");
69diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/ati/radeon_accel.c xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_accel.c
70--- xc.orig/programs/Xserver/hw/xfree86/drivers/ati/radeon_accel.c Wed Nov 29 11:42:11 2000
71+++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_accel.c Fri Mar 23 16:20:46 2001
72@@ -585,7 +585,13 @@
73 info->scanline_h = h;
74 info->scanline_words = (w + 31) >> 5;
75
76- if ((info->scanline_words * h) <= 9) {
77+#ifdef __alpha__
78+ /* always indirect for Alpha */
79+ if (0)
80+#else
81+ if ((info->scanline_words * h) <= 9)
82+#endif
83+ {
84 /* Turn on direct for less than 9 dword colour expansion */
85 info->scratch_buffer[0]
86 = (unsigned char *)(ADDRREG(RADEON_HOST_DATA_LAST)
87@@ -621,6 +627,7 @@
88 if (info->scanline_direct) return;
89 --info->scanline_h;
90 while (left) {
91+ write_mem_barrier();
92 if (left <= 8) {
93 /* Last scanline - finish write to DATA_LAST */
94 if (info->scanline_h == 0) {
95@@ -699,7 +706,13 @@
96 info->scanline_h = h;
97 info->scanline_words = (w * info->scanline_bpp + 31) >> 5;
98
99- if ((info->scanline_words * h) <= 9) {
100+#ifdef __alpha__
101+ /* always indirect for Alpha */
102+ if (0)
103+#else
104+ if ((info->scanline_words * h) <= 9)
105+#endif
106+ {
107 /* Turn on direct for less than 9 dword colour expansion */
108 info->scratch_buffer[0]
109 = (unsigned char *)(ADDRREG(RADEON_HOST_DATA_LAST)
110@@ -735,6 +748,7 @@
111 if (info->scanline_direct) return;
112 --info->scanline_h;
113 while (left) {
114+ write_mem_barrier();
115 if (left <= 8) {
116 /* Last scanline - finish write to DATA_LAST */
117 if (info->scanline_h == 0) {
118diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/dualmx_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/dualmx_accel.c
119--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/dualmx_accel.c Sat Jun 24 14:19:54 2000
120+++ xc/programs/Xserver/hw/xfree86/drivers/glint/dualmx_accel.c Sun Mar 18 16:53:54 2001
121@@ -324,28 +324,6 @@
122 GLINT_WRITE_REG(d<<16,dY);
123 }
124
125-static void MoveDWORDS(
126- register CARD32* dest,
127- register CARD32* src,
128- register int dwords )
129-{
130- while(dwords & ~0x03) {
131- *dest = *src;
132- *(dest + 1) = *(src + 1);
133- *(dest + 2) = *(src + 2);
134- *(dest + 3) = *(src + 3);
135- src += 4;
136- dest += 4;
137- dwords -= 4;
138- }
139- if (!dwords) return;
140- *dest = *src;
141- if (dwords == 1) return;
142- *(dest + 1) = *(src + 1);
143- if (dwords == 2) return;
144- *(dest + 2) = *(src + 2);
145-}
146-
147 #define Sync_tag 0x188
148
149 static void
150@@ -572,7 +550,8 @@
151 while (dwords >= infoRec->ColorExpandRange) {
152 GLINT_WAIT(infoRec->ColorExpandRange);
153 GLINT_WRITE_REG((infoRec->ColorExpandRange - 2)<<16 | 0x0D, OutputFIFO);
154- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,
155+ GLINT_MoveDWORDS(
156+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,
157 infoRec->ColorExpandRange - 1);
158 dwords -= (infoRec->ColorExpandRange - 1);
159 src += (infoRec->ColorExpandRange - 1);
160@@ -580,7 +559,8 @@
161 if (dwords) {
162 GLINT_WAIT(dwords);
163 GLINT_WRITE_REG((dwords - 1)<<16 | 0x0D, OutputFIFO);
164- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords);
165+ GLINT_MoveDWORDS(
166+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords);
167 }
168 pGlint->cpucount += 1;
169 #if 0
170@@ -887,7 +867,8 @@
171 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
172 GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x15 << 4) |
173 0x05, OutputFIFO);
174- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
175+ GLINT_MoveDWORDS(
176+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
177 (CARD32*)srcp, infoRec->ColorExpandRange - 1);
178 count -= infoRec->ColorExpandRange - 1;
179 srcp += infoRec->ColorExpandRange - 1;
180@@ -897,7 +878,8 @@
181 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
182 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
183 0x05, OutputFIFO);
184- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
185+ GLINT_MoveDWORDS(
186+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
187 (CARD32*)srcp, count);
188 }
189 src += srcwidth;
190diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint.h xc/programs/Xserver/hw/xfree86/drivers/glint/glint.h
191--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint.h Wed Nov 29 11:42:16 2000
192+++ xc/programs/Xserver/hw/xfree86/drivers/glint/glint.h Sun Mar 18 21:36:41 2001
193@@ -120,6 +120,7 @@
194 Bool UseBlockWrite;
195 Bool UseFireGL3000;
196 Bool VGAcore;
197+ Bool ScanlineDirect;
198 int MXFbSize;
199 CARD32 rasterizerMode;
200 int MinClock;
201@@ -141,6 +142,7 @@
202 DrawablePtr CurrentDrawable;
203 I2CBusPtr DDCBus, VSBus;
204 CARD8* XAAScanlineColorExpandBuffers[2];
205+ CARD8* ScratchBuffer;
206 CARD32 RasterizerSwap;
207 int PM3_Config2D;
208 int PM3_Render2D;
209@@ -282,6 +284,10 @@
210 LOCO *colors, VisualPtr pVisual);
211 void Permedia2LoadPalette16(ScrnInfoPtr pScrn, int numColors, int *indices,
212 LOCO *colors, VisualPtr pVisual);
213+void Permedia3LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
214+ LOCO *colors, VisualPtr pVisual);
215+void Permedia3LoadPalette16(ScrnInfoPtr pScrn, int numColors, int *indices,
216+ LOCO *colors, VisualPtr pVisual);
217 void Permedia2I2CUDelay(I2CBusPtr b, int usec);
218 void Permedia2I2CPutBits(I2CBusPtr b, int scl, int sda);
219 void Permedia2I2CGetBits(I2CBusPtr b, int *scl, int *sda);
220@@ -314,4 +320,8 @@
221 CARD32 GLINT_VERB_READ_REG(GLINTPtr, CARD32 r, char *file, int line);
222
223 void GLINTRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
224+
225+void GLINT_MoveBYTES(CARD32* dest, unsigned char* src, int dwords);
226+void GLINT_MoveWORDS(CARD32* dest, unsigned short* src, int dwords);
227+void GLINT_MoveDWORDS(CARD32* dest, CARD32* src, int dwords);
228 #endif /* _GLINT_H_ */
229diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c
230--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c Fri Dec 8 22:58:55 2000
231+++ xc/programs/Xserver/hw/xfree86/drivers/glint/glint_driver.c Sun Mar 18 21:39:59 2001
232@@ -2610,8 +2610,17 @@
233 if (!miCreateDefColormap(pScreen))
234 return FALSE;
235
236+ if (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) {
237+ if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits,
238+ (pGlint->FBDev) ? fbdevHWLoadPalette :
239+ ((pScrn->depth == 16) ? Permedia3LoadPalette16:Permedia3LoadPalette),
240+ NULL,
241+ CMAP_RELOAD_ON_MODE_SWITCH |
242+ ((pScrn->overlayFlags & OVERLAY_8_32_PLANAR)
243+ ? 0 : CMAP_PALETTED_TRUECOLOR)))
244+ return FALSE;
245+ } else
246 if ((pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA2V) ||
247- (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) ||
248 (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA2) ||
249 (pGlint->Chipset == PCI_VENDOR_TI_CHIP_PERMEDIA2)) {
250 if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits,
251@@ -3051,16 +3060,86 @@
252 {
253 if (xf86GetVerbosity() > 2)
254 ErrorF("[0x%04x] <- 0x%08x (%s, %d)\n", r, v, file, line);
255+#if defined(__alpha__)
256+ GLINT_WRITE_REG(v, r);
257+#else
258 *(volatile CARD32 *)((char *) pGlint->IOBase + r) = v;
259+#endif
260 }
261
262 CARD32
263 GLINT_VERB_READ_REG(GLINTPtr pGlint, CARD32 r, char *file, int line)
264 {
265- CARD32 v = *(volatile CARD32 *)((char *) pGlint->IOBase + r);
266+ CARD32 v;
267
268+#if defined(__alpha__)
269+ v = GLINT_READ_REG(r);
270+#else
271+ v = *(volatile CARD32 *)((char *) pGlint->IOBase + r);
272+#endif
273 if (xf86GetVerbosity() > 2)
274 ErrorF("[0x%04x] -> 0x%08x (%s, %d)\n", r, v, file, line);
275 return v;
276 }
277 #endif
278+
279+void GLINT_MoveBYTES(
280+ register CARD32* dest,
281+ register unsigned char* src,
282+ register int dwords)
283+{
284+#if defined(__alpha__)
285+ write_mem_barrier();
286+#endif
287+ while(dwords) {
288+ *dest = *src;
289+ src += 1;
290+ dest += 1;
291+ dwords -= 1;
292+ }
293+}
294+
295+void GLINT_MoveWORDS(
296+ register CARD32* dest,
297+ register unsigned short* src,
298+ register int dwords)
299+{
300+#if defined(__alpha__)
301+ write_mem_barrier();
302+#endif
303+ while(dwords & ~0x01) {
304+ *dest = *src;
305+ *(dest + 1) = *(src + 1);
306+ src += 2;
307+ dest += 2;
308+ dwords -= 2;
309+ }
310+ if(dwords)
311+ *dest = *src;
312+ return;
313+}
314+
315+void GLINT_MoveDWORDS(
316+ register CARD32* dest,
317+ register CARD32* src,
318+ register int dwords)
319+{
320+#if defined(__alpha__)
321+ write_mem_barrier();
322+#endif
323+ while(dwords & ~0x03) {
324+ *dest = *src;
325+ *(dest + 1) = *(src + 1);
326+ *(dest + 2) = *(src + 2);
327+ *(dest + 3) = *(src + 3);
328+ src += 4;
329+ dest += 4;
330+ dwords -= 4;
331+ }
332+ if (!dwords) return;
333+ *dest = *src;
334+ if (dwords == 1) return;
335+ *(dest + 1) = *(src + 1);
336+ if (dwords == 2) return;
337+ *(dest + 2) = *(src + 2);
338+}
339diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h xc/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h
340--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h Fri Oct 27 21:23:07 2000
341+++ xc/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h Sun Mar 18 17:05:13 2001
342@@ -1201,10 +1201,17 @@
343
344 #define GLINT_SLOW_WRITE_REG(v,r) \
345 do{ \
346- GLINTDACDelay(5); \
347+ mem_barrier(); \
348+ GLINT_WAIT(1); \
349+ mem_barrier(); \
350 GLINT_WRITE_REG(v,r); \
351- GLINTDACDelay(5); \
352 }while(0)
353+
354+#define GLINT_SET_INDEX(index) \
355+do{ \
356+ GLINT_SLOW_WRITE_REG(((index)>>8)&0xff,PM2VDACIndexRegHigh); \
357+ GLINT_SLOW_WRITE_REG((index)&0xff,PM2VDACIndexRegLow); \
358+} while(0)
359
360 #define GLINT_SECONDARY_SLOW_WRITE_REG(v,r) \
361 do{ \
362diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm2_accel.c
363--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2_accel.c Fri Mar 31 17:55:43 2000
364+++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm2_accel.c Sun Mar 18 16:55:14 2001
365@@ -356,8 +356,6 @@
366 Permedia2SubsequentColorExpandScanline;
367 }
368
369- infoPtr->ColorExpandRange = MAX_FIFO_ENTRIES;
370-
371 infoPtr->WriteBitmap = Permedia2WriteBitmap;
372
373 if (pScrn->bitsPerPixel == 8)
374@@ -427,10 +425,14 @@
375 CHECKCLIPPING;
376
377 while (GLINT_READ_REG(DMACount) != 0);
378- GLINT_WAIT(1);
379- GLINT_WRITE_REG(0, GlintSync);
380+
381+ GLINT_SLOW_WRITE_REG(0xc00, FilterMode);
382+
383+ GLINT_WAIT(2);
384+ GLINT_SLOW_WRITE_REG(0, GlintSync);
385+
386 do {
387- while(GLINT_READ_REG(OutFIFOWords) == 0);
388+ while(GLINT_READ_REG(OutFIFOWords) == 0);
389 #define Sync_tag 0x188
390 } while (GLINT_READ_REG(OutputFIFO) != Sync_tag);
391 }
392@@ -733,63 +735,6 @@
393 TRACE_EXIT("Permedia2SubsequentFillRectSolid");
394 }
395
396-static void MoveBYTE(
397- register CARD32* dest,
398- register unsigned char* src,
399- register int dwords
400-)
401-{
402- while(dwords) {
403- *dest = *src;
404- src += 1;
405- dest += 1;
406- dwords -= 1;
407- }
408-}
409-
410-static void MoveWORDS(
411- register CARD32* dest,
412- register unsigned short* src,
413- register int dwords
414-)
415-{
416- while(dwords & ~0x01) {
417- *dest = *src;
418- *(dest + 1) = *(src + 1);
419- src += 2;
420- dest += 2;
421- dwords -= 2;
422- }
423- switch(dwords) {
424- case 0: return;
425- case 1: *dest = *src;
426- return;
427- }
428-}
429-
430-static void MoveDWORDS(
431- register CARD32* dest,
432- register CARD32* src,
433- register int dwords )
434-{
435- while(dwords & ~0x03) {
436- *dest = *src;
437- *(dest + 1) = *(src + 1);
438- *(dest + 2) = *(src + 2);
439- *(dest + 3) = *(src + 3);
440- src += 4;
441- dest += 4;
442- dwords -= 4;
443- }
444- if (!dwords) return;
445- *dest = *src;
446- if (dwords == 1) return;
447- *(dest + 1) = *(src + 1);
448- if (dwords == 2) return;
449- *(dest + 2) = *(src + 2);
450-}
451-
452-
453 static void
454 Permedia2SetupForMono8x8PatternFill24bpp(ScrnInfoPtr pScrn,
455 int patternx, int patterny,
456@@ -1117,10 +1062,10 @@
457 Permedia2SetClippingRectangle(pScrn,x+skipleft,y,x+w,y+h);
458
459 if (pScrn->bitsPerPixel == 24) {
460- GLINT_WAIT(10);
461+ GLINT_WAIT(10);
462 } else {
463 GLINT_WAIT(11);
464- DO_PLANEMASK(planemask);
465+ DO_PLANEMASK(planemask);
466 }
467 LOADROP(rop);
468 Permedia2LoadCoord(pScrn, x&0xFFFF, y, w, h);
469@@ -1137,39 +1082,40 @@
470 mode = 0;
471 GLINT_WRITE_REG(UNIT_ENABLE, ColorDDAMode);
472 GLINT_WRITE_REG(BitMaskPackingEachScanline|
473- pGlint->RasterizerSwap,RasterizerMode);
474+ pGlint->RasterizerSwap,RasterizerMode);
475 }
476
477 if(bg == -1) {
478 /* >>>>> set fg <<<<<<<< */
479 REPLICATE(fg);
480- if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
481- GLINT_WRITE_REG(fg, FBBlockColor);
482+ if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
483+ GLINT_WRITE_REG(fg, FBBlockColor);
484 } else {
485- GLINT_WRITE_REG(fg, ConstantColor);
486+ GLINT_WRITE_REG(fg, ConstantColor);
487 }
488 } else if(rop == GXcopy) {
489- /* >>>>> set bg <<<<<<< */
490- /* >>>>> draw rect (x,y,w,h) */
491- REPLICATE(bg);
492- if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
493+ /* >>>>> set bg <<<<<<< */
494+ /* >>>>> draw rect (x,y,w,h) */
495+ REPLICATE(bg);
496+ if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
497 GLINT_WRITE_REG(bg, FBBlockColor);
498 } else {
499 GLINT_WRITE_REG(bg, ConstantColor);
500 }
501- GLINT_WRITE_REG(PrimitiveRectangle | XPositive | YPositive |mode,Render);
502+ GLINT_WRITE_REG(PrimitiveRectangle | XPositive | YPositive |mode,
503+ Render);
504 /* >>>>>> set fg <<<<<< */
505 REPLICATE(fg);
506- if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
507+ if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
508 GLINT_WRITE_REG(fg, FBBlockColor);
509 } else {
510 GLINT_WRITE_REG(fg, ConstantColor);
511 }
512 } else {
513- SecondPass = TRUE;
514+ SecondPass = TRUE;
515 /* >>>>> set fg <<<<<<< */
516 REPLICATE(fg);
517- if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
518+ if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
519 GLINT_WRITE_REG(fg, FBBlockColor);
520 } else {
521 GLINT_WRITE_REG(fg, ConstantColor);
522@@ -1188,8 +1134,8 @@
523 GLINT_WAIT(dwords);
524 /* 0x0D is the TAG value for BitMaskPattern */
525 GLINT_WRITE_REG(((dwords - 1) << 16) | 0x0D, OutputFIFO);
526- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
527- (CARD32 *)srcpntr, dwords);
528+ GLINT_MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
529+ (CARD32 *)srcpntr, dwords);
530 srcpntr += srcwidth;
531 }
532
533@@ -1198,12 +1144,13 @@
534 /* >>>>>> invert bitmask and set bg <<<<<<<< */
535 REPLICATE(bg);
536 GLINT_WAIT(3);
537- if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
538- GLINT_WRITE_REG(InvertBitMask|pGlint->RasterizerSwap,RasterizerMode);
539+ if ((pScrn->bitsPerPixel != 24) && (rop == GXcopy)) {
540+ GLINT_WRITE_REG(InvertBitMask|pGlint->RasterizerSwap,
541+ RasterizerMode);
542 GLINT_WRITE_REG(bg, FBBlockColor);
543 } else {
544- GLINT_WRITE_REG(InvertBitMask|BitMaskPackingEachScanline|
545- pGlint->RasterizerSwap, RasterizerMode);
546+ GLINT_WRITE_REG(InvertBitMask|BitMaskPackingEachScanline|
547+ pGlint->RasterizerSwap, RasterizerMode);
548 GLINT_WRITE_REG(bg, ConstantColor);
549 }
550 goto SECOND_PASS;
551@@ -1276,13 +1223,15 @@
552 count = dwords;
553 address = ((y * pScrn->displayWidth) + x) >> 2;
554 srcp = (CARD32*)src;
555+ GLINT_WAIT(1);
556 GLINT_WRITE_REG(address, TextureDownloadOffset);
557 while(count >= MAX_FIFO_ENTRIES) {
558 GLINT_WAIT(MAX_FIFO_ENTRIES);
559 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
560 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x11 << 4) |
561 0x0D, OutputFIFO);
562- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
563+ GLINT_MoveDWORDS(
564+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
565 (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
566 count -= MAX_FIFO_ENTRIES - 1;
567 address += MAX_FIFO_ENTRIES - 1;
568@@ -1293,7 +1242,8 @@
569 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
570 GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D,
571 OutputFIFO);
572- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
573+ GLINT_MoveDWORDS(
574+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
575 (CARD32*)srcp, count);
576 }
577 src += srcwidth;
578@@ -1304,7 +1254,7 @@
579 } else {
580 char align = (x & pGlint->bppalign);
581
582-
583+ GLINT_WAIT(1);
584 GLINT_WRITE_REG(UNIT_DISABLE, ColorDDAMode);
585 if (rop == GXcopy) {
586 GLINT_WAIT(6);
587@@ -1329,7 +1279,8 @@
588 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
589 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) |
590 0x05, OutputFIFO);
591- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
592+ GLINT_MoveDWORDS(
593+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
594 (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
595 count -= MAX_FIFO_ENTRIES - 1;
596 srcp += MAX_FIFO_ENTRIES - 1;
597@@ -1339,7 +1290,8 @@
598 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
599 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
600 0x05, OutputFIFO);
601- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
602+ GLINT_MoveDWORDS(
603+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
604 (CARD32*)srcp, count);
605 }
606 src += srcwidth;
607@@ -1353,7 +1305,8 @@
608 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
609 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) |
610 0x05, OutputFIFO);
611- MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
612+ GLINT_MoveBYTES(
613+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
614 (unsigned char *)srcpbyte, MAX_FIFO_ENTRIES - 1);
615 count -= MAX_FIFO_ENTRIES - 1;
616 srcpbyte += MAX_FIFO_ENTRIES - 1;
617@@ -1363,7 +1316,8 @@
618 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
619 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
620 0x05, OutputFIFO);
621- MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
622+ GLINT_MoveBYTES(
623+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
624 (unsigned char *)srcpbyte, count);
625 }
626 src += srcwidth;
627@@ -1435,13 +1389,15 @@
628 count = dwords;
629 address = ((y * pScrn->displayWidth) + x) >> 1;
630 srcp = (CARD32*)src;
631+ GLINT_WAIT(1);
632 GLINT_WRITE_REG(address, TextureDownloadOffset);
633 while(count >= MAX_FIFO_ENTRIES) {
634 GLINT_WAIT(MAX_FIFO_ENTRIES);
635 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
636 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x11 << 4) |
637 0x0D, OutputFIFO);
638- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
639+ GLINT_MoveDWORDS(
640+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
641 (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
642 count -= MAX_FIFO_ENTRIES - 1;
643 address += MAX_FIFO_ENTRIES - 1;
644@@ -1452,7 +1408,8 @@
645 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
646 GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D,
647 OutputFIFO);
648- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
649+ GLINT_MoveDWORDS(
650+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
651 (CARD32*)srcp, count);
652 }
653 src += srcwidth;
654@@ -1488,7 +1445,8 @@
655 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
656 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) |
657 0x05, OutputFIFO);
658- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
659+ GLINT_MoveDWORDS(
660+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
661 (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
662 count -= MAX_FIFO_ENTRIES - 1;
663 srcp += MAX_FIFO_ENTRIES - 1;
664@@ -1498,7 +1456,8 @@
665 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
666 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
667 0x05, OutputFIFO);
668- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
669+ GLINT_MoveDWORDS(
670+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
671 (CARD32*)srcp, count);
672 }
673 src += srcwidth;
674@@ -1512,7 +1471,8 @@
675 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
676 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) |
677 0x05, OutputFIFO);
678- MoveWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
679+ GLINT_MoveWORDS(
680+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
681 (unsigned short *)srcpword, MAX_FIFO_ENTRIES - 1);
682 count -= MAX_FIFO_ENTRIES - 1;
683 srcpword += MAX_FIFO_ENTRIES - 1;
684@@ -1522,7 +1482,8 @@
685 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
686 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
687 0x05, OutputFIFO);
688- MoveWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
689+ GLINT_MoveWORDS(
690+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
691 (unsigned short *)srcpword, count);
692 }
693 src += srcwidth;
694@@ -1590,7 +1551,8 @@
695 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
696 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) |
697 0x05, OutputFIFO);
698- MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
699+ GLINT_MoveBYTES(
700+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
701 (unsigned char *)srcpbyte, MAX_FIFO_ENTRIES - 1);
702 count -= MAX_FIFO_ENTRIES - 1;
703 srcpbyte += MAX_FIFO_ENTRIES - 1;
704@@ -1600,7 +1562,8 @@
705 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
706 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
707 0x05, OutputFIFO);
708- MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
709+ GLINT_MoveBYTES(
710+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
711 (unsigned char *)srcpbyte, count);
712 }
713 src += srcwidth;
714@@ -1613,7 +1576,8 @@
715 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
716 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) |
717 0x05, OutputFIFO);
718- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
719+ GLINT_MoveDWORDS(
720+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
721 (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
722 count -= MAX_FIFO_ENTRIES - 1;
723 srcp += MAX_FIFO_ENTRIES - 1;
724@@ -1623,7 +1587,8 @@
725 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
726 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
727 0x05, OutputFIFO);
728- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
729+ GLINT_MoveDWORDS(
730+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
731 (CARD32*)srcp, count);
732 }
733 src += srcwidth;
734@@ -1689,13 +1654,15 @@
735 count = dwords;
736 address = (y * pScrn->displayWidth) + x;
737 srcp = (CARD32*)src;
738+ GLINT_WAIT(1);
739 GLINT_WRITE_REG(address, TextureDownloadOffset);
740 while(count >= MAX_FIFO_ENTRIES) {
741 GLINT_WAIT(MAX_FIFO_ENTRIES);
742 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
743 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x11 << 4) |
744 0x0D, OutputFIFO);
745- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
746+ GLINT_MoveDWORDS(
747+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
748 (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
749 count -= MAX_FIFO_ENTRIES - 1;
750 address += MAX_FIFO_ENTRIES - 1;
751@@ -1706,7 +1673,8 @@
752 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
753 GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D,
754 OutputFIFO);
755- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
756+ GLINT_MoveDWORDS(
757+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
758 (CARD32*)srcp, count);
759 }
760 src += srcwidth;
761@@ -1732,7 +1700,8 @@
762 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
763 GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) |
764 0x05, OutputFIFO);
765- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
766+ GLINT_MoveDWORDS(
767+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
768 (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
769 count -= MAX_FIFO_ENTRIES - 1;
770 srcp += MAX_FIFO_ENTRIES - 1;
771@@ -1742,7 +1711,8 @@
772 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
773 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
774 0x05, OutputFIFO);
775- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
776+ GLINT_MoveDWORDS(
777+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
778 (CARD32*)srcp, count);
779 }
780 src += srcwidth;
781diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2ramdac.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm2ramdac.c
782--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2ramdac.c Sat Jul 17 23:26:57 1999
783+++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm2ramdac.c Sun Mar 18 22:26:08 2001
784@@ -104,16 +104,21 @@
785 VisualPtr pVisual
786 ){
787 GLINTPtr pGlint = GLINTPTR(pScrn);
788- int i, index, shift;
789+ int i, index, shift = 0, j, repeat = 1;
790
791- shift = (pScrn->depth == 15) ? 3 : 0;
792+ if (pScrn->depth == 15) {
793+ repeat = 8;
794+ shift = 3;
795+ }
796
797 for(i = 0; i < numColors; i++) {
798 index = indices[i];
799- Permedia2WriteAddress(pScrn, index << shift);
800- Permedia2WriteData(pScrn, colors[index].red);
801- Permedia2WriteData(pScrn, colors[index].green);
802- Permedia2WriteData(pScrn, colors[index].blue);
803+ for (j = 0; j < repeat; j++) {
804+ Permedia2WriteAddress(pScrn, (index << shift)+j);
805+ Permedia2WriteData(pScrn, colors[index].red);
806+ Permedia2WriteData(pScrn, colors[index].green);
807+ Permedia2WriteData(pScrn, colors[index].blue);
808+ }
809 /* for video i/o */
810 GLINT_SLOW_WRITE_REG(index, TexelLUTIndex);
811 GLINT_SLOW_WRITE_REG((colors[index].red & 0xFF) |
812@@ -132,14 +137,16 @@
813 VisualPtr pVisual
814 ){
815 GLINTPtr pGlint = GLINTPTR(pScrn);
816- int i, index;
817+ int i, index, j;
818
819 for(i = 0; i < numColors; i++) {
820 index = indices[i];
821- Permedia2WriteAddress(pScrn, index << 2);
822- Permedia2WriteData(pScrn, colors[index >> 1].red);
823- Permedia2WriteData(pScrn, colors[index].green);
824- Permedia2WriteData(pScrn, colors[index >> 1].blue);
825+ for (j = 0; j < 4; j++) {
826+ Permedia2WriteAddress(pScrn, (index << 2)+j);
827+ Permedia2WriteData(pScrn, colors[index >> 1].red);
828+ Permedia2WriteData(pScrn, colors[index].green);
829+ Permedia2WriteData(pScrn, colors[index >> 1].blue);
830+ }
831 GLINT_SLOW_WRITE_REG(index, TexelLUTIndex);
832 GLINT_SLOW_WRITE_REG((colors[index].red & 0xFF) |
833 ((colors[index].green & 0xFF) << 8) |
834@@ -147,10 +154,12 @@
835 TexelLUTData);
836
837 if(index <= 31) {
838- Permedia2WriteAddress(pScrn, index << 3);
839- Permedia2WriteData(pScrn, colors[index].red);
840- Permedia2WriteData(pScrn, colors[(index << 1) + 1].green);
841- Permedia2WriteData(pScrn, colors[index].blue);
842+ for (j = 0; j < 4; j++) {
843+ Permedia2WriteAddress(pScrn, (index << 3)+j);
844+ Permedia2WriteData(pScrn, colors[index].red);
845+ Permedia2WriteData(pScrn, colors[(index << 1) + 1].green);
846+ Permedia2WriteData(pScrn, colors[index].blue);
847+ }
848 }
849 }
850 }
851diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c
852--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c Sat Mar 17 17:57:15 2001
853+++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c Sun Mar 18 17:43:30 2001
854@@ -406,7 +406,10 @@
855 int bg, int fg
856 )
857 {
858- /* A 2 color cursor uses last 2 indexes into hardware cursor palette */
859+ GLINTPtr pGlint = GLINTPTR(pScrn);
860+
861+ if (pGlint->Chipset == PCI_VENDOR_3DLABS_CHIP_PERMEDIA3) {
862+ /* PM3 uses last 2 indexes into hardware cursor palette fg first...*/
863 Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+39, 0x00, (fg>>16)&0xff);
864 Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+40, 0x00, (fg>>8)&0xff);
865 Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+41, 0x00, fg & 0xff);
866@@ -414,6 +417,16 @@
867 Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+42, 0x00, (bg>>16)&0xff);
868 Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+43, 0x00, (bg>>8)&0xff);
869 Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+44, 0x00, bg & 0xff);
870+ } else {
871+ /* PM2v uses first 2 indexes into hardware cursor palette bg first...*/
872+ Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+0, 0x00, (bg>>16)&0xff);
873+ Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+1, 0x00, (bg>>8)&0xff);
874+ Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+2, 0x00, bg & 0xff);
875+
876+ Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+3, 0x00, (fg>>16)&0xff);
877+ Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+4, 0x00, (fg>>8)&0xff);
878+ Permedia2vOutIndReg(pScrn, PM2VDACRDCursorPalette+5, 0x00, fg & 0xff);
879+ }
880 }
881
882 static Bool
883diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2vramdac.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm2vramdac.c
884--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm2vramdac.c Fri Feb 12 17:52:05 1999
885+++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm2vramdac.c Sun Mar 18 16:51:30 2001
886@@ -43,8 +43,7 @@
887 GLINTPtr pGlint = GLINTPTR(pScrn);
888 unsigned char tmp = 0x00;
889
890- GLINT_SLOW_WRITE_REG((reg>>8) & 0xff, PM2VDACIndexRegHigh);
891- GLINT_SLOW_WRITE_REG(reg&0xff, PM2VDACIndexRegLow);
892+ GLINT_SET_INDEX(reg);
893
894 if (mask != 0x00)
895 tmp = GLINT_READ_REG (PM2VDACIndexData) & mask;
896@@ -58,8 +57,7 @@
897 GLINTPtr pGlint = GLINTPTR(pScrn);
898 unsigned char ret;
899
900- GLINT_SLOW_WRITE_REG (reg&0xff, PM2VDACIndexRegLow);
901- GLINT_SLOW_WRITE_REG((reg>>8) & 0xff, PM2VDACIndexRegHigh);
902+ GLINT_SET_INDEX(reg);
903 ret = GLINT_READ_REG (PM2VDACIndexData);
904
905 return (ret);
906diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm3_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm3_accel.c
907--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm3_accel.c Wed Nov 29 11:42:17 2000
908+++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm3_accel.c Sun Mar 18 20:15:21 2001
909@@ -47,7 +47,6 @@
910 #include "xaalocal.h" /* For replacements */
911
912 #define DEBUG 0
913-#define USE_DIRECT_FIFO_WRITES 1
914
915 #if DEBUG
916 # define TRACE_ENTER(str) ErrorF("pm3_accel: " str " %d\n",pScrn->scrnIndex)
917@@ -86,26 +85,35 @@
918 int x_offset, int y_offset, int x, int y,
919 int w, int h);
920 /* Color Expansion Fills */
921-static void Permedia3SetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
922- int fg, int bg, int rop,unsigned int planemask);
923-static void Permedia3SubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
924- int x, int y, int w, int h, int skipleft);
925+static void Permedia3SetupForScanlineCPUToScreenColorExpandFill(
926+ ScrnInfoPtr pScrn,
927+ int fg, int bg, int rop,
928+ unsigned int planemask);
929+static void Permedia3SubsequentScanlineCPUToScreenColorExpandFill(
930+ ScrnInfoPtr pScrn, int x,
931+ int y, int w, int h, int skipleft);
932+static void Permedia3SubsequentColorExpandScanline(
933+ ScrnInfoPtr pScrn,
934+ int bufno);
935 /* Direct Fifo Bitmap Writes */
936 static void Permedia3WriteBitmap(ScrnInfoPtr pScrn, int x, int y, int w, int h,
937 unsigned char *src, int srcwidth, int skipleft,
938 int fg, int bg, int rop,unsigned int planemask);
939 /* Images Writes */
940-static void Permedia3SetupForImageWrite(ScrnInfoPtr pScrn, int rop,
941+static void Permedia3SetupForScanlineImageWrite(ScrnInfoPtr pScrn, int rop,
942 unsigned int planemask, int trans_color,
943 int bpp, int depth);
944-static void Permedia3SubsequentImageWriteRect(ScrnInfoPtr pScrn,
945+static void Permedia3SubsequentScanlineImageWriteRect(ScrnInfoPtr pScrn,
946 int x, int y, int w, int h, int skipleft);
947+static void Permedia3SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno);
948 /* Direct Fifo Pixmap Writes */
949 static void Permedia3WritePixmap(ScrnInfoPtr pScrn, int x, int y, int w, int h,
950 unsigned char *src, int srcwidth, int rop,
951 unsigned int planemask, int transparency_color,
952 int bpp, int depth);
953
954+#define MAX_FIFO_ENTRIES 120
955+
956 void
957 Permedia3InitializeEngine(ScrnInfoPtr pScrn)
958 {
959@@ -407,51 +415,52 @@
960 infoPtr->SubsequentMono8x8PatternFillRect =
961 Permedia3SubsequentMono8x8PatternFillRect;
962
963-#if USE_DIRECT_FIFO_WRITES
964- /* Direct Fifo Bitmap Writes */
965+ /* Bitmap Writes */
966 infoPtr->WriteBitmapFlags = 0;
967 infoPtr->WriteBitmap = Permedia3WriteBitmap;
968-#endif
969-
970- /* Color Expand Fills */
971- infoPtr->CPUToScreenColorExpandFillFlags =
972- /*
973- SYNC_AFTER_COLOR_EXPAND |
974- */
975- LEFT_EDGE_CLIPPING |
976- BIT_ORDER_IN_BYTE_LSBFIRST |
977- CPU_TRANSFER_BASE_FIXED |
978- CPU_TRANSFER_PAD_DWORD;
979- infoPtr->ColorExpandBase = pGlint->IOBase + BitMaskPattern;
980- infoPtr->ColorExpandRange = 4;
981- infoPtr->SetupForCPUToScreenColorExpandFill =
982- Permedia3SetupForCPUToScreenColorExpandFill;
983- infoPtr->SubsequentCPUToScreenColorExpandFill =
984- Permedia3SubsequentCPUToScreenColorExpandFill;
985
986-#if USE_DIRECT_FIFO_WRITES
987- /* Direct Fifo Images Writes */
988+ /* Pixmap Writes */
989 infoPtr->WritePixmapFlags = 0;
990 infoPtr->WritePixmap = Permedia3WritePixmap;
991-#else
992+
993+ /* Color Expand Fills */
994+ infoPtr->ScanlineCPUToScreenColorExpandFillFlags =
995+ LEFT_EDGE_CLIPPING |
996+ LEFT_EDGE_CLIPPING_NEGATIVE_X |
997+ BIT_ORDER_IN_BYTE_LSBFIRST |
998+ CPU_TRANSFER_PAD_DWORD;
999+
1000+ infoPtr->NumScanlineColorExpandBuffers = 1;
1001+ pGlint->ScratchBuffer = xalloc(((pScrn->virtualX+62)/32*4)
1002+ + (pScrn->virtualX
1003+ * pScrn->bitsPerPixel / 8));
1004+ infoPtr->ScanlineColorExpandBuffers =
1005+ pGlint->XAAScanlineColorExpandBuffers;
1006+ pGlint->XAAScanlineColorExpandBuffers[0] =
1007+ pGlint->IOBase + OutputFIFO + 4;
1008+
1009+ infoPtr->SetupForScanlineCPUToScreenColorExpandFill =
1010+ Permedia3SetupForScanlineCPUToScreenColorExpandFill;
1011+ infoPtr->SubsequentScanlineCPUToScreenColorExpandFill =
1012+ Permedia3SubsequentScanlineCPUToScreenColorExpandFill;
1013+ infoPtr->SubsequentColorExpandScanline =
1014+ Permedia3SubsequentColorExpandScanline;
1015+
1016 /* Images Writes */
1017- infoPtr->ImageWriteFlags =
1018- NO_GXCOPY |
1019- /*
1020- SYNC_AFTER_IMAGE_WRITE |
1021- */
1022- LEFT_EDGE_CLIPPING |
1023- LEFT_EDGE_CLIPPING_NEGATIVE_X |
1024- BIT_ORDER_IN_BYTE_LSBFIRST |
1025- CPU_TRANSFER_BASE_FIXED |
1026- CPU_TRANSFER_PAD_DWORD;
1027- infoPtr->ImageWriteBase = pGlint->IOBase + PM3FBSourceData;
1028- infoPtr->ImageWriteRange = 4;
1029- infoPtr->SetupForImageWrite =
1030- Permedia3SetupForImageWrite;
1031- infoPtr->SubsequentImageWriteRect =
1032- Permedia3SubsequentImageWriteRect;
1033-#endif
1034+ infoPtr->ScanlineImageWriteFlags = NO_GXCOPY |
1035+ LEFT_EDGE_CLIPPING |
1036+ LEFT_EDGE_CLIPPING_NEGATIVE_X |
1037+ BIT_ORDER_IN_BYTE_LSBFIRST |
1038+ CPU_TRANSFER_PAD_DWORD;
1039+ infoPtr->NumScanlineImageWriteBuffers = 1;
1040+ infoPtr->ScanlineImageWriteBuffers =
1041+ pGlint->XAAScanlineColorExpandBuffers;
1042+ infoPtr->SetupForScanlineImageWrite =
1043+ Permedia3SetupForScanlineImageWrite;
1044+ infoPtr->SubsequentScanlineImageWriteRect =
1045+ Permedia3SubsequentScanlineImageWriteRect;
1046+ infoPtr->SubsequentImageWriteScanline =
1047+ Permedia3SubsequentImageWriteScanline;
1048
1049 /* Available Framebuffer Area for XAA. */
1050 AvailFBArea.x1 = 0;
1051@@ -461,7 +470,7 @@
1052 pScrn->bitsPerPixel / 8);
1053 /* Alan does this ???
1054 AvailFBArea.y2 = ((pGlint->FbMapSize > 16384*1024) ? 16384*1024 :
1055- pGlint->FbMapSize) / (pScrn->displayWidth
1056+ pGlint->FbMapSize) / (pScrn->displayWidth *
1057 pScrn->bitsPerPixel / 8);
1058 */
1059
1060@@ -491,8 +500,12 @@
1061 CHECKCLIPPING;
1062
1063 while (GLINT_READ_REG(DMACount) != 0);
1064- GLINT_WAIT(1);
1065+
1066+ GLINT_WAIT(3);
1067+ GLINT_WRITE_REG(3, BroadcastMask); /* hack! this shouldn't be needed */
1068+ GLINT_WRITE_REG(0x400, FilterMode);
1069 GLINT_WRITE_REG(0, GlintSync);
1070+
1071 do {
1072 while(GLINT_READ_REG(OutFIFOWords) == 0);
1073 } while (GLINT_READ_REG(OutputFIFO) != PM3SyncTag);
1074@@ -700,11 +713,15 @@
1075 }
1076
1077 /* Color Expansion Fills */
1078-static void Permedia3SetupForCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
1079- int fg, int bg, int rop,unsigned int planemask)
1080-{
1081+static void
1082+Permedia3SetupForScanlineCPUToScreenColorExpandFill(
1083+ ScrnInfoPtr pScrn,
1084+ int fg, int bg,
1085+ int rop,
1086+ unsigned int planemask
1087+){
1088 GLINTPtr pGlint = GLINTPTR(pScrn);
1089- TRACE_ENTER("Permedia3SetupForCPUToScreenColorExpandFill");
1090+
1091 REPLICATE(fg);
1092 pGlint->PM3_Render2D =
1093 PM3Render2D_SpanOperation |
1094@@ -729,14 +746,23 @@
1095 GLINT_WRITE_REG(fg, PM3ForegroundColor);
1096 DO_PLANEMASK(planemask);
1097 GLINT_WRITE_REG(pGlint->PM3_Config2D, PM3Config2D);
1098- TRACE_EXIT("Permedia3SetupForCPUToScreenColorExpandFill");
1099 }
1100-static void Permedia3SubsequentCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
1101- int x, int y, int w, int h, int skipleft)
1102-{
1103+
1104+static void
1105+Permedia3SubsequentScanlineCPUToScreenColorExpandFill(
1106+ ScrnInfoPtr pScrn,
1107+ int x, int y, int w, int h,
1108+ int skipleft
1109+){
1110 GLINTPtr pGlint = GLINTPTR(pScrn);
1111- TRACE_ENTER("Permedia3SubsequentCPUToScreenColorExpandFill");
1112- GLINT_WAIT(4);
1113+
1114+ TRACE_ENTER("Permedia2SubsequentScanlineCPUToScreenColorExpandFill");
1115+
1116+ pGlint->dwords = ((w + 31) >> 5); /* dwords per scanline */
1117+
1118+ pGlint->cpucount = h;
1119+
1120+ GLINT_WAIT(5);
1121 GLINT_WRITE_REG(((y&0x0fff)<<16)|((x+skipleft)&0x0fff), ScissorMinXY);
1122 GLINT_WRITE_REG((((y+h)&0x0fff)<<16)|((x+w)&0x0fff), ScissorMaxXY);
1123 GLINT_WRITE_REG(
1124@@ -746,16 +772,60 @@
1125 GLINT_WRITE_REG(pGlint->PM3_Render2D |
1126 PM3Render2D_Width(w) | PM3Render2D_Height(h),
1127 PM3Render2D);
1128- TRACE_EXIT("Permedia3SubsequentCPUToScreenColorExpandFill");
1129+
1130+#ifdef __alpha__
1131+ if (0) /* force ALPHA to use indirect always */
1132+#else
1133+ if ((pGlint->dwords*h) < MAX_FIFO_ENTRIES)
1134+#endif
1135+ {
1136+ /* Turn on direct for less than 120 dword colour expansion */
1137+ pGlint->XAAScanlineColorExpandBuffers[0] = pGlint->IOBase+OutputFIFO+4;
1138+ pGlint->ScanlineDirect = 1;
1139+ GLINT_WRITE_REG(((pGlint->dwords*h)-1)<<16 | 0x0D, OutputFIFO);
1140+ GLINT_WAIT(pGlint->dwords*h);
1141+ } else {
1142+ /* Use indirect for anything else */
1143+ pGlint->XAAScanlineColorExpandBuffers[0] = pGlint->ScratchBuffer;
1144+ pGlint->ScanlineDirect = 0;
1145+ }
1146+
1147+ pGlint->cpucount--;
1148 }
1149
1150+static void
1151+Permedia3SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno)
1152+{
1153+ GLINTPtr pGlint = GLINTPTR(pScrn);
1154+ CARD32 *srcp = (CARD32*)pGlint->XAAScanlineColorExpandBuffers[bufno];
1155+ int dwords = pGlint->dwords;
1156+
1157+ if (!pGlint->ScanlineDirect) {
1158+ while(dwords >= MAX_FIFO_ENTRIES) {
1159+ GLINT_WAIT(MAX_FIFO_ENTRIES);
1160+ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | 0x0D, OutputFIFO);
1161+ GLINT_MoveDWORDS(
1162+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1163+ (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
1164+ dwords -= MAX_FIFO_ENTRIES - 1;
1165+ srcp += MAX_FIFO_ENTRIES - 1;
1166+ }
1167+ if(dwords) {
1168+ GLINT_WAIT(dwords + 1);
1169+ GLINT_WRITE_REG(((dwords - 1) << 16) | 0x0D, OutputFIFO);
1170+ GLINT_MoveDWORDS(
1171+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1172+ (CARD32*)srcp, dwords);
1173+ }
1174+ }
1175+}
1176
1177 /* Images Writes */
1178-static void Permedia3SetupForImageWrite(ScrnInfoPtr pScrn, int rop,
1179+static void Permedia3SetupForScanlineImageWrite(ScrnInfoPtr pScrn, int rop,
1180 unsigned int planemask, int trans_color, int bpp, int depth)
1181 {
1182 GLINTPtr pGlint = GLINTPTR(pScrn);
1183- TRACE_ENTER("Permedia3SetupForImageWrite");
1184+ TRACE_ENTER("Permedia3SetupForScanlineImageWrite");
1185 pGlint->PM3_Render2D =
1186 PM3Render2D_SpanOperation |
1187 PM3Render2D_XPositive |
1188@@ -771,14 +841,18 @@
1189 GLINT_WAIT(2);
1190 DO_PLANEMASK(planemask);
1191 GLINT_WRITE_REG(pGlint->PM3_Config2D, PM3Config2D);
1192- TRACE_EXIT("Permedia3SetupForImageWrite");
1193+ TRACE_EXIT("Permedia3SetupForScanlineImageWrite");
1194 }
1195-static void Permedia3SubsequentImageWriteRect(ScrnInfoPtr pScrn,
1196+
1197+static void Permedia3SubsequentScanlineImageWriteRect(ScrnInfoPtr pScrn,
1198 int x, int y, int w, int h, int skipleft)
1199 {
1200 GLINTPtr pGlint = GLINTPTR(pScrn);
1201- TRACE_ENTER("Permedia3SubsequentImageWrite");
1202- GLINT_WAIT(4);
1203+ TRACE_ENTER("Permedia3SubsequentScanlineImageWrite");
1204+ pGlint->dwords = (((w * pScrn->bitsPerPixel) + 3) >> 2); /* per scanline */
1205+
1206+ pGlint->cpucount = h;
1207+ GLINT_WAIT(5);
1208 GLINT_WRITE_REG(((y&0x0fff)<<16)|((x+skipleft)&0x0fff), ScissorMinXY);
1209 GLINT_WRITE_REG((((y+h)&0x0fff)<<16)|((x+w)&0x0fff), ScissorMaxXY);
1210 GLINT_WRITE_REG(
1211@@ -788,18 +862,63 @@
1212 GLINT_WRITE_REG(pGlint->PM3_Render2D |
1213 PM3Render2D_Width(w) | PM3Render2D_Height(h),
1214 PM3Render2D);
1215- TRACE_EXIT("Permedia3SubsequentImageWrite");
1216-}
1217
1218+#ifdef __alpha__
1219+ if (0) /* force ALPHA to use indirect always */
1220+#else
1221+ if (pGlint->dwords < MAX_FIFO_ENTRIES)
1222+#endif
1223+ {
1224+ /* Turn on direct for less than 120 dword colour expansion */
1225+ pGlint->XAAScanlineColorExpandBuffers[0] = pGlint->IOBase+OutputFIFO+4;
1226+ pGlint->ScanlineDirect = 1;
1227+ GLINT_WRITE_REG(((pGlint->dwords*h)-1)<<16 | (0x15<<4) | 0x05,
1228+ OutputFIFO);
1229+ GLINT_WAIT(pGlint->dwords);
1230+ } else {
1231+ /* Use indirect for anything else */
1232+ pGlint->XAAScanlineColorExpandBuffers[0] = pGlint->ScratchBuffer;
1233+ pGlint->ScanlineDirect = 0;
1234+ }
1235
1236-/* Defines for Direct Fifo access */
1237+ pGlint->cpucount--;
1238+ TRACE_EXIT("Permedia3SubsequentScanlineImageWrite");
1239+}
1240
1241-#define WriteRange 120
1242-#define PciRetryWriteRange 1023
1243-#define WriteBase_Fixed ((CARD32 *)(pGlint->IOBase + PM3FBSourceData))
1244-#define WriteBase ((CARD32 *)(pGlint->IOBase + OutputFIFO + 4))
1245+static void
1246+Permedia3SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno)
1247+{
1248+ GLINTPtr pGlint = GLINTPTR(pScrn);
1249+ int dwords = pGlint->dwords;
1250
1251-/* Direct Fifo Bitmap Writes */
1252+ if (pGlint->ScanlineDirect) {
1253+ if (pGlint->cpucount--)
1254+ GLINT_WAIT(dwords);
1255+ return;
1256+ } else {
1257+ while(dwords >= MAX_FIFO_ENTRIES) {
1258+ GLINT_WAIT(MAX_FIFO_ENTRIES);
1259+ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) |
1260+ 0x05, OutputFIFO);
1261+ GLINT_MoveDWORDS(
1262+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1263+ (CARD32*)pGlint->XAAScanlineColorExpandBuffers[bufno],
1264+ MAX_FIFO_ENTRIES - 1);
1265+ dwords -= MAX_FIFO_ENTRIES - 1;
1266+ }
1267+ if(dwords) {
1268+ GLINT_WAIT(dwords + 1);
1269+ GLINT_WRITE_REG(((dwords - 1) << 16) | (0x15 << 4) |
1270+ 0x05, OutputFIFO);
1271+ GLINT_MoveDWORDS(
1272+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1273+ (CARD32*)pGlint->XAAScanlineColorExpandBuffers[bufno],
1274+ dwords);
1275+ }
1276+ }
1277+}
1278+
1279+/* Bitmap Writes */
1280
1281 static void
1282 Permedia3WriteBitmap(ScrnInfoPtr pScrn,
1283@@ -810,59 +929,85 @@
1284 unsigned int planemask
1285 )
1286 {
1287- int dwords;
1288- int ApertureRange;
1289+ int dwords, count;
1290+ CARD32 *srcp;
1291 GLINTPtr pGlint = GLINTPTR(pScrn);
1292 TRACE_ENTER("Permedia3WriteBitmap");
1293
1294 w += skipleft;
1295 x -= skipleft;
1296- dwords = (w + 31) >>5;
1297- if (pGlint->UsePCIRetry) ApertureRange = PciRetryWriteRange;
1298- else ApertureRange = WriteRange;
1299
1300 /* width of the stuff to copy in 32 bit words */
1301- Permedia3SetupForCPUToScreenColorExpandFill(pScrn, fg, bg, rop, planemask);
1302- Permedia3SubsequentCPUToScreenColorExpandFill(pScrn, x, y, w, h, skipleft);
1303+ dwords = (w + 31) >>5;
1304
1305- if (dwords > ApertureRange) {
1306- while(h--) {
1307- XAAMoveDWORDS_FixedBase(WriteBase_Fixed, (CARD32*)src, dwords);
1308- src += srcwidth;
1309- }
1310- } else {
1311- /* the src is exatcly as wide as the target rectangle. We copy all
1312- * of it, so no need to separate stuff by scanline */
1313- if(srcwidth == (dwords << 5)) {
1314- /* decrement contains the number of lines that can be
1315- * put in the fifo */
1316- int decrement = ApertureRange/dwords;
1317-
1318- while(h > decrement) {
1319- GLINT_WAIT(dwords * decrement);
1320- GLINT_WRITE_REG((((dwords * decrement)-1) << 16) | 0xd,
1321- OutputFIFO);
1322- XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords * decrement);
1323- src += (srcwidth * decrement);
1324- h -= decrement;
1325- }
1326- if(h) {
1327- GLINT_WAIT(dwords * h);
1328- GLINT_WRITE_REG((((dwords * h)-1) << 16) | 0xd, OutputFIFO);
1329- XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords * h);
1330- }
1331- } else {
1332- while(h--) {
1333- GLINT_WAIT(dwords);
1334- GLINT_WRITE_REG(((dwords-1) << 16) | 0xd, OutputFIFO);
1335- XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords);
1336- src += srcwidth;
1337- }
1338- }
1339+ REPLICATE(fg);
1340+ pGlint->PM3_Render2D =
1341+ PM3Render2D_SpanOperation |
1342+ PM3Render2D_XPositive |
1343+ PM3Render2D_YPositive |
1344+ PM3Render2D_Operation_SyncOnBitMask;
1345+ pGlint->PM3_Config2D =
1346+ PM3Config2D_UserScissorEnable |
1347+ PM3Config2D_UseConstantSource |
1348+ PM3Config2D_ForegroundROPEnable |
1349+ PM3Config2D_ForegroundROP(rop) |
1350+ PM3Config2D_FBWriteEnable;
1351+ if ((rop!=GXclear)&&(rop!=GXset)&&(rop!=GXcopy)&&(rop!=GXcopyInverted))
1352+ pGlint->PM3_Config2D |= PM3Config2D_FBDestReadEnable;
1353+ if (bg != -1) {
1354+ REPLICATE(bg);
1355+ pGlint->PM3_Config2D |= PM3Config2D_OpaqueSpan;
1356+ GLINT_WAIT(8);
1357+ GLINT_WRITE_REG(bg, BackgroundColor);
1358+ }
1359+ else GLINT_WAIT(7);
1360+ GLINT_WRITE_REG(fg, PM3ForegroundColor);
1361+ DO_PLANEMASK(planemask);
1362+ GLINT_WRITE_REG(pGlint->PM3_Config2D, PM3Config2D);
1363+ GLINT_WRITE_REG(((y&0x0fff)<<16)|((x+skipleft)&0x0fff), ScissorMinXY);
1364+ GLINT_WRITE_REG((((y+h)&0x0fff)<<16)|((x+w)&0x0fff), ScissorMaxXY);
1365+ GLINT_WRITE_REG(
1366+ PM3RectanglePosition_XOffset(x) |
1367+ PM3RectanglePosition_YOffset(y),
1368+ PM3RectanglePosition);
1369+ GLINT_WRITE_REG(pGlint->PM3_Render2D |
1370+ PM3Render2D_Width(w) | PM3Render2D_Height(h),
1371+ PM3Render2D);
1372+
1373+#ifdef __alpha__
1374+ mem_barrier(); /* dunno why, but this helps on older Alpha CPUs */
1375+#endif
1376+
1377+ while(h--) {
1378+ count = dwords;
1379+ srcp = (CARD32*)src;
1380+ while(count >= MAX_FIFO_ENTRIES) {
1381+ GLINT_WAIT(MAX_FIFO_ENTRIES);
1382+ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) |
1383+ 0x0D, OutputFIFO);
1384+ GLINT_MoveDWORDS(
1385+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1386+ (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
1387+ count -= MAX_FIFO_ENTRIES - 1;
1388+ srcp += MAX_FIFO_ENTRIES - 1;
1389+ }
1390+ if(count) {
1391+ GLINT_WAIT(count + 1);
1392+ GLINT_WRITE_REG(((count - 1) << 16) | 0x0D, OutputFIFO);
1393+ GLINT_MoveDWORDS(
1394+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1395+ (CARD32*)srcp, count);
1396+ }
1397+ src += srcwidth;
1398 }
1399+
1400+ Permedia3DisableClipping(pScrn);
1401+ Permedia3Sync(pScrn);
1402+
1403 TRACE_EXIT("Permedia3WriteBitmap");
1404 }
1405-/* Direct Fifo Images Writes */
1406+
1407+/* Pixmap Writes */
1408
1409 static void
1410 Permedia3WritePixmap(
1411@@ -876,10 +1021,10 @@
1412 int bpp, int depth
1413 )
1414 {
1415- int dwords;
1416+ int dwords, count;
1417 int skipleft = (long)src & 0x03L;
1418 int Bpp = bpp >> 3;
1419- int ApertureRange;
1420+ CARD32 *srcp;
1421 GLINTPtr pGlint = GLINTPTR(pScrn);
1422 TRACE_ENTER("Permedia3WritePixmap");
1423
1424@@ -896,48 +1041,67 @@
1425
1426 src = (unsigned char*)((long)src & ~0x03L);
1427 }
1428- Permedia3SetupForImageWrite(pScrn, rop, planemask, trans, bpp, depth);
1429- Permedia3SubsequentImageWriteRect(pScrn, x, y, w, h, skipleft);
1430+
1431+ pGlint->PM3_Render2D =
1432+ PM3Render2D_SpanOperation |
1433+ PM3Render2D_XPositive |
1434+ PM3Render2D_YPositive |
1435+ PM3Render2D_Operation_SyncOnHostData;
1436+ pGlint->PM3_Config2D =
1437+ PM3Config2D_UserScissorEnable |
1438+ PM3Config2D_ForegroundROPEnable |
1439+ PM3Config2D_ForegroundROP(rop) |
1440+ PM3Config2D_FBWriteEnable;
1441+ if ((rop!=GXclear)&&(rop!=GXset)&&(rop!=GXcopy)&&(rop!=GXcopyInverted))
1442+ pGlint->PM3_Config2D |= PM3Config2D_FBDestReadEnable;
1443+ GLINT_WAIT(6);
1444+ DO_PLANEMASK(planemask);
1445+ GLINT_WRITE_REG(pGlint->PM3_Config2D, PM3Config2D);
1446+ GLINT_WRITE_REG(((y&0x0fff)<<16)|((x+skipleft)&0x0fff), ScissorMinXY);
1447+ GLINT_WRITE_REG((((y+h)&0x0fff)<<16)|((x+w)&0x0fff), ScissorMaxXY);
1448+ GLINT_WRITE_REG(
1449+ PM3RectanglePosition_XOffset(x) |
1450+ PM3RectanglePosition_YOffset(y),
1451+ PM3RectanglePosition);
1452+ GLINT_WRITE_REG(pGlint->PM3_Render2D |
1453+ PM3Render2D_Width(w) | PM3Render2D_Height(h),
1454+ PM3Render2D);
1455+
1456+#ifdef __alpha__
1457+ mem_barrier(); /* dunno why, but this helps on older Alpha CPUs */
1458+#endif
1459
1460 /* width of the stuff to copy in 32 bit words */
1461 dwords = ((w * Bpp) + 3) >> 2;
1462- if (pGlint->UsePCIRetry) ApertureRange = PciRetryWriteRange;
1463- else ApertureRange = WriteRange;
1464
1465- if (dwords > ApertureRange) {
1466- while(h--) {
1467- XAAMoveDWORDS_FixedBase(WriteBase_Fixed, (CARD32*)src, dwords);
1468- src += srcwidth;
1469- }
1470- } else {
1471- /* the src is exatcly as wide as the target rectangle. We copy all
1472- * of it, so no need to separate stuff by scanline */
1473- if(srcwidth == (dwords << 2)) {
1474- /* decrement contains the number of lines that can be
1475- * put in the fifo */
1476- int decrement = ApertureRange/dwords;
1477-
1478- while(h > decrement) {
1479- GLINT_WAIT(dwords * decrement);
1480- GLINT_WRITE_REG((((dwords * decrement)-1) << 16) | 0x155,
1481- OutputFIFO);
1482- XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords * decrement);
1483- src += (srcwidth * decrement);
1484- h -= decrement;
1485- }
1486- if(h) {
1487- GLINT_WAIT(dwords * h);
1488- GLINT_WRITE_REG((((dwords * h)-1) << 16) | 0x155, OutputFIFO);
1489- XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords * h);
1490- }
1491- } else {
1492- while(h--) {
1493- GLINT_WAIT(dwords);
1494- GLINT_WRITE_REG(((dwords-1) << 16) | 0x155, OutputFIFO);
1495- XAAMoveDWORDS(WriteBase, (CARD32*)src, dwords);
1496- src += srcwidth;
1497- }
1498- }
1499+ while(h--) {
1500+ count = dwords;
1501+ srcp = (CARD32*)src;
1502+ while(count >= MAX_FIFO_ENTRIES) {
1503+ GLINT_WAIT(MAX_FIFO_ENTRIES);
1504+ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1505+ GLINT_WRITE_REG(((MAX_FIFO_ENTRIES - 2) << 16) | (0x15 << 4) |
1506+ 0x05, OutputFIFO);
1507+ GLINT_MoveDWORDS(
1508+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1509+ (CARD32*)srcp, MAX_FIFO_ENTRIES - 1);
1510+ count -= MAX_FIFO_ENTRIES - 1;
1511+ srcp += MAX_FIFO_ENTRIES - 1;
1512+ }
1513+ if(count) {
1514+ GLINT_WAIT(count + 1);
1515+ /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1516+ GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
1517+ 0x05, OutputFIFO);
1518+ GLINT_MoveDWORDS(
1519+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1520+ (CARD32*)srcp, count);
1521+ }
1522+ src += srcwidth;
1523 }
1524+
1525+ Permedia3DisableClipping(pScrn);
1526+ Permedia3Sync(pScrn);
1527+
1528 TRACE_EXIT("Permedia3WritePixmap");
1529 }
1530diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm3_dac.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm3_dac.c
1531--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm3_dac.c Sat Mar 17 17:57:15 2001
1532+++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm3_dac.c Sun Mar 18 21:35:54 2001
1533@@ -320,7 +320,7 @@
1534 pReg->glintRegs[VClkCtl >> 3] = (GLINT_READ_REG(VClkCtl) & 0xFFFFFFFC);
1535 pReg->glintRegs[PMScreenBase >> 3] = 0;
1536
1537- pReg->glintRegs[ChipConfig >> 3] = GLINT_READ_REG(ChipConfig) & 0xFFFFFFDD;
1538+ pReg->glintRegs[ChipConfig >> 3] = GLINT_READ_REG(ChipConfig) & 0xFFFFFFFD;
1539 pReg->DacRegs[PM2VDACRDDACControl] = 0x00;
1540
1541 {
1542@@ -524,4 +524,80 @@
1543 Permedia2vOutIndReg(pScrn, PM2VDACRDDClk0PostScale, 0x00,
1544 glintReg->DacRegs[PM2VDACRDDClk0PostScale]);
1545 Permedia2vOutIndReg(pScrn, PM2VDACIndexClockControl, 0x00, temp|0x03);
1546+}
1547+
1548+void Permedia3LoadPalette(
1549+ ScrnInfoPtr pScrn,
1550+ int numColors,
1551+ int *indices,
1552+ LOCO *colors,
1553+ VisualPtr pVisual
1554+){
1555+#if 0 /* NOT YET */
1556+ GLINTPtr pGlint = GLINTPTR(pScrn);
1557+#endif
1558+ int i, index, shift = 0, j, repeat = 1;
1559+
1560+ if (pScrn->depth == 15) {
1561+ repeat = 8;
1562+ shift = 3;
1563+ }
1564+
1565+ for(i = 0; i < numColors; i++) {
1566+ index = indices[i];
1567+ for (j = 0; j < repeat; j++) {
1568+ Permedia2WriteAddress(pScrn, (index << shift)+j);
1569+ Permedia2WriteData(pScrn, colors[index].red);
1570+ Permedia2WriteData(pScrn, colors[index].green);
1571+ Permedia2WriteData(pScrn, colors[index].blue);
1572+ }
1573+ /* for video i/o */
1574+#if 0 /* NOT YET */
1575+ GLINT_SLOW_WRITE_REG(index, PM3LUTIndex);
1576+ GLINT_SLOW_WRITE_REG((colors[index].red & 0xFF) |
1577+ ((colors[index].green & 0xFF) << 8) |
1578+ ((colors[index].blue & 0xFF) << 16),
1579+ PM3LUTData);
1580+#endif
1581+ }
1582+}
1583+
1584+/* special one for 565 mode */
1585+void Permedia3LoadPalette16(
1586+ ScrnInfoPtr pScrn,
1587+ int numColors,
1588+ int *indices,
1589+ LOCO *colors,
1590+ VisualPtr pVisual
1591+){
1592+#if 0 /* NOT YET */
1593+ GLINTPtr pGlint = GLINTPTR(pScrn);
1594+#endif
1595+ int i, index, j;
1596+
1597+ for(i = 0; i < numColors; i++) {
1598+ index = indices[i];
1599+ for (j = 0; j < 4; j++) {
1600+ Permedia2WriteAddress(pScrn, (index << 2)+j);
1601+ Permedia2WriteData(pScrn, colors[index >> 1].red);
1602+ Permedia2WriteData(pScrn, colors[index].green);
1603+ Permedia2WriteData(pScrn, colors[index >> 1].blue);
1604+ }
1605+#if 0 /* NOT YET */
1606+ GLINT_SLOW_WRITE_REG(index, PM3LUTIndex);
1607+ GLINT_SLOW_WRITE_REG((colors[index].red & 0xFF) |
1608+ ((colors[index].green & 0xFF) << 8) |
1609+ ((colors[index].blue & 0xFF) << 16),
1610+ PM3LUTData);
1611+#endif
1612+
1613+ if(index <= 31) {
1614+ for (j = 0; j < 4; j++) {
1615+ Permedia2WriteAddress(pScrn, (index << 3)+j);
1616+ Permedia2WriteData(pScrn, colors[index].red);
1617+ Permedia2WriteData(pScrn, colors[(index << 1) + 1].green);
1618+ Permedia2WriteData(pScrn, colors[index].blue);
1619+ }
1620+ }
1621+ }
1622 }
1623diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/pm_accel.c
1624--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/pm_accel.c Sat Jun 24 14:19:55 2000
1625+++ xc/programs/Xserver/hw/xfree86/drivers/glint/pm_accel.c Sun Mar 18 16:57:17 2001
1626@@ -301,62 +301,6 @@
1627 return (XAAInit(pScreen, infoPtr));
1628 }
1629
1630-static void MoveBYTE(
1631- register CARD32* dest,
1632- register unsigned char* src,
1633- register int dwords
1634-)
1635-{
1636- while(dwords) {
1637- *dest = *src;
1638- src += 1;
1639- dest += 1;
1640- dwords -= 1;
1641- }
1642-}
1643-
1644-static void MoveWORDS(
1645- register CARD32* dest,
1646- register unsigned short* src,
1647- register int dwords
1648-)
1649-{
1650- while(dwords & ~0x01) {
1651- *dest = *src;
1652- *(dest + 1) = *(src + 1);
1653- src += 2;
1654- dest += 2;
1655- dwords -= 2;
1656- }
1657- switch(dwords) {
1658- case 0: return;
1659- case 1: *dest = *src;
1660- return;
1661- }
1662-}
1663-
1664-static void MoveDWORDS(
1665- register CARD32* dest,
1666- register CARD32* src,
1667- register int dwords )
1668-{
1669- while(dwords & ~0x03) {
1670- *dest = *src;
1671- *(dest + 1) = *(src + 1);
1672- *(dest + 2) = *(src + 2);
1673- *(dest + 3) = *(src + 3);
1674- src += 4;
1675- dest += 4;
1676- dwords -= 4;
1677- }
1678- if (!dwords) return;
1679- *dest = *src;
1680- if (dwords == 1) return;
1681- *(dest + 1) = *(src + 1);
1682- if (dwords == 2) return;
1683- *(dest + 2) = *(src + 2);
1684-}
1685-
1686 static void PermediaLoadCoord(
1687 ScrnInfoPtr pScrn,
1688 int x, int y,
1689@@ -779,15 +723,16 @@
1690 while (dwords >= infoRec->ColorExpandRange) {
1691 GLINT_WAIT(infoRec->ColorExpandRange);
1692 GLINT_WRITE_REG((infoRec->ColorExpandRange - 2)<<16 | 0x0D, OutputFIFO);
1693- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,
1694- infoRec->ColorExpandRange - 1);
1695+ GLINT_MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1696+ src, infoRec->ColorExpandRange - 1);
1697 dwords -= (infoRec->ColorExpandRange - 1);
1698 src += (infoRec->ColorExpandRange - 1);
1699 }
1700 if (dwords) {
1701 GLINT_WAIT(dwords);
1702 GLINT_WRITE_REG((dwords - 1)<<16 | 0x0D, OutputFIFO);
1703- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords);
1704+ GLINT_MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1705+ src,dwords);
1706 }
1707 pGlint->cpucount += 1;
1708 #if 0
1709@@ -915,7 +860,8 @@
1710 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
1711 GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16)
1712 | (0x11 << 4) | 0x0D, OutputFIFO);
1713- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1714+ GLINT_MoveDWORDS(
1715+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1716 (CARD32*)srcp, infoRec->ColorExpandRange - 1);
1717 count -= infoRec->ColorExpandRange - 1;
1718 address += infoRec->ColorExpandRange - 1;
1719@@ -926,7 +872,8 @@
1720 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
1721 GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D,
1722 OutputFIFO);
1723- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1724+ GLINT_MoveDWORDS(
1725+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1726 (CARD32*)srcp, count);
1727 }
1728 src += srcwidth;
1729@@ -955,7 +902,8 @@
1730 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1731 GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) |
1732 (0x15 << 4) | 0x05, OutputFIFO);
1733- MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1734+ GLINT_MoveBYTES(
1735+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1736 (unsigned char *)srcpbyte, infoRec->ColorExpandRange-1);
1737 count -= infoRec->ColorExpandRange - 1;
1738 srcpbyte += infoRec->ColorExpandRange - 1;
1739@@ -965,7 +913,8 @@
1740 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1741 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
1742 0x05, OutputFIFO);
1743- MoveBYTE((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1744+ GLINT_MoveBYTES(
1745+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1746 (unsigned char *)srcpbyte, count);
1747 }
1748 src += srcwidth;
1749@@ -1038,7 +987,8 @@
1750 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
1751 GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) |
1752 (0x11 << 4) | 0x0D, OutputFIFO);
1753- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1754+ GLINT_MoveDWORDS(
1755+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1756 (CARD32*)srcp, infoRec->ColorExpandRange - 1);
1757 count -= infoRec->ColorExpandRange - 1;
1758 address += infoRec->ColorExpandRange - 1;
1759@@ -1049,7 +999,8 @@
1760 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
1761 GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D,
1762 OutputFIFO);
1763- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1764+ GLINT_MoveDWORDS(
1765+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1766 (CARD32*)srcp, count);
1767 }
1768 src += srcwidth;
1769@@ -1078,7 +1029,8 @@
1770 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1771 GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) |
1772 (0x15 << 4) | 0x05, OutputFIFO);
1773- MoveWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1774+ GLINT_MoveWORDS(
1775+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1776 (unsigned short *)srcpword,infoRec->ColorExpandRange-1);
1777 count -= infoRec->ColorExpandRange - 1;
1778 srcpword += infoRec->ColorExpandRange - 1;
1779@@ -1088,7 +1040,8 @@
1780 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1781 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
1782 0x05, OutputFIFO);
1783- MoveWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1784+ GLINT_MoveWORDS(
1785+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1786 (unsigned short *)srcpword, count);
1787 }
1788 src += srcwidth;
1789@@ -1162,7 +1115,8 @@
1790 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
1791 GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) |
1792 (0x11 << 4) | 0x0D, OutputFIFO);
1793- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1794+ GLINT_MoveDWORDS(
1795+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1796 (CARD32*)srcp, infoRec->ColorExpandRange - 1);
1797 count -= infoRec->ColorExpandRange - 1;
1798 address += infoRec->ColorExpandRange - 1;
1799@@ -1173,7 +1127,8 @@
1800 /* (0x11 << 4) | 0x0D is the TAG for TextureData */
1801 GLINT_WRITE_REG(((count - 1) << 16) | (0x11 << 4) | 0x0D,
1802 OutputFIFO);
1803- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1804+ GLINT_MoveDWORDS(
1805+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1806 (CARD32*)srcp, count);
1807 }
1808 src += srcwidth;
1809@@ -1196,7 +1151,8 @@
1810 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1811 GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) |
1812 (0x15 << 4) | 0x05, OutputFIFO);
1813- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1814+ GLINT_MoveDWORDS(
1815+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1816 (CARD32*)srcp, infoRec->ColorExpandRange - 1);
1817 count -= infoRec->ColorExpandRange - 1;
1818 srcp += infoRec->ColorExpandRange - 1;
1819@@ -1206,7 +1162,8 @@
1820 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1821 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
1822 0x05, OutputFIFO);
1823- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1824+ GLINT_MoveDWORDS(
1825+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1826 (CARD32*)srcp, count);
1827 }
1828 src += srcwidth;
1829diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/sx_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/sx_accel.c
1830--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/sx_accel.c Wed Apr 12 10:44:41 2000
1831+++ xc/programs/Xserver/hw/xfree86/drivers/glint/sx_accel.c Sun Mar 18 16:57:36 2001
1832@@ -298,28 +298,6 @@
1833 }
1834 }
1835
1836-static void MoveDWORDS(
1837- register CARD32* dest,
1838- register CARD32* src,
1839- register int dwords )
1840-{
1841- while(dwords & ~0x03) {
1842- *dest = *src;
1843- *(dest + 1) = *(src + 1);
1844- *(dest + 2) = *(src + 2);
1845- *(dest + 3) = *(src + 3);
1846- src += 4;
1847- dest += 4;
1848- dwords -= 4;
1849- }
1850- if (!dwords) return;
1851- *dest = *src;
1852- if (dwords == 1) return;
1853- *(dest + 1) = *(src + 1);
1854- if (dwords == 2) return;
1855- *(dest + 2) = *(src + 2);
1856-}
1857-
1858 static void
1859 SXSync(
1860 ScrnInfoPtr pScrn
1861@@ -519,7 +497,8 @@
1862 while (dwords >= infoRec->ColorExpandRange) {
1863 GLINT_WAIT(infoRec->ColorExpandRange);
1864 GLINT_WRITE_REG((infoRec->ColorExpandRange - 2)<<16 | 0x0D, OutputFIFO);
1865- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,
1866+ GLINT_MoveDWORDS(
1867+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,
1868 infoRec->ColorExpandRange - 1);
1869 dwords -= (infoRec->ColorExpandRange - 1);
1870 src += (infoRec->ColorExpandRange - 1);
1871@@ -527,7 +506,8 @@
1872 if (dwords) {
1873 GLINT_WAIT(dwords);
1874 GLINT_WRITE_REG((dwords - 1)<<16 | 0x0D, OutputFIFO);
1875- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords);
1876+ GLINT_MoveDWORDS(
1877+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords);
1878 }
1879 pGlint->cpucount += 1;
1880 }
1881@@ -809,7 +789,8 @@
1882 /* (0x0f << 4) | 0x0e is the TAG for GLINTColor */
1883 GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x0F << 4) |
1884 0x0E, OutputFIFO);
1885- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1886+ GLINT_MoveDWORDS(
1887+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1888 (CARD32*)srcp, infoRec->ColorExpandRange - 1);
1889 count -= infoRec->ColorExpandRange - 1;
1890 srcp += infoRec->ColorExpandRange - 1;
1891@@ -819,7 +800,8 @@
1892 /* (0x0F << 4) | 0x0E is the TAG for GLINTColor */
1893 GLINT_WRITE_REG(((count - 1) << 16) | (0x0f << 4) |
1894 0x0e, OutputFIFO);
1895- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1896+ GLINT_MoveDWORDS(
1897+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1898 (CARD32*)srcp, count);
1899 }
1900 src += srcwidth;
1901diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/glint/tx_accel.c xc/programs/Xserver/hw/xfree86/drivers/glint/tx_accel.c
1902--- xc.orig/programs/Xserver/hw/xfree86/drivers/glint/tx_accel.c Wed May 10 16:01:32 2000
1903+++ xc/programs/Xserver/hw/xfree86/drivers/glint/tx_accel.c Sun Mar 18 16:57:58 2001
1904@@ -326,28 +326,6 @@
1905 #endif
1906 }
1907
1908-static void MoveDWORDS(
1909- register CARD32* dest,
1910- register CARD32* src,
1911- register int dwords )
1912-{
1913- while(dwords & ~0x03) {
1914- *dest = *src;
1915- *(dest + 1) = *(src + 1);
1916- *(dest + 2) = *(src + 2);
1917- *(dest + 3) = *(src + 3);
1918- src += 4;
1919- dest += 4;
1920- dwords -= 4;
1921- }
1922- if (!dwords) return;
1923- *dest = *src;
1924- if (dwords == 1) return;
1925- *(dest + 1) = *(src + 1);
1926- if (dwords == 2) return;
1927- *(dest + 2) = *(src + 2);
1928-}
1929-
1930 static void
1931 TXSync(
1932 ScrnInfoPtr pScrn
1933@@ -541,7 +519,8 @@
1934 while (dwords >= infoRec->ColorExpandRange) {
1935 GLINT_WAIT(infoRec->ColorExpandRange);
1936 GLINT_WRITE_REG((infoRec->ColorExpandRange - 2)<<16 | 0x0D, OutputFIFO);
1937- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,
1938+ GLINT_MoveDWORDS(
1939+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,
1940 infoRec->ColorExpandRange - 1);
1941 dwords -= (infoRec->ColorExpandRange - 1);
1942 src += (infoRec->ColorExpandRange - 1);
1943@@ -549,7 +528,8 @@
1944 if (dwords) {
1945 GLINT_WAIT(dwords);
1946 GLINT_WRITE_REG((dwords - 1)<<16 | 0x0D, OutputFIFO);
1947- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords);
1948+ GLINT_MoveDWORDS(
1949+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4), src,dwords);
1950 }
1951 pGlint->cpucount += 1;
1952 }
1953@@ -848,7 +828,8 @@
1954 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1955 GLINT_WRITE_REG(((infoRec->ColorExpandRange - 2) << 16) | (0x15 << 4) |
1956 0x05, OutputFIFO);
1957- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1958+ GLINT_MoveDWORDS(
1959+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1960 (CARD32*)srcp, infoRec->ColorExpandRange - 1);
1961 count -= infoRec->ColorExpandRange - 1;
1962 srcp += infoRec->ColorExpandRange - 1;
1963@@ -858,7 +839,8 @@
1964 /* (0x15 << 4) | 0x05 is the TAG for FBSourceData */
1965 GLINT_WRITE_REG(((count - 1) << 16) | (0x15 << 4) |
1966 0x05, OutputFIFO);
1967- MoveDWORDS((CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1968+ GLINT_MoveDWORDS(
1969+ (CARD32*)((char*)pGlint->IOBase + OutputFIFO + 4),
1970 (CARD32*)srcp, count);
1971 }
1972 src += srcwidth;
1973diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/mga/mga_storm.c xc/programs/Xserver/hw/xfree86/drivers/mga/mga_storm.c
1974--- xc.orig/programs/Xserver/hw/xfree86/drivers/mga/mga_storm.c Sat Mar 17 17:57:15 2001
1975+++ xc/programs/Xserver/hw/xfree86/drivers/mga/mga_storm.c Sun Mar 18 17:19:13 2001
1976@@ -37,6 +37,16 @@
1977 #include "mga_dri.h"
1978 #endif
1979
1980+#if defined(__alpha__)
1981+#define MGAMoveDWORDS(d,s,c) \
1982+do { \
1983+ write_mem_barrier(); \
1984+ XAAMoveDWORDS((d),(s),(c)); \
1985+} while (0)
1986+#else
1987+#define MGAMoveDWORDS(d,s,c) XAAMoveDWORDS((d),(s),(c))
1988+#endif
1989+
1990 static void MGANAME(SubsequentScreenToScreenCopy)(ScrnInfoPtr pScrn,
1991 int srcX, int srcY, int dstX, int dstY,
1992 int w, int h);
1993@@ -964,6 +974,8 @@
1994
1995 CHECK_DMA_QUIESCENT(pMga, pScrn);
1996
1997+ mem_barrier(); /*??*/
1998+
1999 while(MGAISBUSY());
2000 /* flush cache before a read (mga-1064g 5.1.6) */
2001 OUTREG8(MGAREG_CRTC_INDEX, 0);
2002@@ -1599,7 +1611,13 @@
2003 OUTREG(MGAREG_FXBNDRY, ((x + w - 1) << 16) | (x & 0xFFFF));
2004 OUTREG(MGAREG_YDSTLEN + MGAREG_EXEC, (y << 16) | h);
2005
2006- if(pMga->expandDWORDs > pMga->FifoSize) {
2007+#ifdef __alpha__
2008+ /* force Alpha to always use indirect */
2009+ if(1)
2010+#else
2011+ if(pMga->expandDWORDs > pMga->FifoSize)
2012+#endif
2013+ {
2014 pMga->AccelInfoRec->SubsequentColorExpandScanline =
2015 MGANAME(SubsequentColorExpandScanlineIndirect);
2016 pMga->AccelInfoRec->ScanlineColorExpandBuffers =
2017@@ -1624,13 +1642,13 @@
2018
2019 while(dwords > pMga->FifoSize) {
2020 WAITFIFO(pMga->FifoSize);
2021- XAAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, pMga->FifoSize);
2022+ MGAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, pMga->FifoSize);
2023 src += pMga->FifoSize;
2024 dwords -= pMga->FifoSize;
2025 }
2026
2027 WAITFIFO(dwords);
2028- XAAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, dwords);
2029+ MGAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, dwords);
2030
2031 if(!(--pMga->expandRows)) {
2032 if(pMga->expandRemaining) {
2033@@ -1726,13 +1744,13 @@
2034
2035 while(dwords > pMga->FifoSize) {
2036 WAITFIFO(pMga->FifoSize);
2037- XAAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, pMga->FifoSize);
2038+ MGAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, pMga->FifoSize);
2039 src += pMga->FifoSize;
2040 dwords -= pMga->FifoSize;
2041 }
2042
2043 WAITFIFO(dwords);
2044- XAAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, dwords);
2045+ MGAMoveDWORDS((CARD32*)(pMga->ColorExpandBase), src, dwords);
2046
2047 if(!(--pMga->expandRows)) {
2048 DISABLE_CLIP();
2049diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/tga/IBM561ramdac.c xc/programs/Xserver/hw/xfree86/drivers/tga/IBM561ramdac.c
2050--- xc.orig/programs/Xserver/hw/xfree86/drivers/tga/IBM561ramdac.c Mon Oct 23 17:16:50 2000
2051+++ xc/programs/Xserver/hw/xfree86/drivers/tga/IBM561ramdac.c Sun Mar 18 16:51:30 2001
2052@@ -533,7 +533,6 @@
2053 TGAPtr pTga = TGAPTR(pScrn);
2054
2055 unsigned int temp1[6] = {0,0,0,0,0,0};
2056- struct monitor_data * c_table = &crystal_table;
2057
2058 /*
2059 * Set-up av9110 to 14.3 Mhz as reference for 561's PLL
2060@@ -555,10 +554,10 @@
2061 IBM561WriteReg(pScrn, IBM561_CONFIG_REG_4, 0x20 );
2062
2063 /* IBM561WriteReg(pScrn, IBM561_PLL_VCO_DIV_REG, 0xc8 ); */
2064- IBM561WriteReg(pScrn, IBM561_PLL_VCO_DIV_REG, c_table->ibm561_vco_div);
2065+ IBM561WriteReg(pScrn, IBM561_PLL_VCO_DIV_REG, tga_c_table->ibm561_vco_div);
2066
2067 /* IBM561WriteReg(pScrn, IBM561_PLL_REF_REG, 0x08 ); */
2068- IBM561WriteReg(pScrn, IBM561_PLL_REF_REG, c_table->ibm561_ref );
2069+ IBM561WriteReg(pScrn, IBM561_PLL_REF_REG, tga_c_table->ibm561_ref );
2070
2071 IBM561WriteReg(pScrn, IBM561_DIV_DOT_CLK_REG, 0xb0 );
2072
2073diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga.h xc/programs/Xserver/hw/xfree86/drivers/tga/tga.h
2074--- xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga.h Fri Oct 27 21:23:37 2000
2075+++ xc/programs/Xserver/hw/xfree86/drivers/tga/tga.h Sun Mar 18 16:51:30 2001
2076@@ -120,7 +120,9 @@
2077 unsigned int ibm561_ref;
2078 };
2079
2080-extern struct monitor_data crystal_table;
2081+extern struct monitor_data tga_crystal_table[];
2082+extern int tga_crystal_table_entries;
2083+extern struct monitor_data *tga_c_table;
2084
2085 /* Prototypes */
2086
2087@@ -131,6 +133,7 @@
2088 Bool saveFonts*/);
2089 Bool DEC21030Init(ScrnInfoPtr pScrn, DisplayModePtr mode);
2090 void write_av9110(ScrnInfoPtr pScrn, unsigned int *);
2091+void TGA2SetupMode(ScrnInfoPtr pScrn);
2092
2093 /* tga_accel.c */
2094 Bool DEC21030AccelInit(ScreenPtr pScreen);
2095diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga_dac.c xc/programs/Xserver/hw/xfree86/drivers/tga/tga_dac.c
2096--- xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga_dac.c Fri Oct 27 21:23:37 2000
2097+++ xc/programs/Xserver/hw/xfree86/drivers/tga/tga_dac.c Sun Mar 18 16:51:30 2001
2098@@ -49,45 +49,114 @@
2099 /* There lies an ICS1562 Clock Generator. */
2100 ICS1562_CalcClockBits(freq, pll_bits);
2101
2102- switch (pTga->Chipset) {
2103- case PCI_CHIP_DEC21030:
2104- /*
2105- * For the DEC 21030 TGA:
2106- * This requires the 55 clock bits be written in a serial manner to
2107- * bit 0 of the CLOCK register and on the 56th bit set the hold flag.
2108- */
2109- for (i = 0;i <= 6; i++) {
2110- for (j = 0; j <= 7; j++) {
2111- temp = (pll_bits[i] >> (7-j)) & 1;
2112- if (i == 6 && j == 7)
2113- temp |= 2;
2114- TGA_WRITE_REG(temp, TGA_CLOCK_REG);
2115- }
2116+ /*
2117+ * For the DEC 21030 TGA:
2118+ * This requires the 55 clock bits be written in a serial manner to
2119+ * bit 0 of the CLOCK register and on the 56th bit set the hold flag.
2120+ */
2121+ for (i = 0;i <= 6; i++) {
2122+ for (j = 0; j <= 7; j++) {
2123+ temp = (pll_bits[i] >> (7-j)) & 1;
2124+ if (i == 6 && j == 7)
2125+ temp |= 2;
2126+ TGA_WRITE_REG(temp, TGA_CLOCK_REG);
2127 }
2128- break;
2129-
2130- case PCI_CHIP_TGA2:
2131- /*
2132- * For the DEC TGA2:
2133- * This requires the 55 clock bits be written in a serial manner to
2134- * bit 0 of the CLOCK register and on the 56th bit set the hold flag.
2135- */
2136-#if 0
2137- /* ?? FIXME FIXME FIXME ?? */
2138- for (i = 0;i <= 6; i++) {
2139- for (j = 0; j <= 7; j++) {
2140- temp = (pll_bits[i] >> (7-j)) & 1;
2141- if (i == 6 && j == 7)
2142- temp |= 2;
2143- TGA_WRITE_REG(temp, TGA_CLOCK_REG);
2144- }
2145- }
2146-#endif
2147- break;
2148 }
2149 }
2150
2151-struct monitor_data crystal_table =
2152+struct monitor_data tga_crystal_table[] = {
2153+{
2154+/* Option 0 Monitor Info 130.8 */
2155+1024, /* rows */
2156+1280, /* columns */
2157+130, /* 130.8 Mhz */
2158+72, /* refresh rate */
2159+1024, /* v scanlines */
2160+3, /* v front porch */
2161+3, /* v sync */
2162+33, /* v back porch */
2163+1280, /* h pixels */
2164+32, /* h front porch */
2165+160, /* h sync */
2166+232, /* h back porch */
2167+/* AV9110 clock serial load information 130.808 */
2168+0x40, /* 0:6 VCO frequency divider N */
2169+0x7, /* 7:13 Reference frequency divide M */
2170+0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2171+*/
2172+0x1, /* 15:16 CLK/X output divide X */
2173+0x1, /* 17:18 VCO output divide R */
2174+1, /* 19 CLK Output enable. */
2175+1, /* 20 CLK/X Output enable */
2176+0, /* reserved, should be set to 0 */
2177+0, /* Reference clock select on CLK 1=ref */
2178+1, /* reserved, should be set to 1 */
2179+/* IBM561 PLL setup data 130.808 */
2180+0xC8, /* VCO Div: PFR=0x3, M-65=49 */
2181+0x8 /* REF: N=0x8 */
2182+},
2183+{
2184+/* Option 3 Monitor Info 104.00 Mhz */
2185+900, /* rows */
2186+1152, /* columns */
2187+104, /* 104 Mhz */
2188+72, /* refresh rate */
2189+900, /* v scanlines */
2190+6, /* v front porch */
2191+10, /* v sync */
2192+44, /* v back porch */
2193+1152, /* h pixels */
2194+64, /* h front porch */
2195+112, /* h sync */
2196+176, /* h back porch */
2197+/* 103.994 MHz av9110 clock serial load information */
2198+0x6d, /* 0:6 VCO frequency divider N */
2199+0xf, /* 7:13 Reference frequency divide M */
2200+0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2201+*/
2202+0x1, /* 15:16 CLK/X output divide X */
2203+0x1, /* 17:18 VCO output divide R */
2204+1, /* 19 CLK Output enable. */
2205+1, /* 20 CLK/X Output enable */
2206+0, /* reserved, should be set to 0 */
2207+0, /* Reference clock select on CLK 1=ref */
2208+1, /* reserved, should be set to 1 */
2209+/* 104.00 MHz IBM561 PLL setup data */
2210+0x96, /* VCO Div: PFR=2, M=57 */
2211+0x6 /* REF: N=6 */
2212+},
2213+#if 1
2214+{
2215+/* Option 6 Monitor Info 74.00 Mhz */
2216+768, /* rows */
2217+1024, /* columns */
2218+74, /* 74 Mhz */
2219+72, /* refresh rate */
2220+768, /* v scanlines */
2221+1, /* v front porch */
2222+6, /* v sync */
2223+22, /* v back porch */
2224+1024, /* h pixels */
2225+16, /* h front porch */
2226+128, /* h sync */
2227+128, /* h back porch */
2228+/* 74.00 MHz AV9110 clock serial load information */
2229+0x2a, /* 0:6 VCO frequency divider N */
2230+0x41, /* 7:13 Reference frequency divide M */
2231+0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2232+*/
2233+0x1, /* 15:16 CLK/X output divide X */
2234+0x1, /* 17:18 VCO output divide R */
2235+1, /* 19 CLK Output enable. */
2236+1, /* 20 CLK/X Output enable */
2237+0, /* reserved, should be set to 0 */
2238+0, /* Reference clock select on CLK 1=ref */
2239+1, /* reserved, should be set to 1 */
2240+/* 74.00 MHz IBM561 PLL setup data */
2241+0x9C, /* VCO Div: PFR=2, M=0x5D*/
2242+0x9 /* REF: N=0x9 */
2243+},
2244+#else
2245 {
2246 /* Option 5 Monitor Info 75.00 Mhz */
2247 768, /* rows */
2248@@ -117,8 +186,406 @@
2249 /* 75.00 MHz IBM561 PLL setup data */
2250 0x93, /* VCO Div: PFR=2, M=0x54 */
2251 0x8 /* REF: N=0x8 */
2252+},
2253+#endif
2254+{
2255+/* Option 9 Monitor Info 50 Mhz ergo SVGA */
2256+600, /* rows */
2257+800, /* columns */
2258+50, /* 50 Mhz */
2259+72, /* refresh rate */
2260+600, /* v scanlines */
2261+37, /*(31 tga)v front porch */
2262+6, /* v sync */
2263+23, /*(29 tga)v back porch */
2264+800, /* h pixels */
2265+56, /* h front porch */
2266+120, /* h sync */
2267+64, /* h back porch */
2268+/*50.00 Mhz AV9110 clock serial load information */
2269+0x37, /* 0:6 VCO frequency divider N */
2270+0x3f, /* 7:13 Reference frequency divide M */
2271+0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2272+*/
2273+0x1, /* 15:16 CLK/X output divide X */
2274+0x2, /* 17:18 VCO output divide R */
2275+1, /* 19 CLK Output enable. */
2276+1, /* 20 CLK/X Output enable */
2277+0, /* reserved, should be set to 0 */
2278+0, /* Reference clock select on CLK 1=ref */
2279+1, /* reserved, should be set to 1 */
2280+/* 50.00 MHz IBM561 PLL setup data */
2281+0x45, /* VCO Div: PFR=1, M=46*/
2282+0x5 /* REF: N=5 */
2283+},
2284+{
2285+/* Option B Monitor Info 31.5 Mhz ergo VGA */
2286+480, /* rows */
2287+640, /* columns */
2288+32, /* 32 Mhz */
2289+72, /* refresh rate */
2290+480, /* v scanlines */
2291+9, /* v front porch */
2292+3, /* v sync */
2293+28, /* v back porch */
2294+640, /* h pixels */
2295+24, /* h front porch */
2296+40, /* h sync */
2297+128, /* h back porch */
2298+/* 31.50 MHz AV9110 clock serial load information */
2299+0x16, /* 0:6 VCO frequency divider N */
2300+0x05, /* 7:13 Reference frequency divide M */
2301+0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2302+*/
2303+0x1, /* 15:16 CLK/X output divide X */
2304+0x2, /* 17:18 VCO output divide R */
2305+1, /* 19 CLK Output enable. */
2306+1, /* 20 CLK/X Output enable */
2307+0, /* reserved, should be set to 0 */
2308+0, /* Reference clock select on CLK 1=ref */
2309+1, /* reserved, should be set to 1 */
2310+/* 31.50 MHz IBM561 PLL setup data */
2311+0x17, /* VCO Div: PFR=0, M=0x58 */
2312+0x5 /* REF: N=0x5 */
2313+},
2314+#ifdef ALLOW_LT_72_HZ
2315+{
2316+/* Option 1 Monitor Info 119.84 Mhz */
2317+1024, /* rows */
2318+1280, /* columns */
2319+119, /* 119 Mhz */
2320+66, /* refresh rate */
2321+1024, /* v scanlines */
2322+3, /* v front porch */
2323+3, /* v sync */
2324+33, /* v back porch */
2325+1280, /* h pixels */
2326+32, /* h front porch */
2327+160, /* h sync */
2328+232, /* h back porch */
2329+/* 119.84MHz AV9110 clock serial load information */
2330+0x2d, /* 0:6 VCO frequency divider N */
2331+0x2b, /* 7:13 Reference frequency divide M */
2332+0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) */
2333+0x1, /* 15:16 CLK/X output divide X */
2334+0x1, /* 17:18 VCO output divide R */
2335+1, /* 19 CLK Output enable. */
2336+1, /* 20 CLK/X Output enable */
2337+0, /* reserved, should be set to 0 */
2338+0, /* Reference clock select on CLK 1=ref */
2339+1, /* reserved, should be set to 1 */
2340+/* IBM561 PLL setup data 119.84 */
2341+0x82, /* VCO Div: PFR=0x2, M=0x43 */
2342+0x4 /* REF: N=0x4 */
2343+},
2344+{
2345+/* Option 2 Monitor Info 108.18 Mhz */
2346+1024, /* rows */
2347+1280, /* columns */
2348+108, /* 108 Mhz */
2349+60, /* refresh rate */
2350+1024, /* v scanlines */
2351+3, /* v front porch */
2352+3, /* v sync */
2353+26, /* v back porch */
2354+1280, /* h pixels */
2355+44, /* h front porch */
2356+184, /* h sync */
2357+200, /* h back porch */
2358+/* 108.18 MHz av9110 Clk serial load information */
2359+0x11, /* 0:6 VCO frequency divider N */
2360+0x9, /* 7:13 Reference frequency divide M */
2361+0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2362+*/
2363+0x1, /* 15:16 CLK/X output divide X */
2364+0x2, /* 17:18 VCO output divide R */
2365+1, /* 19 CLK Output enable. */
2366+1, /* 20 CLK/X Output enable */
2367+0, /* reserved, should be set to 0 */
2368+0, /* Reference clock select on CLK 1=ref */
2369+1, /* reserved, should be set to 1 */
2370+/* 108.18 MHz IBM561 PLL setup data */
2371+0xB8, /* VCO Div: PFR=2, M=79 */
2372+0x8 /* REF: N=0x8 */
2373+},
2374+{
2375+/* Option 5 Monitor Info 75.00 Mhz */
2376+768, /* rows */
2377+1024, /* columns */
2378+75, /* 74 Mhz */
2379+70, /* refresh rate */
2380+768, /* v scanlines */
2381+3, /* v front porch */
2382+6, /* v sync */
2383+29, /* v back porch */
2384+1024, /* h pixels */
2385+24, /* h front porch */
2386+136, /* h sync */
2387+144, /* h back porch */
2388+/* 75.00 MHz AV9110 clock serial load information */
2389+0x6e, /* 0:6 VCO frequency divider N */
2390+0x15, /* 7:13 Reference frequency divide M */
2391+0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2392+*/
2393+0x1, /* 15:16 CLK/X output divide X */
2394+0x1, /* 17:18 VCO output divide R */
2395+1, /* 19 CLK Output enable. */
2396+1, /* 20 CLK/X Output enable */
2397+0, /* reserved, should be set to 0 */
2398+0, /* Reference clock select on CLK 1=ref */
2399+1, /* reserved, should be set to 1 */
2400+/* 75.00 MHz IBM561 PLL setup data */
2401+0x93, /* VCO Div: PFR=2, M=0x54 */
2402+0x8 /* REF: N=0x8 */
2403+},
2404+{
2405+/* Option 7 Monitor Info 69 Mhz DEC 72 Hz */
2406+864, /* rows */
2407+1024, /* columns */
2408+69, /* 69.x Mhz */
2409+60, /* refresh rate */
2410+864, /* v scanlines */
2411+0, /* v front porch */
2412+3, /* v sync */
2413+34, /* v back porch */
2414+1024, /* h pixels */
2415+12, /* h front porch */
2416+128, /* h sync */
2417+116, /* h back porch */
2418+/* 69.00 Mhz AV9110 clock serial load information */
2419+0x35, /* 0:6 VCO frequency divider N */
2420+0xb, /* 7:13 Reference frequency divide M */
2421+0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2422+*/
2423+0x1, /* 15:16 CLK/X output divide X */
2424+0x1, /* 17:18 VCO output divide R */
2425+1, /* 19 CLK Output enable. */
2426+1, /* 20 CLK/X Output enable */
2427+0, /* reserved, should be set to 0 */
2428+0, /* Reference clock select on CLK 1=ref */
2429+1, /* reserved, should be set to 1 */
2430+/* 69.00 MHz IBM561 PLL setup data */
2431+0xA9, /* VCO Div: PFR=2, M=0x6A */
2432+0xB /* REF: N=0xB */
2433+},
2434+{
2435+/* Option 8 Monitor Info 65 Mhz */
2436+768, /* rows */
2437+1024, /* columns */
2438+65, /* 65 Mhz */
2439+60, /* refresh rate */
2440+768, /* v scanlines */
2441+7, /* v front porch */
2442+9, /* v sync */
2443+26, /* v back porch */
2444+1024, /* h pixels */
2445+56, /* h front porch */
2446+64, /* h sync */
2447+200, /* h back porch */
2448+/* 65.00 MHz AV9110 clock serial load information */
2449+0x6d, /* 0:6 VCO frequency divider N */
2450+0x0c, /* 7:13 Reference frequency divide M */
2451+0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2452+*/
2453+0x1, /* 15:16 CLK/X output divide X */
2454+0x2, /* 17:18 VCO output divide R */
2455+1, /* 19 CLK Output enable. */
2456+1, /* 20 CLK/X Output enable */
2457+0, /* reserved, should be set to 0 */
2458+0, /* Reference clock select on CLK 1=ref */
2459+1, /* reserved, should be set to 1 */
2460+/* 65.00 MHz IBM561 PLL setup data */
2461+0xAC, /* VCO Div: PFR=2, M=0x6D */
2462+0xC /* REF: N=0xC */
2463+},
2464+{
2465+/* Option A Monitor Info 40 Mhz SVGA */
2466+600, /* rows */
2467+800, /* columns */
2468+40, /* 40 Mhz */
2469+60, /* refresh rate */
2470+600, /* v scanlines */
2471+1, /* v front porch */
2472+4, /* v sync */
2473+23, /* v back porch */
2474+800, /* h pixels */
2475+40, /* h front porch */
2476+128, /* h sync */
2477+88, /* h back porch */
2478+/* 40.00 MHz AV9110 clock serial load information */
2479+0x5f, /* 0:6 VCO frequency divider N */
2480+0x11, /* 7:13 Reference frequency divide M */
2481+0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2482+*/
2483+0x1, /* 15:16 CLK/X output divide X */
2484+0x2, /* 17:18 VCO output divide R */
2485+1, /* 19 CLK Output enable. */
2486+1, /* 20 CLK/X Output enable */
2487+0, /* reserved, should be set to 0 */
2488+0, /* Reference clock select on CLK 1=ref */
2489+1, /* reserved, should be set to 1 */
2490+/* 40.00 MHz IBM561 PLL setup data */
2491+0x42, /* VCO Div: PFR=1, M=43 */
2492+0x6 /* REF: N=0x6 */
2493+},
2494+{
2495+/* Option C Monitor Info 25.175 Mhz VGA */
2496+480, /* rows */
2497+640, /* columns */
2498+25, /* 25.175 Mhz */
2499+60, /* refresh rate */
2500+480, /* v scanlines */
2501+10, /* v front porch */
2502+2, /* v sync */
2503+33, /* v back porch */
2504+640, /* h pixels */
2505+16, /* h front porch */
2506+96, /* h sync */
2507+48, /* h back porch */
2508+/* 25.175 MHz AV9110 clock serial load information */
2509+0x66, /* 0:6 VCO frequency divider N */
2510+0x1d, /* 7:13 Reference frequency divide M */
2511+0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2512+*/
2513+0x1, /* 15:16 CLK/X output divide X */
2514+0x2, /* 17:18 VCO output divide R */
2515+1, /* 19 CLK Output enable. */
2516+1, /* 20 CLK/X Output enable */
2517+0, /* reserved, should be set to 0 */
2518+0, /* Reference clock select on CLK 1=ref */
2519+1, /* reserved, should be set to 1 */
2520+/* 25.175 MHz IBM561 PLL setup data */
2521+0x3E, /* VCO Div: PFR=0, M=0x7F */
2522+0x9 /* REF: N=0x9 */
2523+},
2524+{
2525+/* Option E Monitor Info 110 Mhz */
2526+1024, /* rows */
2527+1280, /* columns */
2528+110,
2529+60, /* refresh rate */
2530+1024, /* v scanlines */
2531+6, /* v front porch */
2532+7, /* v sync */
2533+44, /* v back porch */
2534+1280, /* h pixels */
2535+19, /* h front porch */
2536+163, /* h sync */
2537+234, /* h back porch */
2538+/* 110.0 MHz AV9110 clock serial load information */
2539+0x60, /* 0:6 VCO frequency divider N */
2540+0x32, /* 7:13 Reference frequency divide M */
2541+0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) */
2542+0x1, /* 15:16 CLK/X output divide X */
2543+0x2, /* 17:18 VCO output divide R */
2544+1, /* 19 CLK Output enable. */
2545+1, /* 20 CLK/X Output enable */
2546+0, /* reserved, should be set to 0 */
2547+0, /* Reference clock select on CLK 1=ref */
2548+1, /* reserved, should be set to 1 */
2549+/* 110.0 MHz IBM561 PLL setup data */
2550+0xBA, /* VCO Div: PFR=0x2, M=0x7B */
2551+0x8 /* REF: N=0x8 */
2552+},
2553+#endif /* ALLOW_LT_72_HZ */
2554+#ifdef /* ALLOW_GT_72_HZ */
2555+{
2556+/* Option D Monitor Info 135 Mhz */
2557+1024, /* rows */
2558+1280, /* columns */
2559+135, /* 135 Mhz */
2560+75, /* refresh rate */
2561+1024, /* v scanlines */
2562+1, /* v front porch */
2563+3, /* v sync */
2564+38, /* v back porch */
2565+1280, /* h pixels */
2566+16, /* h front porch */
2567+144, /* h sync */
2568+248, /* h back porch */
2569+/* 135.0 MHz AV9110 clock serial load information */
2570+0x42, /* 0:6 VCO frequency divider N */
2571+0x07, /* 7:13 Reference frequency divide M */
2572+0x0, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) */
2573+0x1, /* 15:16 CLK/X output divide X */
2574+0x1, /* 17:18 VCO output divide R */
2575+1, /* 19 CLK Output enable. */
2576+1, /* 20 CLK/X Output enable */
2577+0, /* reserved, should be set to 0 */
2578+0, /* Reference clock select on CLK 1=ref */
2579+1, /* reserved, should be set to 1 */
2580+/* 135.0 MHz IBM561 PLL setup data */
2581+0xC1, /* VCO Div: PFR=0x3, M=0x42 */
2582+0x7 /* REF: N=0x7 */
2583+},
2584+#ifdef ALLOW_GT_1280x1024
2585+{
2586+/* Option 4 Monitor Info 175.5 Mhz (8-plane) */
2587+1200, /* rows */
2588+1600, /* columns */
2589+175, /* clock */
2590+65, /* refresh rate */
2591+1200, /* v scanlines */
2592+1, /* v front porch */
2593+3, /* v sync */
2594+46, /* v back porch */
2595+1600, /* h pixels */
2596+32, /* h front porch */
2597+192, /* h sync */
2598+336, /* h back porch */
2599+/* 110.0 MHz AV9110 clock serial load information */
2600+0x5F, /* 0:6 VCO frequency divider N */
2601+0x3E, /* 7:13 Reference frequency divide M */
2602+0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8)
2603+*/
2604+0x1, /* 15:16 CLK/X output divide X */
2605+0x1, /* 17:18 VCO output divide R */
2606+1, /* 19 CLK Output enable. */
2607+1, /* 20 CLK/X Output enable */
2608+0, /* reserved, should be set to 0 */
2609+0, /* Reference clock select on CLK 1=ref */
2610+1, /* reserved, should be set to 1 */
2611+/* 110.0 MHz IBM561 PLL setup data */
2612+0xE1, /* VCO Div: PFR=0x3, M-65=0x21 */
2613+0x8 /* REF: N=0x8 */
2614+},
2615+{
2616+/* Option F Monitor Info (24-plane) */
2617+1200, /* rows */
2618+1600, /* columns */
2619+202.5, /* 130.8 Mhz */
2620+75, /* refresh rate */
2621+1200, /* v scanlines */
2622+1, /* v front porch */
2623+3, /* v sync */
2624+46, /* v back porch */
2625+1600, /* h pixels */
2626+32, /* h front porch */
2627+192, /* h sync */
2628+336, /* h back porch */
2629+/* AV9110 clock serial load information 130.808 */
2630+0x60, /* 0:6 VCO frequency divider N */
2631+0x32, /* 7:13 Reference frequency divide M */
2632+0x1, /* 14 VCO pre-scale divide V (0=div.by 1,1=by 8) */
2633+0x1, /* 15:16 CLK/X output divide X */
2634+0x2, /* 17:18 VCO output divide R */
2635+1, /* 19 CLK Output enable. */
2636+1, /* 20 CLK/X Output enable */
2637+0, /* reserved, should be set to 0 */
2638+0, /* Reference clock select on CLK 1=ref */
2639+1, /* reserved, should be set to 1 */
2640+/* 110.0 MHz IBM561 PLL setup data */
2641+0xE2, /* bogus VCO Div: PFR=0x2, M=0x7B */
2642+0x7 /* bogus REF: N=0x8 */
2643+}
2644+#endif /* ALLOW_GT_1280x1024 */
2645+#endif /* ALLOW_GT_72_HZ */
2646 };
2647
2648+int tga_crystal_table_entries = sizeof(tga_crystal_table)/sizeof(struct monitor_data);
2649+
2650+struct monitor_data *tga_c_table;
2651+
2652 /* ICS av9110 is only used on TGA2 */
2653
2654 void
2655@@ -142,30 +609,58 @@
2656 TGA2_WRITE_CLOCK_REG(0x0, 0xf800);
2657 }
2658
2659+void TGA2SetupMode(ScrnInfoPtr pScrn)
2660+{
2661+ int i;
2662+
2663+ /*
2664+ * HACK HACK HACK
2665+ *
2666+ * We do not know how to generate arbitrary clocks, so we search
2667+ * the crystal_table above for a match. Sigh...
2668+ */
2669+ tga_c_table = tga_crystal_table;
2670+ for (i = 0; i < tga_crystal_table_entries; i++, tga_c_table++) {
2671+ if ((tga_c_table->max_rows == pScrn->currentMode->VDisplay) &&
2672+ (tga_c_table->max_cols == pScrn->currentMode->HDisplay)) {
2673+ ErrorF("Found a matching mode (%d)!\n", i);
2674+ break;
2675+ }
2676+ }
2677+ if (i == tga_crystal_table_entries) {
2678+#ifdef FOR_NOW
2679+ FatalError("Unable to find a workable mode");
2680+#else
2681+ ErrorF("Unable to find a matching mode!\n");
2682+ /* tga_c_table = &tga_crystal_table[4]; *//* 640x480 @ 72 */
2683+ tga_c_table = &tga_crystal_table[2]; /* 1024x768 @ 72 */
2684+#endif
2685+ }
2686+ return;
2687+}
2688+
2689 static void
2690 ICS9110ClockSelect(ScrnInfoPtr pScrn, int freq)
2691 {
2692 unsigned int temp, temp1[6];
2693- struct monitor_data *c_table;
2694+ int i;
2695
2696 /* There lies an ICS9110 Clock Generator. */
2697 /* ICS9110_CalcClockBits(freq, pll_bits); */
2698
2699- c_table = &crystal_table;
2700-
2701 /* the following is based on munge_ics() from the
2702 TRU64 kernel TGA driver */
2703
2704- temp = (unsigned int)(c_table->vco_div |
2705- (c_table->ref_div << 7) |
2706- (c_table->vco_pre << 14) |
2707- (c_table->clk_div << 15) |
2708- (c_table->vco_out_div << 17) |
2709- (c_table->clk_out_en << 19) |
2710- (c_table->clk_out_enX << 20) |
2711- (c_table->res0 << 21) |
2712- (c_table->clk_sel << 22) |
2713- (c_table->res1 << 23));
2714+ temp = (unsigned int)(tga_c_table->vco_div |
2715+ (tga_c_table->ref_div << 7) |
2716+ (tga_c_table->vco_pre << 14) |
2717+ (tga_c_table->clk_div << 15) |
2718+ (tga_c_table->vco_out_div << 17) |
2719+ (tga_c_table->clk_out_en << 19) |
2720+ (tga_c_table->clk_out_enX << 20) |
2721+ (tga_c_table->res0 << 21) |
2722+ (tga_c_table->clk_sel << 22) |
2723+ (tga_c_table->res1 << 23));
2724
2725 temp1[0] = (temp & 0x00000001) | ((temp & 0x00000002) << 7) |
2726 ((temp & 0x00000004) << 14) | ((temp & 0x00000008) << 21);
2727diff -ur xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga_driver.c xc/programs/Xserver/hw/xfree86/drivers/tga/tga_driver.c
2728--- xc.orig/programs/Xserver/hw/xfree86/drivers/tga/tga_driver.c Mon Dec 4 19:56:22 2000
2729+++ xc/programs/Xserver/hw/xfree86/drivers/tga/tga_driver.c Sun Mar 18 16:51:30 2001
2730@@ -954,6 +954,15 @@
2731 /* Set the current mode to the first in the list */
2732 pScrn->currentMode = pScrn->modes;
2733
2734+ /*
2735+ This is a bit of a hack; we seem to have to init
2736+ the TGA2 chipset knowing what the mode is, so we
2737+ do this now as soon as we know it...
2738+ */
2739+ if (pTga->Chipset == PCI_CHIP_TGA2) {
2740+ TGA2SetupMode(pScrn);
2741+ }
2742+
2743 /* Print the list of modes being used */
2744 xf86PrintModes(pScrn);
2745
2746diff -ur xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_axp.c xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_axp.c
2747--- xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_axp.c Sat Mar 17 17:57:16 2001
2748+++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_axp.c Sun Mar 18 16:51:30 2001
2749@@ -10,28 +10,28 @@
2750 axpDevice lnxGetAXP(void);
2751
2752 static AXP axpList[] = {
2753- { "Tsunami", NULL, NULL, TSUNAMI },
2754- { "Eiger", NULL, NULL, TSUNAMI },
2755- {"Noname", NULL, NULL, LCA },
2756- { "AlphaBook1", NULL, NULL, LCA },
2757- {"EB66", NULL, NULL, LCA},
2758- {"EB64+",NULL,NULL, APECS},
2759+ {"Tsunami",NULL,NULL,TSUNAMI},
2760+ {"Eiger",NULL,NULL,TSUNAMI},
2761+ {"Noname",NULL,NULL,LCA},
2762+ {"AlphaBook1",NULL,NULL,LCA},
2763+ {"EB66",NULL,NULL,LCA},
2764+ {"EB64+",NULL,NULL,APECS},
2765 {"Noritake",NULL,"EV5",CIA},
2766 {"Noritake",NULL,"EV56",CIA},
2767 {"Noritake",NULL,NULL,APECS},
2768- {"XL",NULL,NULL,APECS},
2769+ {"XL",NULL,NULL,APECS},
2770 {"Avanti",NULL,NULL,APECS},
2771 {"Mikasa",NULL,"EV5",CIA},
2772 {"Mikasa",NULL,"EV56",CIA},
2773 {"Mikasa",NULL,NULL,APECS},
2774 {"EB164","EB164",NULL,CIA},
2775- {"EB164","PC164", NULL,CIA},
2776- {"EB164","RX164",NULL, POLARIS},
2777- {"EB164","SX164",NULL, PYXIS},
2778- {"EB164","LX164",NULL, PYXIS},
2779+ {"EB164","PC164",NULL,CIA},
2780+ {"EB164","RX164",NULL,POLARIS},
2781+ {"EB164","SX164",NULL,PYXIS},
2782+ {"EB164","LX164",NULL,PYXIS},
2783 {"Alcor",NULL,NULL,CIA},
2784 {"Takara",NULL,NULL,CIA},
2785- {"Sable",NULL, "EV5",T2_GAMMA},
2786+ {"Sable",NULL,"EV5",T2_GAMMA},
2787 {"Sable",NULL,"EV56",T2_GAMMA},
2788 {"Sable",NULL,NULL,T2},
2789 {"Rawhide",NULL,NULL,MCPCIA},
2790diff -ur xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_ev56.c xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_ev56.c
2791--- xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_ev56.c Thu Feb 17 08:45:49 2000
2792+++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_ev56.c Sun Mar 18 16:51:30 2001
2793@@ -29,18 +29,21 @@
2794 int
2795 readDense8(pointer Base, register unsigned long Offset)
2796 {
2797+ mem_barrier();
2798 return *(volatile CARD8*) ((unsigned long)Base+(Offset));
2799 }
2800
2801 int
2802 readDense16(pointer Base, register unsigned long Offset)
2803 {
2804+ mem_barrier();
2805 return *(volatile CARD16*) ((unsigned long)Base+(Offset));
2806 }
2807
2808 int
2809 readDense32(pointer Base, register unsigned long Offset)
2810 {
2811+ mem_barrier();
2812 return *(volatile CARD32*)((unsigned long)Base+(Offset));
2813 }
2814
2815@@ -65,20 +68,20 @@
2816 void
2817 writeDense8(int Value, pointer Base, register unsigned long Offset)
2818 {
2819+ write_mem_barrier();
2820 *(volatile CARD8 *)((unsigned long)Base+(Offset)) = Value;
2821- mem_barrier();
2822 }
2823
2824 void
2825 writeDense16(int Value, pointer Base, register unsigned long Offset)
2826 {
2827+ write_mem_barrier();
2828 *(volatile CARD16 *)((unsigned long)Base+(Offset)) = Value;
2829- mem_barrier();
2830 }
2831
2832 void
2833 writeDense32(int Value, pointer Base, register unsigned long Offset)
2834 {
2835+ write_mem_barrier();
2836 *(volatile CARD32 *)((unsigned long)Base+(Offset)) = Value;
2837- mem_barrier();
2838 }
2839diff -ur xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_video.c xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_video.c
2840--- xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_video.c Fri Dec 8 22:59:56 2000
2841+++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_video.c Sun Mar 18 17:29:04 2001
2842@@ -614,15 +614,16 @@
2843
2844 Offset += (unsigned long)Base - (unsigned long)lnxBase;
2845 shift = (Offset & 0x3) << 3;
2846- if (Offset >= (hae_thresh)) {
2847+ if (Offset >= (hae_thresh)) {
2848 msb = Offset & hae_mask;
2849 Offset -= msb;
2850 if (msb_set != msb) {
2851- sethae(msb);
2852- msb_set = msb;
2853+ sethae(msb);
2854+ msb_set = msb;
2855 }
2856- }
2857+ }
2858
2859+ mem_barrier();
2860 result = *(vuip) ((unsigned long)lnxSBase + (Offset << 5));
2861 result >>= shift;
2862 return 0xffUL & result;
2863@@ -636,14 +637,16 @@
2864
2865 Offset += (unsigned long)Base - (unsigned long)lnxBase;
2866 shift = (Offset & 0x2) << 3;
2867- if (Offset >= hae_thresh) {
2868+ if (Offset >= hae_thresh) {
2869 msb = Offset & hae_mask;
2870 Offset -= msb;
2871- if (msb_set != msb) {
2872- sethae(msb);
2873- msb_set = msb;
2874- }
2875+ if (msb_set != msb) {
2876+ sethae(msb);
2877+ msb_set = msb;
2878+ }
2879 }
2880+
2881+ mem_barrier();
2882 result = *(vuip)((unsigned long)lnxSBase+(Offset<<5)+(1<<(5-2)));
2883 result >>= shift;
2884 return 0xffffUL & result;
2885@@ -652,6 +655,8 @@
2886 static int
2887 readSparse32(pointer Base, register unsigned long Offset)
2888 {
2889+ /* note that this is actually doing a DENSE read... */
2890+ mem_barrier();
2891 return *(vuip)((unsigned long)Base+(Offset));
2892 }
2893
2894@@ -670,8 +675,8 @@
2895 msb_set = msb;
2896 }
2897 }
2898+ write_mem_barrier();
2899 *(vuip) ((unsigned long)lnxSBase + (Offset << 5)) = b * 0x01010101;
2900- mem_barrier();
2901 }
2902
2903 static void
2904@@ -689,17 +694,16 @@
2905 msb_set = msb;
2906 }
2907 }
2908- *(vuip)((unsigned long)lnxSBase+(Offset<<5)+(1<<(5-2))) =
2909- w * 0x00010001;
2910- mem_barrier();
2911-
2912+ write_mem_barrier();
2913+ *(vuip)((unsigned long)lnxSBase+(Offset<<5)+(1<<(5-2))) = w * 0x00010001;
2914 }
2915
2916 static void
2917 writeSparse32(int Value, pointer Base, register unsigned long Offset)
2918 {
2919+ /* note that this is actually doing a DENSE write... */
2920+ write_mem_barrier();
2921 *(vuip)((unsigned long)Base + (Offset)) = Value;
2922- mem_barrier();
2923 return;
2924 }
2925
2926diff -ur xc.orig/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h xc/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h
2927--- xc.orig/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h Fri Dec 8 22:59:49 2000
2928+++ xc/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h Sun Mar 18 16:51:30 2001
2929@@ -194,13 +194,6 @@
2930 extern Bool xf86UnbindGARTMemory(int screenNum, int key);
2931 extern Bool xf86EnableAGP(int screenNum, CARD32 mode);
2932
2933-#if defined(__alpha__)
2934-extern void xf86JensenMemToBus(char *, long, long, int);
2935-extern void xf86JensenBusToMem(char *, char *, unsigned long, int);
2936-extern void xf86SlowBCopyFromBus(unsigned char *, unsigned char *, int);
2937-extern void xf86SlowBCopyToBus(unsigned char *, unsigned char *, int);
2938-#endif /* __alpha__ */
2939-
2940 /* These routines are in shared/sigio.c and are not loaded as part of the
2941 module. These routines are small, and the code if very POSIX-signal (or
2942 OS-signal) specific, so it seemed better to provide more complex
This page took 0.572612 seconds and 4 git commands to generate.