1 diff -cENRr -x CVS -x test base/xc/programs/Xserver/hw/xfree86/accel/mach64/ativga.c devel/xc/programs/Xserver/hw/xfree86/accel/mach64/ativga.c
2 *** base/xc/programs/Xserver/hw/xfree86/accel/mach64/ativga.c Wed Feb 9 20:05:48 2000
3 --- devel/xc/programs/Xserver/hw/xfree86/accel/mach64/ativga.c Fri Feb 4 09:13:42 2000
6 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/ativga.c,v 3.7.2.1 1998/10/18 20:42:04 hohndel Exp $ */
7 /***************************************************************************
8 * Start of VGA font saving and restoration code.
9 * Created: Sun Jun 27 12:50:09 1993 by faith@cs.unc.edu
11 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/ativga.c,v 3.7.2.1tsi Exp $ */
12 /***************************************************************************
13 * Start of VGA font saving and restoration code.
14 * Created: Sun Jun 27 12:50:09 1993 by faith@cs.unc.edu
21 + unsigned char shadow_crtc[25];
22 unsigned char ATIExtRegBank[11]; /* ATI Registers B0,B1,B2,B3,
23 B5, B6,B8,B9, BE,A6,A7 */
28 void mach64SaveVGAInfo(screen_idx)
31 + unsigned long saved_lcd_gen_ctrl = 0, lcd_gen_ctrl = 0;
32 unsigned char b2_save;
33 unsigned char b8_save;
37 vgaBase = xf86MapVidMem(screen_idx, VGA_REGION, (pointer)0xa0000,
41 vgaIOBase = (inb(0x3cc) & 0x01) ? 0x3D0 : 0x3B0;
43 - /* This part is copied from ATISave() in
44 - * xf86/vga256/drivers/ati/driver.c
47 if (!mach64IntegratedController) {
48 /* Unlock ATI specials */
49 outw(ATIExtReg, (((b8_save = inATI(0xb8)) & 0xC0) << 8) | 0xb8);
54 outw(ATIExtReg, 0x00b2); /* segment select 0 */
57 + if (mach64LCDPanelID >= 0) {
58 + if (mach64ChipType == MACH64_LG_ID) {
59 + saved_lcd_gen_ctrl = regr(LCD_GEN_CTRL);
60 + lcd_gen_ctrl = saved_lcd_gen_ctrl &
61 + ~(CRTC_RW_SELECT | SHADOW_EN | SHADOW_RW_EN);
62 + regw(LCD_GEN_CTRL, lcd_gen_ctrl);
64 + outb(ioLCD_INDEX, LCD_GEN_CNTL);
65 + saved_lcd_gen_ctrl = inl(ioLCD_DATA);
66 + lcd_gen_ctrl = saved_lcd_gen_ctrl &
67 + ~(CRTC_RW_SELECT | SHADOW_EN | SHADOW_RW_EN);
68 + outl(ioLCD_DATA, lcd_gen_ctrl);
72 vgaNewVideoState = vgaHWSave(vgaNewVideoState, sizeof(SaveBlock));
73 + /* Unlock VGA CRTC */
74 + outw(vgaIOBase + 4, ((save->std.CRTC[17] & 0x7F) << 8) | 17);
76 + if (mach64LCDPanelID >= 0) {
77 + lcd_gen_ctrl |= SHADOW_EN | SHADOW_RW_EN;
78 + if (mach64ChipType == MACH64_LG_ID) {
79 + regw(LCD_GEN_CTRL, lcd_gen_ctrl);
81 + outb(ioLCD_INDEX, LCD_GEN_CNTL);
82 + outl(ioLCD_DATA, lcd_gen_ctrl);
85 + for (i=0; i<25; i++) {
86 + outb(vgaIOBase + 4, i);
87 + save->shadow_crtc[i] = inb(vgaIOBase + 5);
89 + /* Unlock shadow VGA CRTC */
90 + outw(vgaIOBase + 4, ((save->shadow_crtc[17] & 0x7F) << 8) | 17);
92 + if (mach64ChipType == MACH64_LG_ID) {
93 + regw(LCD_GEN_CTRL, saved_lcd_gen_ctrl);
95 + outb(ioLCD_INDEX, LCD_GEN_CNTL);
96 + outl(ioLCD_DATA, saved_lcd_gen_ctrl);
100 if (!mach64IntegratedController) {
101 save->ATIReg0 = inATI(0xb0);
105 void mach64RestoreVGAInfo()
107 ! /* This routine is mostly from ATIRestore() in
108 ! * xf86/vga256/drivers/ati/driver.c
111 if (!mach64IntegratedController) {
112 /* Unlock ATI specials */
115 void mach64RestoreVGAInfo()
117 ! unsigned long saved_lcd_gen_ctrl = 0, lcd_gen_ctrl = 0;
120 if (!mach64IntegratedController) {
121 /* Unlock ATI specials */
125 outw(ATIExtReg, (save->ATIReg8 << 8) | 0xb8);
128 + if (mach64LCDPanelID >= 0) {
129 + if (mach64ChipType == MACH64_LG_ID) {
130 + saved_lcd_gen_ctrl = regr(LCD_GEN_CTRL);
131 + lcd_gen_ctrl = saved_lcd_gen_ctrl &
132 + ~(CRTC_RW_SELECT | SHADOW_EN | SHADOW_RW_EN);
133 + regw(LCD_GEN_CTRL, lcd_gen_ctrl);
135 + outb(ioLCD_INDEX, LCD_GEN_CNTL);
136 + saved_lcd_gen_ctrl = inl(ioLCD_DATA);
137 + lcd_gen_ctrl = saved_lcd_gen_ctrl &
138 + ~(CRTC_RW_SELECT | SHADOW_EN | SHADOW_RW_EN);
139 + outl(ioLCD_DATA, lcd_gen_ctrl);
144 * Restore the generic vga registers
146 vgaHWRestore((vgaHWPtr)save);
148 + if (mach64LCDPanelID >= 0) {
149 + lcd_gen_ctrl |= SHADOW_EN | SHADOW_RW_EN;
150 + if (mach64ChipType == MACH64_LG_ID) {
151 + regw(LCD_GEN_CTRL, lcd_gen_ctrl);
153 + outb(ioLCD_INDEX, LCD_GEN_CNTL);
154 + outl(ioLCD_DATA, lcd_gen_ctrl);
157 + outw(vgaIOBase + 4, ((save->shadow_crtc[17] & 0x7F) << 8) | 17);
158 + for (i=0; i<25; i++) outw(vgaIOBase + 4, (save->shadow_crtc[i] << 8) | i);
160 + if (mach64ChipType == MACH64_LG_ID) {
161 + regw(LCD_GEN_CTRL, saved_lcd_gen_ctrl);
163 + outb(ioLCD_INDEX, LCD_GEN_CNTL);
164 + outl(ioLCD_DATA, saved_lcd_gen_ctrl);
170 diff -cENRr -x CVS -x test base/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.c devel/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.c
171 *** base/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.c Wed Feb 9 20:05:49 2000
172 --- devel/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.c Mon Feb 14 09:27:30 2000
175 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.c,v 3.62.2.20 1999/10/12 17:18:42 hohndel Exp $ */
177 * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
178 * Copyright 1993,1994,1995,1996,1997 by Kevin E. Martin, Chapel Hill, North Carolina.
180 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.c,v 3.62.2.20tsi Exp $ */
182 * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
183 * Copyright 1993,1994,1995,1996,1997 by Kevin E. Martin, Chapel Hill, North Carolina.
188 int mach64DRAMMemClk;
189 int mach64VRAMMemClk;
192 Bool mach64IntegratedController;
197 mach64CXClk = 7; /* Use IBM RGB514 PLL */
199 mach64CXClk = info->CXClk;
200 + if (mach64HasDSP) {
201 + /* Calculate XCLK */
202 + outb(ioCLOCK_CNTL + 1, MCLK_FB_DIV << 2);
204 + inb(ioCLOCK_CNTL + 2) * 4 * mach64RefFreq / mach64RefDivider;
205 + outb(ioCLOCK_CNTL + 1, PLL_XCLK_CNTL << 2);
206 + i = inb(ioCLOCK_CNTL + 2);
207 + if (!(i & MFB_TIMES_4_2))
209 + i = i & XCLK_SRC_SEL;
212 + case 1: case 2: case 3: mach64XCLK >>= i; break;
213 + case 4: mach64XCLK /= 3; break;
215 + ErrorF("Unsupported XCLK source: %d!\n", i);
221 ErrorF("MinFreq = %d, MaxFreq = %d, RefFreq = %d, RefDivider = %d\n",
225 mach64LCDHorizontal = info->LCDHorizontal;
226 mach64LCDVertical = info->LCDVertical;
227 ! mach64LCDClock = mach64GetCTClock(0);
228 ErrorF("%s %s: %dx%d panel (ID %d) detected; clock %.2f MHz\n",
229 XCONFIG_PROBED, mach64InfoRec.name,
230 mach64LCDHorizontal, mach64LCDVertical, mach64LCDPanelID,
233 mach64LCDHorizontal = info->LCDHorizontal;
234 mach64LCDVertical = info->LCDVertical;
235 ! mach64LCDClock = mach64GetCTClock((inb(0x3cc) >> 2) & 3);
236 ErrorF("%s %s: %dx%d panel (ID %d) detected; clock %.2f MHz\n",
237 XCONFIG_PROBED, mach64InfoRec.name,
238 mach64LCDHorizontal, mach64LCDVertical, mach64LCDPanelID,
239 diff -cENRr -x CVS -x test base/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.h devel/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.h
240 *** base/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.h Wed Feb 9 20:05:49 2000
241 --- devel/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.h Mon Feb 14 08:52:16 2000
244 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.h,v 3.14.2.6 1999/07/23 13:22:36 hohndel Exp $ */
246 * Copyright 1992,1993,1994,1995,1996,1997 by Kevin E. Martin, Chapel Hill, North Carolina.
249 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/mach64.h,v 3.14.2.6tsi Exp $ */
251 * Copyright 1992,1993,1994,1995,1996,1997 by Kevin E. Martin, Chapel Hill, North Carolina.
258 ! #define MACH64_PATCHLEVEL "0"
260 #define MACH64_CURSBYTES 1024
261 #define MACH64_CURSMAX 64
266 ! #define MACH64_PATCHLEVEL "1"
268 #define MACH64_CURSBYTES 1024
269 #define MACH64_CURSMAX 64
273 extern int mach64MemClk;
274 extern int mach64DRAMMemClk;
275 extern int mach64VRAMMemClk;
276 + extern int mach64XCLK;
277 extern int mach64MemCycle;
279 extern int mach64LCDPanelID;
280 diff -cENRr -x CVS -x test base/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64init.c devel/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64init.c
281 *** base/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64init.c Wed Feb 9 20:05:53 2000
282 --- devel/xc/programs/Xserver/hw/xfree86/accel/mach64/mach64init.c Mon Feb 14 09:25:05 2000
285 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/mach64init.c,v 3.24.2.11 1999/10/12 17:18:43 hohndel Exp $ */
287 * Written by Jake Richter
288 * Copyright (c) 1989, 1990 Panacea Inc., Londonderry, NH - All Rights Reserved
290 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/mach64init.c,v 3.24.2.11tsi Exp $ */
292 * Written by Jake Richter
293 * Copyright (c) 1989, 1990 Panacea Inc., Londonderry, NH - All Rights Reserved
296 default: bpp = 4; break;
299 ! x = ((double)mach64VRAMMemClk * 64.0) / (current_dot_clock * (double)bpp);
300 if (mach64LCDPanelID >= 0) /* Compensate for horizontal stretching */
301 x *= (double)mach64LCDHorizontal / (double)current_hdisplay;
302 bx = ceil(log(floor(x))/log(2));
304 default: bpp = 4; break;
307 ! x = ((double)mach64XCLK * 64.0) / (current_dot_clock * (double)bpp);
308 if (mach64LCDPanelID >= 0) /* Compensate for horizontal stretching */
309 x *= (double)mach64LCDHorizontal / (double)current_hdisplay;
310 bx = ceil(log(floor(x))/log(2));
313 ErrorF("dsp_on = %d, ron = %d, rloop = %d\n", dsp_on, ron, rloop);
314 ErrorF("dsp_off = %d, roff = %d\n", dsp_off, roff);
315 ErrorF("dsp_xclks_per_qw = %d\n", dsp_xclks_per_qw);
316 ! ErrorF("mach64VRAMMemClk = %d, ", mach64VRAMMemClk);
317 ErrorF("dot_clock = %.3lf, ", current_dot_clock);
318 ErrorF("bpp = %d\n", bpp);
319 ErrorF("trp = %d, ", trp);
321 ErrorF("dsp_on = %d, ron = %d, rloop = %d\n", dsp_on, ron, rloop);
322 ErrorF("dsp_off = %d, roff = %d\n", dsp_off, roff);
323 ErrorF("dsp_xclks_per_qw = %d\n", dsp_xclks_per_qw);
324 ! ErrorF("mach64XCLK = %d, ", mach64XCLK);
325 ErrorF("dot_clock = %.3lf, ", current_dot_clock);
326 ErrorF("bpp = %d\n", bpp);
327 ErrorF("trp = %d, ", trp);
330 outl(ioLCD_DATA, old_POWER_MANAGEMENT);
331 if ((mach64ChipType != MACH64_LB_ID) &&
332 (mach64ChipType != MACH64_LD_ID) &&
333 ! (mach64ChipType != MACH64_LR_ID) &&
334 ! (mach64ChipType != MACH64_LS_ID)) {
335 outb(ioLCD_INDEX, LCD_POWER_MANAGEMENT_2);
336 outl(ioLCD_DATA, old_POWER_MANAGEMENT_2);
339 outl(ioLCD_DATA, old_POWER_MANAGEMENT);
340 if ((mach64ChipType != MACH64_LB_ID) &&
341 (mach64ChipType != MACH64_LD_ID) &&
342 ! (mach64ChipType != MACH64_LI_ID) &&
343 ! (mach64ChipType != MACH64_LP_ID)) {
344 outb(ioLCD_INDEX, LCD_POWER_MANAGEMENT_2);
345 outl(ioLCD_DATA, old_POWER_MANAGEMENT_2);
347 diff -cENRr -x CVS -x test base/xc/programs/Xserver/hw/xfree86/accel/mach64/regmach64.h devel/xc/programs/Xserver/hw/xfree86/accel/mach64/regmach64.h
348 *** base/xc/programs/Xserver/hw/xfree86/accel/mach64/regmach64.h Wed Feb 9 20:05:54 2000
349 --- devel/xc/programs/Xserver/hw/xfree86/accel/mach64/regmach64.h Mon Feb 14 09:16:35 2000
352 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/regmach64.h,v 3.15.2.8 1999/10/12 17:18:44 hohndel Exp $ */
354 * Copyright 1992,1993,1994,1995,1996,1997 by Kevin E. Martin, Chapel Hill, North Carolina.
357 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/accel/mach64/regmach64.h,v 3.15.2.8tsi Exp $ */
359 * Copyright 1992,1993,1994,1995,1996,1997 by Kevin E. Martin, Chapel Hill, North Carolina.
364 #define VCLK1_POST 0x0C
365 #define VCLK2_POST 0x30
366 #define VCLK3_POST 0xC0
367 + #define XCLK_SRC_SEL 0x07
368 + #define MFB_TIMES_4_2 0x08
370 /* LCD_INDEX register mapping */
371 #define LCD_REG_INDEX 0x0000000f
372 diff -cENRr -x CVS -x test base/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticlock.c devel/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticlock.c
373 *** base/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticlock.c Wed Feb 9 20:09:29 2000
374 --- devel/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticlock.c Wed Feb 2 09:56:02 2000
377 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticlock.c,v 1.1.2.3 1999/10/12 17:18:52 hohndel Exp $ */
379 * Copyright 1997 through 1999 by Marc Aurele La France (TSI @ UQV), tsi@ualberta.ca
382 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticlock.c,v 1.1.2.3tsi Exp $ */
384 * Copyright 1997 through 1999 by Marc Aurele La France (TSI @ UQV), tsi@ualberta.ca
389 for (; Clock_Line[++Clock_Chip_Index]; )
391 int Maximum_Gap = 0, Clock_Count = 0, Clock_Index = 0;
393 + /* Only Mach64's and Rage128's can have programmable clocks */
394 + if ((Clock_Chip_Index >= ATI_CLOCK_MACH64A) &&
395 + (ATIAdapter < ATI_ADAPTER_MACH64))
398 for (; Clock_Index < Number_Of_Clocks; Clock_Index++)
400 diff -cENRr -x CVS -x test base/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticonsole.c devel/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticonsole.c
401 *** base/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticonsole.c Wed Feb 9 20:09:29 2000
402 --- devel/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticonsole.c Wed Feb 2 19:20:42 2000
405 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticonsole.c,v 1.1.2.2 1999/10/12 17:18:52 hohndel Exp $ */
407 * Copyright 1997 through 1999 by Marc Aurele La France (TSI @ UQV), tsi@ualberta.ca
410 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/aticonsole.c,v 1.1.2.2tsi Exp $ */
412 * Copyright 1997 through 1999 by Marc Aurele La France (TSI @ UQV), tsi@ualberta.ca
416 saved_crtc_int_cntl, saved_lcd_index;
418 static Bool entered = LEAVE;
422 if ((enter == LEAVE) && !ATIUsing1bppModes &&
424 saved_crtc_int_cntl, saved_lcd_index;
426 static Bool entered = LEAVE;
427 ! CARD32 tmp, lcd_gen_ctrl = 0, saved_lcd_gen_ctrl = 0;
430 if ((enter == LEAVE) && !ATIUsing1bppModes &&
433 outl(ATIIOPortCRTC_GEN_CNTL, tmp | CRTC_EN);
434 outl(ATIIOPortCRTC_GEN_CNTL, tmp);
435 outl(ATIIOPortCRTC_GEN_CNTL, tmp | CRTC_EN);
436 ! if (ATIChip >= ATI_CHIP_264XL)
438 saved_lcd_index = inl(ATIIOPortLCD_INDEX);
439 ! outl(ATIIOPortLCD_INDEX,
440 ! saved_lcd_index & ~(LCD_MONDET_INT_EN | LCD_MONDET_INT));
443 /* Ensure VGA aperture is enabled */
445 outl(ATIIOPortCRTC_GEN_CNTL, tmp | CRTC_EN);
446 outl(ATIIOPortCRTC_GEN_CNTL, tmp);
447 outl(ATIIOPortCRTC_GEN_CNTL, tmp | CRTC_EN);
448 ! if (ATILCDPanelID >= 0)
450 saved_lcd_index = inl(ATIIOPortLCD_INDEX);
451 ! if (ATIChip >= ATI_CHIP_264XL)
452 ! outl(ATIIOPortLCD_INDEX, saved_lcd_index &
453 ! ~(LCD_MONDET_INT_EN | LCD_MONDET_INT));
456 /* Ensure VGA aperture is enabled */
463 + if (ATILCDPanelID >= 0)
465 + if (ATIChip == ATI_CHIP_264LT)
467 + saved_lcd_gen_ctrl = inl(ATIIOPortLCD_GEN_CTRL);
469 + /* Setup to unlock non-shadow registers */
470 + lcd_gen_ctrl = saved_lcd_gen_ctrl &
471 + ~(CRTC_RW_SELECT | SHADOW_EN | SHADOW_RW_EN);
472 + outl(ATIIOPortLCD_GEN_CTRL, lcd_gen_ctrl);
474 + else /* if ((ATIChip == ATI_CHIP_264LTPRO) ||
475 + (ATIChip == ATI_CHIP_264XL) ||
476 + (ATIChip == ATI_CHIP_MOBILITY)) */
478 + saved_lcd_gen_ctrl = ATIGetLTProLCDReg(LCD_GEN_CNTL);
480 + /* Setup to unlock shadow registers */
481 + lcd_gen_ctrl = saved_lcd_gen_ctrl &
482 + ~(CRTC_RW_SELECT | SHADOW_EN | SHADOW_RW_EN);
483 + ATIPutLTProLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
488 ATISetVGAIOBase(inb(R_GENMO));
494 VSyncEnd = VBlankEnd - 1;
495 PutReg(CRTX(vgaIOBase), 0x11U, (VSyncEnd & 0x0FU) | 0x20U);
498 + if (ATILCDPanelID >= 0)
500 + Bool DoShadow = TRUE;
502 + lcd_gen_ctrl ^= (SHADOW_EN | SHADOW_RW_EN);
503 + if (!(lcd_gen_ctrl & (SHADOW_EN | SHADOW_RW_EN)))
506 + lcd_gen_ctrl = saved_lcd_gen_ctrl;
510 + * Setup to unlock shadow registers or restore previous
513 + if (ATIChip == ATI_CHIP_264LT)
514 + outl(ATIIOPortLCD_GEN_CTRL, lcd_gen_ctrl);
515 + else /* if ((ATIChip == ATI_CHIP_264LTPRO) ||
516 + (ATIChip == ATI_CHIP_264XL) ||
517 + (ATIChip == ATI_CHIP_MOBILITY)) */
519 + ATIPutLTProLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
521 + /* Restore LCD index */
522 + outb(ATIIOPortLCD_INDEX, GetByte(saved_lcd_index, 0));
526 + goto UnlockShadowVGA; /* Unlock shadow registers */
532 if (ATIVGAAdapter != ATI_ADAPTER_NONE)
534 + if (ATILCDPanelID >= 0)
536 + if (ATIChip == ATI_CHIP_264LT)
538 + saved_lcd_gen_ctrl = inl(ATIIOPortLCD_GEN_CTRL);
540 + /* Setup to lock non-shadow registers */
541 + lcd_gen_ctrl = saved_lcd_gen_ctrl &
542 + ~(CRTC_RW_SELECT | SHADOW_EN | SHADOW_RW_EN);
543 + outl(ATIIOPortLCD_GEN_CTRL, lcd_gen_ctrl);
545 + else /* if ((ATIChip == ATI_CHIP_264LTPRO) ||
546 + (ATIChip == ATI_CHIP_264XL) ||
547 + (ATIChip == ATI_CHIP_MOBILITY)) */
549 + saved_lcd_gen_ctrl = ATIGetLTProLCDReg(LCD_GEN_CNTL);
551 + /* Setup to lock shadow registers */
552 + lcd_gen_ctrl = saved_lcd_gen_ctrl &
553 + ~(CRTC_RW_SELECT | SHADOW_EN | SHADOW_RW_EN);
554 + ATIPutLTProLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
559 ATISetVGAIOBase(inb(R_GENMO));
561 /* Protect CRTC[0-7] */
562 tmp = GetReg(CRTX(vgaIOBase), 0x11U);
563 outb(CRTD(vgaIOBase), tmp | 0x80U);
565 + if (ATILCDPanelID >= 0)
567 + Bool DoShadow = TRUE;
569 + lcd_gen_ctrl ^= (SHADOW_EN | SHADOW_RW_EN);
570 + if (!(lcd_gen_ctrl & (SHADOW_EN | SHADOW_RW_EN)))
573 + lcd_gen_ctrl = saved_lcd_gen_ctrl;
577 + * Setup to lock shadow registers or restore previous
580 + if (ATIChip == ATI_CHIP_264LT)
581 + outl(ATIIOPortLCD_GEN_CTRL, lcd_gen_ctrl);
582 + else /* if ((ATIChip == ATI_CHIP_264LTPRO) ||
583 + (ATIChip == ATI_CHIP_264XL) ||
584 + (ATIChip == ATI_CHIP_MOBILITY)) */
586 + ATIPutLTProLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
588 + /* Restore LCD index */
589 + outb(ATIIOPortLCD_INDEX, GetByte(saved_lcd_index, 0));
593 + goto LockShadowVGA; /* Lock shadow registers */
596 if (ATIChipHasVGAWonder)
601 outl(ATIIOPortDAC_CNTL, saved_dac_cntl);
602 if (ATIChip < ATI_CHIP_264CT)
603 outl(ATIIOPortMEM_INFO, saved_mem_info);
604 ! else if (ATIChip >= ATI_CHIP_264XL)
605 outl(ATIIOPortLCD_INDEX, saved_lcd_index);
609 outl(ATIIOPortDAC_CNTL, saved_dac_cntl);
610 if (ATIChip < ATI_CHIP_264CT)
611 outl(ATIIOPortMEM_INFO, saved_mem_info);
612 ! else if (ATILCDPanelID >= 0)
613 outl(ATIIOPortLCD_INDEX, saved_lcd_index);
616 diff -cENRr -x CVS -x test base/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/atiprobe.c devel/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/atiprobe.c
617 *** base/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/atiprobe.c Wed Feb 9 20:09:32 2000
618 --- devel/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/atiprobe.c Tue Feb 1 10:27:18 2000
621 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/atiprobe.c,v 1.1.2.8 1999/10/13 14:32:32 hohndel Exp $ */
623 * Copyright 1997 through 1999 by Marc Aurele La France (TSI @ UQV), tsi@ualberta.ca
626 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/atiprobe.c,v 1.1.2.8tsi Exp $ */
628 * Copyright 1997 through 1999 by Marc Aurele La France (TSI @ UQV), tsi@ualberta.ca
632 ATILCDHorizontal = BIOSWord(LCDPanelInfo + 0x19U);
633 ATILCDVertical = BIOSWord(LCDPanelInfo + 0x1BU);
635 ! /* Assume clock 0 */
636 ! ATILCDClock = 2 * ATIGetMach64PLLReg(PLL_VCLK0_FB_DIV);
637 ATILCDClock *= ATIReferenceNumerator;
638 ATILCDClock /= ATIClockDescriptor->MinM;
639 ATILCDClock /= ATIReferenceDenominator;
641 ! GetBits(ATIGetMach64PLLReg(PLL_XCLK_CNTL), PLL_VCLK0_XDIV);
642 ! Index *= MaxBits(PLL_VCLK0_POST_DIV) + 1;
643 ! Index |= GetBits(ATIGetMach64PLLReg(PLL_VCLK_POST_DIV),
644 ! PLL_VCLK0_POST_DIV);
645 ! ATILCDClock /= ATIClockDescriptor->PostDividers[Index];
650 ATILCDHorizontal = BIOSWord(LCDPanelInfo + 0x19U);
651 ATILCDVertical = BIOSWord(LCDPanelInfo + 0x1BU);
653 ! /* Compute panel clock */
654 ! Index = GetBits(inb(R_GENMO), 0x0C);
655 ! ATILCDClock = 2 * ATIGetMach64PLLReg(PLL_VCLK0_FB_DIV + Index);
656 ATILCDClock *= ATIReferenceNumerator;
657 ATILCDClock /= ATIClockDescriptor->MinM;
658 ATILCDClock /= ATIReferenceDenominator;
660 ! GetBits(ATIGetMach64PLLReg(PLL_XCLK_CNTL),
661 ! PLL_VCLK0_XDIV << Index);
662 ! Index2 *= MaxBits(PLL_VCLK0_POST_DIV) + 1;
663 ! Index2 |= GetBits(ATIGetMach64PLLReg(PLL_VCLK_POST_DIV),
664 ! PLL_VCLK0_POST_DIV << (2 * Index));
665 ! ATILCDClock /= ATIClockDescriptor->PostDividers[Index2];
669 diff -cENRr -x CVS -x test base/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/ativersion.h devel/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/ativersion.h
670 *** base/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/ativersion.h Wed Feb 9 20:09:34 2000
671 --- devel/xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/ativersion.h Wed Feb 9 11:01:02 2000
674 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/ativersion.h,v 1.1.2.5 1999/10/12 17:18:57 hohndel Exp $ */
676 * Copyright 1997 through 1999 by Marc Aurele La France (TSI @ UQV), tsi@ualberta.ca
679 ! /* $XFree86: xc/programs/Xserver/hw/xfree86/vga256/drivers/ati/ativersion.h,v 1.1.2.5tsi Exp $ */
681 * Copyright 1997 through 1999 by Marc Aurele La France (TSI @ UQV), tsi@ualberta.ca
685 #ifndef ___ATIVERSION_H___
686 #define ___ATIVERSION_H___ 1
688 ! #define ATI_VERSION_NAME "4.6"
690 #define ATI_VERSION_MAJOR 4
691 ! #define ATI_VERSION_MINOR 6
693 #define ATI_VERSION_CURRENT ((ATI_VERSION_MAJOR << 16) | ATI_VERSION_MINOR)
696 #ifndef ___ATIVERSION_H___
697 #define ___ATIVERSION_H___ 1
699 ! #define ATI_VERSION_NAME "4.7"
701 #define ATI_VERSION_MAJOR 4
702 ! #define ATI_VERSION_MINOR 7
704 #define ATI_VERSION_CURRENT ((ATI_VERSION_MAJOR << 16) | ATI_VERSION_MINOR)