diff options
author | Y.C. Chen <yc_chen@aspeedtech.com> | 2013-08-01 21:47:29 +0800 |
---|---|---|
committer | Y.C. Chen <yc_chen@aspeedtech.com> | 2013-08-01 21:47:29 +0800 |
commit | 15b22ad50df0dff78a2db9fb4c536ab7faf92f07 (patch) | |
tree | 2b6c6b503bc34c94258f2f5e7749b6032a990138 /src | |
parent | 414341bd08353c4711cc9c39013ad5023a023738 (diff) |
Support 1360x768 and 1600x900 Resolutions
Diffstat (limited to 'src')
-rw-r--r-- | src/ast.h | 3 | ||||
-rw-r--r-- | src/ast_driver.c | 52 | ||||
-rw-r--r-- | src/ast_mode.c | 149 | ||||
-rw-r--r-- | src/ast_mode.h | 5 | ||||
-rw-r--r-- | src/ast_vgatool.c | 51 |
5 files changed, 162 insertions, 98 deletions
@@ -223,7 +223,7 @@ typedef struct _ASTRec { ULONG ulDRAMSize; ULONG ulVRAMSize; ULONG ulVRAMBase; - ULONG ulMCLK; + ULONG ulMCLK; Bool noAccel; Bool noHWC; @@ -231,6 +231,7 @@ typedef struct _ASTRec { int ENGCaps; int DBGSelect; Bool VGA2Clone; + Bool SupportWideScreen; ULONG FBPhysAddr; /* Frame buffer physical address */ ULONG MMIOPhysAddr; /* MMIO region physical address */ diff --git a/src/ast_driver.c b/src/ast_driver.c index 43fcdbc..4de6c78 100644 --- a/src/ast_driver.c +++ b/src/ast_driver.c @@ -67,6 +67,7 @@ extern void GetDRAMInfo(ScrnInfoPtr pScrn); extern ULONG GetVRAMInfo(ScrnInfoPtr pScrn); extern ULONG GetMaxDCLK(ScrnInfoPtr pScrn); extern void GetChipType(ScrnInfoPtr pScrn); +extern void GetScratchOptions(ScrnInfoPtr pScrn); extern void vASTLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, VisualPtr pVisual); extern void ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags); extern void vSetStartAddressCRT1(ASTRecPtr pAST, ULONG base); @@ -619,6 +620,9 @@ ASTPreInit(ScrnInfoPtr pScrn, int flags) else pAST->jChipType = AST2000; + /* Get Options from Scratch */ + GetScratchOptions(pScrn); + /* Get DRAM Info */ GetDRAMInfo(pScrn); pAST->ulVRAMSize = GetVRAMInfo(pScrn); @@ -1092,17 +1096,8 @@ ASTValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags) if (RequestBufferSize > pAST->ulVRAMSize) return Flags; - /* Check BMC scratch for iKVM compatible */ - if (pAST->jChipType == AST2000) - jReg = 0x80; - else if (pAST->jChipType == AST1180) - jReg = 0x01; - else - { - GetIndexRegMask(CRTC_PORT, 0xD0, 0xFF, jReg); - } - - if ( !(jReg & 0x80) || (jReg & 0x01) ) + /* Valid Wide Screen Mode */ + if (pAST->SupportWideScreen) { if ( (mode->CrtcHDisplay == 1680) && (mode->CrtcVDisplay == 1050) ) return MODE_OK; @@ -1110,27 +1105,27 @@ ASTValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, Bool verbose, int flags) return MODE_OK; if ( (mode->CrtcHDisplay == 1440) && (mode->CrtcVDisplay == 900) ) return MODE_OK; + if ( (mode->CrtcHDisplay == 1360) && (mode->CrtcVDisplay == 768) ) + return MODE_OK; + if ( (mode->CrtcHDisplay == 1600) && (mode->CrtcVDisplay == 900) ) + return MODE_OK; if ( (pAST->jChipType == AST2100) || (pAST->jChipType == AST2200) || (pAST->jChipType == AST2300) || (pAST->jChipType == AST1180) ) { if ( (mode->CrtcHDisplay == 1920) && (mode->CrtcVDisplay == 1080) ) return MODE_OK; + + if ( (mode->CrtcHDisplay == 1920) && (mode->CrtcVDisplay == 1200) ) + { + GetIndexRegMask(CRTC_PORT, 0xD1, 0xFF, jReg); + if (jReg & 0x01) + return MODE_NOMODE; + else + return MODE_OK; + } } } - - /* Add for AST2100, ycchen@061807 */ - if ( (pAST->jChipType == AST2100) || (pAST->jChipType == AST2200) || (pAST->jChipType == AST2300) || (pAST->jChipType == AST1180) ) - { - if ( (mode->CrtcHDisplay == 1920) && (mode->CrtcVDisplay == 1200) ) - { - GetIndexRegMask(CRTC_PORT, 0xD1, 0xFF, jReg); - if (jReg & 0x01) - return MODE_NOMODE; - else - return MODE_OK; - } - } - + switch (mode->CrtcHDisplay) { case 640: @@ -1478,6 +1473,13 @@ ASTDoDDC(ScrnInfoPtr pScrn, int index) if (Flags) { MonInfo = MonInfo1 = xf86InterpretEDID(pScrn->scrnIndex, DDC_data); + + /* Valid Wide Screen Support */ + if ( (MonInfo) && (MonInfo->det_mon[0].type == 0x00) ) + { + if ( (MonInfo->det_mon[0].section.d_timings.h_active * 10 / MonInfo->det_mon[0].section.d_timings.v_active) < 14 ) + pAST->SupportWideScreen = FALSE; + } } /* For VGA2 CLONE Support, ycchen@012508 */ diff --git a/src/ast_mode.c b/src/ast_mode.c index 2e06062..47ab02b 100644 --- a/src/ast_mode.c +++ b/src/ast_mode.c @@ -191,81 +191,96 @@ VBIOS_ENHTABLE_STRUCT Res1600x1200Table[] = { (SyncPP | Charx8Dot), 0xFF, 1, 0x33 }, }; -VBIOS_ENHTABLE_STRUCT Res1920x1200Table[] = { - {2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154, /* 60Hz */ - (SyncNP | Charx8Dot), 60, 1, 0x34 }, - {2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154, /* 60Hz */ - (SyncNP | Charx8Dot), 0xFF, 1, 0x34 }, +/* 16:9 */ +VBIOS_ENHTABLE_STRUCT Res1360x768Table[] = { + {1792, 1360, 64,112, 795, 768, 3, 6, VCLK85_5, /* 60Hz */ + (SyncPP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x39 }, + {1792, 1360, 64,112, 795, 768, 3, 6, VCLK85_5, /* end */ + (SyncPP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x39 }, +}; + +VBIOS_ENHTABLE_STRUCT Res1600x900Table[] = { + {1760, 1600, 48, 32, 926, 900, 3, 5, VCLK97_75, /* 60Hz CVT RB */ + (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x3A }, + {1760, 1600, 48, 32, 926, 900, 3, 5, VCLK97_75, /* end */ + (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x3A }, +}; + +VBIOS_ENHTABLE_STRUCT Res1920x1080Table[] = { + {2200, 1920, 88, 44, 1125, 1080, 4, 5, VCLK148_5, /* HDTV 60Hz */ + (SyncPP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x38 }, + {2200, 1920, 88, 44, 1125, 1080, 4, 5, VCLK148_5, /* end */ + (SyncPP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x38 }, }; /* 16:10 */ VBIOS_ENHTABLE_STRUCT Res1280x800Table[] = { {1440, 1280, 48, 32, 823, 800, 3, 6, VCLK71, /* 60Hz RB */ - (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode), 60, 1, 35 }, + (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 35 }, {1680, 1280, 72,128, 831, 800, 3, 6, VCLK83_5, /* 60Hz */ - (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode), 60, 2, 0x35 }, + (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x35 }, {1680, 1280, 72,128, 831, 800, 3, 6, VCLK83_5, /* 60Hz */ - (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode), 0xFF, 1, 0x35 }, + (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x35 }, }; VBIOS_ENHTABLE_STRUCT Res1440x900Table[] = { {1600, 1440, 48, 32, 926, 900, 3, 6, VCLK88_75, /* 60Hz RB */ - (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode), 60, 1, 0x36 }, + (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x36 }, {1904, 1440, 80,152, 934, 900, 3, 6, VCLK106_5, /* 60Hz */ - (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode), 60, 2, 0x36 }, + (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x36 }, {1904, 1440, 80,152, 934, 900, 3, 6, VCLK106_5, /* 60Hz */ - (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode), 0xFF, 1, 0x36 }, + (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x36 }, }; VBIOS_ENHTABLE_STRUCT Res1680x1050Table[] = { {1840, 1680, 48, 32, 1080, 1050, 3, 6, VCLK119, /* 60Hz RB */ - (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode), 60, 1, 0x37 }, + (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x37 }, {2240, 1680,104,176, 1089, 1050, 3, 6, VCLK146_25, /* 60Hz */ - (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode), 60, 2, 0x37 }, + (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x37 }, {2240, 1680,104,176, 1089, 1050, 3, 6, VCLK146_25, /* 60Hz */ - (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode), 0xFF, 1, 0x37 }, + (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x37 }, }; -/* HDTV */ -VBIOS_ENHTABLE_STRUCT Res1920x1080Table[] = { - {2200, 1920, 88, 44, 1125, 1080, 4, 5, VCLK148_5, /* 60Hz */ - (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode), 60, 1, 0x38 }, - {2200, 1920, 88, 44, 1125, 1080, 4, 5, VCLK148_5, /* 60Hz */ - (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode), 0xFF, 1, 0x38 }, +VBIOS_ENHTABLE_STRUCT Res1920x1200Table[] = { + {2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154, /* 60Hz */ + (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x34 }, + {2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154, /* 60Hz */ + (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x34 }, }; VBIOS_DCLK_INFO DCLKTable [] = { - {0x2C, 0xE7, 0x03}, /* 00: VCLK25_175 */ - {0x95, 0x62, 0x03}, /* 01: VCLK28_322 */ - {0x67, 0x63, 0x01}, /* 02: VCLK31_5 */ - {0x76, 0x63, 0x01}, /* 03: VCLK36 */ - {0xEE, 0x67, 0x01}, /* 04: VCLK40 */ - {0x82, 0x62, 0x01}, /* 05: VCLK49_5 */ - {0xC6, 0x64, 0x01}, /* 06: VCLK50 */ - {0x94, 0x62, 0x01}, /* 07: VCLK56_25 */ - {0x80, 0x64, 0x00}, /* 08: VCLK65 */ - {0x7B, 0x63, 0x00}, /* 09: VCLK75 */ - {0x67, 0x62, 0x00}, /* 0A: VCLK78_75 */ - {0x7C, 0x62, 0x00}, /* 0B: VCLK94_5 */ - {0x8E, 0x62, 0x00}, /* 0C: VCLK108 */ - {0x85, 0x24, 0x00}, /* 0D: VCLK135 */ - {0x67, 0x22, 0x00}, /* 0E: VCLK157_5 */ - {0x6A, 0x22, 0x00}, /* 0F: VCLK162 */ - {0x4d, 0x4c, 0x80}, /* 10: VCLK154 */ - {0xa7, 0x78, 0x80}, /* 11: VCLK83.5 */ - {0x28, 0x49, 0x80}, /* 12: VCLK106.5 */ - {0x37, 0x49, 0x80}, /* 13: VCLK146.25 */ - {0x1f, 0x45, 0x80}, /* 14: VCLK148.5 */ - {0x47, 0x6c, 0x80}, /* 15: VCLK71 */ - {0x25, 0x65, 0x80}, /* 16: VCLK88.75 */ - {0x77, 0x58, 0x80}, /* 17: VCLK119 */ + {0x2C, 0xE7, 0x03}, /* 00: VCLK25_175 */ + {0x95, 0x62, 0x03}, /* 01: VCLK28_322 */ + {0x67, 0x63, 0x01}, /* 02: VCLK31_5 */ + {0x76, 0x63, 0x01}, /* 03: VCLK36 */ + {0xEE, 0x67, 0x01}, /* 04: VCLK40 */ + {0x82, 0x62, 0x01}, /* 05: VCLK49_5 */ + {0xC6, 0x64, 0x01}, /* 06: VCLK50 */ + {0x94, 0x62, 0x01}, /* 07: VCLK56_25 */ + {0x80, 0x64, 0x00}, /* 08: VCLK65 */ + {0x7B, 0x63, 0x00}, /* 09: VCLK75 */ + {0x67, 0x62, 0x00}, /* 0A: VCLK78_75 */ + {0x7C, 0x62, 0x00}, /* 0B: VCLK94_5 */ + {0x8E, 0x62, 0x00}, /* 0C: VCLK108 */ + {0x85, 0x24, 0x00}, /* 0D: VCLK135 */ + {0x67, 0x22, 0x00}, /* 0E: VCLK157_5 */ + {0x6A, 0x22, 0x00}, /* 0F: VCLK162 */ + {0x4d, 0x4c, 0x80}, /* 10: VCLK154 */ + {0xa7, 0x78, 0x80}, /* 11: VCLK83.5 */ + {0x28, 0x49, 0x80}, /* 12: VCLK106.5 */ + {0x37, 0x49, 0x80}, /* 13: VCLK146.25 */ + {0x1f, 0x45, 0x80}, /* 14: VCLK148.5 */ + {0x47, 0x6c, 0x80}, /* 15: VCLK71 */ + {0x25, 0x65, 0x80}, /* 16: VCLK88.75 */ + {0x77, 0x58, 0x80}, /* 17: VCLK119 */ + {0x32, 0x67, 0x80}, /* 18: VCLK85_5 */ }; VBIOS_DCLK_INFO DCLKTable_AST2100 [] = { {0x2C, 0xE7, 0x03}, /* 00: VCLK25_175 */ {0x95, 0x62, 0x03}, /* 01: VCLK28_322 */ - {0x67, 0x63, 0x01}, /* 02: VCLK31_5 */ + {0x67, 0x63, 0x01}, /* 02: VCLK31_5 */ {0x76, 0x63, 0x01}, /* 03: VCLK36 */ {0xEE, 0x67, 0x01}, /* 04: VCLK40 */ {0x82, 0x62, 0x01}, /* 05: VCLK49_5 */ @@ -279,14 +294,15 @@ VBIOS_DCLK_INFO DCLKTable_AST2100 [] = { {0x85, 0x24, 0x00}, /* 0D: VCLK135 */ {0x67, 0x22, 0x00}, /* 0E: VCLK157_5 */ {0x6A, 0x22, 0x00}, /* 0F: VCLK162 */ - {0x4d, 0x4c, 0x80}, /* 10: VCLK154 */ - {0x68, 0x6f, 0x80}, /* 11: VCLK83.5 */ - {0x28, 0x49, 0x80}, /* 12: VCLK106.5 */ - {0x37, 0x49, 0x80}, /* 13: VCLK146.25 */ - {0x1f, 0x45, 0x80}, /* 14: VCLK148.5 */ - {0x47, 0x6c, 0x80}, /* 15: VCLK71 */ - {0x25, 0x65, 0x80}, /* 16: VCLK88.75 */ - {0x77, 0x58, 0x80}, /* 17: VCLK119 */ + {0x4d, 0x4c, 0x80}, /* 10: VCLK154 */ + {0x68, 0x6f, 0x80}, /* 11: VCLK83.5 */ + {0x28, 0x49, 0x80}, /* 12: VCLK106.5 */ + {0x37, 0x49, 0x80}, /* 13: VCLK146.25 */ + {0x1f, 0x45, 0x80}, /* 14: VCLK148.5 */ + {0x47, 0x6c, 0x80}, /* 15: VCLK71 */ + {0x25, 0x65, 0x80}, /* 16: VCLK88.75 */ + {0x77, 0x58, 0x80}, /* 17: VCLK119 */ + {0x32, 0x67, 0x80}, /* 18: VCLK85_5 */ }; VBIOS_DAC_INFO DAC_TEXT[] = { @@ -525,11 +541,17 @@ Bool bGetAST1000VGAModeInfo(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_ else pVGAModeInfo->pEnhTableEntry = (PVBIOS_ENHTABLE_STRUCT) &Res1280x1024Table[ulRefreshRateIndex]; break; + case 1360: + pVGAModeInfo->pEnhTableEntry = (PVBIOS_ENHTABLE_STRUCT) &Res1360x768Table[ulRefreshRateIndex]; + break; case 1440: pVGAModeInfo->pEnhTableEntry = (PVBIOS_ENHTABLE_STRUCT) &Res1440x900Table[ulRefreshRateIndex]; break; case 1600: - pVGAModeInfo->pEnhTableEntry = (PVBIOS_ENHTABLE_STRUCT) &Res1600x1200Table[ulRefreshRateIndex]; + if (mode->CrtcVDisplay == 900) + pVGAModeInfo->pEnhTableEntry = (PVBIOS_ENHTABLE_STRUCT) &Res1600x900Table[ulRefreshRateIndex]; + else + pVGAModeInfo->pEnhTableEntry = (PVBIOS_ENHTABLE_STRUCT) &Res1600x1200Table[ulRefreshRateIndex]; break; case 1680: pVGAModeInfo->pEnhTableEntry = (PVBIOS_ENHTABLE_STRUCT) &Res1680x1050Table[ulRefreshRateIndex]; @@ -602,14 +624,17 @@ Bool bGetAST1000VGAModeInfo(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_ SetIndexReg(CRTC_PORT, 0x8E, (UCHAR) (ulModeID & 0xFF)); /* NewModeInfo */ - SetIndexReg(CRTC_PORT, 0x91, 0xA8); /* signature */ - SetIndexReg(CRTC_PORT, 0x92, (UCHAR) (pScrn->bitsPerPixel) ); - SetIndexReg(CRTC_PORT, 0x93, (UCHAR) (mode->Clock / 1000) ); - SetIndexReg(CRTC_PORT, 0x94, (UCHAR) (mode->CrtcHDisplay) ); - SetIndexReg(CRTC_PORT, 0x95, (UCHAR) (mode->CrtcHDisplay >> 8) ); /* color depth */ - SetIndexReg(CRTC_PORT, 0x96, (UCHAR) (mode->CrtcVDisplay) ); - SetIndexReg(CRTC_PORT, 0x97, (UCHAR) (mode->CrtcVDisplay >> 8) ); /* color depth */ - + SetIndexReg(CRTC_PORT, 0x91, 0x00); /* clear signature */ + if (pVGAModeInfo->pEnhTableEntry->Flags & NewModeInfo) + { + SetIndexReg(CRTC_PORT, 0x91, 0xA8); /* signature */ + SetIndexReg(CRTC_PORT, 0x92, (UCHAR) (pScrn->bitsPerPixel) ); + SetIndexReg(CRTC_PORT, 0x93, (UCHAR) (mode->Clock / 1000) ); + SetIndexReg(CRTC_PORT, 0x94, (UCHAR) (mode->CrtcHDisplay) ); + SetIndexReg(CRTC_PORT, 0x95, (UCHAR) (mode->CrtcHDisplay >> 8) ); /* color depth */ + SetIndexReg(CRTC_PORT, 0x96, (UCHAR) (mode->CrtcVDisplay) ); + SetIndexReg(CRTC_PORT, 0x97, (UCHAR) (mode->CrtcVDisplay >> 8) ); /* color depth */ + } } return (TRUE); diff --git a/src/ast_mode.h b/src/ast_mode.h index 04e4962..950bbce 100644 --- a/src/ast_mode.h +++ b/src/ast_mode.h @@ -57,6 +57,8 @@ #define VCLK71 0x15 #define VCLK88_75 0x16 #define VCLK119 0x17 +#define VCLK85_5 0x18 +#define VCLK97_75 0x19 /* Flags Definition */ #define Charx8Dot 0x00000001 @@ -69,7 +71,8 @@ #define SyncNN 0x000000C0 #define HBorder 0x00000020 #define VBorder 0x00000010 -#define WideScreenMode 0x00000100 +#define WideScreenMode 0x00000100 +#define NewModeInfo 0x00000200 /* DAC Definition */ #define DAC_NUM_TEXT 64 diff --git a/src/ast_vgatool.c b/src/ast_vgatool.c index 378822a..964b826 100644 --- a/src/ast_vgatool.c +++ b/src/ast_vgatool.c @@ -61,6 +61,7 @@ void GetDRAMInfo(ScrnInfoPtr pScrn); ULONG GetVRAMInfo(ScrnInfoPtr pScrn); ULONG GetMaxDCLK(ScrnInfoPtr pScrn); void GetChipType(ScrnInfoPtr pScrn); +void GetScratchOptions(ScrnInfoPtr pScrn); void vAST1000DisplayOn(ASTRecPtr pAST); void vAST1000DisplayOff(ASTRecPtr pAST); void ASTBlankScreen(ScrnInfoPtr pScrn, Bool unblack); @@ -282,13 +283,7 @@ GetChipType(ScrnInfoPtr pScrn) *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = 0x1e6e0000; *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1; - ulData = *(ULONG *) (pAST->MMIOVirtualAddr + 0x1207c); - -#if 0 - if ((ulData & 0x0300) == 0x0200) - pAST->jChipType = AST1100; -#endif switch (ulData & 0x0300) { case 0x0200: @@ -307,13 +302,51 @@ GetChipType(ScrnInfoPtr pScrn) xf86DrvMsg(pScrn->scrnIndex, X_INFO, "AST2100 Detected.\n"); pAST->jChipType = AST2100; } - + +} + +void +GetScratchOptions(ScrnInfoPtr pScrn) +{ + ASTRecPtr pAST = ASTPTR(pScrn); + ULONG ulData; + UCHAR jReg; + /* VGA2 Clone Support */ GetIndexRegMask(CRTC_PORT, 0x90, 0xFF, jReg); if (jReg & 0x10) pAST->VGA2Clone = TRUE; - -} + + /* WideScreen Support */ + switch (pAST->jChipType) + { + case AST1180: + pAST->SupportWideScreen = TRUE; + break; + case AST2000: + pAST->SupportWideScreen = FALSE; + break; + default: + GetIndexRegMask(CRTC_PORT, 0xD0, 0xFF, jReg); + if (!(jReg & 0x80)) + pAST->SupportWideScreen = TRUE; + else if (jReg & 0x01) + pAST->SupportWideScreen = TRUE; + else + { + pAST->SupportWideScreen = FALSE; + if (pAST->jChipType == AST2300) /* for AST1300 */ + { + *(ULONG *) (pAST->MMIOVirtualAddr + 0xF004) = 0x1e6e0000; + *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1; + ulData = *(ULONG *) (pAST->MMIOVirtualAddr + 0x1207c); + if ((ulData & 0x0300) == 0) /* AST1300 */ + pAST->SupportWideScreen = TRUE; + } + } + } /* switch case */ + +} /* GetScratchOptions */ void vSetStartAddressCRT1(ASTRecPtr pAST, ULONG base) |