#include "via_driver.h"
#include "via_bandwidth.h"
void VIADisabledExtendedFIFO(VIABIOSInfoPtr pBIOSInfo)
{
VIABIOSInfoPtr pVia = pBIOSInfo;
CARD32 dwGE230, dwGE298;
DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIADisabledExtendedFIFO\n"));
if (pBIOSInfo->Chipset == VIA_CLE266 && pBIOSInfo->ChipRev < 15 &&
(pBIOSInfo->HDisplay > 1024 || pBIOSInfo->HasSecondary)) {
dwGE298 = VIAGETREG(0x298);
VIASETREG(0x298, dwGE298 | 0x20000000);
dwGE230 = VIAGETREG(0x230);
VIASETREG(0x230, dwGE230 & ~0x00200000);
dwGE298 = VIAGETREG(0x298);
VIASETREG(0x298, dwGE298 & ~0x20000000);
}
}
void VIAEnabledPrimaryExtendedFIFO(VIABIOSInfoPtr pBIOSInfo)
{
VIABIOSInfoPtr pVia = pBIOSInfo;
CARD8 bRegTemp;
CARD32 dwGE230, dwGE298;
DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIAEnabledPrimaryExtendedFIFO\n"));
switch (pBIOSInfo->Chipset) {
case VIA_CLE266:
if (pBIOSInfo->ChipRev > 14) {
if (pBIOSInfo->HasSecondary) {
if (pBIOSInfo->HDisplay >= 1024)
{
VGAOUT8(0x3C4, 0x16);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp |= 0x1C;
VGAOUT8(0x3C5, bRegTemp);
VGAOUT8(0x3C4, 0x17);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x7F;
bRegTemp |= 0x3F;
VGAOUT8(0x3C5, bRegTemp);
}
}
else
{
if (pBIOSInfo->HDisplay > 1024)
{
VGAOUT8(0x3C4, 0x16);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp |= 0x17;
VGAOUT8(0x3C5, bRegTemp);
VGAOUT8(0x3C4, 0x17);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x7F;
bRegTemp |= 0x2F;
VGAOUT8(0x3C5, bRegTemp);
}
}
VGAOUT8(0x3C4, 0x18);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp |= 0x17;
bRegTemp |= 0x40;
VGAOUT8(0x3C5, bRegTemp);
}
else {
if (pBIOSInfo->HDisplay > 1024 || pBIOSInfo->HasSecondary) {
dwGE298 = VIAGETREG(0x298);
VIASETREG(0x298, dwGE298 | 0x20000000);
dwGE230 = VIAGETREG(0x230);
VIASETREG(0x230, dwGE230 | 0x00200000);
dwGE298 = VIAGETREG(0x298);
VIASETREG(0x298, dwGE298 & ~0x20000000);
VGAOUT8(0x3C4, 0x16);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp |= 0x17;
VGAOUT8(0x3C5, bRegTemp);
VGAOUT8(0x3C4, 0x17);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x7F;
bRegTemp |= 0x2F;
VGAOUT8(0x3C5, bRegTemp);
VGAOUT8(0x3C4, 0x18);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp |= 0x17;
bRegTemp |= 0x40;
VGAOUT8(0x3C5, bRegTemp);
}
}
break;
case VIA_KM400:
case VIA_K8M800:
if (pBIOSInfo->HasSecondary) {
if ((pBIOSInfo->HDisplay >= 1600) &&
(pBIOSInfo->MemClk <= VIA_MEM_DDR200)) {
VGAOUT8(0x3C4, 0x17);
VGAOUT8(0x3C5, 0x1C);
VGAOUT8(0x3C4, 0x16);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp = (bRegTemp) | (0x09);
VGAOUT8(0x3C5, bRegTemp);
}
else {
VGAOUT8(0x3C4, 0x17);
VGAOUT8(0x3C5,0x3F);
VGAOUT8(0x3C4, 0x16);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp = (bRegTemp) | (0x1C);
VGAOUT8(0x3C5, bRegTemp);
}
VGAOUT8(0x3C4, 0x18);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp |= 0x17;
bRegTemp |= 0x40;
VGAOUT8(0x3C5, bRegTemp);
}
else {
if ( (pBIOSInfo->HDisplay > 1024) && (pBIOSInfo->HDisplay <= 1280) )
{
VGAOUT8(0x3C4, 0x17);
VGAOUT8(0x3C5, 0x3F);
VGAOUT8(0x3C4, 0x16);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp = (bRegTemp) | (0x17);
VGAOUT8(0x3C5, bRegTemp);
}
else if ((pBIOSInfo->HDisplay > 1280))
{
VGAOUT8(0x3C4, 0x17);
VGAOUT8(0x3C5, 0x3F);
VGAOUT8(0x3C4, 0x16);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp = (bRegTemp) | (0x1C);
VGAOUT8(0x3C5, bRegTemp);
}
else
{
VGAOUT8(0x3C4, 0x17);
VGAOUT8(0x3C5, 0x3F);
VGAOUT8(0x3C4, 0x16);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp = (bRegTemp) | (0x10);
VGAOUT8(0x3C5, bRegTemp);
}
VGAOUT8(0x3C4, 0x18);
bRegTemp = VGAIN8(0x3C5);
bRegTemp &= ~0x3F;
bRegTemp |= 0x17;
bRegTemp |= 0x40;
VGAOUT8(0x3C5, bRegTemp);
}
break;
default:
break;
}
}
void VIAEnabledSecondaryExtendedFIFO(VIABIOSInfoPtr pBIOSInfo)
{
VIABIOSInfoPtr pVia = pBIOSInfo;
CARD8 bRegTemp;
DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIAEnabledSecondaryExtendedFIFO\n"));
switch (pBIOSInfo->Chipset) {
case VIA_CLE266:
if (pBIOSInfo->ChipRev > 15) {
if (((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
(pBIOSInfo->panelX >= 1024)) || (pBIOSInfo->HDisplay >= 1024)) {
VGAOUT8(0x3D4, 0x6a);
bRegTemp = VGAIN8(0x3D5);
bRegTemp |= 0x20;
VGAOUT8(0x3D5, bRegTemp);
VGAOUT8(0x3D4, 0x68);
VGAOUT8(0x3D5, 0xab);
}
else
{
VGAOUT8(0x3D4, 0x6a);
bRegTemp = VGAIN8(0x3D5);
bRegTemp &= ~0x20;
VGAOUT8(0x3D5, bRegTemp);
VGAOUT8(0x3D4, 0x68);
VGAOUT8(0x3D5, 0x67);
}
}
else {
if ((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
(((pBIOSInfo->panelY > 768) && (pBIOSInfo->bitsPerPixel >= 24) &&
(pBIOSInfo->MemClk <= VIA_MEM_DDR200)) ||
((pBIOSInfo->panelX > 1280) && (pBIOSInfo->bitsPerPixel >= 24) &&
(pBIOSInfo->MemClk <= VIA_MEM_DDR266)))) {
VGAOUT8(0x3D4, 0x6a);
bRegTemp = VGAIN8(0x3D5);
bRegTemp |= 0x20;
VGAOUT8(0x3D5, bRegTemp);
VGAOUT8(0x3D4, 0x68);
VGAOUT8(0x3D5, 0xab);
}
else {
VGAOUT8(0x3D4, 0x6a);
bRegTemp = VGAIN8(0x3D5);
bRegTemp &= ~0x20;
VGAOUT8(0x3D5, bRegTemp);
VGAOUT8(0x3D4, 0x68);
VGAOUT8(0x3D5, 0x67);
}
}
break;
case VIA_KM400:
case VIA_K8M800:
if ((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
(pBIOSInfo->panelX >= 1600)) || (pBIOSInfo->HDisplay >= 1600)) &&
(pBIOSInfo->MemClk <= VIA_MEM_DDR200)) {
VGAOUT8(0x3D4, 0x6a);
bRegTemp = VGAIN8(0x3D5);
bRegTemp |= 0x20;
VGAOUT8(0x3D5, bRegTemp);
VGAOUT8(0x3D4, 0x68);
VGAOUT8(0x3D5, 0xeb);
}
else if (((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
(pBIOSInfo->panelX > 1024)) || (pBIOSInfo->HDisplay > 1024)) &&
(pBIOSInfo->bitsPerPixel == 32) &&
(pBIOSInfo->MemClk <= VIA_MEM_DDR333)) ||
((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
(pBIOSInfo->panelX == 1024)) || (pBIOSInfo->HDisplay == 1024)) &&
(pBIOSInfo->bitsPerPixel == 32) &&
(pBIOSInfo->MemClk <= VIA_MEM_DDR200))) {
VGAOUT8(0x3D4, 0x6a);
bRegTemp = VGAIN8(0x3D5);
bRegTemp |= 0x20;
VGAOUT8(0x3D5, bRegTemp);
VGAOUT8(0x3D4, 0x68);
VGAOUT8(0x3D5, 0xca);
}
else if (((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
(pBIOSInfo->panelX > 1280)) || (pBIOSInfo->HDisplay > 1280)) &&
(pBIOSInfo->bitsPerPixel == 16) &&
(pBIOSInfo->MemClk <= VIA_MEM_DDR333)) ||
((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
(pBIOSInfo->panelX == 1280)) || (pBIOSInfo->HDisplay == 1280)) &&
(pBIOSInfo->bitsPerPixel == 16) &&
(pBIOSInfo->MemClk <= VIA_MEM_DDR200))) {
VGAOUT8(0x3D4, 0x6a);
bRegTemp = VGAIN8(0x3D5);
bRegTemp |= 0x20;
VGAOUT8(0x3D5, bRegTemp);
VGAOUT8(0x3D4, 0x68);
VGAOUT8(0x3D5, 0xab);
}
else {
VGAOUT8(0x3D4, 0x6a);
bRegTemp = VGAIN8(0x3D5);
bRegTemp &= ~0x20;
VGAOUT8(0x3D5, bRegTemp);
VGAOUT8(0x3D4, 0x68);
VGAOUT8(0x3D5, 0x67);
}
break;
default:
break;
}
}
void VIAFillExpireNumber(VIABIOSInfoPtr pBIOSInfo)
{
VIABIOSInfoPtr pVia = pBIOSInfo;
CARD8 bRegTemp;
const VIAPanel3C522Tue* TuneExpireNum;
DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIAFillExpireNumber\n"));
switch (pBIOSInfo->Chipset) {
case VIA_CLE266:
if (pBIOSInfo->ChipRev > 14) {
TuneExpireNum = Panel_Tuning_LstC0;
}
else {
TuneExpireNum = Panel_Tuning_Lst;
}
break;
case VIA_KM400:
case VIA_K8M800:
TuneExpireNum = Panel_Tuning_Lst3205;
break;
default:
return;
break;
}
while (TuneExpireNum->wPanelXres != 0) {
if (TuneExpireNum->wPanelXres == pBIOSInfo->panelX &&
TuneExpireNum->wPanelYres == pBIOSInfo->panelY &&
TuneExpireNum->wPanelBpp == pBIOSInfo->bitsPerPixel &&
TuneExpireNum->bRamClock == pBIOSInfo->MemClk) {
VGAOUT8(0x3C4, 0x22);
bRegTemp = VGAIN8(0x3C5) & ~0x1F;
VGAOUT8(0x3C5, (bRegTemp | TuneExpireNum->bTuningValue));
}
TuneExpireNum ++;
}
}