summaryrefslogtreecommitdiff
path: root/src/CInt10.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/CInt10.c')
-rw-r--r--src/CInt10.c1449
1 files changed, 549 insertions, 900 deletions
diff --git a/src/CInt10.c b/src/CInt10.c
index 1510ce8..3737bd0 100644
--- a/src/CInt10.c
+++ b/src/CInt10.c
@@ -18,6 +18,7 @@
* <jason.lin@rdc.com.tw>
*/
+
#include <string.h>
#ifndef XFree86Module
@@ -31,15 +32,15 @@
#include "CInt10FunProto.h"
#include "CInt10Tbl.h"
+#define I2C_ERROR 0
+#define I2C_OK 1
+#define I2CWriteCMD 0
+#define I2CReadCMD 1
+
-/* Global for related IO address */
USHORT Relocate_IOAddress;
-/*--------------------------------------------------------------------------
-;
-; IO port function replace
-;
-;---------------------------------------------------------------------------*/
+
__inline void OutPort(UCHAR Index,UCHAR Value)
{
@@ -57,34 +58,233 @@ __inline UCHAR InPort(UCHAR Index)
return bInVal;
}
-/*----------------------------------------------------------------------------
-;
-; SetVBERerurnStatus
-;
-; in:
-; VBEReturnStatus =
-; VBEFunctionCallSuccessful 0x004F
-; VBEFunctionCallFail 0x014F
-; VBEFunctionCallNotSupported 0x024F
-; VBEFunctionCallInvalid 0x034F
-; out:
-; pCBiosArguments->Eax
-;---------------------------------------------------------------------------*/
+void I2CWriteClock(UCHAR I2CPort, UCHAR data)
+{
+ UCHAR i;
+ UCHAR ujCRB7, jtemp;
+
+ for (i=0;i<0x1000; i++)
+ {
+ ujCRB7 = ((data & 0x01) ? 0:1);
+ SetCRReg(I2CPort, ujCRB7, 0xFE);
+
+ jtemp = GetCRReg(I2CPort) & 0x01;
+
+ if (ujCRB7 == jtemp) break;
+ }
+}
+
+void I2CDelay(UCHAR I2CPort)
+{
+ ULONG i;
+ UCHAR jtemp;
+
+
+
+
+ for (i=0;i<100;i++)
+ {
+
+ jtemp = inb(0x80);
+ }
+}
+
+void I2CWriteData(UCHAR I2CPort, UCHAR data)
+{
+ UCHAR ujCRB7, jtemp;
+ ULONG i;
+
+ for (i=0;i<0x1000; i++)
+ {
+ ujCRB7 = ((data & 0x01) ? 0:1) << 2;
+ SetCRReg(I2CPort, ujCRB7, 0xFB);
+
+ jtemp = GetCRReg(I2CPort) & 0x04;
+
+ if (ujCRB7 == jtemp) break;
+ }
+}
+
+void I2CStart(UCHAR I2CPort)
+{
+ I2CWriteClock(I2CPort, 0x00);
+ I2CDelay(I2CPort);
+ I2CWriteData(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+ I2CWriteClock(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+ I2CWriteData(I2CPort, 0x00);
+ I2CDelay(I2CPort);
+ I2CWriteClock(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+}
+
+void SendI2CDataByte(UCHAR I2CPort, UCHAR Data)
+{
+ UCHAR jData;
+ UCHAR i;
+
+ for (i=7;i>=0;i--)
+ {
+ I2CWriteClock(I2CPort, 0x00);
+ I2CDelay(I2CPort);
+
+ jData = ((Data >> i) & 0x01) ? 1:0;
+ I2CWriteData(I2CPort, jData);
+ I2CDelay(I2CPort);
+
+ I2CWriteClock(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+ }
+}
+
+bool CheckACK(UCHAR I2CPort)
+{
+ UCHAR Data;
+
+ I2CWriteClock(I2CPort, 0x00);
+ I2CDelay(I2CPort);
+ I2CWriteData(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+ I2CWriteClock(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+ Data = (GetCRReg(I2CPort) & 0x20) >> 5;
+
+
+ return ((Data & 0x01) ? 0:1);
+}
+
+UCHAR ReceiveI2CDataByte(UCHAR I2CPort, UCHAR I2CSlave)
+{
+
+ UCHAR jData=0, jTempData;
+ UCHAR i, j;
+
+ for (i=7;i>=0;i--)
+ {
+ I2CWriteClock(I2CPort, 0x00);
+ I2CDelay(I2CPort);
+
+ I2CWriteData(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+
+ I2CWriteClock(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+
+ for (j=0; j<0x1000; j++)
+ {
+ if (((GetCRReg(I2CPort) & 0x10) >> 4)) break;
+ }
+
+ jTempData = (GetCRReg(I2CPort) & 0x20) >> 5;
+ jData |= ((jTempData & 0x01) << i);
+
+ I2CWriteClock(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+ }
+
+ return (jData);
+}
+
+void SendNACK(UCHAR I2CPort)
+{
+ I2CWriteClock(I2CPort, 0x00);
+ I2CDelay(I2CPort);
+ I2CWriteData(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+ I2CWriteClock(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+}
+
+void I2CStop(UCHAR I2CPort)
+{
+ I2CWriteClock(I2CPort, 0x00);
+ I2CDelay(I2CPort);
+ I2CWriteData(I2CPort, 0x00);
+ I2CDelay(I2CPort);
+ I2CWriteClock(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+ I2CWriteData(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+ I2CWriteClock(I2CPort, 0x01);
+ I2CDelay(I2CPort);
+}
+
+
+UCHAR ReadI2C(UCHAR I2CPort, UCHAR I2CSlave, UCHAR RegIdx, UCHAR* RegData)
+{
+ I2CStart(I2CPort);
+
+
+ SendI2CDataByte(I2CPort, I2CSlave|I2CWriteCMD);
+ if (!CheckACK(I2CPort))
+ {
+ return I2C_ERROR;
+ }
+
+
+ SendI2CDataByte(I2CPort, RegIdx);
+ if (!CheckACK(I2CPort))
+ {
+ return I2C_ERROR;
+ }
+
+ I2CStart(I2CPort);
+
+
+ SendI2CDataByte(I2CPort, I2CSlave|I2CReadCMD);
+ if (!CheckACK(I2CPort))
+ {
+ return I2C_ERROR;
+ }
+
+
+ *RegData = ReceiveI2CDataByte(I2CPort, I2CSlave);
+ SendNACK(I2CPort);
+
+ I2CStop(I2CPort);
+
+ return I2C_OK;
+}
+
+UCHAR WriteI2C(UCHAR I2CPort, UCHAR I2CSlave, UCHAR RegIdx, UCHAR RegData)
+{
+ I2CStart(I2CPort);
+
+
+ SendI2CDataByte(I2CPort, I2CSlave|I2CWriteCMD);
+ if (!CheckACK(I2CPort))
+ {
+ return I2C_ERROR;
+ }
+
+
+ SendI2CDataByte(I2CPort, RegIdx);
+ if (!CheckACK(I2CPort))
+ {
+ return I2C_ERROR;
+ }
+
+
+ SendI2CDataByte(I2CPort, RegData);
+ if (!CheckACK(I2CPort))
+ {
+ return I2C_ERROR;
+ }
+
+ SendNACK(I2CPort);
+
+ I2CStop(I2CPort);
+ return I2C_OK;
+}
+
+
void SetVBERerurnStatus(USHORT VBEReturnStatus, CBIOS_ARGUMENTS *pCBiosArguments)
{
pCBiosArguments->reg.x.AX = VBEReturnStatus;
}
-/*----------------------------------------------------------------------------
-;
-; SetTimingRegs
-;
-; in:
-; bDisplayPath = display path
-; pMODE_INFO = pointer to MODE_INFO
-; pRRATE_TABLE = pointer to RRATE_TABLE
-;
-;---------------------------------------------------------------------------*/
+
void SetTimingRegs(UCHAR ucDisplayPath, MODE_INFO *pModeInfo, RRATE_TABLE *pRRateTable)
{
USHORT usHBorder = 0, usVBorder = 0;
@@ -162,21 +362,13 @@ void SetTimingRegs(UCHAR ucDisplayPath, MODE_INFO *pModeInfo, RRATE_TABLE *pRRat
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Exit SetTimingRegs()==\n");
}
-/*-------------------------------------------------------------------
-;
-; SetHTotal()
-;
-; in:
-; DisplayPath = display path
-; Value = H total in pixel
-;
-;------------------------------------------------------------------*/
+
void SetHTotal(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 40 pixels for setting HW */
+
Value -= 40;
- /* low-3-bits of H total has bug, HW will remove it. So the value have to align to 8*/
+
Value += 7;
if(DisplayPath == DISP1)
@@ -191,18 +383,10 @@ void SetHTotal(UCHAR DisplayPath, USHORT Value)
return;
}
-/*-------------------------------------------------------------------
-;
-; SetHDisplayEnd()
-;
-; in:
-; DisplayPath = display path
-; Value = H display end in pixel
-;
-;------------------------------------------------------------------*/
+
void SetHDisplayEnd(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 8 pixels for setting HW */
+
Value -= 8;
if(DisplayPath == DISP1)
@@ -218,18 +402,10 @@ void SetHDisplayEnd(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetHBlankingStart()
-;
-; in:
-; DisplayPath = display path
-; Value = H blanking start in pixel
-;
-;------------------------------------------------------------------*/
+
void SetHBlankingStart(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 8 pixels for setting HW */
+
Value -= 8;
if(DisplayPath == DISP1)
@@ -245,18 +421,10 @@ void SetHBlankingStart(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetHBlankingEnd()
-;
-; in:
-; DisplayPath = display path
-; Value = H blanking end in pixel
-;
-;------------------------------------------------------------------*/
+
void SetHBlankingEnd(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 8 pixels for setting HW */
+
Value -= 8;
if(DisplayPath == DISP1)
@@ -272,18 +440,10 @@ void SetHBlankingEnd(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetHSyncStart()
-;
-; in:
-; DisplayPath = display path
-; Value = H Sync start in pixel
-;
-;------------------------------------------------------------------*/
+
void SetHSyncStart(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 0 pixels for setting HW */
+
Value -= 0;
if(DisplayPath == DISP1)
@@ -299,18 +459,10 @@ void SetHSyncStart(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetHSyncEnd()
-;
-; in:
-; DisplayPath = display path
-; Value = H Sync end in pixel
-;
-;------------------------------------------------------------------*/
+
void SetHSyncEnd(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 0 pixels for setting HW */
+
Value -= 0;
if(DisplayPath == DISP1)
@@ -326,18 +478,10 @@ void SetHSyncEnd(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetVTotal()
-;
-; in:
-; DisplayPath = display path
-; Value = V total
-;
-;------------------------------------------------------------------*/
+
void SetVTotal(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 2 line for setting HW */
+
Value -= 2;
if(DisplayPath == DISP1)
@@ -353,18 +497,10 @@ void SetVTotal(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetVDisplayEnd()
-;
-; in:
-; DisplayPath = display path
-; Value = V display end
-;
-;------------------------------------------------------------------*/
+
void SetVDisplayEnd(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 1 line for setting HW */
+
Value -= 1;
if(DisplayPath == DISP1)
@@ -380,18 +516,10 @@ void SetVDisplayEnd(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetVBlankingStart()
-;
-; in:
-; DisplayPath = display path
-; Value = V blanking start
-;
-;------------------------------------------------------------------*/
+
void SetVBlankingStart(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 1 line for setting HW */
+
Value -= 1;
if(DisplayPath == DISP1)
@@ -407,18 +535,10 @@ void SetVBlankingStart(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetVBlankingEnd()
-;
-; in:
-; DisplayPath = display path
-; Value = V blanking end
-;
-;------------------------------------------------------------------*/
+
void SetVBlankingEnd(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 1 line for setting HW */
+
Value -= 1;
if(DisplayPath == DISP1)
@@ -434,18 +554,10 @@ void SetVBlankingEnd(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetVSyncStart()
-;
-; in:
-; DisplayPath = display path
-; Value = V sync start
-;
-;------------------------------------------------------------------*/
+
void SetVSyncStart(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 1 line for setting HW */
+
Value -= 1;
if(DisplayPath == DISP1)
@@ -461,18 +573,10 @@ void SetVSyncStart(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetVSyncEnd()
-;
-; in:
-; DisplayPath = display path
-; Value = V sync end
-;
-;------------------------------------------------------------------*/
+
void SetVSyncEnd(UCHAR DisplayPath, USHORT Value)
{
- /* Subtract the 1 line for setting HW */
+
Value -= 1;
if(DisplayPath == DISP1)
@@ -488,15 +592,7 @@ void SetVSyncEnd(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; SetPixelClock()
-;
-; in:
-; DisplayPath = display path
-; Clock = pixel clock in khz
-;
-;------------------------------------------------------------------*/
+
void SetPixelClock(UCHAR bDisplayPath, ULONG dwClock)
{
PLL_Info PLLInfo;
@@ -504,15 +600,7 @@ void SetPixelClock(UCHAR bDisplayPath, ULONG dwClock)
PLLInfo = ClockToPLLF9003A(dwClock);
SetDPLL(bDisplayPath, PLLInfo);
}
-/*-------------------------------------------------------------------
-;
-; SetHSource()
-;
-; in:
-; DisplayPath = display path
-; wValue = number of pixels of source data
-;
-;------------------------------------------------------------------*/
+
void SetHSource(UCHAR bDisplayPath, USHORT wValue)
{
wValue -= 1;
@@ -528,19 +616,10 @@ void SetHSource(UCHAR bDisplayPath, USHORT wValue)
}
-/*-------------------------------------------------------------------
-;
-; ClockToPLLF9003A()
-;
-; in:
-; Clock = pixel clock in khz
-; return:
-; PLL_Info = PLL value
-;
-;------------------------------------------------------------------*/
+
PLL_Info ClockToPLLF9003A(ULONG Clock)
{
- ULONG MSCount, NSCount, RSCount, FCKVCO, FCKOUT; /*defined in PLL module */
+ ULONG MSCount, NSCount, RSCount, FCKVCO, FCKOUT;
ULONG NearestClock = 0xFFFFFFFF;
PLL_Info PLLInfo;
@@ -577,15 +656,7 @@ PLL_Info ClockToPLLF9003A(ULONG Clock)
}
-/*-------------------------------------------------------------------
-;
-; SetDPLL() - set display PLL
-;
-; in:
-; DisplayPath = display path
-; PLLInfo: PLL value
-;
-;------------------------------------------------------------------*/
+
void SetDPLL(UCHAR DisplayPath, PLL_Info PLLInfo)
{
UCHAR RetValue;
@@ -603,26 +674,16 @@ void SetDPLL(UCHAR DisplayPath, PLL_Info PLLInfo)
SetCRReg(0xCE, PLLInfo.RS, BIT2+BIT1+BIT0);
}
- /* Fire the PLL setting */
+
RetValue = GetCRReg(0xBB);
SetCRReg(0xBB, RetValue, 0xFF);
}
-/*-------------------------------------------------------------------
-;
-; SetPolarity()
-;
-; in:
-; DisplayPath = display path
-; Value: bit1 = 1 for positive H sync
-; = 0 for negative H sync
-; bit2 = 1 for positive V sync
-; = 0 for negative V sync
-;------------------------------------------------------------------*/
+
void SetPolarity(UCHAR DevicePort, UCHAR Value)
{
- Value ^= BIT2+BIT1; /* invert Bit[2:1] */
+ Value ^= BIT2+BIT1;
switch (DevicePort)
{
@@ -641,20 +702,12 @@ void SetPolarity(UCHAR DevicePort, UCHAR Value)
}
}
-/*-------------------------------------------------------------------
-;
-; SetFIFO()
-;
-; in:
-; DisplayPath = display path
-; out:
-; none
-;------------------------------------------------------------------*/
+
void SetFIFO(UCHAR DisplayPath)
{
if (DisplayPath == DISP1)
{
- SetCRReg(0xA7, 0x3F, 0xFF);
+ SetCRReg(0xA7, 0x5F, 0xFF);
SetCRReg(0xA6, 0x3F, 0xFF);
}
else if (DisplayPath == DISP2)
@@ -664,18 +717,10 @@ void SetFIFO(UCHAR DisplayPath)
}
}
-/*-------------------------------------------------------------------
-;
-; SetPitch()
-;
-; in:
-; DisplayPath = display path
-; Value = Pitch in byte
-;
-;------------------------------------------------------------------*/
+
void SetPitch(UCHAR DisplayPath, USHORT Value)
{
- /* adjust pitch in 8 byte alignment */
+
Value += 7;
Value >>= 3;
@@ -692,16 +737,7 @@ void SetPitch(UCHAR DisplayPath, USHORT Value)
}
-/*-------------------------------------------------------------------
-;
-; GetPitch()
-;
-; in:
-; DisplayPath = display path
-; out:
-; return pitch in byte
-;
-;------------------------------------------------------------------*/
+
USHORT GetPitch(UCHAR DisplayPath)
{
USHORT wPitch;
@@ -720,16 +756,7 @@ USHORT GetPitch(UCHAR DisplayPath)
return wPitch;
}
-/*-------------------------------------------------------------------
-;
-; GetVDisplayEnd()
-;
-; in:
-; DisplayPath = display path
-; out:
-; return V disp end
-;
-;------------------------------------------------------------------*/
+
USHORT GetVDisplayEnd(UCHAR DisplayPath)
{
USHORT wDisplayEnd = 0x0;
@@ -743,21 +770,13 @@ USHORT GetVDisplayEnd(UCHAR DisplayPath)
wDisplayEnd = ReadRegFromHW(VDispEnd2);
}
- /* Add 1 for query value. */
+
wDisplayEnd += 1;
return wDisplayEnd;
}
-/*-------------------------------------------------------------------
-;
-; SetColorDepth()
-;
-; in:
-; DisplayPath = display path
-; Value = color depth (8/16/32)
-;
-;------------------------------------------------------------------*/
+
void SetColorDepth(UCHAR DisplayPath, UCHAR Value)
{
UCHAR bSetBit = 0x0;
@@ -783,7 +802,7 @@ void SetColorDepth(UCHAR DisplayPath, UCHAR Value)
}
else
{
- /* Display2 would not support 8bit color depth */
+
if(Value == 8)
return;
@@ -792,14 +811,7 @@ void SetColorDepth(UCHAR DisplayPath, UCHAR Value)
}
-/*-------------------------------------------------------------------
-;
-; ConfigDigitalPort()
-;
-; in:
-; bDisplayPath = display path
-;
-;------------------------------------------------------------------*/
+
void ConfigDigitalPort(UCHAR bDisplayPath)
{
PORT_CONFIG *pDevicePortConfig;
@@ -843,20 +855,12 @@ void ConfigDigitalPort(UCHAR bDisplayPath)
}
}
-/*----------------------------------------------------------------------------
-;
-; LoadTiming
-;
-; in:
-; bDisplayPath = display path
-; wModeNum = mode no.
-;
-;---------------------------------------------------------------------------*/
+
void LoadTiming(UCHAR bDisplayPath, USHORT wModeNum)
{
UCHAR bDeviceIndex = Get_DEV_ID(bDisplayPath);
- /* Obtain the display device */
+
switch(bDeviceIndex)
{
@@ -875,15 +879,7 @@ void LoadTiming(UCHAR bDisplayPath, USHORT wModeNum)
}
-/*----------------------------------------------------------------------------
-;
-; LoadVESATiming
-;
-; in:
-; bDisplayPath = display path
-; wModeNum = mode no.
-;
-;---------------------------------------------------------------------------*/
+
void LoadVESATiming(UCHAR bDisplayPath, USHORT wModeNum)
{
UCHAR bR_Rate_value = 0x0;
@@ -899,19 +895,11 @@ void LoadVESATiming(UCHAR bDisplayPath, USHORT wModeNum)
else
{
xf86DrvMsgVerb(0, X_INFO, InfoLevel, "Mode not found!!\n");
- /*ASSERT(true); */
+
}
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Exit LoadVESATiming()==\n");
}
-/*----------------------------------------------------------------------------
-;
-; LoadLCDTiming
-;
-; in:
-; bDisplayPath = display path
-; wModeNum = mode no.
-;
-;---------------------------------------------------------------------------*/
+
void LoadLCDTiming(UCHAR bDisplayPath, USHORT wModeNum)
{
UCHAR bDeviceIndex = Get_DEV_ID(bDisplayPath);
@@ -929,20 +917,12 @@ void LoadLCDTiming(UCHAR bDisplayPath, USHORT wModeNum)
}
else
{
- /*ASSERT(true); */
+
}
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Exit LoadLCDTiming()==\n");
}
-/*----------------------------------------------------------------------------
-;
-; SetScalingFactor
-;
-; in:
-; pUserModeInfo = pointer to MODE_INFO of user mode
-; pPanelModeInfo = pointer to LCD MODE_INFO of panel
-;
-;---------------------------------------------------------------------------*/
+
void SetScalingFactor(UCHAR bDisplayPath, MODE_INFO *pUserModeInfo, MODE_INFO *pPanelModeInfo)
{
ULONG dwScalingFactor;
@@ -986,15 +966,7 @@ void SetScalingFactor(UCHAR bDisplayPath, MODE_INFO *pUserModeInfo, MODE_INFO *p
}
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Exit SetScalingFactor()==\n");
}
-/*-------------------------------------------------------------------
-;
-; SetHorScalingFactor()
-;
-; in:
-; DisplayPath = display path
-; wValue = scaling factor
-;
-;------------------------------------------------------------------*/
+
void SetHorScalingFactor(UCHAR bDisplayPath, USHORT wValue)
{
if(bDisplayPath == DISP1)
@@ -1006,15 +978,7 @@ void SetHorScalingFactor(UCHAR bDisplayPath, USHORT wValue)
WriteRegToHW(HScalingFactor2, wValue);
}
}
-/*-------------------------------------------------------------------
-;
-; SetVerScalingFactor()
-;
-; in:
-; DisplayPath = display path
-; wValue = scaling factor
-;
-;------------------------------------------------------------------*/
+
void SetVerScalingFactor(UCHAR bDisplayPath, USHORT wValue)
{
if(bDisplayPath == DISP1)
@@ -1026,17 +990,7 @@ void SetVerScalingFactor(UCHAR bDisplayPath, USHORT wValue)
WriteRegToHW(VScalingFactor2, wValue);
}
}
-/*-------------------------------------------------------------------
-;
-; isLCDFitMode() -
-;
-; Input:
-; bDeviceIndex = LCD/LCD2
-; wModeNom = mode number
-; return:
-; true if wModeNom is LCD fit mode
-;
-;------------------------------------------------------------------*/
+
CI_STATUS isLCDFitMode(UCHAR bDeviceIndex, USHORT wModeNum)
{
MODE_INFO *pModeInfo;
@@ -1059,29 +1013,17 @@ CI_STATUS isLCDFitMode(UCHAR bDeviceIndex, USHORT wModeNum)
return false;
}
}
-/*----------------------------------------------------------------------------
-;
-; GetModePointerFromVESATable
-;
-; in:
-; wModeNum = mode no.
-; bRRIndex = refresh rate index
-; out:
-; return = true, pModeInfo = pointer to MODE_INFO
-; pRRateTable = pointer to RRATE_TABLE
-; = false, fail
-;
-;---------------------------------------------------------------------------*/
+
CI_STATUS GetModePointerFromVESATable(USHORT wModeNum, UCHAR ucRRIndex, MODE_INFO **ppModeInfo, RRATE_TABLE **ppRRateTable)
{
int iRRateTableIndex;
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Enter GetModePointerFromVESATable()==\n");
- /* Don't find out any fit mode table in the vesa table */
+
if(Get_MODE_INFO_From_VESA_Table(wModeNum, ppModeInfo))
{
- /* Obtain the frequence table. */
+
*ppRRateTable = (RRATE_TABLE*)((int)(*ppModeInfo) + sizeof(MODE_INFO));
for(iRRateTableIndex = 0; iRRateTableIndex < (*ppModeInfo)->RRTableCount; iRRateTableIndex++, (*ppRRateTable)++)
@@ -1097,23 +1039,12 @@ CI_STATUS GetModePointerFromVESATable(USHORT wModeNum, UCHAR ucRRIndex, MODE_INF
}
}
- /* Can't find any fresh rate be conformed */
+
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, " Exit2 GetModePointerFromVESATable()== return fail!!\n");
return false;
}
-/*----------------------------------------------------------------------------
-;
-; GetModePointerFromLCDTable
-;
-; in:
-; bDeviceIndex = device index
-; out:
-; return = true, ppPanelInfo = pointer to PANEL_INFO
-; pPanelTable = pointerto PANEL_TABLE
-; = false, fail
-;
-;---------------------------------------------------------------------------*/
+
CI_STATUS GetModePointerFromLCDTable(UCHAR bDeviceIndex, MODE_INFO **ppModeInfo, PANEL_TABLE **ppPanelTable)
{
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Enter GetModePointerFromLCDTable()==\n");
@@ -1130,17 +1061,7 @@ CI_STATUS GetModePointerFromLCDTable(UCHAR bDeviceIndex, MODE_INFO **ppModeInfo,
return false;
}
}
-/*----------------------------------------------------------------------------
-;
-; Get_MODE_INFO
-;
-; in:
-; wModeNum = mode no.
-; out:
-; return = true, pModeInfo = pointer to MODE_INFO
-; = false, fail
-;
-;---------------------------------------------------------------------------*/
+
CI_STATUS Get_MODE_INFO(USHORT wModeNum, MODE_INFO **ppModeInfo)
{
if (Get_MODE_INFO_From_VESA_Table(wModeNum, ppModeInfo))
@@ -1162,17 +1083,7 @@ CI_STATUS Get_MODE_INFO(USHORT wModeNum, MODE_INFO **ppModeInfo)
return false;
}
}
-/*----------------------------------------------------------------------------
-;
-; Get_MODE_INFO_From_LCD_Table
-;
-; in:
-; bDeviceIndex = device index.
-; out:
-; return = true, pModeInfo = pointer to PANEL_INFO
-; = false, fail
-;
-;---------------------------------------------------------------------------*/
+
CI_STATUS Get_MODE_INFO_From_LCD_Table(UCHAR bDeviceIndex, MODE_INFO **ppModeInfo)
{
int i;
@@ -1222,17 +1133,7 @@ CI_STATUS Get_MODE_INFO_From_LCD_Table(UCHAR bDeviceIndex, MODE_INFO **ppModeInf
return false;
}
-/*----------------------------------------------------------------------------
-;
-; Get_MODE_INFO_From_VESA_Table
-;
-; in:
-; wModeNum = mode no.
-; out:
-; return = true, pModeInfo = pointer to MODE_INFO
-; = false, fail
-;
-;---------------------------------------------------------------------------*/
+
#if 0
CI_STATUS Get_MODE_INFO_From_VESA_Table(USHORT wModeNum, MODE_INFO **ppModeInfo)
{
@@ -1295,18 +1196,7 @@ CI_STATUS Get_MODE_INFO_From_VESA_Table(USHORT wModeNum, MODE_INFO **ppModeInfo)
return false;
}
#endif
-/*----------------------------------------------------------------------------
-;
-; GetModeColorDepth
-;
-; in:
-; wModeNum = mode no.
-; pMODE_INFO = pointer to MODE_INFO
-; out:
-; return = true, *pbColorDepth = color depth
-; = false, fail
-;
-;---------------------------------------------------------------------------*/
+
CI_STATUS GetModeColorDepth(USHORT wModeNum, MODE_INFO *pModeInfo, UCHAR *pucColorDepth)
{
#if CBIOS_DEBUG
@@ -1348,23 +1238,13 @@ CI_STATUS GetModeColorDepth(USHORT wModeNum, MODE_INFO *pModeInfo, UCHAR *pucCol
return false;
}
}
-/*----------------------------------------------------------------------------
-;
-; GetModePitch()
-;
-; In:
-; ModeNum = mode no
-; Out:
-; return = true, *pPitch = pitch in byte
-; = false, fail
-;
-;---------------------------------------------------------------------------*/
+
CI_STATUS GetModePitch(USHORT ModeNum, USHORT *pPitch)
{
MODE_INFO *pModeInfo = NULL;
UCHAR ucColorDepth = 0;
- /* Don't find out any fit mode table in the vesa table */
+
if(!Get_MODE_INFO(ModeNum, &pModeInfo))
{
return false;
@@ -1384,16 +1264,7 @@ CI_STATUS GetModePitch(USHORT ModeNum, USHORT *pPitch)
return true;
}
-/*----------------------------------------------------------------------------
-;
-; ReadRegFromHW
-;
-; in:
-; pRegOp = pointer to REG_OP table
-; out:
-; return = register value
-;
-;---------------------------------------------------------------------------*/
+
USHORT ReadRegFromHW(REG_OP *pRegOp)
{
USHORT wValue = 0x0;
@@ -1403,33 +1274,33 @@ USHORT ReadRegFromHW(REG_OP *pRegOp)
{
if(pRegOp->RegGroup == CR)
{
- /*CR */
+
OutPort(COLOR_CRTC_INDEX,(pRegOp->RegIndex));
btemp = (UCHAR)InPort(COLOR_CRTC_DATA);
}
else
{
- /*SR */
+
OutPort(SEQ_INDEX,(pRegOp->RegIndex));
btemp = (UCHAR)InPort(SEQ_DATA);
}
bMasktemp = (pRegOp->RegMask);
- /* Mask the bit that we need. */
+
btemp &= bMasktemp;
- /* Shift all register into LSB. */
+
while(!(bMasktemp & BIT0))
{
bMasktemp = bMasktemp >> 1;
btemp = btemp >> 1;
}
- /* Shift the register and add in the value. */
+
wValue |= (((USHORT)btemp) << (pRegOp->RegShiftBit));
- /* Next register. */
+
pRegOp++;
}
@@ -1437,15 +1308,7 @@ USHORT ReadRegFromHW(REG_OP *pRegOp)
return wValue;
}
-/*----------------------------------------------------------------------------
-;
-; WriteRegToHW
-;
-; in:
-; pRegOp = pointer to REG_OP table
-; value = value to be written
-;
-;---------------------------------------------------------------------------*/
+
void WriteRegToHW(REG_OP *pRegOp, USHORT value)
{
UCHAR btemp, btemp1;
@@ -1459,18 +1322,18 @@ void WriteRegToHW(REG_OP *pRegOp, USHORT value)
bMasktemp = (pRegOp->RegMask);
- /* Shift all register into LSB. */
+
while(!(bMasktemp & BIT0))
{
bMasktemp = bMasktemp >> 1;
bCount ++;
}
- /* Calculate the value that we need to set into register. */
+
btemp = value >> (pRegOp->RegShiftBit);
btemp &= (bMasktemp);
- /* Shift the data bit into right position. */
+
if(!(pRegOp->RegMask & BIT0))
{
btemp = btemp << bCount;
@@ -1478,7 +1341,7 @@ void WriteRegToHW(REG_OP *pRegOp, USHORT value)
if(pRegOp->RegGroup == CR)
{
- /*CR */
+
OutPort(COLOR_CRTC_INDEX,(pRegOp->RegIndex));
btemp1 = (UCHAR)InPort(COLOR_CRTC_DATA);
btemp1 &= ~(pRegOp->RegMask);
@@ -1487,7 +1350,7 @@ void WriteRegToHW(REG_OP *pRegOp, USHORT value)
}
else
{
- /*SR */
+
OutPort(SEQ_INDEX,(pRegOp->RegIndex));
btemp1 = (UCHAR)InPort(SEQ_DATA);
btemp1 &= ~(pRegOp->RegMask);
@@ -1501,62 +1364,27 @@ void WriteRegToHW(REG_OP *pRegOp, USHORT value)
}
-/*----------------------------------------------------------------------------
-;
-; UnLockCR0ToCR7
-;
-; in:
-; none
-; out:
-; none
-;
-;---------------------------------------------------------------------------*/
+
void UnLockCR0ToCR7()
{
- /* CR11[7] = 0 */
+
SetCRReg(0x11, 0x00, BIT7);
}
-/*----------------------------------------------------------------------------
-;
-; LockCR0ToCR7
-;
-; in:
-; none
-; out:
-; none
-;
-;---------------------------------------------------------------------------*/
+
void LockCR0ToCR7()
{
- /* CR11[7] = 1 */
+
SetCRReg(0x11, 0x80, BIT7);
}
-/*----------------------------------------------------------------------------
-;
-; CheckForModeAvailable
-;
-; in:
-; ModeNum = mode no.
-; out:
-; return = true, if mode is available. Else, return false
-;
-;---------------------------------------------------------------------------*/
+
CI_STATUS CheckForModeAvailable(USHORT ModeNum)
{
MODE_INFO *pModeInfo = NULL;
return Get_MODE_INFO_From_VESA_Table(ModeNum, &pModeInfo);
}
-/*--------------------------------------------------------------------
-;
-; CheckForNewDeviceAvailable() -
-;
-; Input:
-; bDeviceIndex = device index
-; return:
-; true if device is supported
-;--------------------------------------------------------------------*/
+
CI_STATUS CheckForNewDeviceAvailable(UCHAR bDeviceIndex)
{
PORT_CONFIG *pDevicePortConfig;
@@ -1584,14 +1412,7 @@ void Display2TurnOffTX()
}
-/*----------------------------------------------------------------------------
-;
-; TurnOnDigitalPort
-;
-; in:
-; DisplayPath = device index
-;
-;---------------------------------------------------------------------------*/
+
void TurnOnDigitalPort(UCHAR bDeviceIndex)
{
PORT_CONFIG *pDevicePortConfig;
@@ -1619,14 +1440,7 @@ void TurnOnDigitalPort(UCHAR bDeviceIndex)
}
}
}
-/*----------------------------------------------------------------------------
-;
-; TurnOffDigitalPort
-;
-; in:
-; bDeviceIndex = device index
-;
-;---------------------------------------------------------------------------*/
+
void TurnOffDigitalPort(UCHAR bDeviceIndex)
{
PORT_CONFIG *pDevicePortConfig;
@@ -1654,17 +1468,7 @@ void TurnOffDigitalPort(UCHAR bDeviceIndex)
}
}
-/*-----------------------------------------------------------------------------
-;
-; GetPortConnectPath
-;
-; in:
-; PortType = 0: CRT port, 1: DVP1, 2: DVP2, 3: 24-bit DVP1+2
-; out:
-; return = 0 if port connecting on display1
-; = 1 if port connecting on display2
-;
-;-----------------------------------------------------------------------------*/
+
UCHAR GetPortConnectPath(UCHAR PortType)
{
UCHAR SR1F, PortMask;
@@ -1692,16 +1496,7 @@ UCHAR GetPortConnectPath(UCHAR PortType)
}
-/*----------------------------------------------------------------------------
-;
-; TransDevIDtoBit
-;
-; in:
-; DeviceIndex = device index
-; out:
-; return device bit
-;
-;---------------------------------------------------------------------------*/
+
USHORT TransDevIDtoBit(UCHAR DeviceIndex)
{
return (1 << (DeviceIndex - 1));
@@ -1837,18 +1632,7 @@ void Display2HWResetOn()
}
#endif
-/*----------------------------------------------------------------------------
-;
-; SerialLoadTable
-;
-; in:
-; pucDisplay1VESAModeInitRegs = pointer to start of table
-; (ucI2Cport = I2C port)
-; (ucI2CAddr = I2C address)
-; out:
-; *ppucTablePointer = table end + 1
-;
-;---------------------------------------------------------------------------*/
+
void SerialLoadTable(UCHAR **ppucTablePointer, UCHAR ucI2Cport, UCHAR ucI2CAddr)
{
UCHAR ucRegGroup;
@@ -1869,19 +1653,7 @@ void SerialLoadTable(UCHAR **ppucTablePointer, UCHAR ucI2Cport, UCHAR ucI2CAddr)
(*ppucTablePointer)++;
}
-/*---------------------
-;
-; SerialLoadRegBits
-;
-; in:
-; pucDisplay1VESAModeInitRegs = pointer to start of table
-; ucRegGroup = register group
-; (ucI2Cport = I2C device address)
-; (ucI2CAddr = I2C port)
-; out:
-; *ppucTablePointer = pointer to end of table +1
-;
-;----------------------*/
+
void SerialLoadRegBits(UCHAR **ppucTablePointer, UCHAR ucRegGroup, UCHAR ucI2Cport, UCHAR ucI2CAddr)
{
UCHAR ucRegIndex, ucRegValue, ucMask;
@@ -1915,19 +1687,7 @@ void SerialLoadRegBits(UCHAR **ppucTablePointer, UCHAR ucRegGroup, UCHAR ucI2Cpo
(*ppucTablePointer)++;
}
-/*---------------------
-;
-; SerialLoadReg
-;
-; in:
-; pucDisplay1VESAModeInitRegs = pointer to start of table
-; ucRegGroup = register group
-; (ucI2Cport = I2C device address)
-; (ucI2CAddr = I2C port)
-; out:
-; *ppucTablePointer = pointer to end of table +1
-;
-;----------------------*/
+
void SerialLoadReg(UCHAR **ppucTablePointer, UCHAR ucRegGroup, UCHAR ucI2Cport, UCHAR ucI2CAddr)
{
UCHAR ucRegIndex, ucRegValue;
@@ -1990,30 +1750,23 @@ void LoadDisplay1VESAModeInitRegs()
void VESASetBIOSData(USHORT ModeNum)
{
- /* no need to implement */
+
}
-/*----------------------------------------------------------------------------
-;
-; DisableDisplayPathAndDevice
-;
-; in:
-; bDisplayPath = display path
-;
-;---------------------------------------------------------------------------*/
+
void DisableDisplayPathAndDevice(UCHAR bDisplayPath)
{
UCHAR bDeviceIndex = Get_DEV_ID(bDisplayPath);
- /* disable device */
+
ControlPwrSeqOff(bDeviceIndex);
- /* turn off TX */
+
- /* disable port */
+
TurnOffDigitalPort(bDeviceIndex);
- /* disable display path */
+
SequencerOff(bDisplayPath);
}
@@ -2041,32 +1794,32 @@ CI_STATUS GetDevicePortConfig(UCHAR bDeviceIndex, PORT_CONFIG **ppDevicePortConf
void PowerSequenceOn()
{
- /* check if power sequence already on */
+
if (!(GetSRReg(0x11) & BIT0))
{
- /* Power Sequence Control Pad Output Enable */
+
SetSRReg(0x32, BIT1, BIT1);
- /* panel on */
+
SetSRReg(0x11, BIT0, BIT0);
- /* delay for power sequence done */
+
WaitPowerSequenceDone();
}
}
void PowerSequenceOff()
{
- /* check if power sequence already off */
+
if (GetSRReg(0x11) & BIT0)
{
- /* panel off */
+
SetSRReg(0x11, 0, BIT0);
- /* wait power sequence done */
+
WaitPowerSequenceDone();
- /* Power Sequence Control Pad Output Disable */
+
SetSRReg(0x32, 0, BIT1);
}
}
@@ -2096,14 +1849,14 @@ void SequencerOff(UCHAR bDisplayPath)
void ControlPwrSeqOn(UCHAR bDeviceIndex)
{
PORT_CONFIG *pDevicePortConfig;
- /* check if LCD or LCD2 */
+
if ((TransDevIDtoBit(bDeviceIndex) & (B_LCD+B_LCD2)) && (GetDevicePortConfig(bDeviceIndex, &pDevicePortConfig)))
{
if (pDevicePortConfig->Attribute & TX_PS)
{
if (pDevicePortConfig->TX_Enc_ID == TX_VT1636)
{
-/* VT1636PowerSequenceOnOn();*/
+
}
}
else if ((pDevicePortConfig->PortID == DVP1) || (pDevicePortConfig->PortID == DVP12))
@@ -2116,14 +1869,14 @@ void ControlPwrSeqOn(UCHAR bDeviceIndex)
void ControlPwrSeqOff(UCHAR bDeviceIndex)
{
PORT_CONFIG *pDevicePortConfig;
- /* check if LCD or LCD2 */
+
if ((TransDevIDtoBit(bDeviceIndex) & (B_LCD+B_LCD2)) && (GetDevicePortConfig(bDeviceIndex, &pDevicePortConfig)))
{
if (pDevicePortConfig->Attribute & TX_PS)
{
if (pDevicePortConfig->TX_Enc_ID == TX_VT1636)
{
-/* VT1636PowerSequenceOnOff();*/
+
}
}
else if ((pDevicePortConfig->PortID == DVP1) || (pDevicePortConfig->PortID == DVP12))
@@ -2132,16 +1885,7 @@ void ControlPwrSeqOff(UCHAR bDeviceIndex)
}
}
}
-/*----------------------------------------------------------------------------
-;
-; LongWait() - wait V sync of display1
-;
-; in:
-; none
-; out:
-; none
-;
-;---------------------------------------------------------------------------*/
+
void LongWait()
{
while (GetIS1Reg() & BIT3);
@@ -2316,7 +2060,7 @@ void EnableATTR()
OutPort(ATTR_DATA_WRITE, 0x20);
}
-/* Set Cr register value with Mask */
+
void SetCRReg(UCHAR bRegIndex, UCHAR bRegValue, UCHAR bMask)
{
UCHAR btemp = 0x0;
@@ -2339,7 +2083,7 @@ void SetCRReg(UCHAR bRegIndex, UCHAR bRegValue, UCHAR bMask)
return;
}
-/* Get Cr register value */
+
UCHAR GetCRReg(UCHAR bRegIndex)
{
UCHAR btemp = 0x0;
@@ -2350,7 +2094,7 @@ UCHAR GetCRReg(UCHAR bRegIndex)
return btemp;
}
-/* Set Sr register value with Mask */
+
void SetSRReg(UCHAR bRegIndex, UCHAR bRegValue, UCHAR bMask)
{
UCHAR btemp = 0x0;
@@ -2373,7 +2117,7 @@ void SetSRReg(UCHAR bRegIndex, UCHAR bRegValue, UCHAR bMask)
return;
}
-/* Get Sr register value */
+
UCHAR GetSRReg(UCHAR bRegIndex)
{
UCHAR btemp = 0x0;
@@ -2401,7 +2145,7 @@ UCHAR GetARReg(UCHAR index)
return bTmp;
}
-/* Set Gr register value with Mask */
+
void SetGRReg(UCHAR bRegIndex, UCHAR bRegValue, UCHAR bMask)
{
UCHAR btemp = 0x0;
@@ -2434,16 +2178,16 @@ UCHAR GetIS1Reg()
return InPort(COLOR_INPUT_STATUS1_READ);
}
-/* Clear frame buffer */
+
void ClearFrameBuffer(UCHAR DisplayPath,ULONG *pFrameBufferBase, MODE_INFO *pModeInfo, UCHAR ucColorDepth)
{
ULONG dwWidth = (ULONG)pModeInfo->H_Size, dwHeight = (ULONG)pModeInfo->V_Size, dwFactor = 0;
ULONG i = 0;
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Enter ClearFrameBuffer()==\n");
- /* get display1/2 starting address */
- /* Check the color depth */
+
+
switch(ucColorDepth)
{
case 8:
@@ -2456,7 +2200,7 @@ void ClearFrameBuffer(UCHAR DisplayPath,ULONG *pFrameBufferBase, MODE_INFO *pMod
return;
}
- /* Clear */
+
for(i = 0;i<((dwWidth*dwHeight)/dwFactor);i++)
{
*(pFrameBufferBase+i) = 0x00000000;
@@ -2473,16 +2217,7 @@ ULONG Difference(ULONG Value1, ULONG Value2)
return (Value2 - Value1);
}
-/*----------------------------------------------------------------------------
-;
-; ReadScratch()
-;
-; in:
-; Index = scratch index
-; out:
-; return = scratch data aligned to LSB
-;
-;---------------------------------------------------------------------------*/
+
UCHAR ReadScratch(USHORT IndexMask)
{
UCHAR Index = (UCHAR)(IndexMask >> 8);
@@ -2497,16 +2232,7 @@ UCHAR ReadScratch(USHORT IndexMask)
return RetValue;
}
-/*----------------------------------------------------------------------------
-;
-; WriteScratch()
-;
-; in:
-; Index = scratch index
-; Data = data to be written
-; out:
-; none
-;---------------------------------------------------------------------------*/
+
void WriteScratch(USHORT IndexMask, UCHAR Data)
{
UCHAR Index = (UCHAR)(IndexMask >> 8);
@@ -2517,17 +2243,7 @@ void WriteScratch(USHORT IndexMask, UCHAR Data)
SetCRReg(Index, Data, Mask);
}
-/*----------------------------------------------------------------------------
-;
-; AlignDataToLSB()
-;
-; in:
-; Data = data to be aligned
-; Mask = mask of data
-; out:
-; return = aligned data
-;
-;---------------------------------------------------------------------------*/
+
UCHAR AlignDataToLSB(UCHAR bData, UCHAR bMask)
{
bData &= bMask;
@@ -2541,17 +2257,7 @@ UCHAR AlignDataToLSB(UCHAR bData, UCHAR bMask)
return bData;
}
-/*----------------------------------------------------------------------------
-;
-; AlignDataToMask()
-;
-; in:
-; Data = data to be aligned
-; Mask = mask of data
-; out:
-; return = aligned data
-;
-;---------------------------------------------------------------------------*/
+
UCHAR AlignDataToMask(UCHAR bData, UCHAR bMask)
{
while ((bMask & BIT0) == 0)
@@ -2563,16 +2269,7 @@ UCHAR AlignDataToMask(UCHAR bData, UCHAR bMask)
return bData;
}
-/*----------------------------------------------------------------------------
-;
-; SetDPMS -
-; Input:
-; DPMSState = DPMS_ON, DPMS_STANDBY, DPMS_SUSPEND, DPMS_OFF
-; DisplayPath
-; Output:
-; none
-;
-;---------------------------------------------------------------------------*/
+
void SetDPMS(UCHAR DPMSState, UCHAR DisplayPath)
{
UCHAR RegValue;
@@ -2588,46 +2285,28 @@ void SetDPMS(UCHAR DPMSState, UCHAR DisplayPath)
SetCRReg(0x3E, RegValue, BIT1+BIT0);
}
-/*----------------------------------------------------------------------------
-;
-; DetectMonitor()
-;
-; in:
-; none
-; out:
-; return = true if CRT connected
-;
-;---------------------------------------------------------------------------*/
+
CI_STATUS DetectMonitor()
{
CI_STATUS ConnectStatus;
- /* CRA9 = sense data = 0x80 */
+
SetCRReg(0xA9, 0x80, 0xFF);
- /* CRA8[6] = 1, start DAC sense */
+
SetCRReg(0xA8, BIT6, BIT6);
- /* wait H sync */
+
WaitDisplayPeriod();
- /* ISR0[4] = 1, CRT attached */
+
ConnectStatus = ((InPort(INPUT_STATUS_0_READ) & BIT4) ? true : false);
SetCRReg(0xA8, 0x00, BIT6);
return ConnectStatus;
}
-/*----------------------------------------------------------------------------
-;
-; WaitDisplayPeriod() - wait H sync of display1
-;
-; in:
-; none
-; out:
-; none
-;
-;---------------------------------------------------------------------------*/
+
void WaitDisplayPeriod()
{
while ((InPort(COLOR_INPUT_STATUS1_READ)&BIT0) == 1);
@@ -2635,36 +2314,17 @@ void WaitDisplayPeriod()
while ((InPort(COLOR_INPUT_STATUS1_READ)&BIT0) == 0);
}
-/*----------------------------------------------------------------------------
-;
-; WaitPowerSequenceDone() - SR32[2] = 1, power sequence on complete
-; = 0, power sequence off complete
-;
-; Input:
-; none
-; Output:
-; none
-;
-;---------------------------------------------------------------------------*/
+
void WaitPowerSequenceDone()
{
UCHAR SR32;
SR32 = GetSRReg(0x32);
- /* loop while power sequence status not changed */
+
while(SR32 == GetSRReg(0x32));
}
-/*--------------------------------------------------------------------
-;
-; CheckForDSTNPanel() -
-;
-; Input:
-; bDeviceIndex = device index
-; return:
-; true if device is DSTN panel
-;
-;--------------------------------------------------------------------*/
+
CI_STATUS CheckForDSTNPanel(UCHAR bDeviceIndex)
{
PORT_CONFIG *pDevicePortConfig;
@@ -2686,15 +2346,7 @@ CI_STATUS CheckForDSTNPanel(UCHAR bDeviceIndex)
return false;
}
}
-/*-------------------------------------------------------------------
-;
-; GetVESAMEMSize()
-; Input:
-; none
-; Output:
-; return VESA Memory Size (Unit: MB)
-;
-;------------------------------------------------------------------*/
+
USHORT GetVESAMEMSize()
{
UCHAR bHWStrapping;
@@ -2759,76 +2411,76 @@ CI_STATUS VBE_SetMode(CBIOS_Extension *pCBIOSExtension)
#endif
return true;
}
- /* update mode no */
+
Set_VESA_MODE(wModeNum, DISP1);
- /* cut data */
+
SequencerOff(DISP1);
- /* disable scaler */
+
TurnOffScaler(DISP1);
if (bCurDeviceID != bNewDeviceID)
{
- /* control power sequence off */
+
ControlPwrSeqOff(bCurDeviceID);
- /* turn off TX if necessary */
+
- /* turn off digital port */
+
TurnOffDigitalPort(bCurDeviceID);
- /* update scratch IDX_IGA1_DEV_ID */
+
Set_DEV_ID(bNewDeviceID, DISP1);
}
- /* update BDA? */
+
- /* load Display1 VESA Mode init registers */
+
LoadDisplay1VESAModeInitRegs();
- /* load timing on display1 */
+
LoadTiming(DISP1, wModeNum);
- /* set pitch */
+
GetModePitch(wModeNum, &wPitch);
SetPitch(DISP1, wPitch);
- /* set color depth */
- xf86DrvMsgVerb(0, X_INFO, InfoLevel, " /* set color depth */\n");
+
+ xf86DrvMsgVerb(0, X_INFO, InfoLevel, " \n");
Get_MODE_INFO(wModeNum, &pModeInfo);
GetModeColorDepth(wModeNum, pModeInfo, &bColorDepth);
SetColorDepth(DISP1, bColorDepth);
- /* load font */
+
- /* load LUT */
+
- /* clear FB */
- xf86DrvMsgVerb(0, X_INFO, InfoLevel, " /* clear FB */\n");
+
+ xf86DrvMsgVerb(0, X_INFO, InfoLevel, " \n");
if(!(pCBIOSExtension->pCBiosArguments->reg.x.BX & BIT15))
{
ClearFrameBuffer(DISP1,(ULONG*)(pCBIOSExtension->VideoVirtualAddress),pModeInfo,bColorDepth);
}
- /* set FIFO */
- xf86DrvMsgVerb(0, X_INFO, InfoLevel, " /* set FIFO */\n");
+
+ xf86DrvMsgVerb(0, X_INFO, InfoLevel, " \n");
SetFIFO(DISP1);
- /* config digital port */
- xf86DrvMsgVerb(0, X_INFO, InfoLevel, " /* config difital port */\n");
+
+ xf86DrvMsgVerb(0, X_INFO, InfoLevel, " \n");
ConfigDigitalPort(DISP1);
TurnOnDigitalPort(bNewDeviceID);
- /* Turu on TX */
+
- /* turn on power sequence if necessary */
- xf86DrvMsgVerb(0, X_INFO, InfoLevel, " /* turn on power sequence if necessary */\n");
+
+ xf86DrvMsgVerb(0, X_INFO, InfoLevel, " \n");
ControlPwrSeqOn(bNewDeviceID);
- /* turn on sequencer */
- xf86DrvMsgVerb(0, X_INFO, InfoLevel, " /* turn on sequencer */\n");
+
+ xf86DrvMsgVerb(0, X_INFO, InfoLevel, " \n");
SequencerOn(DISP1);
SetVBERerurnStatus(VBEFunctionCallSuccessful, pCBIOSExtension->pCBiosArguments);
@@ -2838,35 +2490,7 @@ CI_STATUS VBE_SetMode(CBIOS_Extension *pCBIOSExtension)
#endif
return true;
}
-/*-------------------------------------------------------------------
-;
-; VBE_SetGetScanLineLength()
-;
-; Input1: set/get display2 pitch
-; pCBiosArguments->AX = 0x4F06
-; BL = 0x00: Set Scan Line Length in Pixels
-; 0x01: Get Scan Line Length
-; 0x02: Set Scan Line Length in Bytes
-; 0x03: Get Maximum Scan Line Length
-; CX = Desired Width in Pixels if BL = 00
-; Desired Width in Bytes if BL = 02
-;
-; Input2: set/get display2 pitch
-; pCBiosArguments->AX = 0x4F14
-; BL = 0x00: Set Scan Line Length in Pixels
-; 0x01: Get Scan Line Length
-; 0x02: Set Scan Line in Bytes
-; 0x03: Get Maximum Scan Line Length
-; CX = Desired Width in Pixels if BL = 00
-; Desired Width in Bytes if BL = 02
-;
-; Output:
-; pCBiosArguments->AX = VBE Return Status
-; BX = Bytes Per Scan Line
-; CX = Actual Pixels Pet Scan Line (truncated to nearest complete pixel)
-; DX = Maximum Number of Scan Lines
-;
-;------------------------------------------------------------------*/
+
CI_STATUS VBE_SetGetScanLineLength (CBIOS_ARGUMENTS *pCBiosArguments)
{
USHORT wModeNum;
@@ -2876,7 +2500,7 @@ CI_STATUS VBE_SetGetScanLineLength (CBIOS_ARGUMENTS *pCBiosArguments)
ULONG dwVESAMemSizeInBytes;
USHORT wMaxPitchInBytes, wCurrentVDispEnd;
USHORT VBEReturnStatus = VBEFunctionCallFail;
- USHORT wPitchToBeSet = pCBiosArguments->reg.x.CX; /* maybe in pixel or in byte */
+ USHORT wPitchToBeSet = pCBiosArguments->reg.x.CX;
#if CBIOS_DEBUG
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Entry VBE_SetGetScanLineLength== \n");
@@ -2912,7 +2536,7 @@ CI_STATUS VBE_SetGetScanLineLength (CBIOS_ARGUMENTS *pCBiosArguments)
wCurrentVDispEnd = GetVDisplayEnd(bDispalyPath);
- /* align pitch to 8-byte */
+
if (((ULONG)(dwVESAMemSizeInBytes / (ULONG)wCurrentVDispEnd) & 0xFFFF0000) == 0)
{
wMaxPitchInBytes = (USHORT)(dwVESAMemSizeInBytes / (ULONG)wCurrentVDispEnd) & 0xFFF8;
@@ -2931,7 +2555,7 @@ CI_STATUS VBE_SetGetScanLineLength (CBIOS_ARGUMENTS *pCBiosArguments)
{
if (pCBiosArguments->reg.lh.BL == 0)
{
- /* transform pitch size from pixels to bytes */
+
wPitchToBeSet <<= (bColorDepth >> 4);
}
@@ -2948,16 +2572,16 @@ CI_STATUS VBE_SetGetScanLineLength (CBIOS_ARGUMENTS *pCBiosArguments)
if (pCBiosArguments->reg.lh.BL == 3)
{
- /* get maximum pitch in bytes */
+
pCBiosArguments->reg.x.BX = wMaxPitchInBytes;
}
else
{
- /* get current pitch in bytes */
+
pCBiosArguments->reg.x.BX =GetPitch(bDispalyPath);
}
- /* get current pitch in pixels */
+
pCBiosArguments->reg.x.CX = pCBiosArguments->reg.x.BX >> (bColorDepth >> 4);
pCBiosArguments->reg.x.DX = (dwVESAMemSizeInBytes / (USHORT)pCBiosArguments->reg.x.BX);
@@ -2973,54 +2597,78 @@ CI_STATUS VBE_SetGetScanLineLength (CBIOS_ARGUMENTS *pCBiosArguments)
CI_STATUS OEM_QueryBiosInfo (CBIOS_ARGUMENTS *pCBiosArguments)
{
USHORT VBEReturnStatus = VBEFunctionCallFail;
+ char bProjCode;
+ int wCustomerCode;
+ char bRelVersion;
+ char szPrj[2], szMajor[3], szMinor[3] ;
+ int wYear;
+ char bMonth, bDay;
+ char szYear[5], szMonth[3], szDay[3];
+ char i,ucCRAA,ucCRAB;
+
#if CBIOS_DEBUG
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Entry OEM_QueryBiosInfo()== \n");
#endif
- /* bx[15:0] = version number */
-
- /*-------------------EBX PART--------------------;
- ; ;
- ;[31:24] : Branch version number
- ;[23:8] : Customer Index
- ;[7:0] : Release version number
- */
-
-
- /*-------------------ECX PART--------------------;
- ; ;
- ; [31:18] : Reserved
- ; [17:16] : DRAM bus width
- ; 00 : 16bit
- ; 01 : 32bit
- ; 10 : 64bit
- ; 11 : reserved
- ; [15:4] : memory size in 256k unit
- ; [3:0] : Memory data rate
- ; 000 : DDR333
- ; 001 : DDR400
- ; 010 : DDR533
- ; 011 : DDR667
- ; 100 : DDR800
- ; xxx : Reserved
- */
-
-
- /*-------------------EDX PART--------------------;
- ; ;
- ; VGA BIOS Build TIME ;
- ;[31:16] : Year
- ;[15: 8] : Month
- ;[ 7: 0] : Day
- */
-
-
-
- /*-------------------SI PART--------------------;
- ; ;
- ; SI = supported device
- */
+
+
+
+
+
+ if (BiosInfoData != NULL)
+ {
+ szPrj[1] = szMajor[2] = szMinor[2] = '\0';
+ strncpy(szPrj, ((char *)BiosInfoData)+0x10, 1);
+ strncpy(szMajor, ((char *)BiosInfoData)+0x12, 2);
+ strncpy(szMinor, ((char *)BiosInfoData)+0x15, 2);
+
+
+ bProjCode = atoi(szPrj) ;
+ wCustomerCode = atoi(szMajor);
+ bRelVersion = atoi(szMinor);
+ pCBiosArguments->reg.ex.EBX = (bProjCode<<24) | (wCustomerCode<8) | bRelVersion;
+
+#if CBIOS_DEBUG
+ xf86DrvMsgVerb(0, X_INFO, InfoLevel, "Bios version : %d\n",pCBiosArguments->reg.ex.EBX);
+#endif
+ }
+
+
+
+
+
+
+ ucCRAA = GetCRReg(0xAA);
+ pCBiosArguments->reg.ex.ECX = ucCRAA;
+ pCBiosArguments->reg.ex.ECX <<= 6;
+
+
+ ucCRAB = GetCRReg(0xAB);
+ ucCRAB &= BIT0 + BIT1 + BIT2;
+ pCBiosArguments->reg.ex.ECX |= ucCRAB;
+
+
+
+
+ if (BiosInfoData != NULL)
+ {
+ szMonth[2] = szDay[2] = szYear[4] = '\0';
+ strncpy(szMonth, ((char *)BiosInfoData)+0x47, 2);
+ strncpy(szDay, ((char *)BiosInfoData)+0x4a, 2);
+ strncpy(szYear, ((char *)BiosInfoData)+0x56, 4);
+
+ wYear = atoi(szYear);
+ bMonth = atoi(szMonth);
+ bDay = atoi(szDay);
+ pCBiosArguments->reg.ex.EDX = (wYear<<16) | (bMonth<8) | bDay;
+
+#if CBIOS_DEBUG
+ xf86DrvMsgVerb(0, X_INFO, InfoLevel, "Bios date : %d\n",pCBiosArguments->reg.ex.EDX);
+#endif
+ }
+
+
pCBiosArguments->reg.x.SI = 0;
if(bCRTSUPPORT)
{
@@ -3039,9 +2687,7 @@ CI_STATUS OEM_QueryBiosInfo (CBIOS_ARGUMENTS *pCBiosArguments)
pCBiosArguments->reg.x.SI |= B_DVI;
}
- /*-------------------EAX PART--------------------;
- ; ;
- */
+
VBEReturnStatus = VBEFunctionCallSuccessful;
SetVBERerurnStatus(VBEReturnStatus, pCBiosArguments);
@@ -3052,7 +2698,7 @@ CI_STATUS OEM_QueryBiosInfo (CBIOS_ARGUMENTS *pCBiosArguments)
}
CI_STATUS OEM_QueryBiosCaps (CBIOS_ARGUMENTS *pCBiosArguments)
{
- /* VBIOS not implemented */
+
#if CBIOS_DEBUG
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Entry OEM_QueryBiosCaps()== \n");
#endif
@@ -3099,10 +2745,10 @@ CI_STATUS OEM_QueryDisplayPathInfo (CBIOS_ARGUMENTS *pCBiosArguments)
pCBiosArguments->reg.lh.BL |= Get_NEW_DEV_ID(DISP1);
pCBiosArguments->reg.ex.EBX <<= 2;
- ScratchTempData = GetSRReg(0x58); /* First Display scaling control */
+ ScratchTempData = GetSRReg(0x58);
if (ScratchTempData & BIT0)
{
- ScratchTempData &= (BIT2 + BIT1); /* reserve H and V scaling control bits */
+ ScratchTempData &= (BIT2 + BIT1);
ScratchTempData >>= 1;
pCBiosArguments->reg.lh.BL |= ScratchTempData;
}
@@ -3122,10 +2768,10 @@ CI_STATUS OEM_QueryDisplayPathInfo (CBIOS_ARGUMENTS *pCBiosArguments)
pCBiosArguments->reg.lh.CL |= Get_NEW_DEV_ID(DISP1);
pCBiosArguments->reg.ex.ECX <<= 2;
- ScratchTempData = GetSRReg(0x50); /* Second Display scaling control */
+ ScratchTempData = GetSRReg(0x50);
if (ScratchTempData & BIT0)
{
- ScratchTempData &= (BIT2 + BIT1); /* reserve H and V scaling control bits */
+ ScratchTempData &= (BIT2 + BIT1);
ScratchTempData >>= 1;
pCBiosArguments->reg.lh.BL |= ScratchTempData;
}
@@ -3165,7 +2811,7 @@ CI_STATUS OEM_QueryDeviceConnectStatus (CBIOS_ARGUMENTS *pCBiosArguments)
}
else
{
- /* Detect Monitor From EDID */
+
}
if (bLCDSUPPORT)
@@ -3184,13 +2830,13 @@ CI_STATUS OEM_QueryDeviceConnectStatus (CBIOS_ARGUMENTS *pCBiosArguments)
}
else
{
- /* Query DVI Connect Status */
+
}
}
if (bTVSUPPORT)
{
- /* TV DAC Sense */
+
}
SetVBERerurnStatus(VBEFunctionCallSuccessful, pCBiosArguments);
@@ -3251,26 +2897,26 @@ CI_STATUS OEM_QuerySupportedMode (CBIOS_ARGUMENTS *pCBiosArguments)
{
if (wSerialNumber == 0)
{
- /* BX = VESA mode number */
+
pCBiosArguments->reg.x.BX = wModeNum;
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "mode num = 0x%x \n", pCBiosArguments->reg.x.BX);
- /* CL = Color depth */
+
GetModeColorDepth(wModeNum, pModeInfo, &pCBiosArguments->reg.lh.CL);
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "color depth = %d \n", pCBiosArguments->reg.lh.CL);
- /* CH = Refresh rate index */
+
pCBiosArguments->reg.lh.CH = pRRateTable->RRate_ID;
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "RRate ID = %d \n", pCBiosArguments->reg.lh.CH);
- /* EDX = mode resolution */
+
pCBiosArguments->reg.ex.EDX = (((ULONG)pModeInfo->V_Size) << 16) | (ULONG)pModeInfo->H_Size;
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "H x V = %d x %d \n", pCBiosArguments->reg.x.DX, pCBiosArguments->reg.ex.EDX>>16);
- /* ESI = attribute */
+
pCBiosArguments->reg.x.SI = pRRateTable->Attribute;
- /* EDI = pixel clock */
+
pCBiosArguments->reg.ex.EDI = pRRateTable->Clock;
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "dot clk = %dkhz \n", pCBiosArguments->reg.ex.EDI);
@@ -3330,26 +2976,26 @@ CI_STATUS OEM_QuerySupportedMode (CBIOS_ARGUMENTS *pCBiosArguments)
{
if (wSerialNumber == 0)
{
- /* BX = VESA mode number */
+
pCBiosArguments->reg.x.BX = wModeNum;
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "mode num = 0x%x \n", pCBiosArguments->reg.x.BX);
- /* CL = Color depth */
+
GetModeColorDepth(wModeNum, pModeInfo, &pCBiosArguments->reg.lh.CL);
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "color depth = %d \n", pCBiosArguments->reg.lh.CL);
- /* CH = Refresh rate index */
+
pCBiosArguments->reg.lh.CH = pRRateTable->RRate_ID;
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "RRate ID = %d \n", pCBiosArguments->reg.lh.CH);
- /* EDX = mode resolution */
+
pCBiosArguments->reg.ex.EDX = (((ULONG)pModeInfo->V_Size) << 16) | (ULONG)pModeInfo->H_Size;
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "H x V = %d x %d \n", pCBiosArguments->reg.x.DX, pCBiosArguments->reg.ex.EDX>>16);
- /* ESI = attribute */
+
pCBiosArguments->reg.x.SI = pRRateTable->Attribute;
- /* EDI = pixel clock */
+
pCBiosArguments->reg.ex.EDI = pRRateTable->Clock;
xf86DrvMsgVerb(0, X_INFO, InternalLevel, "dot clk = %dkhz \n", pCBiosArguments->reg.ex.EDI);
@@ -3418,19 +3064,19 @@ CI_STATUS OEM_QueryLCDPanelSizeMode (CBIOS_ARGUMENTS *pCBiosArguments)
return true;
}
- /* BX = VESA mode number */
+
pCBiosArguments->reg.x.BX = wModeNum;
- /* CH = Refresh rate index */
+
pCBiosArguments->reg.lh.CH = pPanelTable->Timing.RRate_ID;
- /* EDX = mode resolution */
+
pCBiosArguments->reg.ex.EDX = (ULONG)pModeInfo->H_Size | ((ULONG)pModeInfo->V_Size) << 16;
- /* SI = attribute */
+
pCBiosArguments->reg.x.SI = pPanelTable->Timing.Attribute;
- /* EDI = pixel clock */
+
pCBiosArguments->reg.ex.EDI = pPanelTable->Timing.Clock;
SetVBERerurnStatus (VBEFunctionCallSuccessful, pCBiosArguments);
@@ -3495,7 +3141,7 @@ CI_STATUS OEM_SetActiveDisplayDevice (CBIOS_ARGUMENTS *pCBiosArguments)
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Entry OEM_SetActiveDisplayDevice()== \n");
#endif
- /* check if new device is available */
+
if ((!CheckForNewDeviceAvailable(bNewDeviceIndex1)&& (bNewDeviceIndex1!=0)) || (!CheckForNewDeviceAvailable(bNewDeviceIndex2)&& (bNewDeviceIndex2!=0)))
{
SetVBERerurnStatus(VBEFunctionCallFail, pCBiosArguments);
@@ -3560,7 +3206,7 @@ CI_STATUS OEM_SetVESAModeForDisplay2 (CBIOS_Extension *pCBIOSExtension)
bCurDeviceID = Get_DEV_ID(DISP2);
bNewDeviceID = Get_NEW_DEV_ID(DISP2);
- /* check if mode is supported no matter which device is preferred */
+
if(!Get_MODE_INFO(wModeNum, &pModeInfo))
{
SetVBERerurnStatus(VBEFunctionCallFail, pCBIOSExtension->pCBiosArguments);
@@ -3569,64 +3215,64 @@ CI_STATUS OEM_SetVESAModeForDisplay2 (CBIOS_Extension *pCBIOSExtension)
#endif
return true;
}
- /* update mode no */
+
Set_VESA_MODE(wModeNum, DISP2);
- /* cut data */
+
SequencerOff(DISP2);
- /* disable scaler */
+
TurnOffScaler(DISP2);
if (bCurDeviceID != bNewDeviceID)
{
- /* control power sequence off */
+
ControlPwrSeqOff(bCurDeviceID);
- /* turn off TX if necessary */
+
- /* turn off digital port */
+
TurnOffDigitalPort(bCurDeviceID);
- /* update scratch IDX_IGA2_DEV_ID */
+
Set_DEV_ID(bNewDeviceID, DISP2);
}
- /* load Display2 VESA Mode init registers??*/
- /* load timing on display2 */
+
+
LoadTiming(DISP2, wModeNum);
- /* set pitch */
+
GetModePitch(wModeNum, &wPitch);
SetPitch(DISP2, wPitch);
- /* set color depth */
+
Get_MODE_INFO(wModeNum, &pModeInfo);
GetModeColorDepth(wModeNum, pModeInfo, &bColorDepth);
SetColorDepth(DISP2, bColorDepth);
- /* load font */
+
- /* load LUT */
+
- /* clear FB */
+
if(!(pCBIOSExtension->pCBiosArguments->reg.x.CX & BIT15))
{
ClearFrameBuffer(DISP2,(ULONG*)(pCBIOSExtension->VideoVirtualAddress),pModeInfo,bColorDepth);
}
- /* set FIFO */
+
SetFIFO(DISP2);
- /* config digital port */
+
ConfigDigitalPort(DISP2);
TurnOnDigitalPort(bNewDeviceID);
- /* Turu on TX */
+
- /* turn on power sequence if necessary */
+
ControlPwrSeqOn(bNewDeviceID);
SequencerOn(DISP2);
@@ -3753,27 +3399,27 @@ CI_STATUS OEM_VideoPOST (CBIOS_ARGUMENTS *pCBiosArguments)
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Entry OEM_VideoPOST()== \n");
#endif
- /* Enable VGA */
+
btemp = InPort(RIO_VGA_ENABLE);
btemp |= 1;
OutPort(RIO_VGA_ENABLE,btemp);
- /* Select 3D4 as CRTC I/O base & Add memory access */
+
btemp = InPort(MISC_READ);
btemp |= 3;
OutPort(MISC_WRITE,btemp);
- /* Open write key */
+
SetCRReg(0x80, 0xA8, 0xFF);
- /* Clear Scratch pad */
+
for(i = 0x81;i < 0x9F;i++)
{
SetCRReg(i, 0x00, 0xFF);
}
- /* Load DRAM timing */
- /* Get HW Trapping */
+
+
btemp = GetCRReg(0xAB);
if((btemp & 0x3) == 0x3)
{
@@ -3782,43 +3428,43 @@ CI_STATUS OEM_VideoPOST (CBIOS_ARGUMENTS *pCBiosArguments)
if(bDDRII400)
{
- /* Set memory PLL(Memory clock:200MHz NS:0x1B, MS:0x00, RS:0x02) */
+
SetCRReg(0xD9, 0x00, 0x80);
SetCRReg(0xD8, 0x9B, 0xFF);
}
else
{
- /* Set memory PLL(Memory clock:266MHz NS:0x38, MS:0x00, RS:0x01) */
+
SetCRReg(0xD9, 0x80, 0x80);
SetCRReg(0xD8, 0x78, 0xFF);
}
- /* Fire memory PLL timing setting */
- /* btemp = GetCRReg(0xBB); */
+
+
btemp = 0x00;
SetCRReg(0xBB, btemp, 0xFF);
- /* Open LCK PLL */
- /* SetCRReg(0xB4, 0x01, 0x01); */
+
+
- /* Load extend table */
+
SerialLoadTable(&pucPOSTInItRegs, 0, 0);
- /* Write the default disp1 scratch pad as CRT */
+
Set_NEW_DEV_ID(0, DISP1);
if(bDDRII400)
{
- /* Load DDRII400 timing table. */
+
SerialLoadTable(&pucDDRII400Tbl, 0, 0);
}
else
{
- /* Load DDRII533 timing table. */
+
SerialLoadTable(&pucDDRII533Tbl, 0, 0);
}
- /* Wait for DDRII setting */
+
do{
btemp = GetCRReg(0x5D);
btemp &= 0x80;
@@ -3826,9 +3472,9 @@ CI_STATUS OEM_VideoPOST (CBIOS_ARGUMENTS *pCBiosArguments)
btemp1 &= 0x01;
}while((btemp != 0x80)||(btemp1 != 0x01));
- /* Set the other registers */
+
SerialLoadTable(&pucExtendRegs2, 0, 0);
- /* SetDCC */
+
#if CBIOS_DEBUG
xf86DrvMsgVerb(0, X_INFO, DefaultLevel, "==Exit OEM_VideoPOST()== \n");
#endif
@@ -3873,15 +3519,18 @@ CI_STATUS OEM_CINT10DataInit (CBIOS_ARGUMENTS *pCBiosArguments)
ParseTable("PCIR", (UCHAR*)pCBiosArguments->reg.ex.ECX, (UCHAR**)(&PCIDataStruct));
xf86DrvMsgVerb(0, X_INFO, InfoLevel, "PCI Data Struct = %x", PCIDataStruct);
+ BiosInfoData = (UCHAR*)pCBiosArguments->reg.ex.ECX;
+ xf86DrvMsgVerb(0, X_INFO, InfoLevel, "Bios info data (header) = %x", BiosInfoData);
+
ParseTable("D1INIT", (UCHAR*)pCBiosArguments->reg.ex.ECX, (UCHAR**)(&Display1VESAModeInitRegs));
xf86DrvMsgVerb(0, X_INFO, InfoLevel, "Display1 VESA Mode Init Regs = %x", Display1VESAModeInitRegs);
SetDeviceSupport();
#if 0
- ParseTable("??????", &ExtendRegs); // POST init table
- ParseTable("??????", &ExtendRegs2); // POST init table
- ParseTable("??????", &DDRII400Tbl); // DDR400 DRAM table
- ParseTable("??????", &DDRII533Tbl); // DDR533 DRAM table
+ ParseTable("??????", &ExtendRegs);
+ ParseTable("??????", &ExtendRegs2);
+ ParseTable("??????", &DDRII400Tbl);
+ ParseTable("??????", &DDRII533Tbl);
#endif
SetVBERerurnStatus(VBEFunctionCallSuccessful, pCBiosArguments);
}
@@ -3897,7 +3546,7 @@ CI_STATUS CInt10(CBIOS_Extension *pCBIOSExtension)
#endif
- /* Fill related IO address */
+
Relocate_IOAddress = pCBIOSExtension->IOAddress;
switch(pCBIOSExtension->pCBiosArguments->reg.x.AX)
@@ -3913,28 +3562,28 @@ CI_STATUS CInt10(CBIOS_Extension *pCBIOSExtension)
case OEMFunction:
switch(pCBIOSExtension->pCBiosArguments->reg.x.BX)
{
- case QueryBiosInfo: /* 0000 */
+ case QueryBiosInfo:
CInt10_Status = OEM_QueryBiosInfo(pCBIOSExtension->pCBiosArguments);
break;
- case QueryBiosCaps: /* 0001 */
+ case QueryBiosCaps:
CInt10_Status = OEM_QueryBiosCaps(pCBIOSExtension->pCBiosArguments);
break;
- case QueryExternalDeviceInfo: /* 0100 */
+ case QueryExternalDeviceInfo:
CInt10_Status = OEM_QueryExternalDeviceInfo(pCBIOSExtension->pCBiosArguments);
break;
- case QueryDisplayPathInfo: /* 0200 */
+ case QueryDisplayPathInfo:
CInt10_Status = OEM_QueryDisplayPathInfo(pCBIOSExtension->pCBiosArguments);
break;
- case QueryDeviceConnectStatus: /* 0201 */
+ case QueryDeviceConnectStatus:
CInt10_Status = OEM_QueryDeviceConnectStatus(pCBIOSExtension->pCBiosArguments);
break;
- case QuerySupportedMode: /* 0202 */
+ case QuerySupportedMode:
CInt10_Status = OEM_QuerySupportedMode(pCBIOSExtension->pCBiosArguments);
break;
- case QueryLCDPanelSizeMode: /* 0203 */
+ case QueryLCDPanelSizeMode:
CInt10_Status = OEM_QueryLCDPanelSizeMode(pCBIOSExtension->pCBiosArguments);
break;
- case QueryLCDPWMLevel: /* 0301 */
+ case QueryLCDPWMLevel:
CInt10_Status = OEM_QueryLCDPWMLevel(pCBIOSExtension->pCBiosArguments);
break;
case QueryTVConfiguration:
@@ -3954,20 +3603,20 @@ CI_STATUS CInt10(CBIOS_Extension *pCBIOSExtension)
CInt10_Status = VBE_SetGetScanLineLength(pCBIOSExtension->pCBiosArguments);
break;
- case SetActiveDisplayDevice: /* 8200 */
+ case SetActiveDisplayDevice:
CInt10_Status = OEM_SetActiveDisplayDevice(pCBIOSExtension->pCBiosArguments);
break;
case SetVESAModeForDisplay2:
CInt10_Status = OEM_SetVESAModeForDisplay2(pCBIOSExtension);
break;
- case SetDevicePowerState: /* 8203 */
+ case SetDevicePowerState:
CInt10_Status = OEM_SetDevicePowerState(pCBIOSExtension->pCBiosArguments);
break;
- case SetDisplay1RefreshRate: /* 8301 */
- case SetDisplay2RefreshRate: /* 8381 */
+ case SetDisplay1RefreshRate:
+ case SetDisplay2RefreshRate:
CInt10_Status = OEM_SetRefreshRate(pCBIOSExtension->pCBiosArguments);
break;
- case SetLCDPWMLevel: /* 8302 */
+ case SetLCDPWMLevel:
CInt10_Status = OEM_SetLCDPWMLevel(pCBIOSExtension->pCBiosArguments);
break;
case SetTVType:
@@ -4017,5 +3666,5 @@ CI_STATUS CInt10(CBIOS_Extension *pCBIOSExtension)
#endif
return CInt10_Status;
-} /* end CInt10() */
+}