7a96dad686c6cc3a5b813bc27275a3129898963f
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / xgifb / vb_ext.c
1 #include "osdef.h"
2
3
4
5
6
7 #ifdef LINUX_XF86
8 #include "xf86.h"
9 #include "xf86PciInfo.h"
10 #include "xgi.h"
11 #include "xgi_regs.h"
12 #endif
13
14 #ifdef LINUX_KERNEL
15 #include <linux/version.h>
16 #include <asm/io.h>
17 #include <linux/types.h>
18 #include "XGIfb.h"
19 #endif
20
21
22
23 #include "vb_def.h"
24 #include "vgatypes.h"
25 #include "vb_struct.h"
26 #include "vb_util.h"
27 #include "vb_setmode.h"
28 #include "vb_ext.h"
29 extern UCHAR XGI330_SoftSetting;
30 extern UCHAR XGI330_OutputSelect;
31 extern USHORT XGI330_RGBSenseData2;
32 extern USHORT XGI330_YCSenseData2;
33 extern USHORT XGI330_VideoSenseData2;
34 void XGI_GetSenseStatus( PXGI_HW_DEVICE_INFO HwDeviceExtension , PVB_DEVICE_INFO pVBInfo );
35 BOOLEAN XGINew_GetPanelID(PVB_DEVICE_INFO pVBInfo);
36 USHORT XGINew_SenseLCD(PXGI_HW_DEVICE_INFO,PVB_DEVICE_INFO pVBInfo);
37 BOOLEAN XGINew_GetLCDDDCInfo(PXGI_HW_DEVICE_INFO HwDeviceExtension,PVB_DEVICE_INFO pVBInfo);
38 void XGISetDPMS( PXGI_HW_DEVICE_INFO pXGIHWDE , ULONG VESA_POWER_STATE ) ;
39 BOOLEAN XGINew_BridgeIsEnable(PXGI_HW_DEVICE_INFO,PVB_DEVICE_INFO pVBInfo );
40 BOOLEAN XGINew_Sense(USHORT tempbx,USHORT tempcx, PVB_DEVICE_INFO pVBInfo);
41 BOOLEAN XGINew_SenseHiTV( PXGI_HW_DEVICE_INFO HwDeviceExtension , PVB_DEVICE_INFO pVBInfo ) ;
42
43 /**************************************************************
44 Dynamic Sense
45 *************************************************************/
46
47 void XGI_WaitDisplay(void);
48 BOOLEAN XGI_Is301C(PVB_DEVICE_INFO);
49 BOOLEAN XGI_Is301LV(PVB_DEVICE_INFO);
50
51
52
53 /* --------------------------------------------------------------------- */
54 /* Function : XGINew_Is301B */
55 /* Input : */
56 /* Output : */
57 /* Description : */
58 /* --------------------------------------------------------------------- */
59 BOOLEAN XGINew_Is301B( PVB_DEVICE_INFO pVBInfo )
60 {
61 USHORT flag ;
62
63 flag = XGINew_GetReg1( pVBInfo->Part4Port , 0x01 ) ;
64
65 if ( flag > 0x0B0 )
66 return( 0 ) ; /* 301b */
67 else
68 return( 1 ) ;
69 }
70
71 /* --------------------------------------------------------------------- */
72 /* Function : XGI_Is301C */
73 /* Input : */
74 /* Output : */
75 /* Description : */
76 /* --------------------------------------------------------------------- */
77 BOOLEAN XGI_Is301C( PVB_DEVICE_INFO pVBInfo )
78 {
79 if ( ( XGINew_GetReg1( pVBInfo->Part4Port , 0x01 ) & 0xF0 ) == 0xC0 )
80 return( 1 ) ;
81
82 if ( XGINew_GetReg1( pVBInfo->Part4Port , 0x01 ) >= 0xD0 )
83 {
84 if ( XGINew_GetReg1( pVBInfo->Part4Port , 0x39 ) == 0xE0 )
85 return( 1 ) ;
86 }
87
88 return( 0 ) ;
89 }
90
91
92 /* --------------------------------------------------------------------- */
93 /* Function : XGI_Is301LV */
94 /* Input : */
95 /* Output : */
96 /* Description : */
97 /* --------------------------------------------------------------------- */
98 BOOLEAN XGI_Is301LV( PVB_DEVICE_INFO pVBInfo )
99 {
100 if ( XGINew_GetReg1( pVBInfo->Part4Port , 0x01 ) >= 0xD0 )
101 {
102 if ( XGINew_GetReg1( pVBInfo->Part4Port , 0x39 ) == 0xFF )
103 {
104 return( 1 ) ;
105 }
106 }
107 return( 0 ) ;
108 }
109
110
111 /* --------------------------------------------------------------------- */
112 /* Function : XGINew_Sense */
113 /* Input : */
114 /* Output : */
115 /* Description : */
116 /* --------------------------------------------------------------------- */
117 BOOLEAN XGINew_Sense( USHORT tempbx , USHORT tempcx, PVB_DEVICE_INFO pVBInfo )
118 {
119 USHORT temp , i , tempch ;
120
121 temp = tempbx & 0xFF ;
122 XGINew_SetReg1( pVBInfo->Part4Port , 0x11 , temp ) ;
123 temp = ( tempbx & 0xFF00 ) >> 8 ;
124 temp |= ( tempcx & 0x00FF ) ;
125 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x10 , ~0x1F , temp ) ;
126
127 for( i = 0 ; i < 10 ; i++ )
128 XGI_LongWait( pVBInfo) ;
129
130 tempch = ( tempcx & 0x7F00 ) >> 8 ;
131 temp = XGINew_GetReg1( pVBInfo->Part4Port , 0x03 ) ;
132 temp = temp ^ ( 0x0E ) ;
133 temp &= tempch ;
134
135 if ( temp > 0 )
136 return( 1 ) ;
137 else
138 return( 0 ) ;
139 }
140
141
142 /* --------------------------------------------------------------------- */
143 /* Function : XGISetDPMS */
144 /* Input : */
145 /* Output : */
146 /* Description : */
147 /* --------------------------------------------------------------------- */
148 VOID XGISetDPMS( PXGI_HW_DEVICE_INFO pXGIHWDE , ULONG VESA_POWER_STATE )
149 {
150 USHORT ModeNo, ModeIdIndex ;
151 UCHAR temp ;
152 VB_DEVICE_INFO VBINF;
153 PVB_DEVICE_INFO pVBInfo = &VBINF;
154 pVBInfo->BaseAddr = (ULONG)pXGIHWDE->pjIOAddress ;
155 pVBInfo->ROMAddr = pXGIHWDE->pjVirtualRomBase ;
156
157
158 pVBInfo->IF_DEF_LVDS = 0 ;
159 pVBInfo->IF_DEF_CH7005 = 0 ;
160 pVBInfo->IF_DEF_HiVision = 1 ;
161 pVBInfo->IF_DEF_LCDA = 1 ;
162 pVBInfo->IF_DEF_CH7017 = 0 ;
163 pVBInfo->IF_DEF_YPbPr = 1 ;
164 pVBInfo->IF_DEF_CRT2Monitor = 0 ;
165 pVBInfo->IF_DEF_VideoCapture = 0 ;
166 pVBInfo->IF_DEF_ScaleLCD = 0 ;
167 pVBInfo->IF_DEF_OEMUtil = 0 ;
168 pVBInfo->IF_DEF_PWD = 0 ;
169
170 InitTo330Pointer( pXGIHWDE->jChipType, pVBInfo ) ;
171 ReadVBIOSTablData( pXGIHWDE->jChipType , pVBInfo) ;
172
173 pVBInfo->P3c4 = pVBInfo->BaseAddr + 0x14 ;
174 pVBInfo->P3d4 = pVBInfo->BaseAddr + 0x24 ;
175 pVBInfo->P3c0 = pVBInfo->BaseAddr + 0x10 ;
176 pVBInfo->P3ce = pVBInfo->BaseAddr + 0x1e ;
177 pVBInfo->P3c2 = pVBInfo->BaseAddr + 0x12 ;
178 pVBInfo->P3ca = pVBInfo->BaseAddr + 0x1a ;
179 pVBInfo->P3c6 = pVBInfo->BaseAddr + 0x16 ;
180 pVBInfo->P3c7 = pVBInfo->BaseAddr + 0x17 ;
181 pVBInfo->P3c8 = pVBInfo->BaseAddr + 0x18 ;
182 pVBInfo->P3c9 = pVBInfo->BaseAddr + 0x19 ;
183 pVBInfo->P3da = pVBInfo->BaseAddr + 0x2A ;
184 pVBInfo->Part0Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_00 ;
185 pVBInfo->Part1Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_04 ;
186 pVBInfo->Part2Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_10 ;
187 pVBInfo->Part3Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_12 ;
188 pVBInfo->Part4Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_14 ;
189 pVBInfo->Part5Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_14 + 2 ;
190
191 if ( pXGIHWDE->jChipType == XG27 )
192 {
193 if ( ( XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) & 0xE0 ) == 0xC0 )
194 {
195 if ( XGINew_GetReg1( pVBInfo->P3d4 , 0x30 ) & 0x20 )
196 {
197 pVBInfo->IF_DEF_LVDS = 1 ;
198 }
199 }
200 }
201
202 if ( pVBInfo->IF_DEF_CH7007 == 0 )
203 {
204 XGINew_SetModeScratch ( pXGIHWDE , pVBInfo ) ;
205 }
206 XGINew_SetReg1( pVBInfo->P3c4 , 0x05 , 0x86 ) ; /* 1.Openkey */
207 XGI_UnLockCRT2( pXGIHWDE , pVBInfo) ;
208 ModeNo = XGINew_GetReg1( pVBInfo->P3d4 , 0x34 ) ;
209 XGI_SearchModeID( ModeNo , &ModeIdIndex, pVBInfo ) ;
210 XGI_GetVGAType( pXGIHWDE , pVBInfo ) ;
211
212 if ( ( pXGIHWDE->ujVBChipID == VB_CHIP_301 ) || ( pXGIHWDE->ujVBChipID == VB_CHIP_302 ) || ( pVBInfo->IF_DEF_CH7007 == 1 ))
213 {
214 XGI_GetVBType( pVBInfo ) ;
215 XGI_GetVBInfo( ModeNo , ModeIdIndex , pXGIHWDE, pVBInfo ) ;
216 XGI_GetTVInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
217 XGI_GetLCDInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
218 }
219
220 if ( VESA_POWER_STATE == 0x00000400 )
221 XGINew_SetReg1( pVBInfo->Part4Port , 0x31 , ( UCHAR )( XGINew_GetReg1( pVBInfo->Part4Port , 0x31 ) & 0xFE ) ) ;
222 else
223 XGINew_SetReg1( pVBInfo->Part4Port , 0x31 , ( UCHAR )( XGINew_GetReg1( pVBInfo->Part4Port , 0x31 ) | 0x01 ) ) ;
224
225 temp = ( UCHAR )XGINew_GetReg1( pVBInfo->P3c4 , 0x1f ) ;
226 temp &= 0x3f ;
227 switch ( VESA_POWER_STATE )
228 {
229 case 0x00000000: /* on */
230 if ( ( pXGIHWDE->ujVBChipID == VB_CHIP_301 ) || ( pXGIHWDE->ujVBChipID == VB_CHIP_302 ) )
231 {
232 XGINew_SetReg1( pVBInfo->P3c4 , 0x1f , ( UCHAR )( temp | 0x00 ) ) ;
233 XGI_EnableBridge( pXGIHWDE, pVBInfo ) ;
234 }
235 else
236 {
237 if ( pXGIHWDE->jChipType == XG21 )
238 {
239 if ( pVBInfo->IF_DEF_LVDS == 1 )
240 {
241 XGI_XG21BLSignalVDD( 0x01 , 0x01, pVBInfo ) ; /* LVDS VDD on */
242 XGI_XG21SetPanelDelay( 2,pVBInfo ) ;
243 }
244 }
245 if ( pXGIHWDE->jChipType == XG27 )
246 {
247 if ( pVBInfo->IF_DEF_LVDS == 1 )
248 {
249 XGI_XG27BLSignalVDD( 0x01 , 0x01, pVBInfo ) ; /* LVDS VDD on */
250 XGI_XG21SetPanelDelay( 2,pVBInfo ) ;
251 }
252 }
253 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x1F , ~0xC0 , 0x00 ) ;
254 XGINew_SetRegAND( pVBInfo->P3c4 , 0x01 , ~0x20 ) ; /* CRT on */
255
256 if ( pXGIHWDE->jChipType == XG21 )
257 {
258 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) ;
259 if ( temp & 0xE0 )
260 {
261 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x09 , ~0x80 , 0x80 ) ; /* DVO ON */
262 XGI_SetXG21FPBits( pVBInfo );
263 XGINew_SetRegAND( pVBInfo->P3d4 , 0x4A , ~0x20 ) ; /* Enable write GPIOF */
264 /*XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x48 , ~0x20 , 0x20 ) ;*/ /* LCD Display ON */
265 }
266 XGI_XG21BLSignalVDD( 0x20 , 0x20, pVBInfo ) ; /* LVDS signal on */
267 XGI_DisplayOn( pXGIHWDE, pVBInfo );
268 }
269 if ( pXGIHWDE->jChipType == XG27 )
270 {
271 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) ;
272 if ( temp & 0xE0 )
273 {
274 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x09 , ~0x80 , 0x80 ) ; /* DVO ON */
275 XGI_SetXG27FPBits( pVBInfo );
276 XGINew_SetRegAND( pVBInfo->P3d4 , 0x4A , ~0x20 ) ; /* Enable write GPIOF */
277 /*XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x48 , ~0x20 , 0x20 ) ;*/ /* LCD Display ON */
278 }
279 XGI_XG27BLSignalVDD( 0x20 , 0x20, pVBInfo ) ; /* LVDS signal on */
280 XGI_DisplayOn( pXGIHWDE, pVBInfo );
281 }
282 }
283 break ;
284 case 0x00000100: /* standby */
285 if ( pXGIHWDE->jChipType >= XG21 )
286 {
287 XGI_DisplayOff( pXGIHWDE, pVBInfo );
288 }
289
290 XGINew_SetReg1( pVBInfo->P3c4 , 0x1f , ( UCHAR )( temp | 0x40 ) ) ;
291 break ;
292 case 0x00000200: /* suspend */
293 if ( pXGIHWDE->jChipType == XG21 )
294 {
295 XGI_DisplayOff( pXGIHWDE, pVBInfo );
296 XGI_XG21BLSignalVDD( 0x20 , 0x00, pVBInfo ) ; /* LVDS signal off */
297 }
298 if ( pXGIHWDE->jChipType == XG27 )
299 {
300 XGI_DisplayOff( pXGIHWDE, pVBInfo );
301 XGI_XG27BLSignalVDD( 0x20 , 0x00, pVBInfo ) ; /* LVDS signal off */
302 }
303 XGINew_SetReg1( pVBInfo->P3c4 , 0x1f , ( UCHAR )( temp | 0x80 ) ) ;
304 break ;
305 case 0x00000400: /* off */
306 if ( (pXGIHWDE->ujVBChipID == VB_CHIP_301 ) || ( pXGIHWDE->ujVBChipID == VB_CHIP_302 ) )
307 {
308 XGINew_SetReg1( pVBInfo->P3c4 , 0x1f , ( UCHAR )( temp | 0xc0 ) ) ;
309 XGI_DisableBridge( pXGIHWDE, pVBInfo ) ;
310 }
311 else
312 {
313 if ( pXGIHWDE->jChipType == XG21 )
314 {
315 XGI_DisplayOff( pXGIHWDE, pVBInfo );
316
317 XGI_XG21BLSignalVDD( 0x20 , 0x00, pVBInfo ) ; /* LVDS signal off */
318
319 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) ;
320 if ( temp & 0xE0 )
321 {
322 XGINew_SetRegAND( pVBInfo->P3c4 , 0x09 , ~0x80 ) ; /* DVO Off */
323 XGINew_SetRegAND( pVBInfo->P3d4 , 0x4A , ~0x20 ) ; /* Enable write GPIOF */
324 /*XGINew_SetRegAND( pVBInfo->P3d4 , 0x48 , ~0x20 ) ;*/ /* LCD Display OFF */
325 }
326 }
327 if ( pXGIHWDE->jChipType == XG27 )
328 {
329 XGI_DisplayOff( pXGIHWDE, pVBInfo );
330
331 XGI_XG27BLSignalVDD( 0x20 , 0x00, pVBInfo ) ; /* LVDS signal off */
332
333 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) ;
334 if ( temp & 0xE0 )
335 {
336 XGINew_SetRegAND( pVBInfo->P3c4 , 0x09 , ~0x80 ) ; /* DVO Off */
337 }
338 }
339 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x1F , ~0xC0 , 0xC0 ) ;
340 XGINew_SetRegOR( pVBInfo->P3c4 , 0x01 , 0x20 ) ; /* CRT Off */
341
342 if ( ( pXGIHWDE->jChipType == XG21 ) && ( pVBInfo->IF_DEF_LVDS == 1 ) )
343 {
344 XGI_XG21SetPanelDelay( 4,pVBInfo ) ;
345 XGI_XG21BLSignalVDD( 0x01 , 0x00, pVBInfo ) ; /* LVDS VDD off */
346 XGI_XG21SetPanelDelay( 5,pVBInfo ) ;
347 }
348 if ( ( pXGIHWDE->jChipType == XG27 ) && ( pVBInfo->IF_DEF_LVDS == 1 ) )
349 {
350 XGI_XG21SetPanelDelay( 4,pVBInfo ) ;
351 XGI_XG27BLSignalVDD( 0x01 , 0x00, pVBInfo ) ; /* LVDS VDD off */
352 XGI_XG21SetPanelDelay( 5,pVBInfo ) ;
353 }
354 }
355 break ;
356
357 default:
358 break ;
359 }
360 XGI_LockCRT2( pXGIHWDE , pVBInfo ) ;
361 }
362
363
364
365 /* --------------------------------------------------------------------- */
366 /* Function : XGI_GetSenseStatus */
367 /* Input : */
368 /* Output : */
369 /* Description : */
370 /* --------------------------------------------------------------------- */
371 void XGI_GetSenseStatus( PXGI_HW_DEVICE_INFO HwDeviceExtension , PVB_DEVICE_INFO pVBInfo)
372 {
373 USHORT tempax = 0 , tempbx , tempcx , temp ,
374 P2reg0 = 0 , SenseModeNo = 0 , OutputSelect = *pVBInfo->pOutputSelect ,
375 ModeIdIndex , i ;
376 pVBInfo->BaseAddr = (ULONG)HwDeviceExtension->pjIOAddress ;
377
378 if ( pVBInfo->IF_DEF_LVDS == 1 )
379 {
380 tempax = XGINew_GetReg1( pVBInfo->P3c4 , 0x1A ) ; /* ynlai 02/27/2002 */
381 tempbx = XGINew_GetReg1( pVBInfo->P3c4 , 0x1B ) ;
382 tempax = ( ( tempax & 0xFE ) >> 1 ) | ( tempbx << 8 ) ;
383 if ( tempax == 0x00 )
384 { /* Get Panel id from DDC */
385 temp = XGINew_GetLCDDDCInfo( HwDeviceExtension, pVBInfo ) ;
386 if ( temp == 1 )
387 { /* LCD connect */
388 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x39 , 0xFF , 0x01 ) ; /* set CR39 bit0="1" */
389 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x37 , 0xEF , 0x00 ) ; /* clean CR37 bit4="0" */
390 temp = LCDSense ;
391 }
392 else
393 { /* LCD don't connect */
394 temp = 0 ;
395 }
396 }
397 else
398 {
399 XGINew_GetPanelID(pVBInfo) ;
400 temp = LCDSense ;
401 }
402
403 tempbx = ~( LCDSense | AVIDEOSense | SVIDEOSense ) ;
404 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x32 , tempbx , temp ) ;
405 }
406 else
407 { /* for 301 */
408 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
409 { /* for HiVision */
410 tempax = XGINew_GetReg1( pVBInfo->P3c4 , 0x38 ) ;
411 temp = tempax & 0x01 ;
412 tempax = XGINew_GetReg1( pVBInfo->P3c4 , 0x3A ) ;
413 temp = temp | ( tempax & 0x02 ) ;
414 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x32 , 0xA0 , temp ) ;
415 }
416 else
417 {
418 if ( XGI_BridgeIsOn( pVBInfo ) )
419 {
420 P2reg0 = XGINew_GetReg1( pVBInfo->Part2Port , 0x00 ) ;
421 if ( !XGINew_BridgeIsEnable( HwDeviceExtension, pVBInfo ) )
422 {
423 SenseModeNo = 0x2e ;
424 /* XGINew_SetReg1( pVBInfo->P3d4 , 0x30 , 0x41 ) ; */
425 /* XGISetModeNew( HwDeviceExtension , 0x2e ) ; // ynlai InitMode */
426
427 temp = XGI_SearchModeID( SenseModeNo , &ModeIdIndex, pVBInfo ) ;
428 XGI_GetVGAType( HwDeviceExtension , pVBInfo) ;
429 XGI_GetVBType( pVBInfo ) ;
430 pVBInfo->SetFlag = 0x00 ;
431 pVBInfo->ModeType = ModeVGA ;
432 pVBInfo->VBInfo = SetCRT2ToRAMDAC | LoadDACFlag | SetInSlaveMode ;
433 XGI_GetLCDInfo( 0x2e , ModeIdIndex, pVBInfo ) ;
434 XGI_GetTVInfo( 0x2e , ModeIdIndex, pVBInfo ) ;
435 XGI_EnableBridge( HwDeviceExtension, pVBInfo ) ;
436 XGI_SetCRT2Group301( SenseModeNo , HwDeviceExtension, pVBInfo ) ;
437 XGI_SetCRT2ModeRegs( 0x2e , HwDeviceExtension, pVBInfo ) ;
438 /* XGI_DisableBridge( HwDeviceExtension, pVBInfo ) ; */
439 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x01 , 0xDF , 0x20 ) ; /* Display Off 0212 */
440 for( i = 0 ; i < 20 ; i++ )
441 {
442 XGI_LongWait(pVBInfo) ;
443 }
444 }
445 XGINew_SetReg1( pVBInfo->Part2Port , 0x00 , 0x1c ) ;
446 tempax = 0 ;
447 tempbx = *pVBInfo->pRGBSenseData ;
448
449 if ( !( XGINew_Is301B( pVBInfo ) ) )
450 {
451 tempbx = *pVBInfo->pRGBSenseData2 ;
452 }
453
454 tempcx = 0x0E08 ;
455 if ( XGINew_Sense(tempbx , tempcx, pVBInfo ) )
456 {
457 if ( XGINew_Sense(tempbx , tempcx, pVBInfo ) )
458 {
459 tempax |= Monitor2Sense ;
460 }
461 }
462
463 if ( pVBInfo->VBType & VB_XGI301C)
464 {
465 XGINew_SetRegOR( pVBInfo->Part4Port , 0x0d , 0x04 ) ;
466 }
467
468 if ( XGINew_SenseHiTV( HwDeviceExtension , pVBInfo) ) /* add by kuku for Multi-adapter sense HiTV */
469 {
470 tempax |= HiTVSense ;
471 if ( ( pVBInfo->VBType & VB_XGI301C ) )
472 {
473 tempax ^= ( HiTVSense | YPbPrSense ) ;
474 }
475 }
476
477 if ( !( tempax & ( HiTVSense | YPbPrSense ) ) ) /* start */
478 {
479
480 tempbx = *pVBInfo->pYCSenseData ;
481
482 if ( !( XGINew_Is301B( pVBInfo ) ) )
483 {
484 tempbx=*pVBInfo->pYCSenseData2;
485 }
486
487 tempcx = 0x0604 ;
488 if ( XGINew_Sense(tempbx , tempcx, pVBInfo ) )
489 {
490 if ( XGINew_Sense(tempbx , tempcx, pVBInfo ) )
491 {
492 tempax |= SVIDEOSense ;
493 }
494 }
495
496 if ( OutputSelect & BoardTVType )
497 {
498 tempbx = *pVBInfo->pVideoSenseData ;
499
500 if ( !( XGINew_Is301B( pVBInfo ) ) )
501 {
502 tempbx = *pVBInfo->pVideoSenseData2 ;
503 }
504
505 tempcx = 0x0804 ;
506 if ( XGINew_Sense(tempbx , tempcx, pVBInfo ) )
507 {
508 if ( XGINew_Sense(tempbx , tempcx, pVBInfo ) )
509 {
510 tempax |= AVIDEOSense ;
511 }
512 }
513 }
514 else
515 {
516 if ( !( tempax & SVIDEOSense ) )
517 {
518 tempbx = *pVBInfo->pVideoSenseData ;
519
520 if ( !( XGINew_Is301B( pVBInfo ) ) )
521 {
522 tempbx=*pVBInfo->pVideoSenseData2;
523 }
524
525 tempcx = 0x0804 ;
526 if ( XGINew_Sense(tempbx , tempcx, pVBInfo ) )
527 {
528 if ( XGINew_Sense(tempbx , tempcx, pVBInfo ) )
529 {
530 tempax |= AVIDEOSense ;
531 }
532 }
533 }
534 }
535 }
536 } /* end */
537 if ( !( tempax & Monitor2Sense ) )
538 {
539 if ( XGINew_SenseLCD( HwDeviceExtension, pVBInfo ) )
540 {
541 tempax |= LCDSense ;
542 }
543 }
544 tempbx = 0 ;
545 tempcx = 0 ;
546 XGINew_Sense(tempbx , tempcx, pVBInfo ) ;
547
548 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x32 , ~0xDF , tempax ) ;
549 XGINew_SetReg1( pVBInfo->Part2Port , 0x00 , P2reg0 ) ;
550
551 if ( !( P2reg0 & 0x20 ) )
552 {
553 pVBInfo->VBInfo = DisableCRT2Display ;
554 /* XGI_SetCRT2Group301( SenseModeNo , HwDeviceExtension, pVBInfo ) ; */
555 }
556 }
557 }
558 XGI_DisableBridge( HwDeviceExtension, pVBInfo ) ; /* shampoo 0226 */
559
560 }
561
562
563
564 /* --------------------------------------------------------------------- */
565 /* Function : XGINew_SenseLCD */
566 /* Input : */
567 /* Output : */
568 /* Description : */
569 /* --------------------------------------------------------------------- */
570 USHORT XGINew_SenseLCD( PXGI_HW_DEVICE_INFO HwDeviceExtension ,PVB_DEVICE_INFO pVBInfo)
571 {
572 /* USHORT SoftSetting ; */
573 USHORT temp ;
574
575 if ( ( HwDeviceExtension->jChipType >= XG20 ) || ( HwDeviceExtension->jChipType >= XG40 ) )
576 temp = 0 ;
577 else
578 temp=XGINew_GetPanelID(pVBInfo) ;
579
580 if( !temp )
581 temp = XGINew_GetLCDDDCInfo( HwDeviceExtension, pVBInfo ) ;
582
583 return( temp ) ;
584 }
585
586
587 /* --------------------------------------------------------------------- */
588 /* Function : XGINew_GetLCDDDCInfo */
589 /* Input : */
590 /* Output : */
591 /* Description : */
592 /* --------------------------------------------------------------------- */
593 BOOLEAN XGINew_GetLCDDDCInfo( PXGI_HW_DEVICE_INFO HwDeviceExtension,PVB_DEVICE_INFO pVBInfo)
594 {
595 USHORT temp ;
596
597 /* add lcd sense */
598 if ( HwDeviceExtension->ulCRT2LCDType == LCD_UNKNOWN )
599 {
600 return( 0 ) ;
601 }
602 else
603 {
604 temp = ( USHORT )HwDeviceExtension->ulCRT2LCDType ;
605 switch( HwDeviceExtension->ulCRT2LCDType )
606 {
607 case LCD_INVALID:
608 case LCD_800x600:
609 case LCD_1024x768:
610 case LCD_1280x1024:
611 break ;
612
613 case LCD_640x480:
614 case LCD_1024x600:
615 case LCD_1152x864:
616 case LCD_1280x960:
617 case LCD_1152x768:
618 temp = 0 ;
619 break ;
620
621 case LCD_1400x1050:
622 case LCD_1280x768:
623 case LCD_1600x1200:
624 break ;
625
626 case LCD_1920x1440:
627 case LCD_2048x1536:
628 temp = 0 ;
629 break ;
630
631 default:
632 break ;
633 }
634 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x36 , 0xF0 , temp ) ;
635 return( 1 ) ;
636 }
637 }
638
639
640 /* --------------------------------------------------------------------- */
641 /* Function : */
642 /* Input : */
643 /* Output : */
644 /* Description : */
645 /* --------------------------------------------------------------------- */
646 BOOLEAN XGINew_GetPanelID(PVB_DEVICE_INFO pVBInfo )
647 {
648 USHORT PanelTypeTable[ 16 ] = { SyncNN | PanelRGB18Bit | Panel800x600 | _PanelType00 ,
649 SyncNN | PanelRGB18Bit | Panel1024x768 | _PanelType01 ,
650 SyncNN | PanelRGB18Bit | Panel800x600 | _PanelType02 ,
651 SyncNN | PanelRGB18Bit | Panel640x480 | _PanelType03 ,
652 SyncNN | PanelRGB18Bit | Panel1024x768 | _PanelType04 ,
653 SyncNN | PanelRGB18Bit | Panel1024x768 | _PanelType05 ,
654 SyncNN | PanelRGB18Bit | Panel1024x768 | _PanelType06 ,
655 SyncNN | PanelRGB24Bit | Panel1024x768 | _PanelType07 ,
656 SyncNN | PanelRGB18Bit | Panel800x600 | _PanelType08 ,
657 SyncNN | PanelRGB18Bit | Panel1024x768 | _PanelType09 ,
658 SyncNN | PanelRGB18Bit | Panel800x600 | _PanelType0A ,
659 SyncNN | PanelRGB18Bit | Panel1024x768 | _PanelType0B ,
660 SyncNN | PanelRGB18Bit | Panel1024x768 | _PanelType0C ,
661 SyncNN | PanelRGB24Bit | Panel1024x768 | _PanelType0D ,
662 SyncNN | PanelRGB18Bit | Panel1024x768 | _PanelType0E ,
663 SyncNN | PanelRGB18Bit | Panel1024x768 | _PanelType0F } ;
664 USHORT tempax , tempbx , temp ;
665 /* USHORT return_flag ; */
666
667 tempax = XGINew_GetReg1( pVBInfo->P3c4 , 0x1A ) ;
668 tempbx = tempax & 0x1E ;
669
670 if ( tempax == 0 )
671 return( 0 ) ;
672 else
673 {
674 /*
675 if ( !( tempax & 0x10 ) )
676 {
677 if ( pVBInfo->IF_DEF_LVDS == 1 )
678 {
679 tempbx = 0 ;
680 temp = XGINew_GetReg1( pVBInfo->P3c4 , 0x38 ) ;
681 if ( temp & 0x40 )
682 tempbx |= 0x08 ;
683 if ( temp & 0x20 )
684 tempbx |= 0x02 ;
685 if ( temp & 0x01 )
686 tempbx |= 0x01 ;
687
688 temp = XGINew_GetReg1( pVBInfo->P3c4 , 0x39 ) ;
689 if ( temp & 0x80 )
690 tempbx |= 0x04 ;
691 }
692 else
693 {
694 return( 0 ) ;
695 }
696 }
697 */
698
699 tempbx = tempbx >> 1 ;
700 temp = tempbx & 0x00F ;
701 XGINew_SetReg1( pVBInfo->P3d4 , 0x36 , temp ) ;
702 tempbx-- ;
703 tempbx = PanelTypeTable[ tempbx ] ;
704
705 temp = ( tempbx & 0xFF00 ) >> 8 ;
706 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x37 , ~( LCDSyncBit | LCDRGB18Bit ) , temp ) ;
707 return( 1 ) ;
708 }
709 }
710
711
712 /* --------------------------------------------------------------------- */
713 /* Function : XGINew_BridgeIsEnable */
714 /* Input : */
715 /* Output : */
716 /* Description : */
717 /* --------------------------------------------------------------------- */
718 BOOLEAN XGINew_BridgeIsEnable( PXGI_HW_DEVICE_INFO HwDeviceExtension ,PVB_DEVICE_INFO pVBInfo)
719 {
720 USHORT flag ;
721
722 if ( XGI_BridgeIsOn( pVBInfo ) == 0 )
723 {
724 flag = XGINew_GetReg1( pVBInfo->Part1Port , 0x0 ) ;
725
726 if ( flag & 0x050 )
727 {
728 return( 1 ) ;
729 }
730 else
731 {
732 return( 0 ) ;
733 }
734
735 }
736 return( 0 ) ;
737 }
738
739 /* ------------------------------------------------------ */
740 /* Function : XGINew_SenseHiTV */
741 /* Input : */
742 /* Output : */
743 /* Description : */
744 /* ------------------------------------------------------ */
745 BOOLEAN XGINew_SenseHiTV( PXGI_HW_DEVICE_INFO HwDeviceExtension , PVB_DEVICE_INFO pVBInfo )
746 {
747 USHORT tempbx , tempcx , temp , i , tempch;
748
749 tempbx = *pVBInfo->pYCSenseData2 ;
750
751 tempcx = 0x0604 ;
752
753 temp = tempbx & 0xFF ;
754 XGINew_SetReg1( pVBInfo->Part4Port , 0x11 , temp ) ;
755 temp = ( tempbx & 0xFF00 ) >> 8 ;
756 temp |= ( tempcx & 0x00FF ) ;
757 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x10 , ~0x1F , temp ) ;
758
759 for( i = 0 ; i < 10 ; i++ )
760 XGI_LongWait(pVBInfo) ;
761
762 tempch = ( tempcx & 0xFF00 ) >> 8;
763 temp = XGINew_GetReg1( pVBInfo->Part4Port , 0x03 ) ;
764 temp = temp ^ ( 0x0E ) ;
765 temp &= tempch ;
766
767 if ( temp != tempch )
768 return( 0 ) ;
769
770 tempbx = *pVBInfo->pVideoSenseData2 ;
771
772 tempcx = 0x0804 ;
773 temp = tempbx & 0xFF ;
774 XGINew_SetReg1( pVBInfo->Part4Port , 0x11 , temp ) ;
775 temp = ( tempbx & 0xFF00 ) >> 8 ;
776 temp |= ( tempcx & 0x00FF ) ;
777 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x10 , ~0x1F , temp ) ;
778
779 for( i = 0 ; i < 10 ; i++ )
780 XGI_LongWait(pVBInfo) ;
781
782 tempch = ( tempcx & 0xFF00 ) >> 8;
783 temp = XGINew_GetReg1( pVBInfo->Part4Port , 0x03 ) ;
784 temp = temp ^ ( 0x0E ) ;
785 temp &= tempch ;
786
787 if ( temp != tempch )
788 return( 0 ) ;
789 else
790 {
791 tempbx = 0x3FF ;
792 tempcx = 0x0804 ;
793 temp = tempbx & 0xFF ;
794 XGINew_SetReg1( pVBInfo->Part4Port , 0x11 , temp ) ;
795 temp = ( tempbx & 0xFF00 ) >> 8 ;
796 temp |= ( tempcx & 0x00FF ) ;
797 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x10 , ~0x1F , temp ) ;
798
799 for( i = 0 ; i < 10 ; i++ )
800 XGI_LongWait(pVBInfo) ;
801
802 tempch = ( tempcx & 0xFF00 ) >> 8;
803 temp = XGINew_GetReg1( pVBInfo->Part4Port , 0x03 ) ;
804 temp = temp ^ ( 0x0E ) ;
805 temp &= tempch ;
806
807 if ( temp != tempch )
808 return( 1 ) ;
809 else
810 return( 0 ) ;
811 }
812 }
813
814
815
816 /*
817 ;-----------------------------------------------------------------------------
818 ; Description: Get Panel support
819 ; O/P :
820 ; BL: Panel ID=81h for no scaler LVDS
821 ; BH: Panel enhanced Mode Count
822 ; CX: Panel H. resolution
823 ; DX: PAnel V. resolution
824 ;-----------------------------------------------------------------------------
825 */
826 void XGI_XG21Fun14Sub70( PVB_DEVICE_INFO pVBInfo , PX86_REGS pBiosArguments )
827 {
828
829 USHORT ModeIdIndex;
830 USHORT ModeNo;
831
832 USHORT EModeCount;
833 USHORT lvdstableindex;
834
835 lvdstableindex = XGI_GetLVDSOEMTableIndex( pVBInfo );
836 pBiosArguments->h.bl = 0x81;
837 pBiosArguments->x.cx = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHDE;
838 pBiosArguments->x.dx = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVDE;
839 EModeCount = 0;
840
841 pBiosArguments->x.ax = 0x0014;
842 for( ModeIdIndex = 0 ; ; ModeIdIndex ++ )
843 {
844 ModeNo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeID;
845 if ( pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeID == 0xFF )
846 {
847 pBiosArguments->h.bh = (UCHAR) EModeCount;
848 return;
849 }
850 if ( !XGI_XG21CheckLVDSMode( ModeNo , ModeIdIndex, pVBInfo) )
851 {
852 continue;
853 }
854 EModeCount++ ;
855 }
856 }
857 /*(
858 ;-----------------------------------------------------------------------------
859 ;
860 ; Description: Get Panel mode ID for enhanced mode
861 ; I/P : BH: EModeIndex ( which < Panel enhanced Mode Count )
862 ; O/P :
863 ; BL: Mode ID
864 ; CX: H. resolution of the assigned by the index
865 ; DX: V. resolution of the assigned by the index
866 ;
867 ;-----------------------------------------------------------------------------
868 */
869 void XGI_XG21Fun14Sub71( PVB_DEVICE_INFO pVBInfo , PX86_REGS pBiosArguments )
870 {
871
872 USHORT EModeCount;
873 USHORT ModeIdIndex,resindex;
874 USHORT ModeNo;
875 USHORT EModeIndex = pBiosArguments->h.bh;
876
877 EModeCount = 0;
878 for( ModeIdIndex = 0 ; ; ModeIdIndex ++ )
879 {
880 ModeNo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeID;
881 if ( pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeID == 0xFF )
882 {
883 pBiosArguments->x.ax = 0x0114;
884 return;
885 }
886 if ( !XGI_XG21CheckLVDSMode( ModeNo , ModeIdIndex, pVBInfo) )
887 {
888 continue;
889 }
890 if (EModeCount == EModeIndex)
891 {
892 resindex = XGI_GetResInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
893 pBiosArguments->h.bl = (UCHAR) ModeNo;
894 pBiosArguments->x.cx = pVBInfo->ModeResInfo[ resindex ].HTotal ; /* xres->ax */
895 pBiosArguments->x.dx = pVBInfo->ModeResInfo[ resindex ].VTotal ; /* yres->bx */
896 pBiosArguments->x.ax = 0x0014;
897 }
898 EModeCount++ ;
899
900 }
901
902 }
903 /*
904 ;-----------------------------------------------------------------------------
905 ;
906 ; Description: Validate Panel modes ID support
907 ; I/P :
908 ; BL: ModeID
909 ; O/P :
910 ; CX: H. resolution of the assigned by the index
911 ; DX: V. resolution of the assigned by the index
912 ;
913 ;-----------------------------------------------------------------------------
914 */
915 void XGI_XG21Fun14Sub72( PVB_DEVICE_INFO pVBInfo , PX86_REGS pBiosArguments )
916 {
917 USHORT ModeIdIndex,resindex;
918 USHORT ModeNo;
919
920
921 ModeNo = pBiosArguments->h.bl ;
922 XGI_SearchModeID( ModeNo, &ModeIdIndex, pVBInfo);
923 if ( !XGI_XG21CheckLVDSMode( ModeNo , ModeIdIndex, pVBInfo) )
924 {
925 pBiosArguments->x.cx = 0;
926 pBiosArguments->x.dx = 0;
927 pBiosArguments->x.ax = 0x0114;
928 return;
929 }
930 resindex = XGI_GetResInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
931 if ( ModeNo <= 0x13 )
932 {
933 pBiosArguments->x.cx = pVBInfo->StResInfo[ resindex ].HTotal ;
934 pBiosArguments->x.dx = pVBInfo->StResInfo[ resindex ].VTotal ;
935 }
936 else
937 {
938 pBiosArguments->x.cx = pVBInfo->ModeResInfo[ resindex ].HTotal ; /* xres->ax */
939 pBiosArguments->x.dx = pVBInfo->ModeResInfo[ resindex ].VTotal ; /* yres->bx */
940 }
941
942 pBiosArguments->x.ax = 0x0014;
943
944 }
945
946 /*
947 ;-----------------------------------------------------------------------------
948 ; Description: Get Customized Panel misc. information support
949 ; I/P : Select
950 ; to get panel horizontal timing
951 ; to get panel vertical timing
952 ; to get channel clock parameter
953 ; to get panel misc information
954 ;
955 ; O/P :
956 ; BL: for input Select = 0 ;
957 ; BX: *Value1 = Horizontal total
958 ; CX: *Value2 = Horizontal front porch
959 ; DX: *Value2 = Horizontal sync width
960 ; BL: for input Select = 1 ;
961 ; BX: *Value1 = Vertical total
962 ; CX: *Value2 = Vertical front porch
963 ; DX: *Value2 = Vertical sync width
964 ; BL: for input Select = 2 ;
965 ; BX: Value1 = The first CLK parameter
966 ; CX: Value2 = The second CLK parameter
967 ; BL: for input Select = 4 ;
968 ; BX[15]: *Value1 D[15] VESA V. Polarity
969 ; BX[14]: *Value1 D[14] VESA H. Polarity
970 ; BX[7]: *Value1 D[7] Panel V. Polarity
971 ; BX[6]: *Value1 D[6] Panel H. Polarity
972 ;-----------------------------------------------------------------------------
973 */
974 void XGI_XG21Fun14Sub73( PVB_DEVICE_INFO pVBInfo , PX86_REGS pBiosArguments )
975 {
976 UCHAR Select;
977
978 USHORT lvdstableindex;
979
980 lvdstableindex = XGI_GetLVDSOEMTableIndex( pVBInfo );
981 Select = pBiosArguments->h.bl;
982
983 switch (Select)
984 {
985 case 0:
986 pBiosArguments->x.bx = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHT;
987 pBiosArguments->x.cx = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHFP;
988 pBiosArguments->x.dx = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHSYNC;
989 break;
990 case 1:
991 pBiosArguments->x.bx = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVT;
992 pBiosArguments->x.cx = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVFP;
993 pBiosArguments->x.dx = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVSYNC;
994 break;
995 case 2:
996 pBiosArguments->x.bx = pVBInfo->XG21_LVDSCapList[lvdstableindex].VCLKData1;
997 pBiosArguments->x.cx = pVBInfo->XG21_LVDSCapList[lvdstableindex].VCLKData2;
998 break;
999 case 4:
1000 pBiosArguments->x.bx = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDS_Capability;
1001 break;
1002 }
1003
1004 pBiosArguments->x.ax = 0x0014;
1005 }
1006
1007
1008 void XGI_XG21Fun14( PXGI_HW_DEVICE_INFO pXGIHWDE, PX86_REGS pBiosArguments)
1009 {
1010 VB_DEVICE_INFO VBINF;
1011 PVB_DEVICE_INFO pVBInfo = &VBINF;
1012
1013 pVBInfo->IF_DEF_LVDS = 0 ;
1014 pVBInfo->IF_DEF_CH7005 = 0 ;
1015 pVBInfo->IF_DEF_HiVision = 1 ;
1016 pVBInfo->IF_DEF_LCDA = 1 ;
1017 pVBInfo->IF_DEF_CH7017 = 0 ;
1018 pVBInfo->IF_DEF_YPbPr = 1 ;
1019 pVBInfo->IF_DEF_CRT2Monitor = 0 ;
1020 pVBInfo->IF_DEF_VideoCapture = 0 ;
1021 pVBInfo->IF_DEF_ScaleLCD = 0 ;
1022 pVBInfo->IF_DEF_OEMUtil = 0 ;
1023 pVBInfo->IF_DEF_PWD = 0 ;
1024
1025 InitTo330Pointer( pXGIHWDE->jChipType, pVBInfo ) ;
1026 ReadVBIOSTablData( pXGIHWDE->jChipType , pVBInfo) ;
1027
1028 pVBInfo->P3c4 = pVBInfo->BaseAddr + 0x14 ;
1029 pVBInfo->P3d4 = pVBInfo->BaseAddr + 0x24 ;
1030 pVBInfo->P3c0 = pVBInfo->BaseAddr + 0x10 ;
1031 pVBInfo->P3ce = pVBInfo->BaseAddr + 0x1e ;
1032 pVBInfo->P3c2 = pVBInfo->BaseAddr + 0x12 ;
1033 pVBInfo->P3ca = pVBInfo->BaseAddr + 0x1a ;
1034 pVBInfo->P3c6 = pVBInfo->BaseAddr + 0x16 ;
1035 pVBInfo->P3c7 = pVBInfo->BaseAddr + 0x17 ;
1036 pVBInfo->P3c8 = pVBInfo->BaseAddr + 0x18 ;
1037 pVBInfo->P3c9 = pVBInfo->BaseAddr + 0x19 ;
1038 pVBInfo->P3da = pVBInfo->BaseAddr + 0x2A ;
1039 pVBInfo->Part0Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_00 ;
1040 pVBInfo->Part1Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_04 ;
1041 pVBInfo->Part2Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_10 ;
1042 pVBInfo->Part3Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_12 ;
1043 pVBInfo->Part4Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_14 ;
1044 pVBInfo->Part5Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_14 + 2 ;
1045
1046 switch(pBiosArguments->x.ax)
1047 {
1048 case 0x1470:
1049 XGI_XG21Fun14Sub70( pVBInfo , pBiosArguments ) ;
1050 break;
1051 case 0x1471:
1052 XGI_XG21Fun14Sub71( pVBInfo , pBiosArguments ) ;
1053 break;
1054 case 0x1472:
1055 XGI_XG21Fun14Sub72( pVBInfo , pBiosArguments ) ;
1056 break;
1057 case 0x1473:
1058 XGI_XG21Fun14Sub73( pVBInfo , pBiosArguments ) ;
1059 break;
1060 }
1061 }