summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <idr@us.ibm.com>2008-04-14 16:39:24 -0700
committerIan Romanick <idr@us.ibm.com>2008-04-14 16:39:24 -0700
commit06c189acc994e656064b210da5f572363f4e0f91 (patch)
treede06641cbf3b772a680083005e0cae3442bcc65b
parent190559d2da3da9500553e159475086ea2f870a5f (diff)
Remove anything related to BIOS mode setting
-rw-r--r--src/Makefile.am3
-rw-r--r--src/xg47_bios.c1838
-rw-r--r--src/xg47_bios.h47
-rw-r--r--src/xg47_mode.c507
-rw-r--r--src/xg47_mode.h3
-rw-r--r--src/xg47_native_mode.c2
-rw-r--r--src/xg47_videohw.c6
-rw-r--r--src/xgi.h45
-rw-r--r--src/xgi_bios.c965
-rw-r--r--src/xgi_bios.h51
-rw-r--r--src/xgi_driver.c85
-rw-r--r--src/xgi_misc.c29
-rw-r--r--src/xgi_misc.h2
-rw-r--r--src/xgi_mode.c30
14 files changed, 8 insertions, 3605 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 8261e96..29915cd 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -31,8 +31,6 @@ xgixp_drv_ladir = @moduledir@/drivers
xgixp_drv_la_SOURCES = \
xg47_accel.c \
xg47_accel.h \
- xg47_bios.c \
- xg47_bios.h \
xg47_cmdlist.c \
xg47_cmdlist.h \
xg47_cursor.c \
@@ -52,7 +50,6 @@ xgixp_drv_la_SOURCES = \
xg47_videohw.c \
xg47_videohw.h \
xgi.h \
- xgi_bios.c \
xgi_bios.h \
xgi_cursor.c \
xgi_cursor.h \
diff --git a/src/xg47_bios.c b/src/xg47_bios.c
deleted file mode 100644
index cbd36c1..0000000
--- a/src/xg47_bios.c
+++ /dev/null
@@ -1,1838 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2003-2006 by XGI Technology, Taiwan. *
- * *
- * All Rights Reserved. *
- * *
- * Permission is hereby granted, free of charge, to any person obtaining *
- * a copy of this software and associated documentation files (the *
- * "Software"), to deal in the Software without restriction, including *
- * without limitation on the rights to use, copy, modify, merge, *
- * publish, distribute, sublicense, and/or sell copies of the Software, *
- * and to permit persons to whom the Software is furnished to do so, *
- * subject to the following conditions: *
- * *
- * The above copyright notice and this permission notice (including the *
- * next paragraph) shall be included in all copies or substantial *
- * portions of the Software. *
- * *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
- * NON-INFRINGEMENT. IN NO EVENT SHALL XGI AND/OR *
- * ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, *
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
- * DEALINGS IN THE SOFTWARE. *
- ***************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "xgi.h"
-#include "xgi_regs.h"
-#include "xgi_bios.h"
-#include "xgi_mode.h"
-#include "xg47_tv.h"
-#include "xg47_mode.h"
-
-static Bool XG47BiosDTVControl(XGIPtr pXGI, unsigned cmd,
- const CARD16 *piWord);
-
-static CARD16 XGIGetRefreshSupport(XGIPtr pXGI, unsigned device,
- XGIModePtr mode, unsigned colorIndex);
-
-extern CARD8 vclk18;
-extern CARD8 vclk19;
-extern CARD8 vclk28;
-
-extern CARD8 GR3CE_45;
-extern CARD8 GR3CE_45_SingleView;
-
-
-/*
- * Definition of video mode refresh rate (!!! CAN NOT BE MODIFIED !!!).
- */
-const CARD16 XG47RefreshTable[] = {
- 0,
- 44, /* VVMX_INDEX_REF44 */
- 48, /* ZVMX_INDEX_REF48 */
- 0xb2, /* 50i */
- 0x132, /* 50r */
- 50, /* 50 */
- 0xbc, /* 60i */
- 0x13c, /* 60r */
- 60, /* ZVMX_INDEX_REF60 */
- 70, /* ZVMX_INDEX_REF70 */
- 72, /* ZVMX_INDEX_REF72 */
- 75, /* ZVMX_INDEX_REF75 */
- 85, /* ZVMX_INDEX_REF85 */
- 100, /* ZVMX_INDEX_REF90 */
- 120, /* ZVMX_INDEX_REF95 */
-};
-
-
-/**
- * Convert refresh rate value to index.
- *
- * \param value Refresh rate value whose index is to be found.
- *
- * \return
- * Index of the specificed refresh rate in the refresh rate table, or zero
- * on failure.
- */
-static unsigned XG47ConvertRefValueToIndex(unsigned value)
-{
- unsigned index;
-
- for (index = 0; index < VREF_MAX_NUMBER; index++) {
- if (value == XG47RefreshTable[index]) {
- return index;
- }
- }
-
- return 0;
-}
-
-/*
- * Convert refresh rate index to value.
- *
- * Entry : index, refresh rate index number.
- * Return: refresh rate value.
- */
-
-CARD16 XG47GetRefreshRateByIndex(CARD8 index)
-{
- return XG47RefreshTable[index];
-}
-
-/*
- * from bios dll: somecmd.c
- */
-static CARD8 crtc59 = 0x80;
-
-void XG47WaitLcdPowerSequence(XGIPtr pXGI, CARD8 bNew)
-{
- CARD32 i;
-
- OUTB(XGI_REG_GRX, 0x24);
- if (bNew & 0x10)
- {
- for (i=0; i < 0xfffff; i++)
- {
- /*
- * It should check [3:0] here,
- * but in XP4 Rev. A, backlight control doesn't works
- */
- if((INB(XGI_REG_GRX+1) & 0x07) == 0x07)
- break;
- }
- }
- else
- {
- for (i=0; i < 0xfffff; i++)
- {
- if(!(INB(XGI_REG_GRX+1) & 0x07))
- break;
- }
- }
-
- OUTB(XGI_REG_GRX, 0x23);
- /* wait active */
- for (i=0; i < 0xfffff; i++)
- {
- if(INB(XGI_REG_GRX+1) & 0x10)
- break;
- }
- /* wait deactive */
- for (i=0; i < 0xfffff; i++)
- {
- if(!(INB(XGI_REG_GRX+1) & 0x10))
- break;
- }
-}
-
-void XG47CloseAllDevice(XGIPtr pXGI, CARD8 device2Close)
-{
- CARD8 curr, bNew;
-
- OUTB(XGI_REG_CRX, SOFT_PAD59_INDEX);
- if (pXGI->biosDllOperationFlag & DEVICE_CLOSED)
- {
- /*
- * if devices had been closed already, don't save 3x5.59.bit1
- * again, or you'll always get 3x5.59.bit1 as 1 (0x02)
- */
- crtc59 &= 0x02; /* get previos 3x5.59.bit1 */
- crtc59 |= (INB(XGI_REG_CRX+1) & 0xFD); /* save for open_all (except bit1) */
- }
- else
- crtc59 = (INB(XGI_REG_CRX+1) & 0xFF); /* save for open_all (all) */
-
- /* inhibit SMI switching */
- OUTB(XGI_REG_CRX+1, (CARD8)INB(XGI_REG_CRX+1) | 0x02);
-
- /* CRT display */
- if(device2Close & DEV_SUPPORT_CRT)
- {
- /* DAC power off */
- OUTB(XGI_REG_SRX,0x24);
- OUTB(XGI_REG_SRX+1, (CARD8)INB(XGI_REG_SRX+1) & 0xFE);
- }
-
- /* TV display */
- if(device2Close & DEV_SUPPORT_TV)
- {
- if ((pXGI->biosDevSupport & DEV_SUPPORT_TV)
- && !(pXGI->biosDevSupport & SUPPORT_CURRENT_NO_TV)) {
- XG47BiosDTVControl(pXGI, DISABLE_TV_DISPLAY, NULL);
- }
- }
-
- /* LCD display */
- if(device2Close & DEV_SUPPORT_LCD)
- {
- OUTB(XGI_REG_GRX, 0x33);
- curr = (CARD8)INB(XGI_REG_GRX+1);
- if (curr & 0x10)
- {
- /*
- * Before close device, wait for VBlank,
- * otherwise sometimes dot noise will appear.
- */
-
- OUTB(XGI_REG_GRX, 0x5b);
- if(INB(XGI_REG_GRX+1) & 0x10)
- XGIWaitVerticalOnCRTC2(pXGI, 1);
- else
- XGIWaitVerticalOnCRTC1(pXGI, 1);
-
- /* Turn off the LCD interface logic */
- OUTB(XGI_REG_GRX, 0x33);
- bNew = (curr & ~0x10) | 0x20;
- OUTB(XGI_REG_GRX+1, bNew);
-
- XG47WaitLcdPowerSequence(pXGI, bNew);
-
- /* LVDS PD line off */
- OUTB(XGI_REG_GRX, 0x71);
- OUTB(XGI_REG_GRX+1, (CARD8)INB(XGI_REG_GRX+1) & ~0x02);
- }
-
- OUTB(XGI_REG_GRX,0x5b);
- if (INB(XGI_REG_GRX+1) & DEV_SUPPORT_LCD)
- {
- /* Shadow off */
- OUTB(XGI_REG_GRX, 0x30);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)&~0x81);
- OUTB(XGI_REG_GRX, 0x44);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)&~0x03);
-
-
- /*
- * Disable centering
- * Centering function should work if only shadow enabled. But h/w always works.
- * So we need disable if LCD is not on. BIOS already take care of most cases.
- * However we have issue if we change device from LCD to other device in Windows,
- * because BIOS skip shadow and LCD on/off control.
- * So we turn centering bit off here.
- */
- OUTB(XGI_REG_GRX, 0x69); /*Vertical*/
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)&~0x80);
- OUTB(XGI_REG_GRX, 0x6d); /*Horizontal*/
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)&~0x80);
-
- /* Disable scaling */
- OUTB(XGI_REG_GRX, 0xd1);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)&~0x03);
- }
- }
-
- OUTB(XGI_REG_GRX, 0x5B);
- curr = (CARD8)INB(XGI_REG_GRX+1);
-
- /* 2nd display */
- if(device2Close & DEV_SUPPORT_DVI)
- {
- OUTB(XGI_REG_CRX, 0x5A);
- if (INB(XGI_REG_CRX+1) & 0x04)
- {
- OUTB(XGI_REG_GRX, 0x5A);
- if((INB(XGI_REG_GRX+1) & 0x80)
- && (curr & DEV_SUPPORT_DVI)
- && !(curr & DEV_SUPPORT_LCD))
- {
- /* Shadow on */
- OUTB(XGI_REG_GRX, 0x30);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)&~0x81);
- OUTB(XGI_REG_GRX, 0x44);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)&~0x03);
-
- /* Enable scaling */
- OUTB(XGI_REG_GRX, 0xd1);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)&~0x03);
- }
- }
-
- /* 2nd DAC off */
- OUTB(XGI_REG_CRX, 0xd7);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) | 0x40);
-
- /* disable TMDS */
- OUTB(XGI_REG_GRX, 0x3d);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) & ~0x01);
- OUTB(XGI_REG_GRX, 0x26);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x30);
- /*
- OUTB(XGI_REG_GRX,0x27);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x01);
- */
- if (curr & 0x80)
- XGIWaitVerticalOnCRTC2(pXGI, 20);
- else
- XGIWaitVerticalOnCRTC1(pXGI, 20);
- }
-
- pXGI->biosDllOperationFlag |= DEVICE_CLOSED; /* close complete. */
-}
-
-void XG47OpenAllDevice(XGIPtr pXGI, CARD8 device2Open)
-{
- CARD8 curr, bNew, bDPMS_status;
-
- /* Jong 09/14/2006; get DPMS status of devices */
- OUTB(XGI_REG_GRX,0x55);
- bDPMS_status = (CARD8)INB(XGI_REG_GRX+1);
-
- /* Jong 09/14/2006; check current available devices */
- OUTB(XGI_REG_GRX,0x5b);
- curr = (CARD8)INB(XGI_REG_GRX+1);
-
- /* Jong 09/14/2006; (curr & 0x0f) means current device status of single view */
- /* (curr >> 4) means current device status of multiple view */
- /* device2Open means devices which we want to open */
- /* ((curr & 0x0f) | (curr >> 4)) means devices which are available no matter they are in single view or multiple view */
- /* device2Open &= ((curr & 0x0f) | (curr >> 4)) means devices which are available and we want to open */
- /* Why we got curr=0x02 even CRT and DVI have connected displays ??? */
- /* device2Open &= ((curr & 0x0f) | (curr >> 4)); */
-
- /* Jong 09/14/2006; Force to open CRT and DVI for test */
- /* Work!!!! */
- device2Open=0x0A;
-
- if(!device2Open)
- return;
-
- /* CRT display */
- if ((device2Open & DEV_SUPPORT_CRT)
- && (!(bDPMS_status & 0x03)))
- {
- /* DAC power on */
- OUTB(XGI_REG_SRX,0x24);
- OUTB(XGI_REG_SRX+1, (CARD8)INB(XGI_REG_SRX+1) | 0x01);
- /* CRT on */
- OUTB(XGI_REG_GRX, 0x33);
- OUTB(XGI_REG_GRX+1, (CARD8)INB(XGI_REG_GRX+1) | 0x20);
- /* Sync on */
- OUTB(XGI_REG_GRX,0x23);
- OUTB(XGI_REG_GRX+1,(CARD8)INB(XGI_REG_GRX+1) & ~0x03);
- }
-
- /* LCD display */
- if(device2Open & DEV_SUPPORT_LCD)
- {
- if(curr & DEV_SUPPORT_LCD)
- {
- /* Shadow on */
- OUTB(XGI_REG_GRX, 0x30);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)|0x81);
- OUTB(XGI_REG_GRX, 0x44);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)|0x03);
-
- /*we already control the H/V DE control on/off in BIOS code*/
- /*Enable centering*/
-#if 0
- OUTB(XGI_REG_GRX, 0x5d);
- if ((INB(XGI_REG_GRX+1) & GRAF_EXPANSION) == 0)
- {
- OUTB(XGI_REG_GRX, 0x69); /*Vertical*/
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x80);
- OUTB(XGI_REG_GRX, 0x6d); /*Horizontal*/
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x80);
- }
-#endif
-
- /* Enable scaling */
- OUTB(XGI_REG_GRX, 0xd1);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)|0x03);
- }
-
- if (!(bDPMS_status & 0x10))
- {
- OUTB(XGI_REG_GRX, 0x33);
- curr = (CARD8)INB(XGI_REG_GRX+1);
-
- if (!(curr & 0x10))
- {
- OUTB(XGI_REG_GRX, 0x36);
- if ((INB(XGI_REG_GRX+1) & 0x8) == 0)
- {
- /* Turn on the LCD interface logic */
- bNew = curr | 0x10;
- OUTB(XGI_REG_GRX, 0x33);
- OUTB(XGI_REG_GRX+1, bNew);
-
- XG47WaitLcdPowerSequence(pXGI, bNew);
- }
-
- /* LVDS PD line on */
- OUTB(XGI_REG_GRX, 0x71);
- OUTB(XGI_REG_GRX+1, (CARD8)INB(XGI_REG_GRX+1) | 0x02);
-
- /*
- * XG47 Rev. A0 patch begin
- * Reset dual channel LVDS even/odd sequence.
- * Rev. A1 will fix.
- */
-
- /* Wit V Sync. start */
- OUTB(XGI_REG_GRX,0x5b);
- curr = (CARD8)INB(XGI_REG_GRX+1);
- if(curr & DEV_SUPPORT_LCD)
- {
- while(!(INB(0x3da) & 0x08));
- }
- else
- {
- OUTB(XGI_REG_SRX, 0xDC);
- while (!(INB(XGI_REG_SRX+1) & 0x01));
- }
-
- /* Power down LVDS and back on */
- OUTB(XGI_REG_GRX, 0x71);
- OUTB(XGI_REG_GRX+1,(CARD8)INB(XGI_REG_GRX+1) & ~0x02);
- OUTB(XGI_REG_GRX, 0x71);
- OUTB(XGI_REG_GRX+1,(CARD8)INB(XGI_REG_GRX+1) | 0x02);
- /* XG47 Rev. A0 patch end */
- }
- }
- }
-
- /* Jong 09/14/2006; why to call with second time */
- OUTB(XGI_REG_GRX, 0x5B);
- curr = (CARD8)INB(XGI_REG_GRX+1);
-
- /* 2nd display */
- if(device2Open & DEV_SUPPORT_DVI)
- {
- /* Jong 09/14/2006; System status flag 1 (3D5.5A)*/
- /* 3x5_5A: 7 6 5 4 3 2 1 0
- | | | | | | | * - Digital monitor in 1st port
- | | | | | | * - - 1st monitor attached
- | | | | | * - - - Digital monitor in 2nd port
- | | | | * - - - - 2nd monitor attached
- | | | * - - - - - TV connected
- | | * - - - - - - Copy of 3x5.2F.5
- | * - - - - - - - Display control
- * - - - - - - - - In-POST */
-
- OUTB(XGI_REG_CRX, 0x5A);
-
- /* Jong 09/14/2006; Digital monitor in 2nd port */
- if (INB(XGI_REG_CRX+1) & 0x04)
- {
- OUTB(XGI_REG_GRX, 0x5A);
-
- /* Jong 09/14/2006; why to check if it is fixed timing for digital display??? */
- if((INB(XGI_REG_GRX+1) & 0x80)
- && (curr & DEV_SUPPORT_DVI)
- && !(curr & DEV_SUPPORT_LCD))
- {
- /* Shadow on */
- OUTB(XGI_REG_GRX, 0x30);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)|0x81);
- OUTB(XGI_REG_GRX, 0x44);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)|0x03);
-
- /* Enable scaling */
- OUTB(XGI_REG_GRX, 0xd1);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1)|0x03);
- }
-
- /* Jong 09/14/2006; why to do this ??? */
- if (!(bDPMS_status & 0x0C))
- {
- /* Enable TMDS, RevB always on */
- OUTB(XGI_REG_GRX,0x3d);
- OUTB(XGI_REG_GRX+1,(int)INB(XGI_REG_GRX+1) | 0x01);
- OUTB(XGI_REG_GRX,0x26);
- OUTB(XGI_REG_GRX+1,(int)INB(XGI_REG_GRX+1) & ~0x30);
- if (curr & 0x80)
- XGIWaitVerticalOnCRTC2(pXGI, 15);
- else
- XGIWaitVerticalOnCRTC1(pXGI, 15);
-
- /*
- * OUTB(XGI_REG_GRX,0x27);
- * OUTB(XGI_REG_GRX+1,(int)INB(XGI_REG_GRX+1) & ~0x01);
- */
- }
- }
- /* Jong 09/14/2006; indicate analog display in 2nd port */
- /* Set 2nd DAC (Digital Alalog Converter) on */
- else
- {
- OUTB(XGI_REG_CRX, 0xd7);
- OUTB(XGI_REG_CRX+1, (INB(XGI_REG_CRX+1) & ~0x40) | 0x80);
- if (!(bDPMS_status & DEV_SUPPORT_DVI))
- {
- /* Program external de-mux */
- OUTB(XGI_REG_GRX, 0x27);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x02);
- OUTB(XGI_REG_GRX, 0x26);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) & ~0x30);
- }
- }
- }
-
- /* Call BIOS function DeviceSwitchPosHook to let BIOS know current
- * device status.
- */
- bNew = 0x0;
-
- OUTB(XGI_REG_CRX,0xc0);
- bNew |= (CARD8)INB(XGI_REG_CRX+1) & 0xe0;
-
- OUTB(XGI_REG_GRX,0x36);
- OUTB(XGI_REG_GRX+1,(CARD8)INB(XGI_REG_GRX+1) | 0x01);
- bDPMS_status |= ((bDPMS_status << 1) & 0x20); /* Merge 2 CRT bits to 1bit and put in bit 1 */
- bDPMS_status &= ~0x01;
- bDPMS_status |= (bDPMS_status >> 4); /* Move LCD flag to bit 0 */
- pXGI->pInt10->ax = 0x120d;
- pXGI->pInt10->bx = 0x0414;
- pXGI->pInt10->cx = (CARD16)bNew << 8 | (CARD16)(device2Open & (~bDPMS_status));
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
-
- if(!(pXGI->pInt10->ax >> 8))
- {
- while(1)
- {
- OUTB(XGI_REG_GRX, 0x36);
- if(!((CARD8)INB(XGI_REG_GRX+1) & 0x01))
- break;
- }
- }
- OUTB(XGI_REG_GRX, 0x36);
- OUTB(XGI_REG_GRX+1,(CARD8)INB(XGI_REG_GRX+1) & ~0x01);
-
- /* allow SMI switching, Do not touch bit 6 and 3 */
- OUTB(XGI_REG_CRX, SOFT_PAD59_INDEX);
- OUTB(XGI_REG_CRX+1,(((CARD8)INB(XGI_REG_CRX+1) & 0x48) | (crtc59 & ~0x48)));
-
- /* turn on display */
- /* Jong 09/14/2006; XGI_REG_SRX=0x03C4; 0x01:Clocking Mode Register */
- OUTB(XGI_REG_SRX, 0x01);
- /* Jong 09/14/2006; turn screen on and selects normal screen operation */
- OUTB(XGI_REG_SRX+1,(CARD8)INB(XGI_REG_SRX+1) & ~0x20);
-
- /* TV display */
- if(device2Open & DEV_SUPPORT_TV)
- {
- /* Program external de-mux */
- OUTB(XGI_REG_GRX,0x27);
- OUTB(XGI_REG_GRX+1,(int)INB(XGI_REG_GRX+1) & ~0x02);
- if ((pXGI->biosDevSupport & DEV_SUPPORT_TV)
- && !(pXGI->biosDevSupport & SUPPORT_CURRENT_NO_TV)) {
- XG47BiosDTVControl(pXGI, ENABLE_TV_DISPLAY, NULL);
- }
- }
-
- pXGI->biosDllOperationFlag &= (~DEVICE_CLOSED); /* OPEN complete */
-}
-
-/*
- * from bios dll: modeset.c
- */
-
-/*Input
- * device: Bit3~0: DVI/TV/CRT/LCD
- * mode: Pointer to the XGIModeRec for the mode
- * colorIndex: the color index
- * 0x2 - 8 bpp
- * 0x6 - 16 bpp
- * 0x8 - 32 bpp A8R8G8B8
- * 0xA - 32 bpp A2R10G10B10
- *Modification
- * Update the mode table: myVideoModeInfoTable in first time call
- *Return
- * refresh rates supported by specified video mode and device
- * (See BIOS spec: Get refresh rate support for definition)
- *
- */
-CARD16 XGIGetRefreshSupport(XGIPtr pXGI, unsigned device,
- XGIModeRec *mode, unsigned colorIndex)
-{
- static const int dev_to_idx_table[16] = {
- ~0, 0, 1, ~0, 2, ~0, ~0, ~0,
- 3, ~0, ~0, ~0, ~0, ~0, ~0, ~0,
- };
- const int j = dev_to_idx_table[device & 0x0f];
-
- if (j == ~0) {
- return 0;
- }
-
- if (mode->refBIOS[j] == 0) {
- mode->refBIOS[j] = XGIGetRefreshRateCapability(pXGI,
- mode->modeNo & 0x7f,
- colorIndex);
- }
-
- return mode->refBIOS[j];
-}
-
-
-/**
- * Massage the refreshrate list in the mode to one supported by the driver
- */
-static void massage_refresh_rate(XGIAskModePtr pMode)
-{
- int refRateIndex = XG47ConvertRefValueToIndex(pMode->refRate);
-
- for (/* empty */; refRateIndex > 0; refRateIndex--) {
- if (XGICheckRefreshRateSupport(pMode->refSupport, refRateIndex))
- break;
- }
-
- if (refRateIndex <= 0) {
- for (refRateIndex = 1;
- refRateIndex <= VREF_MAX_NUMBER;
- refRateIndex++) {
- if (XGICheckRefreshRateSupport(pMode->refSupport, refRateIndex)) {
- break;
- }
- }
- }
-
- pMode->refRate = XG47GetRefreshRateByIndex(refRateIndex);
-}
-
-
-/*
- * Check if the mode is supported in our chip
- * (???and get video mode extension based on given information???)
- *
- * Entry : The mode for primary view
- * The mode for second view. NULL if in single view mode
- *
- * Return: TRUE - The mode is supported
- * FALSE - The mode is NOT supported
-*/
-static ModeStatus XG47GetValidMode(XGIPtr pXGI, XGIAskModePtr pMode0,
- XGIAskModePtr pMode1)
-{
- CARD8 tv_ntsc_pal, tv_ntsc_pal_org;
- CARD8 tv_3cf_5b, want_3cf_5a;
- CARD16 refSupport;
- CARD16 modeNo, modeSpec=0;
- CARD16 j;
- unsigned long ret_value;
-
-
- if ((pMode0 == NULL) && (pMode1 == NULL)) {
- return MODE_ERROR;
- }
-
- XGIGetSetChipSupportDevice(pXGI, TRUE);
-
- if (pMode0) {
- XGIModeRec *const mode = XG47GetModeFromRes(pMode0->width,
- pMode0->height);
-
- /* Check with mode index table */
- pMode0->modeNo &= ~0x7F; /* only clear mode number */
- if (mode == NULL) {
- return MODE_NOMODE;
- }
-
- pMode0->modeNo |= mode->modeNo & 0x7f;
-
-#ifdef XGI_DUMP_DUALVIEW
- ErrorF("Jong-Debug-Found a supported mode-pMode0->modeNo=%d\n",
- pMode0->modeNo);
-#endif
-
- /* display device */
- want_3cf_5a = (CARD8)(pMode0->condition & 0x0000000F);
-
- /*
- * TV format
- */
- OUTB(XGI_REG_CRX, 0xC0);
- tv_ntsc_pal = (CARD8)INB(XGI_REG_CRX+1) & 0xE0;
-
- OUTB(XGI_REG_GRX, 0x5A);
- tv_3cf_5b = (CARD8)INB(XGI_REG_GRX+1);
-
- if ((pMode0->condition & DEV_SUPPORT_TV)) {
- tv_ntsc_pal = 0; /* NTSC */
- if(pMode0->condition & ZVMX_ATTRIB_NTSCJ)
- tv_ntsc_pal = 0x20;
- if(pMode0->condition & ZVMX_ATTRIB_PALM)
- tv_ntsc_pal = 0x40;
- if(pMode0->condition & ZVMX_ATTRIB_PAL)
- tv_ntsc_pal = 0x80;
- }
-
- /* Check video BIOS support or not */
-
- /* Jong 09/14/2006; why? */
- vAcquireRegIOProtect(pXGI);
-
- OUTB(XGI_REG_GRX, 0x5A);
- OUTB(XGI_REG_GRX+1, ((tv_3cf_5b & 0xF0) | want_3cf_5a));
- OUTB(XGI_REG_CRX, 0xC0);
- tv_ntsc_pal_org = (CARD8)INB(XGI_REG_CRX+1);
- OUTB(XGI_REG_CRX + 1, ((tv_ntsc_pal_org & 0x1F) | tv_ntsc_pal));
-
- modeNo = pMode0->modeNo & 0x7F;
- modeSpec |= XGIGetColorIndex(pMode0->pixelSize);
- if (modeSpec & 0x08) {
- /* 32 bit true color */
- modeSpec |= (pMode0->modeNo & 0x0100) >> 7; /* 10 bits */
- }
-
- refSupport = XGIGetRefreshSupport(pXGI, pMode0->condition, mode,
- modeSpec);
- if (!refSupport) {
- xf86DrvMsg(pXGI->pScrn->scrnIndex, X_ERROR,
- "%s:%u: refSupport = 0, pMode0->condition = 0x%x\n",
- __func__, __LINE__, pMode0->condition);
- return MODE_BAD;
- }
-
- /*
- * CRT, DVI device
- */
- /* Jong 09/14/2006; why? */
- vAcquireRegIOProtect(pXGI);
-
- OUTB(XGI_REG_GRX, 0x5A);
- OUTB(XGI_REG_GRX+1, tv_3cf_5b);
-
- /* Jong 09/14/2006; TV Status flag 1 */
- OUTB(XGI_REG_CRX, 0xC0);
- OUTB(XGI_REG_CRX+1, tv_ntsc_pal_org);
-
- if((CARD8)(pMode0->condition & 0x0F) == DEV_SUPPORT_CRT)
- refSupport &= mode->refSupport[1];
- if((CARD8)(pMode0->condition & 0x0F) == DEV_SUPPORT_DVI)
- refSupport &= mode->refSupport[3];
- if(pMode0->condition & DEV_SUPPORT_TV)
- refSupport &= mode->refSupport[2];
- if(pMode0->condition & DEV_SUPPORT_LCD)
- refSupport &= mode->refSupport[0];
-
- pMode0->refSupport = refSupport;
- if (!refSupport) {
- xf86DrvMsg(pXGI->pScrn->scrnIndex, X_ERROR,
- "%s:%u: refSupport = 0, pMode0->condition = 0x%x\n",
- __func__, __LINE__, pMode0->condition);
- xf86DrvMsg(pXGI->pScrn->scrnIndex, X_INFO,
- "%s:%u: mode->refSupport[0..3] = 0x%04x 0x%04x 0x%04x 0x%04x\n",
- __func__, __LINE__,
- mode->refSupport[0], mode->refSupport[1],
- mode->refSupport[2], mode->refSupport[3]);
- return MODE_BAD;
- }
-
- massage_refresh_rate(pMode0);
- }
-
- /* Check mode for dual view.
- */
- if (pMode1) {
- XGIModeRec *const mode = XG47GetModeFromRes(pMode1->width,
- pMode1->height);
-
-#ifdef XGI_DUMP_DUALVIEW
- ErrorF("Jong-Debug-pMode1->modeNo=%d--\n", pMode1->modeNo);
-#endif
-
- /* Check the memory requirements for this mode. If it's larger than
- * the reported on-card memory, reject the mode.
- */
- ret_value = (pMode1->width * pMode1->height * (pMode1->pixelSize/8));
- if (ret_value > pXGI->freeFbSize) {
- return MODE_MEM;
- }
-
- pMode1->modeNo &= ~0x7F;
-
- if (mode == NULL) {
- return MODE_NOMODE;
- }
-
- pMode1->modeNo |= mode->modeNo & 0x7f;
-
- if (pMode1->condition & DEV_SUPPORT_LCD) {
- pMode1->refRate = pXGI->lcdRefRate;
- pMode1->refSupport =(CARD16)XG47ConvertRefValueToIndex(pXGI->lcdRefRate);
- } else {
- /*
- * Refresh Rate for second view.
- */
- CARD8 save;
-
- vAcquireRegIOProtect(pXGI);
- OUTB(XGI_REG_GRX, 0x5A);
- save = INB(XGI_REG_GRX + 1);
- OUTB(XGI_REG_GRX + 1, ((save & 0xF0) | (pMode1->condition & 0x0F)));
-
- refSupport = XGIGetRefreshSupport(pXGI, pMode1->condition, mode,
- XGIGetColorIndex(pMode1->pixelSize));
- vAcquireRegIOProtect(pXGI);
- OUTB(XGI_REG_GRX, 0x5A);
- OUTB(XGI_REG_GRX+1, save);
-
- pMode1->refSupport = refSupport;
- if (!refSupport) {
- xf86DrvMsg(pXGI->pScrn->scrnIndex, X_ERROR,
- "%s:%u: pMode1->refSupport = 0, pMode1->condition = 0x%x\n",
- __func__, __LINE__, pMode1->condition);
- return MODE_BAD;
- }
-
- massage_refresh_rate(pMode0);
- }
- } else {
- int refRateIndex;
-
- for (j = 0; j < VREF_MAX_NUMBER; j++) {
- if ((pMode0->refSupport >> j) & 0x01) {
- if (!XGICheckModeSupported(pXGI, pMode0, pMode1,
- XG47GetRefreshRateByIndex(j+1))) {
- pMode0->refSupport &= ~(1U << j);
- }
- }
- }
-
-
- refRateIndex = XG47ConvertRefValueToIndex(pMode0->refRate);
- if (!XGICheckRefreshRateSupport(pMode0->refSupport, refRateIndex)) {
- /* If the current refresh rate can not be supported,
- * find lowest one.
- */
- for (refRateIndex = 1;
- refRateIndex < VREF_MAX_NUMBER;
- refRateIndex++) {
- if (XGICheckRefreshRateSupport(pMode0->refSupport,
- refRateIndex)) {
- break;
- }
- }
-
- pMode0->refRate = XG47GetRefreshRateByIndex(refRateIndex);
- }
-
- if (!pMode0->refRate) {
- return MODE_V_ILLEGAL;
- }
- }
-
- return MODE_OK;
-}
-
-void XG47BiosValueInit(ScrnInfoPtr pScrn)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- CARD16 engineClock, memClock;
- CARD8 value[23];
-
-
- /*
- * Default Display Device Info
- */
- pXGI->biosDevSupport = SUPPORT_DEV_DVI \
- | SUPPORT_DEV_CRT \
- | SUPPORT_DEV_LCD \
- | SUPPORT_PANEL_CENTERING \
- | SUPPORT_PANEL_EXPANSION \
- | SUPPORT_DEV2_DVI \
- | SUPPORT_DEV2_CRT \
- | SUPPORT_DEV2_LCD;
-
- pXGI->biosOrgDevSupport = pXGI->biosDevSupport;
-
- /*
- * Display Device Info from BIOS
- */
- if (!(pXGI->biosCapability & BIOS_TV_CAPABILITY))
- {
- /* does not support TV */
- pXGI->biosDevSupport |= SUPPORT_CURRENT_NO_TV;
- pXGI->biosOrgDevSupport |= SUPPORT_CURRENT_NO_TV;
- }
- else
- {
- /* support TV */
- pXGI->biosDevSupport |= SUPPORT_TV_NATIVE \
- | SUPPORT_TV_OVERSCAN \
- | SUPPORT_TV_UNDERSCAN \
- | SUPPORT_TV_PAL \
- | SUPPORT_TV_NTSC \
- | SUPPORT_DEV2_TV \
- | SUPPORT_DEV_TV;
- pXGI->biosOrgDevSupport |= pXGI->biosDevSupport;
- }
-
- if (pXGI->lcdWidth > (pXGI->lcdHeight/3*4))
- {
- /* wide panel */
- pXGI->biosDevSupport |= SUPPORT_PANEL_V_EXPANSION;
- pXGI->biosOrgDevSupport |= SUPPORT_PANEL_V_EXPANSION;
- }
-
- if (!(pXGI->biosCapability & BIOS_LCD_SUPPORT))
- {
- pXGI->biosDevSupport &=0xfeff00fe;
- pXGI->biosOrgDevSupport &=0xfeff00fe;
- }
-
- if (!(pXGI->biosCapability & BIOS_DVI_SUPPORT))
- {
- pXGI->biosDevSupport &=0xf7fffff7;
- pXGI->biosOrgDevSupport &=0xf7fffff7;
- }
-
- if (!(pXGI->biosCapability & BIOS_CRT_SUPPORT))
- {
- pXGI->biosDevSupport &=0xfdfffffd;
- pXGI->biosOrgDevSupport &=0xfdfffffd;
- }
-
- /*
- * Check TV
- */
-
- pXGI->pInt10->ax = 0x120E;
- pXGI->pInt10->bx = 0x0014;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
-
- if ((pXGI->pInt10->ax >> 8) != 0x0) /* No TV */
- {
- pXGI->biosDevSupport |= SUPPORT_CURRENT_NO_TV;
- }
- else
- {
- if (!(pXGI->pInt10->ax & 0x0004))
- {
- pXGI->biosDevSupport |= ZVMX_ATTRIB_PALM;
- pXGI->biosOrgDevSupport |= ZVMX_ATTRIB_PALM;
- }
- if (!(pXGI->pInt10->ax & 0x0002))
- {
- pXGI->biosDevSupport |= ZVMX_ATTRIB_NTSCJ;
- pXGI->biosOrgDevSupport |= ZVMX_ATTRIB_NTSCJ;
- }
- }
-
- /*
- * Get LCD Timing Parameters
- */
- if(XGIReadBiosData(pXGI, value))
- {
- vclk18 = value[16];
- vclk19 = value[17];
- vclk28 = value[18] & 0x70;
- GR3CE_45 = value[19];
- }
-
- OUTB(XGI_REG_GRX, 0x45);
- GR3CE_45_SingleView = INB(XGI_REG_GRX + 1);
-
- /*
- * Calculate Max. available Memory Bandwidth
- */
- engineClock = XGIBiosCalculateClock(pXGI, 0x16, 0x17);
- memClock = XGIBiosCalculateClock(pXGI, 0x1E, 0x1F);
- pXGI->maxBandwidth = (engineClock <= memClock) ? engineClock : memClock;
- pXGI->maxBandwidth = pXGI->maxBandwidth * 8 * 2; /* 64bit, DDR */
- OUTB(XGI_REG_CRX, 0x5D);
- if(INB(XGI_REG_CRX + 1) & 0x01 )
- {
- pXGI->maxBandwidth = pXGI->maxBandwidth * 8; /* 32bit, DDR *4*2 --> *8 */
- }
- else
- {
- pXGI->maxBandwidth = pXGI->maxBandwidth * 16; /* 64bit, DDR *8*2 --> *16 */
- }
-
- pXGI->maxBandwidth = (CARD16)(((CARD32)pXGI->maxBandwidth * 60) / 100);
-
- /*
- * Register Initialize
- */
-
- /* CRTC2 sync load enable */
- OUTB(XGI_REG_SRX, 0xBF);
- OUTB(XGI_REG_SRX+1,(int)INB(XGI_REG_SRX+1) | 0x0C);
-
- /* DV DSTN position */
- if(pXGI->lcdType != FPTYPE_TFT)
- {
- OUTB(XGI_REG_GRX, 0x49);
- OUTB(XGI_REG_GRX+1, ((pXGI->lcdHeight/2) & 0xFF));
- OUTB(XGI_REG_GRX, 0x4A);
- OUTB(XGI_REG_GRX+1, ((((pXGI->lcdHeight/2) >> 8) & 0xFF) | 0x80));
- }
-
- /* Anti-tearing sync select */
- OUTB(0x2450, (CARD16)INB(0x2450) & 0xFB); /* HW recommend 2450[bit 2]=1'b0 */
-
- /* W2 line buffer threshold */
- OUTB(0x2492,0x04);
-
- /* Set Flag to indicate the DLL is loaded. */
- OUTB(XGI_REG_CRX, 0x59);
- OUTB(XGI_REG_CRX+1, (INB(XGI_REG_CRX+1) | 0x80));
-}
-
-#define ALL_TV_FORMATS \
- (ZVMX_ATTRIB_NTSCJ | ZVMX_ATTRIB_NTSC \
- | ZVMX_ATTRIB_PALM | ZVMX_ATTRIB_PAL)
-
-/*
- * Validate Video Mode.
- *
- * Entry : wBitsPixel, bits/pixel of the display format.
- * wSurfaceWidth, width of the screen surface in pixel.
- * wSurfaceHeight, height of the screen surface in scanlines.
- * Return: video mode information if none zero value, otherwise does not
- * support this mode.
- */
-ModeStatus XG47BiosValidMode(ScrnInfoPtr pScrn, XGIAskModePtr pMode,
- CARD32 dualView)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- XGIAskModePtr pMode0, pMode1;
- CARD32 temp;
- CARD32 test=~0xF0;
-
- XGIGetSetChipSupportDevice(pXGI, FALSE);
- pMode0 = pMode;
-
-
- /* Single view or first view of dual view mode */
- if (!dualView || pXGI->FirstView) {
- pMode1 = NULL;
- pMode0->condition &= test;
- } else {
- /* dual view */
- /* pMode1 has wrong data; seems not to initialize */
- pMode1 = pMode0 + 1;
-
- /* Jong 09/12/2006; why not to &= ~0x0F */
- pMode1->condition &= test;
-
- pMode0=NULL;
- }
-
-#if 0
- if (!dualView) {
- pMode1 = NULL;
- pMode0->condition &= ~0xF0;
- } else {
- /* dual view */
- pMode1 = pMode0 + 1;
- pMode1->condition &= ~0xF0;
- }
-#endif
-
- /* get current all display device status and information */
- temp = XGIGetDisplayStatus(pXGI, 0);
-
- if (pMode0) {
- /* check 1st display device input data */
- if (!(pMode0->condition & 0x0F))
- pMode0->condition |= (temp & 0x0F);
-
- /* Check LCD information (Expansion/Centering) */
- if (!(pMode0->condition & 0x0001C00))
- pMode0->condition |= (temp & 0x0001C00);
-
- /* Check TV format information */
- if (!(pMode0->condition & ALL_TV_FORMATS)) {
- pMode0->condition |= (temp & ALL_TV_FORMATS);
- }
-
- /* Check TV Overscan/Underscan mode info */
- if (!(pMode0->condition & 0x00C0000))
- pMode0->condition |= (temp & 0x00C0000);
-
- /* check valid 1st display device */
- if ((pMode0->condition & 0x0F) !=
- (pXGI->biosDevSupport & (pMode0->condition & 0x0F))) {
- xf86DrvMsg(pXGI->pScrn->scrnIndex, X_ERROR,
- "1st display device not supported by BIOS: 0x%02x 0x%02x\n",
- (pMode0->condition & 0x0f),
- (pXGI->biosDevSupport & 0x0f));
- return FALSE;
- }
- }
-
- if (pMode1) {
- if (!(pMode1->condition & 0x0000C00))
- pMode1->condition |= (temp & 0x0000C00);
-
- /* check valid 2nd display device */
- if ((pMode1->condition & 0x0F)
- != (pXGI->biosDevSupport & (pMode1->condition & 0x0F))) {
- xf86DrvMsg(pXGI->pScrn->scrnIndex, X_ERROR,
- "2nd display device not supported by BIOS: 0x%02x 0x%02x\n",
- (pMode1->condition & 0x0f),
- (pXGI->biosDevSupport & 0x0f));
- return FALSE;
- }
- }
-
- return XG47GetValidMode(pXGI, pMode0, pMode1);
-}
-
-/*
- * Set video mode patch based on mode extension number.
- *
- * Entry : dwModeExtension, video mode extersion number.
- * dwConditionMask, setting condition mask.
- * Return: LOWORD - TRUE for set video mode successful,
- * otherwise return FALSE.
- * HIWORD - refresh rate value returned.
- */
-Bool XG47BiosModeInit(ScrnInfoPtr pScrn,
- XGIAskModePtr pMode,
- CARD32 dualView)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- XGIAskModePtr pMode0 = NULL;
- XGIAskModePtr pMode1 = NULL;
- CARD8 want_3cf_5a, tv_ntsc_pal, b3c5_de;
- CARD16 w2_hzoom,w2_vzoom,w2_hstart,w2_hend,w2_vstart,w2_vend,w2_rowByte;
- CARD8 w2_sync;
- CARD16 modeinfo[4], modeSpec=0, temp_x, disLen;
- CARD16 yres, xres, lineBuf;
- CARD32 condition;
-
- /* Frame buffer address for video window 2 */
- CARD32 W2fbAddr=0;
-
-
- /* Single view or first view of dual view */
- if (!dualView || (dualView == 0x01)) {
- pMode0 = & pMode[0];
- condition = pMode0->condition;
- } else {
- /* Second view of dual view.
- */
- pMode1 = & pMode[1];
- condition = pMode1->condition;
- }
-
- /* Jong 10/04/2006; TV Status flag 2 */
- OUTB(XGI_REG_CRX, 0xC2);
- OUTB(XGI_REG_CRX+1, (int)(INB(XGI_REG_CRX+1) & ~0x11));
-
- if(condition & SUPPORT_TV_NATIVE)
- OUTB(XGI_REG_CRX+1, (int)(INB(XGI_REG_CRX+1) | 0x10));
- if(condition & SUPPORT_TV_OVERSCAN)
- OUTB(XGI_REG_CRX+1, (int)(INB(XGI_REG_CRX+1) | 0x01));
-
- tv_ntsc_pal = 0;
-
- if (pMode0) {
- if (pMode0->condition & ZVMX_ATTRIB_NTSCJ)
- tv_ntsc_pal = 0x20;
- if (pMode0->condition & ZVMX_ATTRIB_PALM)
- tv_ntsc_pal = 0x40;
- if (pMode0->condition & ZVMX_ATTRIB_PAL)
- tv_ntsc_pal = 0x80;
-
- OUTB(XGI_REG_CRX, 0xC0);
- OUTB(XGI_REG_CRX+1, ((INB(XGI_REG_CRX+1) & 0x1f) | tv_ntsc_pal));
- }
-
- /* dualView == 0x01 indicate first view
- */
- if (!dualView || dualView == 0x01) {
- /* Changing MV to single device, need to modify some MV
- * configurations. For single device change, this is only dummy
- * processing.
- */
- if (!dualView) {
- /* Close second view (Video Window 2; W2) */
- XGICloseSecondaryView(pXGI);
-
- /* Selects normal screen operation */
- OUTB(XGI_REG_SRX, 0x01);
- OUTB(XGI_REG_SRX+1, INB(XGI_REG_SRX+1) & ~0x20);
- }
-
- /* Combinate & set mode condition. */
-
- /* want_3cf_5a indicate which devices need to be enabled and
- * decided by condition
- */
- want_3cf_5a = (condition & 0x0000000F);
-
- if (condition & ZVMX_ATTRIB_EXPANSION) {
- modeSpec |= BIOS_EXPANSION;
- } else if (condition & ZVMX_ATTRIB_V_EXPANSION) {
- modeSpec |= BIOS_V_EXPANSION;
- }
-
- /* Protection Register; Set register 0x11 to 0x92 to unprotect all
- * extended registers without regarding 3C5.0E bit 7.
- */
- vAcquireRegIOProtect(pXGI);
-
- /* Change of the display device can be done by altering this scratch
- * pad register and followed by the set mode function call.
- */
- OUTB(XGI_REG_GRX, 0x5A);
- OUTB(XGI_REG_GRX+1, ((INB(XGI_REG_GRX+1) & 0xF0) | want_3cf_5a));
-
- /* LUT read / write enable */
- OUTB(XGI_REG_SRX, 0xDD);
- OUTB(XGI_REG_SRX+1, 0xE0);
-
- /* What is modeSpec for? It is used by calling BIOS to set mode.
- */
- modeSpec |= XGIGetColorIndex(pMode0->pixelSize);
- if (modeSpec & 0x08) {
- /* 32 bit true color */
- modeSpec |= (pMode0->modeNo & 0x0100) >> 7; /* 10 bits */
- }
-
- /* Read information of LUT standby and gamma enable */
- OUTB(XGI_REG_SRX, 0xDE);
- b3c5_de = INB(XGI_REG_SRX+1);
-
- /* Call BIOS to set mode. See page 2-37 of
- * "Volari XP10 non-3D SPG v1.0.pdf"
- */
- pXGI->pInt10->ax = 0x1200;
- pXGI->pInt10->bx = 0x0014;
- pXGI->pInt10->num = 0x10;
-
- /* VGA extended mode number */
- OUTB(XGI_REG_GRX, 0x5A);
- OUTB(XGI_REG_CRX, 0x5A);
- if ((INB(XGI_REG_GRX+1) & 0x80) && (INB(XGI_REG_CRX+1) & 0x04)) {
- /* single sync digital */
- pXGI->pInt10->bx |= pXGI->digitalModeNo << 8;
- } else {
- pXGI->pInt10->bx |= (XGIConvertResToModeNo(pMode0->width, pMode0->height)
- | (pMode0->modeNo & 0x80)) << 8;
- }
-
- /* The 44i and 48i rates need to be handled specially.
- */
- switch (pMode0->refRate & 0x0ff) {
- case 44:
- pXGI->pInt10->cx = (modeSpec << 8) | 0xD7;
- break;
- case 48:
- pXGI->pInt10->cx = (modeSpec << 8) | 0xE0;
- break;
- default:
- pXGI->pInt10->cx = (modeSpec << 8) | (pMode0->refRate & 0x01FF);
- break;
- }
-
- xf86ExecX86int10(pXGI->pInt10);
-
- /* Why need to restore b3c5_de which is saved before calling BIOS? */
- OUTB(XGI_REG_SRX, 0xDE);
- OUTB(XGI_REG_SRX+1, b3c5_de);
-
- /* Set mode fail. */
- if (pXGI->pInt10->ax & 0xFF00) {
- xf86DrvMsg(pXGI->pScrn->scrnIndex, X_ERROR,
- "%s:%u: ax = 0x%04x\n",
- __func__, __LINE__, pXGI->pInt10->ax);
- return FALSE;
- }
-
- pMode0->refRate = pXGI->pInt10->cx;
-
-
- /* Notify expansion status to system BIOS */
- pXGI->pInt10->ax = 0x120C;
- pXGI->pInt10->bx = 0x214;
- pXGI->pInt10->cx = 0;
- if (modeSpec & BIOS_EXPANSION) {
- pXGI->pInt10->cx = 1;
- } else if (modeSpec & BIOS_V_EXPANSION) {
- pXGI->pInt10->cx = 2;
- }
- pXGI->pInt10->num = 0x10;
-
- xf86ExecX86int10(pXGI->pInt10);
-
-
- /* Working status register 0: indicate intended status of display
- * device and will take effect after calling set mode of BIOS.
- */
- OUTB(XGI_REG_GRX, 0x5A);
-
- /* System status flag 1: indicate current status of output devices.
- */
- OUTB(XGI_REG_CRX, 0x5A);
-
- if (((pMode0->width == 1920) || (pMode0->width == 2048))
- && !(((condition & DEV_SUPPORT_LCD) && (pXGI->lcdWidth <= 1600))
- || ((condition & DEV_SUPPORT_DVI) && (INB(XGI_REG_GRX+1) & 0x80)
- && (INB(XGI_REG_CRX+1) & 4) && (pXGI->lcdWidth <= 1600)))) {
- /*Disable Scaling Engine Control: Horizontal interpolation */
- OUTB(XGI_REG_GRX, 0xD3);
- OUTB(XGI_REG_GRX+1, (int)(INB(XGI_REG_GRX+1) & ~0x80));
-
- /* Disable Scaling Engine Control: Vertical interpolation */
- OUTB(XGI_REG_GRX,0xD5);
- OUTB(XGI_REG_GRX+1, (int)(INB(XGI_REG_GRX+1) & ~0x80));
- }
- }
-
- /* Check whether it's a MHS mode */
- OUTB(XGI_REG_GRX, 0x36);
- if ((INB(XGI_REG_GRX+1) & 0x02)) {
- if (pXGI->isInterpolation) {
- /* Enable vertical interpolation of video Window 2 */
- OUTB(0x24aa, (CARD16)INB(0x24aa) & ~0x02);
- } else {
- /* Disable vertical interpolation of video Window 2 */
- OUTB(0x24aa, (CARD16)INB(0x24aa) | 0x02);
- }
- }
-
- /* dualView == 0x02 indicate second view
- */
- if (dualView == 0x02) {
- if (condition & SUPPORT_W2_CLOSE) {
- /* Selects normal screen operation */
- OUTB(XGI_REG_SRX, 0x01);
- OUTB(XGI_REG_SRX+1, INB(XGI_REG_SRX+1) & ~0x20);
- return TRUE;
- }
-
- /* Used to check 0x3E4-0x5B for dual view */
- want_3cf_5a = (CARD8)(condition & 0x0000000f) << 4;
-
- /* set flag of 0x5B for dual view */
- OUTB(XGI_REG_GRX, 0x5B);
- OUTB(XGI_REG_GRX+1, (INB(XGI_REG_GRX+1) & ~0xF0) | want_3cf_5a);
-
- /* Debug different modes for dual view */
- modeSpec |= XGIGetColorIndex(pMode1->pixelSize);
-
- /* 32 bit true color */
- if (modeSpec & 0x08) {
- modeSpec |= (pMode1->modeNo & 0x0100) >> 7; /* 10 bits */
- }
-
-
- /* Call BIOS to set mode */
- pXGI->pInt10->ax = 0x1200;
- pXGI->pInt10->bx = 0x0014;
- if (condition & DEV_SUPPORT_LCD) {
- pXGI->pInt10->bx |= (CARD16)pXGI->lcdModeNo << 8;
- } else if (condition & DEV_SUPPORT_DVI) {
- OUTB(XGI_REG_GRX, 0x5A);
- OUTB(XGI_REG_CRX, 0x5A);
- if ((INB(XGI_REG_GRX+1) & 0x80) && (INB(XGI_REG_CRX+1) & 0x04)) {
- /* single sync digital */
- pXGI->pInt10->bx |= (CARD16)pXGI->digitalModeNo << 8;
- } else {
- pXGI->pInt10->bx |= ((CARD16)XGIConvertResToModeNo(pMode1->width, pMode1->height)
- | (pMode1->modeNo & 0x80)) << 8;
- }
- } else if ((condition & DEV_SUPPORT_TV) && (pMode1->width > 1024)) {
- pXGI->pInt10->bx |= (MODE_1024x768 & 0xFF00);
- } else {
- pXGI->pInt10->bx |= ((CARD16)XGIConvertResToModeNo(pMode1->width, pMode1->height)
- | (pMode1->modeNo & 0x80)) << 8;
- }
-
- /* D7 1: Set CRTC2 timing only */
- pXGI->pInt10->cx = 0x8000 | (modeSpec << 8) | (pMode1->refRate & 0x01FF);
-
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
-
- /* w2 (CRTC 2) Zoom & Position.
- */
-
- /* Get horisontal start and end position of display */
- OUTB(XGI_REG_SRX, 0xC8);
- w2_hstart = (CARD16)INB(XGI_REG_SRX+1);
- OUTB(XGI_REG_SRX, 0xC9);
- w2_hstart |= (CARD16)INB(XGI_REG_SRX+1) << 8;
-
- OUTB(XGI_REG_SRX,0xCA);
- w2_hend = (CARD16)INB(XGI_REG_SRX+1);
- OUTB(XGI_REG_SRX,0xCB);
- w2_hend |= (CARD16)INB(XGI_REG_SRX+1) << 8;
-
- /* Get vertical start and end position of display */
- OUTB(XGI_REG_SRX,0xC4);
- w2_vstart = (CARD16)INB(XGI_REG_SRX+1);
- OUTB(XGI_REG_SRX,0xC5);
- w2_vstart |= (CARD16)INB(XGI_REG_SRX+1) << 8;
-
- OUTB(XGI_REG_SRX,0xC6);
- w2_vend = (CARD16)INB(XGI_REG_SRX+1);
- OUTB(XGI_REG_SRX,0xC7);
- w2_vend |= (CARD16)INB(XGI_REG_SRX+1) << 8;
-
- /* CRTC2 SYNC Pulse Width */
- OUTB(XGI_REG_SRX,0xCC);
- w2_sync = INB(XGI_REG_SRX+1);
-
- /* Adjust Overlay position
- * W2_Hstart = HDE start - 50 = (3C5.C9-C8) - 50
- * W2_Hend = HDE end - 51 = (3C5.CB-CA) - 51
- * W2_Vstart = VDE start - 6 = (3C5.C5-C4) - 4
- * W2_Vend = VDE end -2 = (3C5.C7-C6)
- * Note: 1. Flick disbled, 24B0.[2:0] = 0
- * 2. W2 HDE is 0, 24AA.[7:4] = 0
- */
- w2_hstart -= 0x032;
- w2_hend -= 0x033; /* Keep as same as DE. */
- w2_vstart -= 0x04;
-
- xres = pMode1->width;
- yres = pMode1->height;
-
- if (condition & DEV_SUPPORT_LCD) {
- /* Panel mode */
- if (condition & ZVMX_ATTRIB_EXPANSION) {
- /* Horizontal Zoom */
- if (xres > pXGI->lcdWidth) {
- xres = pXGI->lcdWidth;
- }
-
- w2_hzoom = (CARD16)((CARD32)(xres-1) * 1024 / (pXGI->lcdWidth - 1));
- temp_x = (CARD16)((xres-1) * 1024 % (pXGI->lcdWidth - 1));
- if (temp_x >= ((pXGI->lcdWidth - 1) >> 1)) {
- w2_hzoom++;
- if (temp_x <= ((pXGI->lcdWidth - 1) * 9 / 10))
- w2_hend--;
- }
- } else {
- w2_hzoom = 1024;
- disLen = (CARD16)(pXGI->lcdHeight/3)*4;
- if ((disLen < pXGI->lcdWidth)
- && (xres < disLen)
- && (condition & ZVMX_ATTRIB_V_EXPANSION)) {
- w2_hstart += (CARD16)((pXGI->lcdWidth - disLen)>>1);
- w2_hend = (CARD16)(w2_hstart + disLen) -1;
- w2_hzoom = (CARD16)((CARD32)(xres-1) * 1024 / (disLen-1));
- temp_x = (CARD16)((xres-1) * 1024 % (disLen-1));
- if (temp_x >= ((disLen-1) >> 1)) {
- w2_hzoom++;
- } else {
- w2_hend++;
- }
- } else if (xres < pXGI->lcdWidth) {
- w2_hstart += (CARD16)((pXGI->lcdWidth - xres)>>1);
- w2_hend -= (CARD16)((pXGI->lcdWidth - xres)>>1);
- }
- }
-
- if (condition & (ZVMX_ATTRIB_EXPANSION | ZVMX_ATTRIB_V_EXPANSION)) {
- /* Vertical Zoom */
- if (yres > pXGI->lcdHeight)
- yres = pXGI->lcdHeight;
-
- w2_vzoom = (CARD16)((CARD32)(yres-1) * 1024 / (pXGI->lcdHeight-1));
- if ((CARD32)(yres-1) * 1024 % (pXGI->lcdHeight-1))
- w2_vzoom++;
- if (((CARD32)(yres-1) * 1024 % (pXGI->lcdHeight-1)) &&
- ((CARD32)(yres-1) * 1024 % (pXGI->lcdHeight-1)) < (CARD32)((pXGI->lcdHeight-1) >> 1))
- w2_vend--;
- } else {
- if (yres < pXGI->lcdHeight) {
- w2_vstart += (CARD16)((pXGI->lcdHeight - yres)>>1);
- w2_vend -= (CARD16)((pXGI->lcdHeight - yres)>>1);
- }
- w2_vzoom = 1024;
- }
- } else if (condition & DEV_SUPPORT_DVI) {
- /* DVI mode */
- OUTB(XGI_REG_GRX,0x5a);
- OUTB(XGI_REG_CRX,0x5a);
- if ((INB(XGI_REG_GRX+1) & 0x80) && (INB(XGI_REG_CRX+1) & 0x04)) {
- /* single sync digital */
- w2_hend--;
- /* Horizontal Zoom */
- if (xres > pXGI->digitalWidth)
- xres = pXGI->digitalWidth;
-
- w2_hzoom = (CARD16)((CARD32)(xres-1) * 1024 / (pXGI->digitalWidth - 1));
- if (((CARD32)(xres-1) * 1024 % (pXGI->digitalWidth - 1)) >= (CARD32)((pXGI->digitalWidth - 1) >> 1)) {
- w2_hzoom++;
- w2_hend--;
- }
-
- /* Vertical Zoom */
- if (yres > pXGI->digitalHeight)
- yres = pXGI->digitalHeight;
-
- w2_vzoom = (CARD16)((CARD32)(yres-1) * 1024 / (pXGI->digitalHeight -1));
- if ((CARD32)(yres-1) * 1024 % (pXGI->digitalHeight - 1))
- w2_vzoom++;
- if (((CARD32)(yres-1) * 1024 % (pXGI->digitalHeight - 1)) &&
- ((CARD32)(yres-1) * 1024 % (pXGI->digitalHeight - 1)) < (CARD32)((pXGI->digitalHeight - 1) >> 1))
- w2_vend--;
- } else {
- if (xres == 320 || xres == 400 || xres == 512) {
- w2_hzoom = 512;
- w2_vzoom = 512;
- } else if (xres == 720) {
- /* scale up to 800x600 */
- w2_hzoom = 0x399;
- if(yres == 576)
- w2_vzoom = 0x3d7;
- else /* 480 */
- w2_vzoom = 0x333;
- } else {
- w2_hzoom = 1024;
- w2_vzoom = 1024;
- }
- }
- } else if (condition & DEV_SUPPORT_CRT) {
- /* CRT mode */
- if (xres == 320 || xres == 400 || xres == 512) {
- w2_hzoom = 512;
- w2_vzoom = 512;
- } else {
- w2_hzoom = 1024;
- w2_vzoom = 1024;
- }
- } else {
- /* TV mode */
- if (xres > 1024) {
- xres = 1024;
- yres = 768;
- }
-
- if (xres == 320 || xres == 400 || xres == 512) {
- w2_hzoom = 512;
- w2_vzoom = 512;
- } else {
- w2_hzoom = 1024;
- w2_vzoom = 1024;
- }
-
- w2_hstart += 0x01A;
- w2_hend += 0x019;
-
- w2_sync = (w2_sync>>1) + 8;
- OUTB(XGI_REG_SRX,0xcc);
- OUTB(XGI_REG_SRX+1, w2_sync);
-
- OUTB(XGI_REG_CRX,0xc0);
- if (!(INB(XGI_REG_CRX+1) & 0x80)) {
- w2_vstart -= 0x0c;
- w2_vend -= 0x0c;
- }
- }
-
- temp_x = (CARD16)xres & 0xfff0;
- if (((CARD16)xres & 0x000f) != 0)
- temp_x += 0x10;
-
- w2_rowByte = (CARD16)(temp_x * (pMode1->pixelSize >> 3)) >> 4;
-
- lineBuf = xres >> 3;
-
- if (pMode1->pixelSize == 8) {
- lineBuf >>= 1;
- } else if (pMode1->pixelSize == 16) {
- /* Disable dithering */
- OUTB(XGI_REG_GRX, 0x42);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) & ~0x08);
- } else if (pMode1->pixelSize == 32) {
- lineBuf <<= 1;
- }
-
- lineBuf++;
- if (lineBuf > 0x3FF)
- lineBuf = 0x3FF; /* Overflow */
-
- vAcquireRegIOProtect(pXGI);
-
- /* Window 2 Starting address of (Y) frame buffer.
- *
- * We need to give an different address than (0,0) if MHS is
- * required. Otherwise (0,0) is correct for simultaneous and content
- * mode.
- *
- * Total 25 bits is effective.
- */
- W2fbAddr = pScrn->memPhysBase;
- XG47SetW2ViewBaseAddr(pScrn, (unsigned long)W2fbAddr);
-
-#ifdef XGI_DUMP_DUALVIEW
- ErrorF("Jong-After calling- XG47SetW2ViewBaseAddr()-W2fbAddr=0x%x\n",
- W2fbAddr);
- XGIDumpRegisterValue(pScrn);
-#endif
-
- /* W2 zooming factor */
- OUTW(0x249c, w2_hzoom);
- OUTW(0x24a0, w2_vzoom);
-
- /* W2 start/end */
- OUTW(0x2494, w2_hstart);
- OUTW(0x2496, w2_hend);
- OUTW(0x2498, w2_vstart);
- OUTW(0x249a, w2_vend);
-
- /* W2 row byte */
- OUTW(0x248c, w2_rowByte);
-
- /* Line buffer */
- OUTW(0x2490, lineBuf);
-
- /* disable color key mask for video */
- OUTW(0x24bc, 0x0);
- OUTW(0x24be, 0x0);
-
- OUTB(XGI_REG_GRX, 0x5D);
- modeSpec = (CARD8)INB(XGI_REG_GRX+1); /* LCD Expansion/Centering */
-
- ErrorF("Jong-Debug-3CE-0x5D-modeSpec=0x%x\n", modeSpec);
-
- /* Set to RGB mode
- * 0x24a9:[4]: W2_CSCPASS
- * 1: window2 RGB format
- * *0: window2 YUV format
- */
- OUTB(0x24a9, ((CARD16)INB(0x24a9) & ~0x0F) | 0x1A); /* CSCPASS, RGB WINMD */
-
- if ((!(modeSpec & GRAF_EXPANSION))||(pMode1->pixelSize == 8)) {
- OUTB(0x24aa, (CARD16)INB(0x24aa) | 0x01); /* HINTEN, disable */
- } else {
- OUTB(0x24aa, (CARD16)INB(0x24aa) & ~0x01); /* HINTEN, enable */
- }
-
- OUTB(0x24aa, (CARD16)INB(0x24aa) | 0x02);
- if ((condition & DEV_SUPPORT_LCD)
- && (pMode1->width < pXGI->lcdWidth)) {
- if(pXGI->isInterpolation)
- OUTB(0x24aa, INB(0x24aa) & ~0x02);
- }
-
- if (pMode1->pixelSize == 8) {
- OUTB(0x24a8, (INB(0x24a8) & ~0x07) | 0x01);
- } else if(pMode1->pixelSize == 16) {
- OUTB(0x24a8, (INB(0x24a8) & ~0x07) | 0x02);
- } else {
- /* 10 bits */
- if (pMode0->modeNo & 0x0100) {
- OUTB(0x24a8, INB(0x24a8) | 0x07);
- } else {
- OUTB(0x24a8, (INB(0x24a8) & ~0x07) | 0x04);
- }
- }
-
- OUTB(0x24aa, (INB(0x24aa) & ~0x70)); /* HDE Adjust */
-
- /* sharpness */
- OUTB(0x24ab, 0x10);
-
- /*disable sub-picture, and will correct 2nd view color */
- OUTB(0x2470, (CARD16)INB(0x2470) & ~0x06);
-
- OUTB(XGI_REG_GRX, 0x81);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x80);
- /* Enable Window 2 */
- OUTB(XGI_REG_GRX, 0x81);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x01);
-
- /* Turn on video engine memory clock */
- OUTB(XGI_REG_GRX, 0xDA);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) & ~0x10);
-
- /* Turn on video engine pixel clock */
- OUTB(XGI_REG_CRX, 0xBE);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) | 0x04);
-
- /* Turn on video engine clock for w2 */
- OUTB(XGI_REG_SRX, 0x52);
- OUTB(XGI_REG_SRX+1, INB(XGI_REG_SRX+1) | 0x40);
-
- if (want_3cf_5a & (DEV_SUPPORT_LCD << 4)) {
- /* W2 on LCD */
- OUTB(XGI_REG_SRX, 0xBE);
- OUTB(XGI_REG_SRX+1,(int)INB(XGI_REG_SRX+1) | 0x08);
-
- /* Set DE delay for CRTC2 */
- OUTB(XGI_REG_GRX, 0x45);
- OUTB(XGI_REG_GRX+1, (INB(XGI_REG_GRX+1) & ~0x07)|(GR3CE_45 & 0x07));
- }
-
- if (want_3cf_5a & (DEV_SUPPORT_TV << 4)) {
- /* W2 on TV */
- OUTB(XGI_REG_CRX, 0xD6);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) | 0x04);
-
- /* UV order */
- OUTB(XGI_REG_SRX, 0xD8);
- OUTB(XGI_REG_SRX+1, 0x11);
-
- /* Adjust VDHLOAD */
- OUTB(XGI_REG_CRX, 0xD2);
- temp_x = (CARD16)INB(XGI_REG_CRX+1);
- OUTB(XGI_REG_CRX, 0xD3);
- temp_x |= (CARD16)(INB(XGI_REG_CRX+1) & 0x0F) << 8;
-
- OUTB(XGI_REG_CRX, 0xC0);
- if(INB(XGI_REG_CRX+1) & 0x80)
- temp_x += 0x14;
-
- OUTB(XGI_REG_CRX, 0xD2);
- OUTB(XGI_REG_CRX+1, temp_x);
- OUTB(XGI_REG_CRX, 0xD3);
- OUTB(XGI_REG_CRX+1, (INB(XGI_REG_CRX+1) & 0xF0) | (temp_x >> 8));
- }
-
- if (want_3cf_5a & (DEV_SUPPORT_DVI << 4)) {
- /* W2 on DVI, driving strength */
-
- /* TMDS Power, disable internal TMDS */
- OUTB(XGI_REG_GRX, 0x3D);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x01);
-
- /* LCD2 HS Delay */
- OUTB(XGI_REG_GRX, 0x46);
- OUTB(XGI_REG_GRX+1, (INB(XGI_REG_GRX+1) & ~0x38) | 0x28);
-
- OUTB(XGI_REG_CRX, 0xD6);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) & ~0x10);
-
- OUTB(XGI_REG_GRX, 0x2A);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x40);
- }
-
- /* Sset second view to CRT1/DVI2 with 0x3CE/0x3CF-0x2C:[6]
- * DEV_SUPPORT_CRT = 0x0002; (DEV_SUPPORT_CRT << 4) = 0x0020
- *
- * Why to check want_3cf_5a but not want_3cf_5b?
- */
- if (want_3cf_5a & (DEV_SUPPORT_CRT << 4)) {
- OUTB(XGI_REG_GRX, 0x2C);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x40);
- }
-
- OUTB(0x24c2,(CARD16)INB(0x24c2) | 0x20); /* MC5 */
- }
-
- /* TV
- */
- if ((pXGI->biosDevSupport & SUPPORT_DEV_TV)
- && !(pXGI->biosDevSupport & SUPPORT_CURRENT_NO_TV)
- && (condition & DEV_SUPPORT_TV)) {
- if (dualView == 0x02) {
- modeinfo[0] = (CARD16)pMode1->width;
- modeinfo[1] = (CARD16)pMode1->height;
- modeinfo[2] = (CARD16)pMode1->pixelSize;
- } else {
- modeinfo[0] = (CARD16)pMode0->width;
- modeinfo[1] = (CARD16)pMode0->height;
- modeinfo[2] = (CARD16)pMode0->pixelSize;
- }
-
- if (condition & SUPPORT_TV_NATIVE) {
- if (condition & ZVMX_ATTRIB_PAL) {
- if (modeinfo[0] >= 800 && modeinfo[1] > 514) {
- modeinfo[0] = 800;
- modeinfo[1] = 514;
- }
- } else {
- if (modeinfo[0] >= 640 && modeinfo[1] > 432) {
- modeinfo[0] = 640;
- modeinfo[1] = 432;
- }
- }
- } else {
- if (modeinfo[0] >= 1024 && modeinfo[1] >= 768) {
- modeinfo[0] = 1024;
- modeinfo[1] = 768;
- }
- }
-
- /* Only one true color format(32bit).
- */
- modeinfo[3] = 1;
-
- XG47BiosDTVControl(pXGI, INIT_TV_SCREEN, modeinfo);
- }
-
- return TRUE;
-}
-
-
-Bool XG47BiosSpecialFeature(ScrnInfoPtr pScrn, unsigned long cmd,
- const unsigned long *pInBuf)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- const CARD16 *const x = (const CARD16 *) pInBuf;
-
-
- switch (cmd) {
- case CLOSE_ALL_DEVICE:
- vAcquireRegIOProtect(pXGI);
- XG47CloseAllDevice(pXGI, (CARD8)x[0]);
- return TRUE;
-
- case OPEN_ALL_DEVICE:
- vAcquireRegIOProtect(pXGI);
- XG47OpenAllDevice(pXGI, (CARD8)x[0]);
- return TRUE;
-
- default:
- if ((pXGI->biosOrgDevSupport & 0x000F0000)
- && (cmd >= INIT_TV_SCREEN)) {
- return XG47BiosDTVControl(pXGI, cmd, x);
- }
- break;
- }
-
- return FALSE;
-}
-
-Bool XG47BiosDTVControl(XGIPtr pXGI, unsigned cmd, const CARD16 *piWord)
-{
- if (pXGI->dtvInfo == TV_INVALID) {
- return FALSE;
- }
-
- switch (cmd) {
- case ENABLE_TV_DISPLAY:
- XG47ControlTVDisplay(pXGI, TRUE);
- break;
- case DISABLE_TV_DISPLAY:
- XG47ControlTVDisplay(pXGI, FALSE);
- break;
- case INIT_TV_SCREEN:
- XG47InitTVScreen(pXGI, piWord[0], piWord[1], piWord[2], piWord[3]);
- break;
- default:
- return FALSE;
- }
-
- return TRUE;
-}
diff --git a/src/xg47_bios.h b/src/xg47_bios.h
deleted file mode 100644
index 7ee2aa3..0000000
--- a/src/xg47_bios.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2003-2006 by XGI Technology, Taiwan. *
- * *
- * All Rights Reserved. *
- * *
- * Permission is hereby granted, free of charge, to any person obtaining *
- * a copy of this software and associated documentation files (the *
- * "Software"), to deal in the Software without restriction, including *
- * without limitation on the rights to use, copy, modify, merge, *
- * publish, distribute, sublicense, and/or sell copies of the Software, *
- * and to permit persons to whom the Software is furnished to do so, *
- * subject to the following conditions: *
- * *
- * The above copyright notice and this permission notice (including the *
- * next paragraph) shall be included in all copies or substantial *
- * portions of the Software. *
- * *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
- * NON-INFRINGEMENT. IN NO EVENT SHALL XGI AND/OR *
- * ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, *
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
- * DEALINGS IN THE SOFTWARE. *
- ***************************************************************************/
-
-#ifndef _XG47_BIOS_H_
-#define _XG47_BIOS_H_
-
-/* xg47_bios.c */
-extern ModeStatus XG47BiosValidMode(ScrnInfoPtr pScrn, XGIAskModePtr pMode,
- CARD32 dualView);
-
-extern Bool XG47BiosModeInit(ScrnInfoPtr pScrn,
- XGIAskModePtr pMode,
- CARD32 dualView);
-extern void XG47BiosValueInit(ScrnInfoPtr pScrn);
-
-extern Bool XG47BiosSpecialFeature(ScrnInfoPtr pScrn, unsigned long cmd,
- const unsigned long *pInBuf);
-
-extern void XG47CloseAllDevice(XGIPtr pXGI, CARD8 device2Close);
-extern void XG47OpenAllDevice(XGIPtr pXGI, CARD8 device2Open);
-extern CARD16 XG47GetRefreshRateByIndex(CARD8 index);
-
-#endif
diff --git a/src/xg47_mode.c b/src/xg47_mode.c
index 1d33ea7..18862a9 100644
--- a/src/xg47_mode.c
+++ b/src/xg47_mode.c
@@ -37,266 +37,6 @@
/* Jong 09/15/2006; support dual view; default is single mode */
int g_DualViewMode=0;
-/*
- * Pixel(Video) clock information.
- */
-XGIPixelClockRec XG47ModeVClockTable[]={
- {320, 200, 60, 13},
- {320, 200, 70, 13},
- {320, 240, 60, 13},
- /*{320, 240, 72, 16},*/
- {320, 240, 75, 16},
- {320, 240, 85, 18},
- {400, 300, 60, 20},
- {400, 300, 75, 25},
- {400, 300, 85, 28},
- /*{512, 384, 44, 23},*/
- {512, 384, 60, 33},
- /*{512, 384, 70, 38},*/
- {512, 384, 75, 39},
- {512, 384, 85, 48},
- {640, 400, 60, 25},
- {640, 400, 70, 25},
- {640, 400, 85, 31},
- {640, 432, 60, 25},
- {640, 480, 60, 25},
- /*{640, 480, 72, 31},*/
- {640, 480, 75, 32},
- {640, 480, 85, 36},
- {640, 480,100, 43},
- {640, 480,120, 52},
- {720, 480, 60, 28},
- {720, 540, 60, 30},
- {720, 576, 60, 32},
- {800, 514, 60, 40},
- {800, 600, 60, 40},
- {800, 600, 75, 50},
- {800, 600, 85, 56},
- {800, 600,100, 68},
- {800, 600,120, 84},
- {848, 480, 60, 31},
- {1024, 600, 60, 51},
- {1024, 768, 44, 45},
- {1024, 768, 60, 65},
- {1024, 768, 70, 75},
- {1024, 768, 75, 79},
- {1024, 768, 85, 95},
- {1024, 768,100,113},
- {1024, 768,120,139},
- {1152, 864, 60, 81},
- {1152, 864, 75,108},
- {1152, 864, 85,119},
- {1280, 600, 60,108},
- {1280, 768, 60, 74},
- {1280, 768, 60, 79},
- {1280, 800, 60,101},
- {1280, 960, 60,101},
- {1280, 960, 75,130},
- {1280, 960, 85,148},
- {1280,1024, 44, 78},
- {1280,1024, 60,108},
- {1280,1024, 75,135},
- {1280,1024, 85,158},
- {1280,1024,100,191},
- {1280,1024,120,234},
- {1400,1050, 60,122},
- {1400,1050, 75,155},
- {1400,1050, 85,179},
- {1440, 900, 60,129},
- {1600,1200, 48,130},
- {1600,1200, 0x13C,130},
- {1600,1200, 60,162},
- {1600,1200, 75,203},
- {1600,1200, 85,230},
- {1600,1200,100,281},
- {1680,1050, 60,178},
- {1920,1080, 0xbc,74},
- {1920,1080, 60,148},
- {1920,1200, 0x13C,154},
- {1920,1200, 60,234},
- {1920,1440, 60,234},
- {1920,1440, 75,297},
- {2048,1536, 60,267},
- {2048,1536, 75,340}
-};
-
-int XG47ModeVClockTableSize = sizeof(XG47ModeVClockTable) / sizeof(XGIPixelClockRec);
-
-XGIPixelClockRec XG47ModeVClockTable2[]={
- {1600,1200,60,130},
- {1920,1200,60,154}
-};
-int XG47ModeVClockTableSize2 = sizeof(XG47ModeVClockTable2) / sizeof(XGIPixelClockRec);
-
-/*
- * XG47 mode table
- */
-static XGIModeRec XG47ModeTable[] = {
-{ MODE_320x200, 320, 200,
- { VMODE_REF_75Hz+VMODE_REF_60Hz,
- VMODE_REF_70Hz,
- VMODE_REF_60Hz,
- VMODE_REF_70Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_320x240, 320, 240,
- { VMODE_REF_75Hz+VMODE_REF_60Hz,
- VMODE_REF_85Hz+VMODE_REF_75Hz+VMODE_REF_60Hz,
- VMODE_REF_60Hz,
- VMODE_REF_85Hz+VMODE_REF_75Hz+VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_400x300, 400, 300,
- { VMODE_REF_75Hz+VMODE_REF_60Hz,
- VMODE_REF_85Hz+VMODE_REF_75Hz+VMODE_REF_60Hz,
- VMODE_REF_60Hz,
- VMODE_REF_85Hz+VMODE_REF_75Hz+VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_512x384, 512, 384,
- { VMODE_REF_60Hz,
- VMODE_REF_85Hz+VMODE_REF_75Hz+VMODE_REF_60Hz+VMODE_REF_44Hz,
- VMODE_REF_60Hz,
- VMODE_REF_85Hz+VMODE_REF_75Hz+VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_640x400, 640, 400,
- { VMODE_REF_75Hz+VMODE_REF_60Hz,
- VMODE_REF_85Hz+VMODE_REF_70Hz,
- VMODE_REF_60Hz,
- VMODE_REF_85Hz+VMODE_REF_70Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_640x432, 640, 432,
- { 0x0000, VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_640x480, 640, 480,
- { VMODE_REF_75Hz+VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff }, /* Open All */
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_720x480, 720, 480,
- { VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_720x576, 720, 576,
- { VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_800x514, 800, 514,
- { 0x0000, VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_800x600, 800, 600,
- { VMODE_REF_75Hz+VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff }, /* Open All */
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_848X480, 848, 480,
- { 0x0000, VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1024x600, 1024, 600,
- { VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1024x768, 1024, 768,
- { VMODE_REF_75Hz+VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff }, /* Open All */
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1152x864, 1152, 864,
- { VMODE_REF_60Hz, VMODE_REF_60Hz+VMODE_REF_75Hz+VMODE_REF_85Hz,
- VMODE_REF_60Hz, VMODE_REF_60Hz+VMODE_REF_75Hz+VMODE_REF_85Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1280x600, 1280, 600,
- { VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1280X720, 1280, 720,
- { VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1280x768, 1280, 768,
- { VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff }, /* Open All */
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1280x800, 1280, 800,
- { VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1280x960, 1280, 960,
- { VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff }, /* Open All */
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1280x1024, 1280,1024,
- { VMODE_REF_75Hz+VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff }, /* Open All */
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1440x900, 1440, 900,
- { VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz, VMODE_REF_60Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1400x1050, 1440, 1050,
- { VMODE_REF_60Hz, VMODE_REF_60Hz+VMODE_REF_75Hz+VMODE_REF_85Hz,
- VMODE_REF_60Hz, VMODE_REF_60Hz+VMODE_REF_75Hz+VMODE_REF_85Hz },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1600x1200, 1600,1200,
- { VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff }, /* Open All */
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1680x1050, 1680, 1050,
- { VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1920X1080, 1920, 1080,
- { VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1920x1200, 1920, 1200,
- { VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_1920x1440, 1920,1440,
- { VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff },
- { 0,0,0,0 }, { 0 }
-},
-{ MODE_2048x1536, 2048,1536,
- { VMODE_REF_60Hz, 0xffff, VMODE_REF_60Hz, 0xffff },
- { 0,0,0,0 }, { 0 }
-},
-{ MAX_MODE_NO, MAX_MODE_INT, MAX_MODE_INT,
- { 0xFFFF,0xFFFF,0xFFFF,0xFFFF },
- { 0xFFFF,0xFFFF,0xFFFF,0xFFFF }, { 0xFFFF }
-},
-{ MAX_MODE_NO, MAX_MODE_INT, MAX_MODE_INT,
- { 0xFFFF,0xFFFF,0xFFFF,0xFFFF },
- { 0xFFFF,0xFFFF,0xFFFF,0xFFFF }, { 0xFFFF }
-},
-{ MAX_MODE_NO, MAX_MODE_INT, MAX_MODE_INT,
- { 0xFFFF,0xFFFF,0xFFFF,0xFFFF },
- { 0xFFFF,0xFFFF,0xFFFF,0xFFFF }, { 0xFFFF }
-},
-};
-
-static const int XG47ModeTableSize = sizeof(XG47ModeTable)
- / sizeof(XGIModeRec);
-
-XGIModePtr XG47GetModeFromRes(unsigned width, unsigned height)
-{
- int i;
-
-
- for (i = 0; i < XG47ModeTableSize; i++) {
- if ((XG47ModeTable[i].width == width)
- && (XG47ModeTable[i].height == height)) {
- return & XG47ModeTable[i];
- }
- }
-
- return NULL;
-}
-
void XG47LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indicies,
LOCO *colors, VisualPtr pVisual)
@@ -349,227 +89,6 @@ unsigned int XG47DDCRead(ScrnInfoPtr pScrn)
}
-#ifndef NATIVE_MODE_SETTING
-/**
- * Save the initial screen mode when starting the X server
- */
-void XG47ModeSave(ScrnInfoPtr pScrn, XGIRegPtr pXGIReg)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- CARD8 modeNo = IN3CFB(0x5C);
-
- /* 3cf:5c only stores 8-bits, but extended VESA modes can be 16-bits.
- * If the mode is larger than the highest VGA mode, use a VESA call to
- * get the full 16-bits of the current mode.
- */
- if (modeNo > MAX_VGA_MODE_NO) {
- pXGI->pInt10->ax = 0x4F03;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
- pXGI->isVGAMode = FALSE;
- pXGI->textModeNo = pXGI->pInt10->bx;
- } else {
- pXGI->isVGAMode = TRUE;
- pXGI->textModeNo = modeNo;
- }
-
-}
-
-/**
- * Restore the initial screen mode when exiting the X server
- *
- * \todo
- * Determine if the VESA call could be used for the non-VGA and VGA case.
- */
-void XG47ModeRestore(ScrnInfoPtr pScrn, XGIRegPtr pXGIReg)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
-
- /* Restore to single view */
- XGICloseSecondaryView(pXGI);
-
- /* Depending on whether the original mode was a VGA mode or an extended
- * VESA mode, use the proper BIOS call to restore the mode.
- */
- if (pXGI->isVGAMode) {
- pXGI->pInt10->ax = pXGI->textModeNo;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
- } else {
- pXGI->pInt10->ax = 0x4F02;
- pXGI->pInt10->bx = pXGI->textModeNo;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
- }
-}
-#endif
-
-void XG47SetCRTCViewStride(ScrnInfoPtr pScrn)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
-
- /* display width * bytes-per-pixel / 8 */
- const unsigned stride =
- (pScrn->displayWidth * (pScrn->bitsPerPixel >> 3)) >> 3;
-
- OUT3X5B(0x13, stride);
- OUT3X5B(0x8B, (IN3X5B(0x8B) & 0xC0) | ((stride >> 8) & 0x3F));
-}
-
-#ifndef NATIVE_MODE_SETTING
-void XG47SetCRTCViewBaseAddr(ScrnInfoPtr pScrn, unsigned long startAddr)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
-
- /* Set base address for CRTC
- *
- * It should be guaranteed that the base address is aligned with 32 (8 pixels x 4 bpp) bytes.
- * so we needn't to set offset.
- */
-
- if (!pXGI->noAccel) pXGI->pXaaInfo->Sync(pScrn);
-
- startAddr >>= 2;
-
- OUT3X5B(0x0d, (CARD8)startAddr);
- OUT3X5B(0x0c, (CARD8)(startAddr >> 0x08));
- OUT3X5B(0x8C, (CARD8)(startAddr >> 0x10));
- OUT3X5B(0x8D, (CARD8)(startAddr >> 0x18));
-}
-
-void XG47SetW2ViewStride(ScrnInfoPtr pScrn)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- unsigned long screenStride = 0;
-
- screenStride = (screenStride + 0x07) >> 4;
- OUTB(0x248C, (CARD8)(screenStride));
- OUTB(0x248D, (CARD8)((INB(0x248D) & 0xF0) | ((screenStride >> 8) & 0xF)));
-}
-
-void XG47SetW2ViewBaseAddr(ScrnInfoPtr pScrn, unsigned long startAddr)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
-
- /* Set Second View starting Address. */
- startAddr = (startAddr + 0x07) >> 4;
- OUTB(0x2480, (CARD8)(startAddr & 0xFF));
- OUTB(0x2481, (CARD8)((startAddr >> 8) & 0xFF));
- OUTB(0x2482, (CARD8)((startAddr >> 16) & 0xFF));
- OUTB(0x2483, (CARD8)((INB(0x2483) & 0xFE) |((startAddr >> 24) & 0x1)));
-}
-
-
-static void fill_ask_mode(ScrnInfoPtr pScrn, DisplayModePtr dispMode,
- XGIAskModeRec *askMode)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- CARD8 ConnectedDevices;
-
- askMode->width = dispMode->HDisplay;
- askMode->height = dispMode->VDisplay;
- askMode->pixelSize = pScrn->bitsPerPixel;
-
- switch (pXGI->displayDevice) {
- case ST_DISP_LCD:
- case ST_DISP_CRT:
- case ST_DISP_TV:
- case ST_DISP_DVI:
- case ST_DISP_LCD_MV:
- case ST_DISP_CRT_MV:
- case ST_DISP_TV_MV:
- case ST_DISP_DVI_MV:
- askMode->condition = pXGI->displayDevice;
- break;
- default:
- /* Use IN3X5B(0x5A) to check whether device is attached
- * 0x22: single CRT
- * 0x2e: DVI + CRT
- * 0x2f: single DVI
- * ...
- *
- * How about LCD ???
- */
- ConnectedDevices = IN3X5B(0x5A);
- if (ConnectedDevices & 0x01) {
- /* single DVI */
- askMode->condition = ST_DISP_DVI;
- } else if ((ConnectedDevices & 0x0E) == 0x0E) {
- /* DVI + CRT */
- askMode->condition = ST_DISP_CRT | ST_DISP_DVI;
- } else if (ConnectedDevices & 0x02) {
- /* single CRT */
- askMode->condition = ST_DISP_CRT;
- } else if (ConnectedDevices & 0x10) {
- /* TV : need to be verified more */
- askMode->condition = ST_DISP_TV;
- }
-
- break;
- }
-
- if (dispMode->VRefresh <= 0.0) {
- dispMode->VRefresh = (dispMode->SynthClock * 1000.0) /
- (dispMode->CrtcHTotal * dispMode->CrtcVTotal);
- }
-
- if (((int)dispMode->VRefresh) >= 85) {
- askMode->refRate = 85;
- } else if (((int)dispMode->VRefresh) >= 75) {
- askMode->refRate = 75;
- } else {
- askMode->refRate = 60;
- }
-}
-
-
-Bool XG47ModeInit(ScrnInfoPtr pScrn, DisplayModePtr dispMode)
-{
- XGIAskModeRec askMode[2];
- XGIPtr pXGI = XGIPTR(pScrn);
- vgaHWPtr pVgaHW = VGAHWPTR(pScrn);
- const int index =
-#ifdef XGIDUALVIEW
- (!g_DualViewMode || pXGI->FirstView) ? 0 : 1
-#else
- 0
-#endif
- ;
-
- askMode[0].modeNo = 0x00;
- askMode[1].modeNo = 0x00;
-
-
- vgaHWUnlock(pVgaHW);
-
- /* Initialise the ModeReg values */
- if (!vgaHWInit(pScrn, dispMode))
- return FALSE;
-
-
- pScrn->vtSema = TRUE;
-
-
- /* Use askMode[0] for single view or first view of dual view mode.
- * Use askMode[1] for second view of dual view mode.
- */
- fill_ask_mode(pScrn, dispMode, & askMode[index]);
- if (!XGIBiosModeInit(pScrn, askMode, (g_DualViewMode != 0))) {
- return FALSE;
- }
-
- /* Fix bug of supporting different modes for each view of dual view mode
- * don't set offset register when 2nd view.
- */
- if (!g_DualViewMode || pXGI->FirstView) {
- XG47SetCRTCViewStride(pScrn);
- }
-
- return TRUE;
-}
-#endif
-
-
/**
* Validate a mode passed from the core X server.
*
@@ -578,32 +97,6 @@ Bool XG47ModeInit(ScrnInfoPtr pScrn, DisplayModePtr dispMode)
int XG47ValidMode(ScrnInfoPtr pScrn, DisplayModePtr dispMode)
{
XGIPtr pXGI = XGIPTR(pScrn);
-#ifndef NATIVE_MODE_SETTING
- XGIAskModeRec askMode[2];
- ModeStatus status;
-
-
- fill_ask_mode(pScrn, dispMode, & askMode[0]);
-
- /* Both askMode[0] and askMode[1] will be used in XG47BiosValidMode()
- */
- status = pXGI->pBiosDll->biosValidMode(pScrn, askMode, 0);
- if (status != MODE_OK) {
- return status;
- }
-
- /* judge the mode on LCD */
- if ((pXGI->displayDevice & ST_DISP_LCD)
- || (IN3CFB(0x5B) & ST_DISP_LCD)) {
- if ((pXGI->lcdWidth == 1600) && (dispMode->HDisplay == 1400)) {
- return MODE_PANEL;
- }
-
- if (dispMode->HDisplay > pXGI->lcdWidth) {
- return MODE_PANEL;
- }
- }
-#endif
/* judge the mode on CRT, DVI */
if ((pXGI->displayDevice & ST_DISP_CRT)
diff --git a/src/xg47_mode.h b/src/xg47_mode.h
index 5c51a03..b8d3e26 100644
--- a/src/xg47_mode.h
+++ b/src/xg47_mode.h
@@ -45,11 +45,8 @@ extern void XG47SetW2ViewBaseAddr(ScrnInfoPtr pScrn, unsigned long startAddr);
extern XGIModePtr XG47GetModeFromRes(unsigned width, unsigned height);
-#ifdef NATIVE_MODE_SETTING
extern void xg47_mode_save(ScrnInfoPtr pScrn, vgaRegPtr pVgaReg, XGIRegPtr pXGIReg);
extern void XG47_mode_restore(ScrnInfoPtr pScrn, vgaRegPtr pVgaReg, XGIRegPtr pXGIReg);
extern Bool XG47_NativeModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
-#endif /* NATIVE_MODE_SETTING */
-
#endif
diff --git a/src/xg47_native_mode.c b/src/xg47_native_mode.c
index 8406b10..92c78dd 100644
--- a/src/xg47_native_mode.c
+++ b/src/xg47_native_mode.c
@@ -29,7 +29,6 @@
#include "xgi.h"
-#ifdef NATIVE_MODE_SETTING
#include "xgi_driver.h"
#include "xgi_regs.h"
#include "xgi_bios.h"
@@ -542,4 +541,3 @@ void xg47_mode_save(ScrnInfoPtr pScrn, vgaRegPtr pVgaReg, XGIRegPtr regs)
INB(0x3c6);
regs->syndac_command = INB(0x3c6);
}
-#endif /* NATIVE_MODE_SETTING */
diff --git a/src/xg47_videohw.c b/src/xg47_videohw.c
index 5d05abf..1daffef 100644
--- a/src/xg47_videohw.c
+++ b/src/xg47_videohw.c
@@ -1809,9 +1809,13 @@ void XG47PanningExpansionAdjust(ScrnInfoPtr pScrn, BoxPtr pDstBox)
/* Expand dest rect too if expansion mode ON */
isPanelExpension = XG47IsExpansionMode(pScrn);
+#if 0
panelSizeX = pXGI->lcdWidth;
panelSizeY = pXGI->lcdHeight;
-
+#else
+ panelSizeX = 0;
+ panelSizeY = 0;
+#endif
panningX = modeSizeX = (CARD16) pScrn->currentMode->HDisplay;
panningY = modeSizeY = (CARD16) pScrn->currentMode->VDisplay;
diff --git a/src/xgi.h b/src/xgi.h
index 5ea828d..696d868 100644
--- a/src/xgi.h
+++ b/src/xgi.h
@@ -362,20 +362,6 @@ typedef struct {
CARD32 condition;
} XGIAskModeRec, *XGIAskModePtr;
-typedef ModeStatus (*FUN_XGIBiosValidMode)(ScrnInfoPtr, XGIAskModePtr, CARD32);
-typedef Bool (*FUN_XGIBiosModeInit)(ScrnInfoPtr, XGIAskModePtr, CARD32);
-typedef Bool (*FUN_XGIBiosSpecialFeature)(ScrnInfoPtr, unsigned long,
- const unsigned long*);
-typedef void (*FUN_XGIBiosValueInit)(ScrnInfoPtr);
-
-typedef struct {
- unsigned long size;
- FUN_XGIBiosValidMode biosValidMode;
- FUN_XGIBiosModeInit biosModeInit;
- FUN_XGIBiosSpecialFeature biosSpecialFeature;
- FUN_XGIBiosValueInit biosValueInit;
- unsigned long dtvType;
-} XGIBiosDllRec, *XGIBiosDllPtr;
/*
* DTV_INFO : Data type for control the TVX
@@ -397,14 +383,6 @@ typedef struct {
CARD8 delta; /* Delta unit */
} XGIDigitalTVInfoRec, *XGIDigitalTVInfoPtr;
-typedef struct {
- CARD16 lcdType;
- CARD16 lcdWidth;
- CARD16 lcdHeight;
- CARD16 lcdRefRate;
- CARD8 lcdModeNo;
-} XGILCDRec, *XGILCDPtr;
-
typedef enum
{
DISPHEAD_CRTC = 1,
@@ -508,15 +486,6 @@ typedef struct {
Bool dri_screen_open;
- Bool isVGAMode;
- CARD16 textModeNo;
-
- CARD32 biosCapability;
- CARD32 biosDevSupport;
- CARD32 biosOrgDevSupport;
- CARD32 dtvInfo;
-
- CARD32 biosDllOperationFlag;
CARD32 biosFbSize; /* bios report frame buffer size */
CARD32 freeFbSize;
CARD16 maxBandwidth;
@@ -543,23 +512,11 @@ typedef struct {
Bool isNeedShadow;
Bool isNeedStretch;
- float memClock;
int minClock;
int maxClock;
XGIDigitalTVInfoPtr pDtvInfo;
- Bool lcdActive;
- CARD16 lcdType;
- CARD16 lcdWidth;
- CARD16 lcdHeight;
- CARD16 lcdRefRate;
- CARD8 lcdModeNo;
-
- CARD16 digitalWidth;
- CARD16 digitalHeight;
- CARD8 digitalModeNo;
-
int currentClock;
int rotate;
float frequency;
@@ -603,8 +560,6 @@ typedef struct {
xf86Int10InfoPtr pInt10;
vbeInfoPtr pVbe;
- XGIBiosDllPtr pBiosDll;
-
XGIHeadID headID;
XAAInfoRecPtr pXaaInfo;
diff --git a/src/xgi_bios.c b/src/xgi_bios.c
deleted file mode 100644
index d7d9994..0000000
--- a/src/xgi_bios.c
+++ /dev/null
@@ -1,965 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2003-2006 by XGI Technology, Taiwan. *
- * *
- * All Rights Reserved. *
- * *
- * Permission is hereby granted, free of charge, to any person obtaining *
- * a copy of this software and associated documentation files (the *
- * "Software"), to deal in the Software without restriction, including *
- * without limitation on the rights to use, copy, modify, merge, *
- * publish, distribute, sublicense, and/or sell copies of the Software, *
- * and to permit persons to whom the Software is furnished to do so, *
- * subject to the following conditions: *
- * *
- * The above copyright notice and this permission notice (including the *
- * next paragraph) shall be included in all copies or substantial *
- * portions of the Software. *
- * *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
- * NON-INFRINGEMENT. IN NO EVENT SHALL XGI AND/OR *
- * ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, *
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, *
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
- * DEALINGS IN THE SOFTWARE. *
- ***************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <assert.h>
-
-#include "xgi.h"
-#include "xgi_regs.h"
-#include "xgi_bios.h"
-#include "xgi_mode.h"
-#include "xg47_bios.h"
-#include "xg47_mode.h"
-
-static void XGIBiosGetFramebufferSize(XGIPtr pXGI);
-
-extern XGIPixelClockRec XG47ModeVClockTable;
-extern int XG47ModeVClockTableSize;
-extern XGIPixelClockRec XG47ModeVClockTable2;
-extern int XG47ModeVClockTableSize2;
-
-CARD8 vclk18;
-CARD8 vclk19;
-CARD8 vclk28;
-CARD8 GR3CE_45;
-CARD8 GR3CE_45_SingleView;
-
-/*
- * from bios dll: Basefunc.c
- */
-CARD16 XGIGetVClock_BandWidth(XGIPtr pXGI,
- CARD16 xres,
- CARD16 yres,
- CARD16 depth,
- CARD16 refRate,
- CARD8 flag)
-{
- XGIPixelClockPtr pPixelClk;
- int i;
-
- if(flag & DEV_SUPPORT_LCD)
- {
- /* In reduced blanking mode, pixel clock is lower then normal. */
- if(pXGI->lcdWidth == 1280 && pXGI->lcdHeight == 600)
- return(65);
- else if(pXGI->lcdWidth == 1280 && pXGI->lcdHeight == 800)
- return(71);
- else if(pXGI->lcdWidth == 1400 && pXGI->lcdHeight == 1050)
- return(108);
- else if(pXGI->lcdWidth == 1440 && pXGI->lcdHeight == 900)
- return(96);
- else if(pXGI->lcdWidth == 1920 && pXGI->lcdHeight == 1200)
- return(154);
- }
-
- if ((((IN3CFB(0xB8) & 0x80) == 0x80) && ((IN3X5B(0x5A) & 0x03) == 0x03)
- && (flag & DEV_SUPPORT_CRT))
- || (((IN3X5B(0x5A) & 0x0C) == 0x0c) && ((IN3CFB(0xB8) & 0x80) == 0x80)
- && (flag & DEV_SUPPORT_DVI)))
- {
- /*
- * if digital monitor && enabled reduced blank timing support
- * we may need seperate flag of enable reduced blank timing
- * support for two monitors.
- */
- pPixelClk = &XG47ModeVClockTable2;
-
- for (i = 0; i < XG47ModeVClockTableSize2; i++)
- {
- if (pPixelClk[i].xres == xres
- && pPixelClk[i].yres == yres
- && pPixelClk[i].vref == refRate)
-
- return(pPixelClk[i].vclk);
- }
- }
-
- pPixelClk = &XG47ModeVClockTable;
- for (i = 0; i < XG47ModeVClockTableSize; i++)
- {
- if (pPixelClk[i].xres == xres
- && pPixelClk[i].yres == yres
- && pPixelClk[i].vref == refRate)
-
- return(pPixelClk[i].vclk);
- }
- return 0;
-}
-
-Bool XGICheckModeSupported(XGIPtr pXGI,
- const XGIAskModeRec *pMode0,
- const XGIAskModeRec *pMode1,
- unsigned refRate)
-{
- unsigned crtbw = 0;
- unsigned w2bw = 0;
- Bool flag = TRUE;
-
-
- assert(pMode0 != NULL);
-
- if (pMode1 != NULL) {
- if (pMode1->condition & DEV_SUPPORT_LCD) {
- w2bw = XGIGetVClock_BandWidth(pXGI,
- pXGI->lcdWidth, pXGI->lcdHeight,
- pMode1->pixelSize,
- pMode1->refRate,
- ST_DISP_LCD);
-
- /* Enable interpolation if the panel does not support centering
- * and the native resolution of the LCD, in either dimension, is
- * larger than the resolution selected.
- */
- pXGI->isInterpolation =
- (((pMode1->condition & SUPPORT_PANEL_CENTERING) == 0)
- && ((pXGI->lcdWidth > pMode1->width)
- || (pXGI->lcdHeight > pMode1->height)));
- } else {
- /* DVI on W2 */
- w2bw = XGIGetVClock_BandWidth(pXGI,
- pMode1->width, pMode1->height,
- pMode1->pixelSize,
- pMode1->refRate,
- (pMode0->condition & 0x0F));
- }
-
- /* XG47 W2 can not support above 1920 modes with 32bits color under
- * 250/250 275/275; only don't support 20x15x32 under 300/300.
- */
- flag = (((pXGI->lcdWidth < 1920) && (pMode1->width < 1920))
- || (pMode1->pixelSize < 32));
- }
-
- crtbw = XGIGetVClock_BandWidth(pXGI,
- pMode0->width, pMode0->height,
- pMode0->pixelSize, refRate,
- (pMode0->condition & 0x0F))
- * (pMode0->pixelSize / 8);
-
- if (!flag || ((crtbw == 0) && (w2bw == 0))) {
- return FALSE;
- }
-
- /* If there is sufficient bandwidth to drive both displays, we win.
- */
- if ((crtbw + w2bw) < pXGI->maxBandwidth) {
- return TRUE;
- }
-
- /* Check bandwidth again with interpolation disabled on LCD display. */
- if (((crtbw+w2bw/2) < pXGI->maxBandwidth)
- && (pMode1->condition & DEV_SUPPORT_LCD) && pXGI->isInterpolation) {
- pXGI->isInterpolation = FALSE;
- return TRUE;
- }
-
- return FALSE;
-}
-
-#ifndef NATIVE_MODE_SETTING
-/*
- *
- */
-void XGIGetFlatPanelSize(XGIPtr pXGI)
-{
- CARD8 index_save;
-
- pXGI->pInt10->ax = 0x120C;
- pXGI->pInt10->bx = 0x0014;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
-
- pXGI->lcdRefRate = (CARD16)XG47GetRefreshRateByIndex((CARD8)((pXGI->pInt10->cx>>8) & 0x0F));
- /*pXGI->lcdRefRate |= (pXGI->pInt10->cx & 0x0F00);*/ /* Used for BW Check later. */
-
- pXGI->lcdWidth = pXGI->pInt10->bx;
- pXGI->lcdHeight = pXGI->pInt10->dx;
-
- pXGI->lcdModeNo = XGIConvertResToModeNo(pXGI->lcdWidth, pXGI->lcdHeight);
-
- /* digital(single sync) display */
-
- index_save = INB(XGI_REG_GRX);
- OUTB(XGI_REG_GRX, 0x41);
- switch (INB(XGI_REG_GRX+1) & 0xF0 >> 4)
- {
- case 1:
- pXGI->digitalWidth = MONITOR_X640;
- pXGI->digitalHeight = MONITOR_Y480;
- break;
-
- case 2:
- pXGI->digitalWidth = MONITOR_X800;
- pXGI->digitalHeight = MONITOR_Y600;
- break;
-
- case 3:
- pXGI->digitalWidth = MONITOR_X1024;
- pXGI->digitalHeight = MONITOR_Y768;
- break;
-
- case 5:
- pXGI->digitalWidth = MONITOR_X1280;
- pXGI->digitalHeight = MONITOR_Y1024;
- break;
-
- case 8:
- pXGI->digitalWidth = MONITOR_X1600;
- pXGI->digitalHeight = MONITOR_Y1200;
- break;
- }
-
- pXGI->digitalModeNo = XGIConvertResToModeNo(pXGI->digitalWidth, pXGI->digitalHeight);
- OUTB(XGI_REG_GRX, index_save);
-}
-
-void XGIGetFlatPanelType(XGIPtr pXGI)
-{
- pXGI->lcdType = FPTYPE_TFT;
-}
-
-void XGIBiosGetFramebufferSize(XGIPtr pXGI)
-{
- pXGI->pInt10->ax = 0x1200;
- pXGI->pInt10->bx = 0x0012;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
-
- pXGI->biosFbSize = pXGI->pInt10->ax;
-
- if(pXGI->biosFbSize ==0) pXGI->biosFbSize = 1;
-
- pXGI->biosFbSize *= 0x100000;
-
- pXGI->freeFbSize = pXGI->biosFbSize;
-}
-
-CARD8 XGIConvertResToModeNo(CARD16 width, CARD16 height)
-{
- const XGIModeRec *const pMode = XG47GetModeFromRes(width, height);
-
- return (pMode == NULL) ? 0 : pMode->modeNo;
-}
-
-void XGIWaitVerticalOnCRTC1(XGIPtr pXGI, CARD16 count)
-{
- CARD16 i, loop;
-
- for(loop = 0; loop < count; loop++)
- {
- for(i=0; i < 0xffff; i++)
- if (!((CARD8)INB(0x3DA) & 0x08)) break;
- for(i=0; i < 0xffff; i++)
- if ((CARD8)INB(0x3DA) & 0x08) break;
- }
-}
-
-void XGIWaitVerticalOnCRTC2(XGIPtr pXGI, CARD16 count)
-{
- CARD16 i, loop;
-
- for(loop = 0; loop < count; loop++)
- {
- for(i = 0; i < 0xffff; i++)
- {
- OUTB(XGI_REG_SRX, 0xDC);
- if (!(INB(XGI_REG_SRX+1) & 0x01)) break;
- }
- for(i = 0; i < 0xffff; i++)
- {
- OUTB(XGI_REG_SRX, 0xDC);
- if (INB(XGI_REG_SRX+1) & 0x01) break;
- }
- }
-}
-
-/*
- * from bios dll: refresh.c
- */
-
-/*
- * Check refresh rates supported by specified video mode.
- *
- * modeNo - BIOS mode number (See BIOS spec for definition)
- * spec - Mode Specifier[15:8] (See BIOS spec: Set mode with refresh rate for definition)
- * Return:
- * refresh rates supported by specified video mode (See BIOS spec: Get refresh rate support for definition)
- */
-
-CARD16 XGIGetRefreshRateCapability(XGIPtr pXGI, CARD16 modeNo, CARD16 spec)
-{
- CARD16 refRateCaps = 0;
-
- pXGI->pInt10->ax = 0x1201;
- pXGI->pInt10->bx = (modeNo << 8) + 0x14;
- pXGI->pInt10->cx = spec << 8;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
-
- if ((pXGI->pInt10->ax & 0xFF00) == 0)
- refRateCaps = pXGI->pInt10->bx;
-
- return refRateCaps;
-}
-
-/*
- * Check specified refresh rate index and support capability.
- *
- * Entry : refCaps, refresh rate support capability bits.
- * refIndex, refresh rate index.
- * Return: TRUE/FALSE.
- */
-Bool XGICheckRefreshRateSupport(CARD16 refCaps, CARD8 refIndex)
-{
- refIndex--;
- refCaps >>= refIndex & 0x0F;
- return (Bool)(refCaps & 0x0001);
-}
-
-/*
- * from bios dll: status.c
- */
-
-/*
- * Get current display attributes.
- *
- * Entry : displayDevice - bit3~0: DVI/TV/CRT/LCD
- * Bit
- * [23:16] TV information
- * [15:8] panel type and configuration
- * [7:0] device type
- * Return:
- * current display attribute for specified device
- * (See the definition of the condition member in ModeInformation structure)
- */
-CARD32 XGIGetDisplayAttributes(XGIPtr pXGI, CARD32 displayDevice)
-{
- CARD8 reg0;
-
- /* Check LCD additional information.*/
- if (displayDevice & DEV_SUPPORT_LCD)
- {
- /* Read LCD Type. */
- /* Jong 09/12/2006; XGI_REG_GRX is 0x03CE; 0x42 : TFT Panel Type Control */
- OUTB(XGI_REG_GRX, 0x42);
- reg0 = (CARD8)INB(XGI_REG_GRX + 1);
- if(reg0 & 0x80)
- {
- displayDevice &= ~ZVMX_ATTRIB_DSTN;
- displayDevice |= ZVMX_ATTRIB_TFT;
- }
- else
- {
- displayDevice &= ~ZVMX_ATTRIB_TFT;
- displayDevice |= ZVMX_ATTRIB_DSTN;
- }
-
- /* Centering & Expension */
- /* Jong 09/12/2006; 0x5D : Miscellaneous register */
- OUTB(XGI_REG_GRX, 0x5D);
- reg0 = (CARD8)INB(XGI_REG_GRX + 1);
- if ((reg0 & GRAF_EXPANSION))
- {
- displayDevice &= ~(ZVMX_ATTRIB_V_EXPANSION+ZVMX_ATTRIB_CENTERING);
- displayDevice |= ZVMX_ATTRIB_EXPANSION;
- }
- else if (reg0 & GRAF_V_EXPANSION)
- {
- displayDevice &= ~(ZVMX_ATTRIB_EXPANSION+ZVMX_ATTRIB_CENTERING);
- displayDevice |= ZVMX_ATTRIB_V_EXPANSION;
- }
- else
- {
- displayDevice &= ~(ZVMX_ATTRIB_V_EXPANSION+ZVMX_ATTRIB_EXPANSION);
- displayDevice |= ZVMX_ATTRIB_CENTERING;
- }
- }
-
- /* Check TV additional information. */
- if (displayDevice & DEV_SUPPORT_TV)
- {
- /* Check TV overscan & underscan. */
- OUTB(XGI_REG_CRX, 0xC2);
- reg0 = (CARD8)INB(XGI_REG_CRX + 1);
- if ((reg0 & 0x01))
- {
- displayDevice &= ~ZVMX_ATTRIB_UNDER;
- displayDevice |= ZVMX_ATTRIB_OVER;
- }
- else
- {
- displayDevice &= ~ZVMX_ATTRIB_OVER;
- displayDevice |= ZVMX_ATTRIB_UNDER;
- }
-
- if ((reg0 & 0x10))
- {
- displayDevice |= ZVMX_ATTRIB_NATIVE;
- }
- else
- {
- displayDevice &= ~ZVMX_ATTRIB_NATIVE;
- }
-
-
- /* Check TV PAL & NTSC. */
- OUTB(XGI_REG_CRX, 0xC0);
- reg0 = (CARD8)INB(XGI_REG_CRX+1) & 0xE0;
- if(reg0 == 0x80)
- {
- displayDevice &= ~ZVMX_ATTRIB_NTSC; /*PAL*/
- displayDevice &= ~ZVMX_ATTRIB_NTSCJ;
- displayDevice |= ZVMX_ATTRIB_PAL;
- displayDevice &= ~ZVMX_ATTRIB_PALM;
- }
- else if(reg0 == 0x40)
- {
- displayDevice &= ~ZVMX_ATTRIB_PAL; /*PAL_M*/
- displayDevice &= ~ZVMX_ATTRIB_NTSC;
- displayDevice &= ~ZVMX_ATTRIB_NTSCJ;
- displayDevice |= ZVMX_ATTRIB_PALM;
- }
- else if(reg0 == 0x20)
- {
- displayDevice &= ~ZVMX_ATTRIB_PAL; /*NTSC-J*/
- displayDevice &= ~ZVMX_ATTRIB_NTSC;
- displayDevice |= ZVMX_ATTRIB_NTSCJ;
- displayDevice &= ~ZVMX_ATTRIB_PALM;
- }
- else
- {
- displayDevice &= ~ZVMX_ATTRIB_PAL; /*NTSC*/
- displayDevice |= ZVMX_ATTRIB_NTSC;
- displayDevice &= ~ZVMX_ATTRIB_NTSCJ;
- displayDevice &= ~ZVMX_ATTRIB_PALM;
- }
- }
- return displayDevice;
-}
-
-/*
- * Get current display attributes.
- *
- * Input:
- * no - 0: return display attributes of all devices (TV/LCD/CRT/DVI)
- * (Wu Yun: CRT/DVI currently does not have display attributes)
- * no - 1: return display attributes of LCD device
- *
- * Return:
- * current display attributes
- * (See the definition of the condition member in ModeInformation structure)
- *
- */
-CARD32 XGIGetDisplayStatus(XGIPtr pXGI, CARD8 no)
-{
- CARD8 reg0;
- CARD32 displayDevice;
-
- if(no)
- {
- displayDevice = DEV_SUPPORT_LCD;
- displayDevice |= XGIGetDisplayAttributes(pXGI, displayDevice);
- }
- else
- {
- /* Jong 09/12/2006; collect information of all devices */
- /* Call XGIGetDisplayAttributes() to fill device attributes defined in xgi_bios.h */
- displayDevice = 0x0000000F;
- displayDevice |= XGIGetDisplayAttributes(pXGI, displayDevice);
-
- displayDevice &= 0x00FFFF00;
-
- /* Jong 09/14/2006; Working status register of device; CRT:0x02; DVI:0x08 */
- OUTB(XGI_REG_GRX, 0x5B);
- reg0 = INB(XGI_REG_GRX+1);
-
- displayDevice |= (CARD32)(reg0 & 0x0F);
-
- /* Jong 09/14/2006; why? shitft to reserved bis */
- displayDevice |= (CARD32)(reg0 & 0xF0) << 20;
-
- /* Jong 09/14/2006; check if MHS (Multiple head support) */
- OUTB(XGI_REG_GRX, 0x36);
- if(INB(XGI_REG_GRX+1) & 0x02)
- {
- /* Jong 09/14/2006; Extended/Standard set mode method*/
- displayDevice |= 0x80000000;
- }
- }
- return displayDevice;
-}
-
-/*
- * Get support device status.
- *
- * Entry : NONE.
- * Return: BIOS support display status.
- *
- * Hardware & BIOS support status
- * 1:Support 0:Non-support
- * DEVICE TV LCD DEVICE
- * |--------'--------|--------'--------|
- * |||||||| |||||||| |||||||| ||||||||
- * |||||||| |||||||| |||||||| |||||||'- LCD.
- * |||||||| |||||||| |||||||| ||||||'-- CRT.
- * |||||||| |||||||| |||||||| |||||'--- TV.
- * |||||||| |||||||| |||||||| ||||'---- DVI.
- * |||||||| |||||||| |||||||| |||'-----
- * |||||||| |||||||| |||||||| ||'------
- * |||||||| |||||||| |||||||| |'-------
- * |||||||| |||||||| |||||||| '--------
- * |||||||| |||||||| |||||||'----------
- * |||||||| |||||||| ||||||'-----------
- * |||||||| |||||||| |||||'------------ Expansion.
- * |||||||| |||||||| ||||'------------- Centering.
- * |||||||| |||||||| ''''--------------
- * |||||||| |||||||'------------------- NTSC.
- * |||||||| ||||||'-------------------- PAL.
- * |||||||| |||||'--------------------- underscan.
- * |||||||| ||||'---------------------- overscan.
- * |||||||| |||`----------------------- native mode.
- * |||||||| ||`------------------------ TV chip is not available.
- * |||||||| |`------------------------- Support PAL-M.
- * |||||||| `-------------------------- Support NTSC-J.
- * |||||||'---------------------------- LCD.
- * ||||||'----------------------------- CRT.
- * |||||'------------------------------ TV.
- * ||||`------------------------------- DVI.
- * ````-------------------------------- reserved.
- *
- * Current device(Primary/Secondary) status use same definition
- */
-void XGIGetSetChipSupportDevice(XGIPtr pXGI, Bool reset_to_original)
-{
- /* Jong 09/12/2006; XGI_REG_CRX is 0x03D4 */
- /* 0xC2 : TV Status flag 2 */
- OUTB(XGI_REG_CRX, 0xC2);
-
- if ((INB(XGI_REG_CRX+1)) & 0x40) /* Jong 09/12/2006; Yes */
- pXGI->biosDevSupport &= ~SUPPORT_CURRENT_NO_TV;
- else
- pXGI->biosDevSupport |= SUPPORT_CURRENT_NO_TV;
-
- if (reset_to_original) {
- /* Reset orignal support. */
- pXGI->biosDevSupport = pXGI->biosOrgDevSupport;
- }
-
- return;
-}
-
-/*
- * from bios dll: modeset.c
- */
-CARD16 XGIGetColorIndex(CARD16 depth)
-{
- switch(depth)
- {
- case 8:
- return 0x02;
- case 16:
- return 0x06;
- case 32:
- return 0x08;
- default:
- return 0;
- }
-}
-
-/*
- * from bios dll: biosdata.c
- */
-Bool XGIReadBiosData(XGIPtr pXGI, CARD8 *array)
-{
- pXGI->pInt10->ax = 0x1290;
- pXGI->pInt10->bx = 0x0014;
- pXGI->pInt10->dx = 0;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
-
- /* If success, ah = 0 */
- if ((pXGI->pInt10->ax >> 8) || (pXGI->biosBase != NULL)) {
- return FALSE;
- }
-
- memcpy(array, (pXGI->biosBase + pXGI->pInt10->di), pXGI->pInt10->cx);
- return TRUE;
-}
-
-/*
- * from bios dll: modeset.c
- */
-void XGICloseSecondaryView(XGIPtr pXGI)
-{
- CARD16 i;
-
- vAcquireRegIOProtect(pXGI);
-
- /* clear flag */
- /* Jong 09/20/2006; Working status register 1; 0xF0 is for MV */
- if (IN3CFB(0x5B) & 0xF0)
- {
- if (IN3CFB(0x5B) & (DEV_SUPPORT_DVI << 4))
- {
- if (!(IN3X5B(SOFT_PAD59_INDEX) & 0x02))
- {
- XG47CloseAllDevice(pXGI, DEV_SUPPORT_DVI);
-
- OUT3X5B(SOFT_PAD59_INDEX, IN3X5B(SOFT_PAD59_INDEX) & ~0x02);
- }
-
- /* driving strength */
- OUTB(XGI_REG_GRX, 0x98);
- OUTB(XGI_REG_GRX+1, 0x55);
- OUTB(XGI_REG_GRX, 0x7B);
- OUTB(XGI_REG_GRX+1, 0x55);
-
- /* disable internal TMDS */
- OUTB(XGI_REG_GRX, 0x3d);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) & ~0x01);
- /*OUTB(XGI_REG_GRX, 0x43);*/
- /*OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) & ~0x08);*/
- OUTB(XGI_REG_GRX, 0x46);
- OUTB(XGI_REG_GRX+1, (INB(XGI_REG_GRX+1) & ~0x38) | 0x08);
-
- /* TV VSync input buffer */
- OUTB(XGI_REG_CRX, 0xD6);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) | 0x10);
-
- OUTB(XGI_REG_GRX, 0x2A);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) & ~0x40);
-
- /* Turn back VCLK2 */
- OUTB(XGI_REG_SRX,0x1A);
- OUTB(XGI_REG_SRX+1, vclk18);
- OUTB(XGI_REG_SRX,0x1B);
- OUTB(XGI_REG_SRX+1, vclk19);
- OUTB(XGI_REG_SRX,0x28);
- OUTB(XGI_REG_SRX+1, (INB(XGI_REG_SRX+1) & ~0x70) | vclk28);
-
- }
-
- if (IN3CFB(0x5B) & (DEV_SUPPORT_TV << 4))
- {
- if (!(IN3X5B(SOFT_PAD59_INDEX) & 0x02))
- {
- XG47CloseAllDevice(pXGI, DEV_SUPPORT_TV);
-
- OUTB(XGI_REG_CRX, SOFT_PAD59_INDEX);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) & ~0x02);
- }
- OUTB(XGI_REG_CRX,0xD6);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) & ~0x04);
- }
-
- if (IN3CFB(0x5B) & (DEV_SUPPORT_CRT << 4))
- {
- if (!(IN3X5B(SOFT_PAD59_INDEX) & 0x02))
- {
- XG47CloseAllDevice(pXGI, DEV_SUPPORT_CRT);
-
- OUTB(XGI_REG_CRX, SOFT_PAD59_INDEX);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) & ~0x02);
- }
- OUTB(XGI_REG_GRX,0x2C);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) & ~0x40);
-
- /* Turn back VCLK2 */
- OUTB(XGI_REG_SRX,0x1a);
- OUTB(XGI_REG_SRX+1, vclk18);
- OUTB(XGI_REG_SRX,0x1b);
- OUTB(XGI_REG_SRX+1, vclk19);
- OUTB(XGI_REG_SRX,0x28);
- OUTB(XGI_REG_SRX+1, INB(XGI_REG_SRX+1) & ~0x70 | vclk28);
- }
-
- if (IN3CFB(0x5B) & (DEV_SUPPORT_LCD << 4))
- {
- if (!(IN3X5B(SOFT_PAD59_INDEX) & 0x02))
- {
- XG47CloseAllDevice(pXGI, DEV_SUPPORT_LCD);
-
- OUTB(XGI_REG_CRX, SOFT_PAD59_INDEX);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) & ~0x02);
- }
- OUTB(XGI_REG_SRX,0xBE);
- OUTB(XGI_REG_SRX+1, INB(XGI_REG_SRX+1) & ~0x08);
-
- /* Change LCD DE delay back for CRTC1 */
- OUTB(XGI_REG_GRX, 0x45);
- OUTB((XGI_REG_GRX+1), (INB(XGI_REG_GRX+1) & ~0x07) | (GR3CE_45_SingleView & 0x07));
- }
-
- /* Enable dithering */
- OUTB(XGI_REG_GRX, 0x42);
- OUTB(XGI_REG_GRX+1, INB(XGI_REG_GRX+1) | 0x08);
-
- OUTB(XGI_REG_SRX, 0xCE);
- OUTB(XGI_REG_SRX+1, INB(XGI_REG_SRX+1) & ~0x02);
-
- /* Disable dual view */
- OUTB(XGI_REG_SRX, 0xDC);
- for(i=0; i<0xFFFF; i++)
- {
- if ((INB(XGI_REG_SRX+1) & 0x01))
- break;
- }
- OUTB(XGI_REG_GRX, 0x81);
- OUTB(XGI_REG_GRX+1, (int)INB(XGI_REG_GRX+1) & ~0x01);
-
- /*
- * Please keep the order of below 2 I/O
- *start to turn off video engine pixel clock
- */
- OUTB(XGI_REG_CRX,0xBE);
- OUTB(XGI_REG_CRX+1, INB(XGI_REG_CRX+1) & ~0x04);
-
- /* turn off video engine memory clock */
- OUTB(XGI_REG_GRX,0xDA);
- OUTB(XGI_REG_GRX+1, (int)INB(XGI_REG_GRX+1) | 0x10);
- /* end to turn off video engine pixel clock */
-
- /* Turn off video engine clock for w2 */
- OUTB(XGI_REG_SRX,0x52);
- OUTB(XGI_REG_SRX+1, INB(XGI_REG_SRX+1) & ~0x40);
-
- /* clear 2nd display */
- OUTB(XGI_REG_GRX, 0x5B);
- OUTB(XGI_REG_GRX+1, (INB(XGI_REG_GRX+1) & 0x0f));
-
- OUTB(0x24c2, (CARD16)INB(0x24c2) & ~0x20);
- OUTB(0x24a9, (CARD16)INB(0x24a9) & ~0x0a);
- OUTB(0x24a8, (CARD16)INB(0x24a8) & ~0x07);
- }
-
- /*
- * Zdu, 9/1/2000, Seems TSB machine did not wait LCD panel to be stabel to do
- * further operation leading a hang when undocking switching device, now we added
- * this wait and hang up disappeared.
- */
- {
- while(INB(0x3DA) & 0x8);
- for(i=0; i < 0xffff; i++)
- {
- if(!(INB(0x3DA) & 0x8)) break;
- }
- while(INB(0x3DA) & 0x8);
- for(i=0; i < 0xffff; i++)
- {
- if(!(INB(0x3DA) & 0x8)) break;
- }
- }
-}
-#endif
-
-/*
- * from bios dll: initial.c
- */
-unsigned XGIBiosCalculateClock(XGIPtr pXGI, unsigned low, unsigned high)
-{
- const unsigned N = IN3C5B(low);
- const unsigned tmp = IN3C5B(high);
- const unsigned K = (tmp & 0xC0) >> 6;
- const unsigned M = (tmp & 0x3F);
-
- return ((1431818 * (N + 8)) / ((M + 1) << K)) / 100000;
-}
-
-#ifndef NATIVE_MODE_SETTING
-/*
- * below is bios call
- */
-static Bool XGIBiosDllPunt(XGIPtr pXGI, unsigned long cmd,
- const unsigned long *pInBuf)
-{
- ScrnInfoPtr pScrn = pXGI->pScrn;
-
- if (pXGI->pBiosDll->biosSpecialFeature == NULL) {
- return FALSE;
- }
-
- return (*pXGI->pBiosDll->biosSpecialFeature)(pScrn, cmd, pInBuf);
-}
-#endif
-
-/*
- * Init bios dll
- */
-Bool XGIBiosDllInit(ScrnInfoPtr pScrn)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- CARD8 idxbak;
-
- (void) memset(pXGI->pBiosDll, 0, sizeof(*pXGI->pBiosDll));
-
- switch (pXGI->chipset) {
- case XG47:
-#ifndef NATIVE_MODE_SETTING
- pXGI->pBiosDll->biosValidMode = XG47BiosValidMode;
- pXGI->pBiosDll->biosModeInit = XG47BiosModeInit;
- pXGI->pBiosDll->biosSpecialFeature = XG47BiosSpecialFeature;
- pXGI->pBiosDll->biosValueInit = XG47BiosValueInit;
-#endif
-
- pXGI->lcdRefRate = 0x003C; /* 60Hz */
-
- pXGI->lcdType = FPTYPE_UNKNOWN;
- pXGI->lcdWidth = FPSIZE_UNKNOWN;
- pXGI->lcdHeight = FPSIZE_UNKNOWN;
-
- pXGI->digitalWidth = FPSIZE_UNKNOWN;
- pXGI->digitalHeight = FPSIZE_UNKNOWN;
-
- pXGI->biosDllOperationFlag = 0;
-
- XG47GetFramebufferSize(pXGI);
- break;
- default:
-#ifndef NATIVE_MODE_SETTING
- XGIBiosGetFramebufferSize(pXGI);
-#endif
- break;
- }
-
-
- /* check BIOS capability */
- pXGI->biosCapability = 0;
-
-#ifndef NATIVE_MODE_SETTING
- pXGI->pInt10->ax = 0x1290;
- pXGI->pInt10->bx = 0x0014;
- pXGI->pInt10->dx = 0;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
-
- pXGI->biosCapability = ((CARD32)pXGI->pInt10->bx << 16) | pXGI->pInt10->dx;
-
-
- pXGI->pInt10->ax = 0x1280;
- pXGI->pInt10->bx = 0x0014;
- pXGI->pInt10->num = 0x10;
- xf86ExecX86int10(pXGI->pInt10);
-
- pXGI->pInt10->bx &= 0x7FFF; /* Clear Master/Slave mode flag. */
- switch(pXGI->pInt10->bx)
- {
- case 0x0003: /* TV_TVX2 */
- pXGI->pBiosDll->dtvType = DTV_TVEXPRESS_XP4E; /* TV_TVX internal */
- pXGI->dtvInfo = TV_TVXI;
-
- XGI47BiosAttachDTV(pXGI);
- break;
- default:
- pXGI->dtvInfo = 0xFFFFFFFF;
- break;
- }
-
-
- /*
- * Get display device
- */
- XGIGetFlatPanelType(pXGI);
- XGIGetFlatPanelSize(pXGI);
-
- XGIBiosValueInit(pXGI);
-#else
- pXGI->dtvInfo = 0xFFFFFFFF;
-#endif
-
- return TRUE;
-}
-
-
-#ifndef NATIVE_MODE_SETTING
-/* Jong 1109/2006; pMode[]->condition indicate which device needs to be open */
-Bool XGIBiosModeInit(ScrnInfoPtr pScrn, XGIAskModePtr pMode, Bool dualView)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- unsigned long devices;
- Bool success;
- ModeStatus status;
-
-
- /* Ask BIOS if the mode is supported */
- status = (*pXGI->pBiosDll->biosValidMode)(pScrn, pMode, dualView);
- if (status != MODE_OK) {
- xf86DrvMsg(pXGI->pScrn->scrnIndex, X_ERROR,
- "%s:%u: mode failed %d\n", __func__, __LINE__, status);
- return FALSE;
- }
-
- /* close all device before set mode */
- devices = 0xF;
- XGIBiosCloseAllDevice(pXGI, &devices);
-
- if (!dualView) {
- /* Single View mode. */
- success = (*pXGI->pBiosDll->biosModeInit)(pScrn, pMode, 0);
-
- /* Enable device pMode[0].condition: 0x02:CRT; 0x08:DVI
- */
- devices = pMode[0].condition;
- } else {
- /* argument 3 : 1 means first view of dual view mode, 2 means
- * second view of dual view mode.
- */
- success = (*pXGI->pBiosDll->biosModeInit)(pScrn, pMode,
- (pXGI->FirstView) ? 1 : 2);
- }
-
- if (!success) {
- return FALSE;
- }
-
- XGIBiosOpenAllDevice(pXGI, &devices);
- return TRUE;
-}
-
-/*
- * Used in Win2K driver for resuming from Hibernation/Standby,
- */
-unsigned long XGIBiosValueInit(XGIPtr pXGI)
-{
- ScrnInfoPtr pScrn = pXGI->pScrn;
- if (pXGI->pBiosDll->biosValueInit)
- (pXGI->pBiosDll->biosValueInit)(pScrn);
- return TRUE;
-}
-
-Bool XGIBiosCloseAllDevice(XGIPtr pXGI, unsigned long* pDevices)
-{
- return XGIBiosDllPunt(pXGI, CLOSE_ALL_DEVICE, pDevices);
-}
-
-Bool XGIBiosOpenAllDevice(XGIPtr pXGI, unsigned long* pDevices)
-{
- return XGIBiosDllPunt(pXGI, OPEN_ALL_DEVICE, pDevices);
-}
-#endif
diff --git a/src/xgi_bios.h b/src/xgi_bios.h
index f935a17..91f2de2 100644
--- a/src/xgi_bios.h
+++ b/src/xgi_bios.h
@@ -372,56 +372,5 @@ typedef struct {
#define NEED_3CF33_ON_DELAY 0x00000001
#define DEVICE_CLOSED 0x00000002
-/* xgi_bios.c */
-extern CARD16 XGIGetVClock_BandWidth(XGIPtr pXGI,
- CARD16 xres,
- CARD16 yres,
- CARD16 depth,
- CARD16 refRate,
- CARD8 flag);
-
-extern Bool XGICheckModeSupported(XGIPtr pXGI, const XGIAskModeRec *pMode0,
- const XGIAskModeRec *pMode1, unsigned refRate);
-
-extern void XGIGetFlatPanelSize(XGIPtr pXGI);
-extern void XGIGetFlatPanelType(XGIPtr pXGI);
-extern CARD8 XGIConvertResToModeNo(CARD16 width,
- CARD16 height);
-
-extern void XGIWaitVerticalOnCRTC1(XGIPtr pXGI, CARD16 count);
-extern void XGIWaitVerticalOnCRTC2(XGIPtr pXGI, CARD16 count);
-
-extern CARD16 XGIGetRefreshRateCapability(XGIPtr pXGI,
- CARD16 modeNo,
- CARD16 spec);
-
-extern Bool XGICheckRefreshRateSupport(CARD16 refCaps,
- CARD8 refIndex);
-
-extern CARD32 XGIGetDisplayAttributes(XGIPtr pXGI,
- CARD32 displayDevice);
-
-extern CARD32 XGIGetDisplayStatus(XGIPtr pXGI, CARD8 wno);
-extern void XGIGetSetChipSupportDevice(XGIPtr pXGI, Bool reset_to_original);
-extern CARD16 XGIGetColorIndex(CARD16 depth);
-
-extern Bool XGIReadBiosData(XGIPtr pXGI, CARD8 *array);
-
-extern unsigned XGIBiosCalculateClock(XGIPtr pXGI,unsigned low,
- unsigned high);
-
-extern Bool XGIBiosDllInit(ScrnInfoPtr pScrn);
-
-extern Bool XGIBiosModeInit(ScrnInfoPtr pScrn, XGIAskModePtr pMode,
- Bool dualView);
-
-
-extern unsigned long XGIBiosValueInit(XGIPtr pXGI);
-extern Bool XGIBiosCloseSecondView(XGIPtr pXGI);
-extern Bool XGIBiosCloseAllDevice(XGIPtr pXGI,
- unsigned long* pDevices);
-extern Bool XGIBiosOpenAllDevice(XGIPtr pXGI,
- unsigned long* pDevices);
-
#endif
diff --git a/src/xgi_driver.c b/src/xgi_driver.c
index 3d7cbb5..9292ef8 100644
--- a/src/xgi_driver.c
+++ b/src/xgi_driver.c
@@ -636,9 +636,6 @@ static XGIPtr XGIGetRec(ScrnInfoPtr pScrn)
if (pScrn->driverPrivate == NULL) {
XGIPtr pXGI = xnfcalloc(sizeof(XGIRec), 1);
- /* Initialise it */
- pXGI->pBiosDll = xnfcalloc(sizeof(XGIBiosDllRec), 1);
-
pScrn->driverPrivate = pXGI;
pXGI->pScrn = pScrn;
}
@@ -1027,13 +1024,6 @@ static Bool XGIPreInitInt10(ScrnInfoPtr pScrn)
xf86LoaderReqSymLists(vbeSymbols, int10Symbols, NULL);
-#ifndef NATIVE_MODE_SETTING
- /* int10 is broken on some Alphas */
- pXGI->pVbe = VBEInit(NULL, pXGI->pEnt->index);
- pXGI->pInt10 = pXGI->pVbe->pInt10;
-#endif /* NATIVE_MODE_SETTING */
-
-
#if DBG_FLOW
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "-- Leave %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
#endif
@@ -1160,30 +1150,6 @@ static Bool XGIPreInitGamma(ScrnInfoPtr pScrn)
}
-static Bool XGIPreInitLcdSize(ScrnInfoPtr pScrn)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
-
- CARD16 lcdWidth = 0;
- CARD16 lcdHeight = 0;
-
- pXGI->lcdActive = FALSE;
- pXGI->lcdWidth = lcdWidth;
- pXGI->lcdHeight = lcdHeight;
-
- /* get LCD size if display on LCD */
- if ((pXGI->displayDevice & ST_DISP_LCD)
- || (IN3CFB(0x5B) & ST_DISP_LCD))
- {
- XGIGetLcdSize(pScrn, &lcdWidth, &lcdHeight);
- pXGI->lcdActive = TRUE;
- pXGI->lcdWidth = lcdWidth;
- pXGI->lcdHeight = lcdHeight;
- }
-
- return TRUE;
-}
-
/* This is called by XGIPreInit to validate modes
* and compute parameters for all of the valid modes.
*/
@@ -1399,6 +1365,8 @@ static Bool XGIPreInitMemory(ScrnInfoPtr pScrn)
MessageType from;
+ XG47GetFramebufferSize(pXGI);
+
/* Save offset of frame buffer for setting destination and source base in
* acceleration functions.
*
@@ -1450,10 +1418,6 @@ static Bool XGIPreInitMemory(ScrnInfoPtr pScrn)
xf86DrvMsg(pScrn->scrnIndex, from, "VideoRAM: %u KByte\n",
pScrn->videoRam);
- /* memory clock */
- pXGI->memClock = XGICalculateMemoryClock(pScrn);
- xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Memory Clock is %3.2f MHz\n",
- pXGI->memClock);
#if DBG_FLOW
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "-- Leave %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
@@ -1733,7 +1697,6 @@ Bool XGIPreInit(ScrnInfoPtr pScrn, int flags)
}
if (!XGIPreInitInt10(pScrn)) goto fail;
- if (!XGIBiosDllInit(pScrn)) goto fail;
if (!XGIPreInitMemory(pScrn)) goto fail;
/* pScrn->videoRam is determined by XGIPreInitMemory() */
@@ -1741,8 +1704,6 @@ Bool XGIPreInit(ScrnInfoPtr pScrn, int flags)
if (!XGIMapFB(pScrn)) goto fail;
- if (!XGIPreInitLcdSize(pScrn)) goto fail;
-
XGIPreInitDDC(pScrn);
if (!XGIPreInitModes(pScrn)) goto fail;
@@ -1871,14 +1832,7 @@ static void XGISave(ScrnInfoPtr pScrn)
return;
}
-#ifndef NATIVE_MODE_SETTING
- vgaHWSave(pScrn, pVgaReg, VGA_SR_MODE | VGA_SR_CMAP |
- (IsPrimaryCard ? VGA_SR_FONTS : 0));
-
- XGIModeSave(pScrn, pXGIReg);
-#else
xg47_mode_save(pScrn, pVgaReg, pXGIReg);
-#endif
#if DBG_FLOW
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "-- Leave %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
@@ -1899,23 +1853,9 @@ static void XGIRestore(ScrnInfoPtr pScrn)
{
XGIPtr pXGI = XGIPTR(pScrn);
XGIRegPtr pXGIReg = &pXGI->savedReg;
-
-#if DBG_FLOW
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "++ Enter %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
-#endif
-
-#ifndef NATIVE_MODE_SETTING
- XGIModeRestore(pScrn, pXGIReg);
-#else
vgaRegPtr pVgaReg = &VGAHWPTR(pScrn)->SavedReg;
xg47_mode_restore(pScrn, pVgaReg, pXGIReg);
-#endif
-
-#if DBG_FLOW
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "-- Leave %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
-#endif
-
}
Bool XGIFBManagerInit(ScreenPtr pScreen)
@@ -2633,14 +2573,6 @@ static int XGIValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int fl
int ret;
-#ifndef NATIVE_MODE_SETTING
- if (!pXGI->pInt10) {
- xf86DrvMsg(scrnIndex, X_ERROR,
- "have not loaded int10 module successfully!\n");
- return MODE_ERROR;
- }
-#endif
-
ret = XG47ValidMode(pScrn, mode);
/* This driver only uses the programmable clock mode.
@@ -2666,18 +2598,7 @@ static Bool XGIModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "++ Enter %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
#endif
- switch(pXGI->chipset)
- {
- case XG47:
-#ifndef NATIVE_MODE_SETTING
- ret = XG47ModeInit(pScrn, mode);
-#else
- ret = XG47_NativeModeInit(pScrn, mode);
-#endif
- break;
- default:
- break;
- }
+ ret = XG47_NativeModeInit(pScrn, mode);
#ifdef XGI_DUMP
XGIDumpRegisterValue(pScrn);
diff --git a/src/xgi_misc.c b/src/xgi_misc.c
index bed66ca..f9a5e3c 100644
--- a/src/xgi_misc.c
+++ b/src/xgi_misc.c
@@ -36,35 +36,6 @@
#include "xgi_debug.h"
-void XGIGetLcdSize(ScrnInfoPtr pScrn, CARD16 *lcdWidth, CARD16 *lcdHeight)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
-
- switch(pXGI->chipset)
- {
- case XG47:
- default:
- break;
- }
-}
-
-float XGICalculateMemoryClock(ScrnInfoPtr pScrn)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
- float freq = 0.0;
-
- switch (pXGI->chipset)
- {
- case XG47:
- freq = XGIBiosCalculateClock(pXGI, 0x1E, 0x1F);
- break;
- default:
- break;
- }
-
- return (freq);
-}
-
#if 0
void XGIDumpRegisterValue(ScrnInfoPtr pScrn)
{
diff --git a/src/xgi_misc.h b/src/xgi_misc.h
index 1b27e0b..bbd4806 100644
--- a/src/xgi_misc.h
+++ b/src/xgi_misc.h
@@ -29,8 +29,6 @@
#define _XGI_MISC_H_
/* xgi_misc.c */
-extern void XGIGetLcdSize(ScrnInfoPtr pScrn, CARD16 *lcdWidth, CARD16 *lcdHeight);
-extern float XGICalculateMemoryClock(ScrnInfoPtr pScrn);
extern void XGIDumpRegisterValue(ScrnInfoPtr pScrn);
/* Jong 07/12/2006 */
diff --git a/src/xgi_mode.c b/src/xgi_mode.c
index 689c807..f220e95 100644
--- a/src/xgi_mode.c
+++ b/src/xgi_mode.c
@@ -36,36 +36,6 @@
#include "xgi_mode.h"
#include "xg47_mode.h"
-#ifndef NATIVE_MODE_SETTING
-void XGIModeSave(ScrnInfoPtr pScrn, XGIRegPtr pXGIReg)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
-
- switch (pXGI->chipset)
- {
- case XG47:
- XG47ModeSave(pScrn, pXGIReg);
- break;
- default:
- break;
- }
-}
-
-void XGIModeRestore(ScrnInfoPtr pScrn, XGIRegPtr pXGIReg)
-{
- XGIPtr pXGI = XGIPTR(pScrn);
-
- switch (pXGI->chipset)
- {
- case XG47:
- XG47ModeRestore(pScrn, pXGIReg);
- break;
- default:
- break;
- }
-}
-#endif
-
void XGILoadPalette(ScrnInfoPtr pScrn, int numColors, int *indicies,
LOCO *colors, VisualPtr pVisual)
{