4 * General structure definitions for universal mode switching modules
6 * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
8 * If distributed as part of the Linux kernel, the following license terms
11 * * This program is free software; you can redistribute it and/or modify
12 * * it under the terms of the GNU General Public License as published by
13 * * the Free Software Foundation; either version 2 of the named License,
14 * * or any later version.
16 * * This program is distributed in the hope that it will be useful,
17 * * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * * GNU General Public License for more details.
21 * * You should have received a copy of the GNU General Public License
22 * * along with this program; if not, write to the Free Software
23 * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
25 * Otherwise, the following license terms apply:
27 * * Redistribution and use in source and binary forms, with or without
28 * * modification, are permitted provided that the following conditions
30 * * 1) Redistributions of source code must retain the above copyright
31 * * notice, this list of conditions and the following disclaimer.
32 * * 2) Redistributions in binary form must reproduce the above copyright
33 * * notice, this list of conditions and the following disclaimer in the
34 * * documentation and/or other materials provided with the distribution.
35 * * 3) The name of the author may not be used to endorse or promote products
36 * * derived from this software without specific prior written permission.
38 * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
39 * * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
40 * * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
41 * * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
42 * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
43 * * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
44 * * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
45 * * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46 * * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
47 * * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49 * Author: Thomas Winischhofer <thomas@winischhofer.net>
56 struct SiS_PanelDelayTbl
{
57 unsigned char timer
[2];
61 unsigned short RVBHCMAX
;
62 unsigned short RVBHCFACT
;
70 unsigned short RVBHCMAX
;
71 unsigned short RVBHCFACT
;
76 unsigned short RVBHRS
;
77 unsigned char FlickerMode
;
78 unsigned short HALFRVBHRS
;
79 unsigned short RVBHRS2
;
94 unsigned short LCDHDES
;
95 unsigned short LCDVDES
;
98 struct SiS_LVDSCRT1Data
{
102 struct SiS_CHTVRegData
{
103 unsigned char Reg
[16];
107 unsigned char St_ModeID
;
108 unsigned short St_ModeFlag
;
109 unsigned char St_StTableIndex
;
110 unsigned char St_CRT2CRTC
;
111 unsigned char St_ResInfo
;
112 unsigned char VB_StTVFlickerIndex
;
113 unsigned char VB_StTVEdgeIndex
;
114 unsigned char VB_StTVYFilterIndex
;
115 unsigned char St_PDC
;
119 unsigned char ModeID
;
120 unsigned char VB_TVDelayIndex
;
121 unsigned char VB_TVFlickerIndex
;
122 unsigned char VB_TVPhaseIndex
;
123 unsigned char VB_TVYFilterIndex
;
124 unsigned char VB_LCDDelayIndex
;
125 unsigned char _VB_LCDHIndex
;
126 unsigned char _VB_LCDVIndex
;
129 struct SiS_StandTable_S
{
130 unsigned char CRT_COLS
;
132 unsigned char CHAR_HEIGHT
;
133 unsigned short CRT_LEN
;
136 unsigned char CRTC
[0x19];
137 unsigned char ATTR
[0x14];
138 unsigned char GRC
[9];
142 unsigned char Ext_ModeID
;
143 unsigned short Ext_ModeFlag
;
144 unsigned short Ext_VESAID
;
145 unsigned char Ext_RESINFO
;
146 unsigned char VB_ExtTVFlickerIndex
;
147 unsigned char VB_ExtTVEdgeIndex
;
148 unsigned char VB_ExtTVYFilterIndex
;
149 unsigned char VB_ExtTVYFilterIndexROM661
;
150 unsigned char REFindex
;
155 unsigned short Ext_InfoFlag
;
156 unsigned char Ext_CRT1CRTC
;
157 unsigned char Ext_CRTVCLK
;
158 unsigned char Ext_CRT2CRTC
;
159 unsigned char Ext_CRT2CRTC_NS
;
160 unsigned char ModeID
;
163 unsigned char Ext_PDC
;
164 unsigned char Ext_FakeCRT2CRTC
;
165 unsigned char Ext_FakeCRT2Clk
;
166 unsigned char Ext_CRT1CRTC_NORM
;
167 unsigned char Ext_CRTVCLK_NORM
;
168 unsigned char Ext_CRT1CRTC_WIDE
;
169 unsigned char Ext_CRTVCLK_WIDE
;
172 struct SiS_Part2PortTbl
{
173 unsigned char CR
[12];
176 struct SiS_CRT1Table
{
177 unsigned char CR
[17];
180 struct SiS_MCLKData
{
181 unsigned char SR28
,SR29
,SR2A
;
182 unsigned short CLOCK
;
185 struct SiS_VCLKData
{
186 unsigned char SR2B
,SR2C
;
187 unsigned short CLOCK
;
190 struct SiS_VBVCLKData
{
191 unsigned char Part4_A
,Part4_B
;
192 unsigned short CLOCK
;
195 struct SiS_StResInfo_S
{
196 unsigned short HTotal
;
197 unsigned short VTotal
;
200 struct SiS_ModeResInfo_S
{
201 unsigned short HTotal
;
202 unsigned short VTotal
;
207 /* Defines for SiS_CustomT */
208 /* Never change these for sisfb compatibility */
210 #define CUT_FORCENONE 1
211 #define CUT_BARCO1366 2
212 #define CUT_BARCO1024 3
213 #define CUT_COMPAQ1280 4
214 #define CUT_COMPAQ12802 5
215 #define CUT_PANEL848 6
216 #define CUT_CLEVO1024 7
217 #define CUT_CLEVO10242 8
218 #define CUT_CLEVO1400 9
219 #define CUT_CLEVO14002 10
220 #define CUT_UNIWILL1024 11
221 #define CUT_ASUSL3000D 12
222 #define CUT_UNIWILL10242 13
223 #define CUT_ACER1280 14
224 #define CUT_COMPAL1400_1 15
225 #define CUT_COMPAL1400_2 16
226 #define CUT_ASUSA2H_1 17
227 #define CUT_ASUSA2H_2 18
228 #define CUT_UNKNOWNLCD 19
229 #define CUT_AOP8060 20
230 #define CUT_PANEL856 21
234 unsigned char ChipType
;
235 unsigned char ChipRevision
;
237 unsigned char *VirtualRomBase
;
239 unsigned char SISIOMEMTYPE
*VideoMemoryAddress
;
240 unsigned int VideoMemorySize
;
241 SISIOADDRESS IOAddress
;
242 SISIOADDRESS IOAddress2
; /* For dual chip XGI volari */
245 SISIOADDRESS SiS_P3c4
;
246 SISIOADDRESS SiS_P3d4
;
247 SISIOADDRESS SiS_P3c0
;
248 SISIOADDRESS SiS_P3ce
;
249 SISIOADDRESS SiS_P3c2
;
250 SISIOADDRESS SiS_P3ca
;
251 SISIOADDRESS SiS_P3c6
;
252 SISIOADDRESS SiS_P3c7
;
253 SISIOADDRESS SiS_P3c8
;
254 SISIOADDRESS SiS_P3c9
;
255 SISIOADDRESS SiS_P3cb
;
256 SISIOADDRESS SiS_P3cc
;
257 SISIOADDRESS SiS_P3cd
;
258 SISIOADDRESS SiS_P3da
;
259 SISIOADDRESS SiS_Part1Port
;
260 SISIOADDRESS SiS_Part2Port
;
261 SISIOADDRESS SiS_Part3Port
;
262 SISIOADDRESS SiS_Part4Port
;
263 SISIOADDRESS SiS_Part5Port
;
264 SISIOADDRESS SiS_VidCapt
;
265 SISIOADDRESS SiS_VidPlay
;
266 unsigned short SiS_IF_DEF_LVDS
;
267 unsigned short SiS_IF_DEF_CH70xx
;
268 unsigned short SiS_IF_DEF_CONEX
;
269 unsigned short SiS_IF_DEF_TRUMPION
;
270 unsigned short SiS_IF_DEF_DSTN
;
271 unsigned short SiS_IF_DEF_FSTN
;
272 unsigned short SiS_SysFlags
;
273 unsigned char SiS_VGAINFO
;
277 bool SiS_NeedRomModeData
;
278 bool PanelSelfDetected
;
281 bool SiS_CHSOverScan
;
285 unsigned int SiS_CustomT
;
286 int SiS_UseWide
, SiS_UseWideCRT2
;
288 unsigned short SiS_Backup70xx
;
292 unsigned char EMI_30
,EMI_31
,EMI_32
,EMI_33
;
293 unsigned short SiS_EMIOffset
;
294 unsigned short SiS_PWDOffset
;
296 unsigned char SiS_MyCR63
;
297 unsigned short SiS_CRT1Mode
;
298 unsigned short SiS_flag_clearbuffer
;
300 unsigned char SiS_ChannelAB
;
301 unsigned char SiS_DataBusWidth
;
302 unsigned short SiS_ModeType
;
303 unsigned short SiS_VBInfo
;
304 unsigned short SiS_TVMode
;
305 unsigned short SiS_LCDResInfo
;
306 unsigned short SiS_LCDTypeInfo
;
307 unsigned short SiS_LCDInfo
;
308 unsigned short SiS_LCDInfo661
;
309 unsigned short SiS_VBType
;
310 unsigned short SiS_VBExtInfo
;
311 unsigned short SiS_YPbPr
;
312 unsigned short SiS_SelectCRT2Rate
;
313 unsigned short SiS_SetFlag
;
314 unsigned short SiS_RVBHCFACT
;
315 unsigned short SiS_RVBHCMAX
;
316 unsigned short SiS_RVBHRS
;
317 unsigned short SiS_RVBHRS2
;
318 unsigned short SiS_VGAVT
;
319 unsigned short SiS_VGAHT
;
320 unsigned short SiS_VT
;
321 unsigned short SiS_HT
;
322 unsigned short SiS_VGAVDE
;
323 unsigned short SiS_VGAHDE
;
324 unsigned short SiS_VDE
;
325 unsigned short SiS_HDE
;
326 unsigned short SiS_NewFlickerMode
;
327 unsigned short SiS_RY1COE
;
328 unsigned short SiS_RY2COE
;
329 unsigned short SiS_RY3COE
;
330 unsigned short SiS_RY4COE
;
331 unsigned short SiS_LCDHDES
;
332 unsigned short SiS_LCDVDES
;
333 SISIOADDRESS SiS_DDC_Port
;
334 unsigned short SiS_DDC_Index
;
335 unsigned short SiS_DDC_Data
;
336 unsigned short SiS_DDC_NData
;
337 unsigned short SiS_DDC_Clk
;
338 unsigned short SiS_DDC_NClk
;
339 unsigned short SiS_DDC_DeviceAddr
;
340 unsigned short SiS_DDC_ReadAddr
;
341 unsigned short SiS_DDC_SecAddr
;
342 unsigned short SiS_ChrontelInit
;
343 bool SiS_SensibleSR11
;
344 unsigned short SiS661LCD2TableSize
;
346 unsigned short SiS_PanelMinLVDS
;
347 unsigned short SiS_PanelMin301
;
349 const struct SiS_St
*SiS_SModeIDTable
;
350 const struct SiS_StandTable_S
*SiS_StandTable
;
351 const struct SiS_Ext
*SiS_EModeIDTable
;
352 const struct SiS_Ext2
*SiS_RefIndex
;
353 const struct SiS_VBMode
*SiS_VBModeIDTable
;
354 const struct SiS_CRT1Table
*SiS_CRT1Table
;
355 const struct SiS_MCLKData
*SiS_MCLKData_0
;
356 const struct SiS_MCLKData
*SiS_MCLKData_1
;
357 struct SiS_VCLKData
*SiS_VCLKData
;
358 struct SiS_VBVCLKData
*SiS_VBVCLKData
;
359 const struct SiS_StResInfo_S
*SiS_StResInfo
;
360 const struct SiS_ModeResInfo_S
*SiS_ModeResInfo
;
362 const unsigned char *pSiS_OutputSelect
;
363 const unsigned char *pSiS_SoftSetting
;
365 const unsigned char *SiS_SR15
;
367 const struct SiS_PanelDelayTbl
*SiS_PanelDelayTbl
;
368 const struct SiS_PanelDelayTbl
*SiS_PanelDelayTblLVDS
;
372 const struct SiS_LCDData
*SiS_ExtLCD1024x768Data
;
373 const struct SiS_LCDData
*SiS_St2LCD1024x768Data
;
374 const struct SiS_LCDData
*SiS_LCD1280x720Data
;
375 const struct SiS_LCDData
*SiS_StLCD1280x768_2Data
;
376 const struct SiS_LCDData
*SiS_ExtLCD1280x768_2Data
;
377 const struct SiS_LCDData
*SiS_LCD1280x800Data
;
378 const struct SiS_LCDData
*SiS_LCD1280x800_2Data
;
379 const struct SiS_LCDData
*SiS_LCD1280x854Data
;
380 const struct SiS_LCDData
*SiS_LCD1280x960Data
;
381 const struct SiS_LCDData
*SiS_ExtLCD1280x1024Data
;
382 const struct SiS_LCDData
*SiS_St2LCD1280x1024Data
;
383 const struct SiS_LCDData
*SiS_StLCD1400x1050Data
;
384 const struct SiS_LCDData
*SiS_ExtLCD1400x1050Data
;
385 const struct SiS_LCDData
*SiS_StLCD1600x1200Data
;
386 const struct SiS_LCDData
*SiS_ExtLCD1600x1200Data
;
387 const struct SiS_LCDData
*SiS_LCD1680x1050Data
;
388 const struct SiS_LCDData
*SiS_NoScaleData
;
389 const struct SiS_TVData
*SiS_StPALData
;
390 const struct SiS_TVData
*SiS_ExtPALData
;
391 const struct SiS_TVData
*SiS_StNTSCData
;
392 const struct SiS_TVData
*SiS_ExtNTSCData
;
393 const struct SiS_TVData
*SiS_St1HiTVData
;
394 const struct SiS_TVData
*SiS_St2HiTVData
;
395 const struct SiS_TVData
*SiS_ExtHiTVData
;
396 const struct SiS_TVData
*SiS_St525iData
;
397 const struct SiS_TVData
*SiS_St525pData
;
398 const struct SiS_TVData
*SiS_St750pData
;
399 const struct SiS_TVData
*SiS_Ext525iData
;
400 const struct SiS_TVData
*SiS_Ext525pData
;
401 const struct SiS_TVData
*SiS_Ext750pData
;
402 const unsigned char *SiS_NTSCTiming
;
403 const unsigned char *SiS_PALTiming
;
404 const unsigned char *SiS_HiTVExtTiming
;
405 const unsigned char *SiS_HiTVSt1Timing
;
406 const unsigned char *SiS_HiTVSt2Timing
;
407 const unsigned char *SiS_HiTVGroup3Data
;
408 const unsigned char *SiS_HiTVGroup3Simu
;
410 const unsigned char *SiS_HiTVTextTiming
;
411 const unsigned char *SiS_HiTVGroup3Text
;
414 const struct SiS_Part2PortTbl
*SiS_CRT2Part2_1024x768_1
;
415 const struct SiS_Part2PortTbl
*SiS_CRT2Part2_1024x768_2
;
416 const struct SiS_Part2PortTbl
*SiS_CRT2Part2_1024x768_3
;
420 const struct SiS_LVDSData
*SiS_LVDS320x240Data_1
;
421 const struct SiS_LVDSData
*SiS_LVDS320x240Data_2
;
422 const struct SiS_LVDSData
*SiS_LVDS640x480Data_1
;
423 const struct SiS_LVDSData
*SiS_LVDS800x600Data_1
;
424 const struct SiS_LVDSData
*SiS_LVDS1024x600Data_1
;
425 const struct SiS_LVDSData
*SiS_LVDS1024x768Data_1
;
426 const struct SiS_LVDSData
*SiS_LVDSBARCO1366Data_1
;
427 const struct SiS_LVDSData
*SiS_LVDSBARCO1366Data_2
;
428 const struct SiS_LVDSData
*SiS_LVDSBARCO1024Data_1
;
429 const struct SiS_LVDSData
*SiS_LVDS848x480Data_1
;
430 const struct SiS_LVDSData
*SiS_LVDS848x480Data_2
;
431 const struct SiS_LVDSData
*SiS_CHTVUNTSCData
;
432 const struct SiS_LVDSData
*SiS_CHTVONTSCData
;
433 const struct SiS_LVDSData
*SiS_CHTVUPALData
;
434 const struct SiS_LVDSData
*SiS_CHTVOPALData
;
435 const struct SiS_LVDSData
*SiS_CHTVUPALMData
;
436 const struct SiS_LVDSData
*SiS_CHTVOPALMData
;
437 const struct SiS_LVDSData
*SiS_CHTVUPALNData
;
438 const struct SiS_LVDSData
*SiS_CHTVOPALNData
;
439 const struct SiS_LVDSData
*SiS_CHTVSOPALData
;
441 const struct SiS_LVDSDes
*SiS_PanelType04_1a
;
442 const struct SiS_LVDSDes
*SiS_PanelType04_2a
;
443 const struct SiS_LVDSDes
*SiS_PanelType04_1b
;
444 const struct SiS_LVDSDes
*SiS_PanelType04_2b
;
446 const struct SiS_LVDSCRT1Data
*SiS_LVDSCRT1320x240_1
;
447 const struct SiS_LVDSCRT1Data
*SiS_LVDSCRT1320x240_2
;
448 const struct SiS_LVDSCRT1Data
*SiS_LVDSCRT1320x240_2_H
;
449 const struct SiS_LVDSCRT1Data
*SiS_LVDSCRT1320x240_3
;
450 const struct SiS_LVDSCRT1Data
*SiS_LVDSCRT1320x240_3_H
;
451 const struct SiS_LVDSCRT1Data
*SiS_LVDSCRT1640x480_1
;
452 const struct SiS_LVDSCRT1Data
*SiS_LVDSCRT1640x480_1_H
;
453 const struct SiS_LVDSCRT1Data
*SiS_CHTVCRT1UNTSC
;
454 const struct SiS_LVDSCRT1Data
*SiS_CHTVCRT1ONTSC
;
455 const struct SiS_LVDSCRT1Data
*SiS_CHTVCRT1UPAL
;
456 const struct SiS_LVDSCRT1Data
*SiS_CHTVCRT1OPAL
;
457 const struct SiS_LVDSCRT1Data
*SiS_CHTVCRT1SOPAL
;
459 const struct SiS_CHTVRegData
*SiS_CHTVReg_UNTSC
;
460 const struct SiS_CHTVRegData
*SiS_CHTVReg_ONTSC
;
461 const struct SiS_CHTVRegData
*SiS_CHTVReg_UPAL
;
462 const struct SiS_CHTVRegData
*SiS_CHTVReg_OPAL
;
463 const struct SiS_CHTVRegData
*SiS_CHTVReg_UPALM
;
464 const struct SiS_CHTVRegData
*SiS_CHTVReg_OPALM
;
465 const struct SiS_CHTVRegData
*SiS_CHTVReg_UPALN
;
466 const struct SiS_CHTVRegData
*SiS_CHTVReg_OPALN
;
467 const struct SiS_CHTVRegData
*SiS_CHTVReg_SOPAL
;
469 const unsigned char *SiS_CHTVVCLKUNTSC
;
470 const unsigned char *SiS_CHTVVCLKONTSC
;
471 const unsigned char *SiS_CHTVVCLKUPAL
;
472 const unsigned char *SiS_CHTVVCLKOPAL
;
473 const unsigned char *SiS_CHTVVCLKUPALM
;
474 const unsigned char *SiS_CHTVVCLKOPALM
;
475 const unsigned char *SiS_CHTVVCLKUPALN
;
476 const unsigned char *SiS_CHTVVCLKOPALN
;
477 const unsigned char *SiS_CHTVVCLKSOPAL
;
479 unsigned short PanelXRes
, PanelHT
;
480 unsigned short PanelYRes
, PanelVT
;
481 unsigned short PanelHRS
, PanelHRE
;
482 unsigned short PanelVRS
, PanelVRE
;
483 unsigned short PanelVCLKIdx300
;
484 unsigned short PanelVCLKIdx315
;
485 bool Alternate1600x1200
;
488 bool CRT1UsesCustomMode
;
489 unsigned short CHDisplay
;
490 unsigned short CHSyncStart
;
491 unsigned short CHSyncEnd
;
492 unsigned short CHTotal
;
493 unsigned short CHBlankStart
;
494 unsigned short CHBlankEnd
;
495 unsigned short CVDisplay
;
496 unsigned short CVSyncStart
;
497 unsigned short CVSyncEnd
;
498 unsigned short CVTotal
;
499 unsigned short CVBlankStart
;
500 unsigned short CVBlankEnd
;
501 unsigned int CDClock
;
503 unsigned char CCRT1CRTC
[17];
506 unsigned short CSRClock
;
507 unsigned short CSRClock_CRT1
;
508 unsigned short CModeFlag
;
509 unsigned short CModeFlag_CRT1
;
510 unsigned short CInfoFlag
;
515 unsigned char Backup_Mode
;
516 unsigned char Backup_14
;
517 unsigned char Backup_15
;
518 unsigned char Backup_16
;
519 unsigned char Backup_17
;
520 unsigned char Backup_18
;
521 unsigned char Backup_19
;
522 unsigned char Backup_1a
;
523 unsigned char Backup_1b
;
524 unsigned char Backup_1c
;
525 unsigned char Backup_1d
;
527 unsigned char Init_P4_0E
;
532 unsigned short CP_Vendor
, CP_Product
;
533 bool CP_HaveCustomData
;
534 int CP_PreferredX
, CP_PreferredY
, CP_PreferredIndex
;
535 int CP_MaxX
, CP_MaxY
, CP_MaxClock
;
536 unsigned char CP_PrefSR2B
, CP_PrefSR2C
;
537 unsigned short CP_PrefClock
;
538 bool CP_Supports64048075
;
539 int CP_HDisplay
[7], CP_VDisplay
[7]; /* For Custom LCD panel dimensions */
540 int CP_HTotal
[7], CP_VTotal
[7];
541 int CP_HSyncStart
[7], CP_VSyncStart
[7];
542 int CP_HSyncEnd
[7], CP_VSyncEnd
[7];
543 int CP_HBlankStart
[7], CP_VBlankStart
[7];
544 int CP_HBlankEnd
[7], CP_VBlankEnd
[7];
546 bool CP_DataValid
[7];
547 bool CP_HSync_P
[7], CP_VSync_P
[7], CP_SyncValid
[7];