Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / usb / misc / sisusbvga / sisusb_init.h
1 /* $XFree86$ */
2 /* $XdotOrg$ */
3 /*
4  * Data and prototypes for init.c
5  *
6  * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
7  *
8  * If distributed as part of the Linux kernel, the following license terms
9  * apply:
10  *
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.
15  * *
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.
20  * *
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
24  *
25  * Otherwise, the following license terms apply:
26  *
27  * * Redistribution and use in source and binary forms, with or without
28  * * modification, are permitted provided that the following conditions
29  * * are met:
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.
37  * *
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.
48  *
49  * Author:      Thomas Winischhofer <thomas@winischhofer.net>
50  *
51  */
52
53 #ifndef _SISUSB_INIT_H_
54 #define _SISUSB_INIT_H_
55
56 /* SiS_ModeType */
57 #define ModeText                0x00
58 #define ModeCGA                 0x01
59 #define ModeEGA                 0x02
60 #define ModeVGA                 0x03
61 #define Mode15Bpp               0x04
62 #define Mode16Bpp               0x05
63 #define Mode24Bpp               0x06
64 #define Mode32Bpp               0x07
65
66 #define ModeTypeMask            0x07
67 #define IsTextMode              0x07
68
69 #define DACInfoFlag             0x0018
70 #define MemoryInfoFlag          0x01E0
71 #define MemorySizeShift         5
72
73 /* modeflag */
74 #define Charx8Dot               0x0200
75 #define LineCompareOff          0x0400
76 #define CRT2Mode                0x0800
77 #define HalfDCLK                0x1000
78 #define NoSupportSimuTV         0x2000
79 #define NoSupportLCDScale       0x4000  /* SiS bridge: No scaling possible (no matter what panel) */
80 #define DoubleScanMode          0x8000
81
82 /* Infoflag */
83 #define SupportTV               0x0008
84 #define SupportTV1024           0x0800
85 #define SupportCHTV             0x0800
86 #define Support64048060Hz       0x0800  /* Special for 640x480 LCD */
87 #define SupportHiVision         0x0010
88 #define SupportYPbPr750p        0x1000
89 #define SupportLCD              0x0020
90 #define SupportRAMDAC2          0x0040  /* All           (<= 100Mhz) */
91 #define SupportRAMDAC2_135      0x0100  /* All except DH (<= 135Mhz) */
92 #define SupportRAMDAC2_162      0x0200  /* B, C          (<= 162Mhz) */
93 #define SupportRAMDAC2_202      0x0400  /* C             (<= 202Mhz) */
94 #define InterlaceMode           0x0080
95 #define SyncPP                  0x0000
96 #define SyncPN                  0x4000
97 #define SyncNP                  0x8000
98 #define SyncNN                  0xc000
99
100 /* SetFlag */
101 #define ProgrammingCRT2         0x0001
102 #define LowModeTests            0x0002
103 #define LCDVESATiming           0x0008
104 #define EnableLVDSDDA           0x0010
105 #define SetDispDevSwitchFlag    0x0020
106 #define CheckWinDos             0x0040
107 #define SetDOSMode              0x0080
108
109 /* Index in ModeResInfo table */
110 #define SIS_RI_320x200          0
111 #define SIS_RI_320x240          1
112 #define SIS_RI_320x400          2
113 #define SIS_RI_400x300          3
114 #define SIS_RI_512x384          4
115 #define SIS_RI_640x400          5
116 #define SIS_RI_640x480          6
117 #define SIS_RI_800x600          7
118 #define SIS_RI_1024x768         8
119 #define SIS_RI_1280x1024        9
120 #define SIS_RI_1600x1200        10
121 #define SIS_RI_1920x1440        11
122 #define SIS_RI_2048x1536        12
123 #define SIS_RI_720x480          13
124 #define SIS_RI_720x576          14
125 #define SIS_RI_1280x960         15
126 #define SIS_RI_800x480          16
127 #define SIS_RI_1024x576         17
128 #define SIS_RI_1280x720         18
129 #define SIS_RI_856x480          19
130 #define SIS_RI_1280x768         20
131 #define SIS_RI_1400x1050        21
132 #define SIS_RI_1152x864         22      /* Up to here SiS conforming */
133 #define SIS_RI_848x480          23
134 #define SIS_RI_1360x768         24
135 #define SIS_RI_1024x600         25
136 #define SIS_RI_1152x768         26
137 #define SIS_RI_768x576          27
138 #define SIS_RI_1360x1024        28
139 #define SIS_RI_1680x1050        29
140 #define SIS_RI_1280x800         30
141 #define SIS_RI_1920x1080        31
142 #define SIS_RI_960x540          32
143 #define SIS_RI_960x600          33
144
145 #define SIS_VIDEO_CAPTURE       0x00 - 0x30
146 #define SIS_VIDEO_PLAYBACK      0x02 - 0x30
147 #define SIS_CRT2_PORT_04        0x04 - 0x30
148
149 /* Mode numbers */
150 static const unsigned short ModeIndex_320x200[] = { 0x59, 0x41, 0x00, 0x4f };
151 static const unsigned short ModeIndex_320x240[] = { 0x50, 0x56, 0x00, 0x53 };
152 static const unsigned short ModeIndex_400x300[] = { 0x51, 0x57, 0x00, 0x54 };
153 static const unsigned short ModeIndex_512x384[] = { 0x52, 0x58, 0x00, 0x5c };
154 static const unsigned short ModeIndex_640x400[] = { 0x2f, 0x5d, 0x00, 0x5e };
155 static const unsigned short ModeIndex_640x480[] = { 0x2e, 0x44, 0x00, 0x62 };
156 static const unsigned short ModeIndex_720x480[] = { 0x31, 0x33, 0x00, 0x35 };
157 static const unsigned short ModeIndex_720x576[] = { 0x32, 0x34, 0x00, 0x36 };
158 static const unsigned short ModeIndex_768x576[] = { 0x5f, 0x60, 0x00, 0x61 };
159 static const unsigned short ModeIndex_800x480[] = { 0x70, 0x7a, 0x00, 0x76 };
160 static const unsigned short ModeIndex_800x600[] = { 0x30, 0x47, 0x00, 0x63 };
161 static const unsigned short ModeIndex_848x480[] = { 0x39, 0x3b, 0x00, 0x3e };
162 static const unsigned short ModeIndex_856x480[] = { 0x3f, 0x42, 0x00, 0x45 };
163 static const unsigned short ModeIndex_960x540[] = { 0x1d, 0x1e, 0x00, 0x1f };
164 static const unsigned short ModeIndex_960x600[] = { 0x20, 0x21, 0x00, 0x22 };
165 static const unsigned short ModeIndex_1024x768[] = { 0x38, 0x4a, 0x00, 0x64 };
166 static const unsigned short ModeIndex_1024x576[] = { 0x71, 0x74, 0x00, 0x77 };
167 static const unsigned short ModeIndex_1152x864[] = { 0x29, 0x2a, 0x00, 0x2b };
168 static const unsigned short ModeIndex_1280x720[] = { 0x79, 0x75, 0x00, 0x78 };
169 static const unsigned short ModeIndex_1280x768[] = { 0x23, 0x24, 0x00, 0x25 };
170 static const unsigned short ModeIndex_1280x1024[] = { 0x3a, 0x4d, 0x00, 0x65 };
171
172 static const unsigned char SiS_MDA_DAC[] = {
173         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
174         0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
175         0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
176         0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
177         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
178         0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
179         0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
180         0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F
181 };
182
183 static const unsigned char SiS_CGA_DAC[] = {
184         0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
185         0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
186         0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
187         0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
188         0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
189         0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
190         0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
191         0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F
192 };
193
194 static const unsigned char SiS_EGA_DAC[] = {
195         0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x05, 0x15,
196         0x20, 0x30, 0x24, 0x34, 0x21, 0x31, 0x25, 0x35,
197         0x08, 0x18, 0x0C, 0x1C, 0x09, 0x19, 0x0D, 0x1D,
198         0x28, 0x38, 0x2C, 0x3C, 0x29, 0x39, 0x2D, 0x3D,
199         0x02, 0x12, 0x06, 0x16, 0x03, 0x13, 0x07, 0x17,
200         0x22, 0x32, 0x26, 0x36, 0x23, 0x33, 0x27, 0x37,
201         0x0A, 0x1A, 0x0E, 0x1E, 0x0B, 0x1B, 0x0F, 0x1F,
202         0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F
203 };
204
205 static const unsigned char SiS_VGA_DAC[] = {
206         0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
207         0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
208         0x00, 0x05, 0x08, 0x0B, 0x0E, 0x11, 0x14, 0x18,
209         0x1C, 0x20, 0x24, 0x28, 0x2D, 0x32, 0x38, 0x3F,
210         0x00, 0x10, 0x1F, 0x2F, 0x3F, 0x1F, 0x27, 0x2F,
211         0x37, 0x3F, 0x2D, 0x31, 0x36, 0x3A, 0x3F, 0x00,
212         0x07, 0x0E, 0x15, 0x1C, 0x0E, 0x11, 0x15, 0x18,
213         0x1C, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x00, 0x04,
214         0x08, 0x0C, 0x10, 0x08, 0x0A, 0x0C, 0x0E, 0x10,
215         0x0B, 0x0C, 0x0D, 0x0F, 0x10
216 };
217
218 static const struct SiS_St SiSUSB_SModeIDTable[] = {
219         {0x03, 0x0010, 0x18, 0x02, 0x02, 0x00, 0x01, 0x03, 0x40},
220         {0xff, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
221 };
222
223 static const struct SiS_StResInfo_S SiSUSB_StResInfo[] = {
224         {640, 400},
225         {640, 350},
226         {720, 400},
227         {720, 350},
228         {640, 480}
229 };
230
231 static const struct SiS_ModeResInfo SiSUSB_ModeResInfo[] = {
232         {320, 200, 8, 8},       /* 0x00 */
233         {320, 240, 8, 8},       /* 0x01 */
234         {320, 400, 8, 8},       /* 0x02 */
235         {400, 300, 8, 8},       /* 0x03 */
236         {512, 384, 8, 8},       /* 0x04 */
237         {640, 400, 8, 16},      /* 0x05 */
238         {640, 480, 8, 16},      /* 0x06 */
239         {800, 600, 8, 16},      /* 0x07 */
240         {1024, 768, 8, 16},     /* 0x08 */
241         {1280, 1024, 8, 16},    /* 0x09 */
242         {1600, 1200, 8, 16},    /* 0x0a */
243         {1920, 1440, 8, 16},    /* 0x0b */
244         {2048, 1536, 8, 16},    /* 0x0c */
245         {720, 480, 8, 16},      /* 0x0d */
246         {720, 576, 8, 16},      /* 0x0e */
247         {1280, 960, 8, 16},     /* 0x0f */
248         {800, 480, 8, 16},      /* 0x10 */
249         {1024, 576, 8, 16},     /* 0x11 */
250         {1280, 720, 8, 16},     /* 0x12 */
251         {856, 480, 8, 16},      /* 0x13 */
252         {1280, 768, 8, 16},     /* 0x14 */
253         {1400, 1050, 8, 16},    /* 0x15 */
254         {1152, 864, 8, 16},     /* 0x16 */
255         {848, 480, 8, 16},      /* 0x17 */
256         {1360, 768, 8, 16},     /* 0x18 */
257         {1024, 600, 8, 16},     /* 0x19 */
258         {1152, 768, 8, 16},     /* 0x1a */
259         {768, 576, 8, 16},      /* 0x1b */
260         {1360, 1024, 8, 16},    /* 0x1c */
261         {1680, 1050, 8, 16},    /* 0x1d */
262         {1280, 800, 8, 16},     /* 0x1e */
263         {1920, 1080, 8, 16},    /* 0x1f */
264         {960, 540, 8, 16},      /* 0x20 */
265         {960, 600, 8, 16}       /* 0x21 */
266 };
267
268 static const struct SiS_StandTable SiSUSB_StandTable[] = {
269         /* MD_3_400 - mode 0x03 - 400 */
270         {
271          0x50, 0x18, 0x10, 0x1000,
272          {0x00, 0x03, 0x00, 0x02},
273          0x67,
274          {0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
275           0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
276           0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
277           0xff},
278          {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
279           0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
280           0x0c, 0x00, 0x0f, 0x08},
281          {0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff}
282          },
283         /* Generic for VGA and higher */
284         {
285          0x00, 0x00, 0x00, 0x0000,
286          {0x01, 0x0f, 0x00, 0x0e},
287          0x23,
288          {0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
289           0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
290           0xea, 0x8c, 0xdf, 0x28, 0x40, 0xe7, 0x04, 0xa3,
291           0xff},
292          {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
293           0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
294           0x01, 0x00, 0x00, 0x00},
295          {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff}
296          }
297 };
298
299 static const struct SiS_Ext SiSUSB_EModeIDTable[] = {
300         {0x2e, 0x0a1b, 0x0101, SIS_RI_640x480, 0x00, 0x00, 0x05, 0x05, 0x08, 2},        /* 640x480x8 */
301         {0x2f, 0x0a1b, 0x0100, SIS_RI_640x400, 0x00, 0x00, 0x05, 0x05, 0x10, 0},        /* 640x400x8 */
302         {0x30, 0x2a1b, 0x0103, SIS_RI_800x600, 0x00, 0x00, 0x07, 0x06, 0x00, 3},        /* 800x600x8 */
303         {0x31, 0x4a1b, 0x0000, SIS_RI_720x480, 0x00, 0x00, 0x06, 0x06, 0x11, -1},       /* 720x480x8 */
304         {0x32, 0x4a1b, 0x0000, SIS_RI_720x576, 0x00, 0x00, 0x06, 0x06, 0x12, -1},       /* 720x576x8 */
305         {0x33, 0x4a1d, 0x0000, SIS_RI_720x480, 0x00, 0x00, 0x06, 0x06, 0x11, -1},       /* 720x480x16 */
306         {0x34, 0x6a1d, 0x0000, SIS_RI_720x576, 0x00, 0x00, 0x06, 0x06, 0x12, -1},       /* 720x576x16 */
307         {0x35, 0x4a1f, 0x0000, SIS_RI_720x480, 0x00, 0x00, 0x06, 0x06, 0x11, -1},       /* 720x480x32 */
308         {0x36, 0x6a1f, 0x0000, SIS_RI_720x576, 0x00, 0x00, 0x06, 0x06, 0x12, -1},       /* 720x576x32 */
309         {0x38, 0x0a1b, 0x0105, SIS_RI_1024x768, 0x00, 0x00, 0x08, 0x07, 0x13, 4},       /* 1024x768x8 */
310         {0x3a, 0x0e3b, 0x0107, SIS_RI_1280x1024, 0x00, 0x00, 0x00, 0x00, 0x2f, 8},      /* 1280x1024x8 */
311         {0x41, 0x9a1d, 0x010e, SIS_RI_320x200, 0x00, 0x00, 0x04, 0x04, 0x1a, 0},        /* 320x200x16 */
312         {0x44, 0x0a1d, 0x0111, SIS_RI_640x480, 0x00, 0x00, 0x05, 0x05, 0x08, 2},        /* 640x480x16 */
313         {0x47, 0x2a1d, 0x0114, SIS_RI_800x600, 0x00, 0x00, 0x07, 0x06, 0x00, 3},        /* 800x600x16 */
314         {0x4a, 0x0a3d, 0x0117, SIS_RI_1024x768, 0x00, 0x00, 0x08, 0x07, 0x13, 4},       /* 1024x768x16 */
315         {0x4d, 0x0e7d, 0x011a, SIS_RI_1280x1024, 0x00, 0x00, 0x00, 0x00, 0x2f, 8},      /* 1280x1024x16 */
316         {0x50, 0x9a1b, 0x0132, SIS_RI_320x240, 0x00, 0x00, 0x04, 0x04, 0x1b, 2},        /* 320x240x8  */
317         {0x51, 0xba1b, 0x0133, SIS_RI_400x300, 0x00, 0x00, 0x07, 0x07, 0x1c, 3},        /* 400x300x8  */
318         {0x52, 0xba1b, 0x0134, SIS_RI_512x384, 0x00, 0x00, 0x00, 0x00, 0x1d, 4},        /* 512x384x8  */
319         {0x56, 0x9a1d, 0x0135, SIS_RI_320x240, 0x00, 0x00, 0x04, 0x04, 0x1b, 2},        /* 320x240x16 */
320         {0x57, 0xba1d, 0x0136, SIS_RI_400x300, 0x00, 0x00, 0x07, 0x07, 0x1c, 3},        /* 400x300x16 */
321         {0x58, 0xba1d, 0x0137, SIS_RI_512x384, 0x00, 0x00, 0x00, 0x00, 0x1d, 4},        /* 512x384x16 */
322         {0x59, 0x9a1b, 0x0138, SIS_RI_320x200, 0x00, 0x00, 0x04, 0x04, 0x1a, 0},        /* 320x200x8  */
323         {0x5c, 0xba1f, 0x0000, SIS_RI_512x384, 0x00, 0x00, 0x00, 0x00, 0x1d, 4},        /* 512x384x32 */
324         {0x5d, 0x0a1d, 0x0139, SIS_RI_640x400, 0x00, 0x00, 0x05, 0x07, 0x10, 0},        /* 640x400x16 */
325         {0x5e, 0x0a1f, 0x0000, SIS_RI_640x400, 0x00, 0x00, 0x05, 0x07, 0x10, 0},        /* 640x400x32 */
326         {0x62, 0x0a3f, 0x013a, SIS_RI_640x480, 0x00, 0x00, 0x05, 0x05, 0x08, 2},        /* 640x480x32 */
327         {0x63, 0x2a3f, 0x013b, SIS_RI_800x600, 0x00, 0x00, 0x07, 0x06, 0x00, 3},        /* 800x600x32 */
328         {0x64, 0x0a7f, 0x013c, SIS_RI_1024x768, 0x00, 0x00, 0x08, 0x07, 0x13, 4},       /* 1024x768x32 */
329         {0x65, 0x0eff, 0x013d, SIS_RI_1280x1024, 0x00, 0x00, 0x00, 0x00, 0x2f, 8},      /* 1280x1024x32 */
330         {0x70, 0x6a1b, 0x0000, SIS_RI_800x480, 0x00, 0x00, 0x07, 0x07, 0x1e, -1},       /* 800x480x8 */
331         {0x71, 0x4a1b, 0x0000, SIS_RI_1024x576, 0x00, 0x00, 0x00, 0x00, 0x21, -1},      /* 1024x576x8 */
332         {0x74, 0x4a1d, 0x0000, SIS_RI_1024x576, 0x00, 0x00, 0x00, 0x00, 0x21, -1},      /* 1024x576x16 */
333         {0x75, 0x0a3d, 0x0000, SIS_RI_1280x720, 0x00, 0x00, 0x00, 0x00, 0x24, 5},       /* 1280x720x16 */
334         {0x76, 0x6a1f, 0x0000, SIS_RI_800x480, 0x00, 0x00, 0x07, 0x07, 0x1e, -1},       /* 800x480x32 */
335         {0x77, 0x4a1f, 0x0000, SIS_RI_1024x576, 0x00, 0x00, 0x00, 0x00, 0x21, -1},      /* 1024x576x32 */
336         {0x78, 0x0a3f, 0x0000, SIS_RI_1280x720, 0x00, 0x00, 0x00, 0x00, 0x24, 5},       /* 1280x720x32 */
337         {0x79, 0x0a3b, 0x0000, SIS_RI_1280x720, 0x00, 0x00, 0x00, 0x00, 0x24, 5},       /* 1280x720x8 */
338         {0x7a, 0x6a1d, 0x0000, SIS_RI_800x480, 0x00, 0x00, 0x07, 0x07, 0x1e, -1},       /* 800x480x16 */
339         {0x23, 0x0e3b, 0x0000, SIS_RI_1280x768, 0x00, 0x00, 0x00, 0x00, 0x27, 6},       /* 1280x768x8 */
340         {0x24, 0x0e7d, 0x0000, SIS_RI_1280x768, 0x00, 0x00, 0x00, 0x00, 0x27, 6},       /* 1280x768x16 */
341         {0x25, 0x0eff, 0x0000, SIS_RI_1280x768, 0x00, 0x00, 0x00, 0x00, 0x27, 6},       /* 1280x768x32 */
342         {0x39, 0x6a1b, 0x0000, SIS_RI_848x480, 0x00, 0x00, 0x00, 0x00, 0x28, -1},       /* 848x480 */
343         {0x3b, 0x6a3d, 0x0000, SIS_RI_848x480, 0x00, 0x00, 0x00, 0x00, 0x28,
344          -1},
345         {0x3e, 0x6a7f, 0x0000, SIS_RI_848x480, 0x00, 0x00, 0x00, 0x00, 0x28,
346          -1},
347         {0x3f, 0x6a1b, 0x0000, SIS_RI_856x480, 0x00, 0x00, 0x00, 0x00, 0x2a, -1},       /* 856x480 */
348         {0x42, 0x6a3d, 0x0000, SIS_RI_856x480, 0x00, 0x00, 0x00, 0x00, 0x2a,
349          -1},
350         {0x45, 0x6a7f, 0x0000, SIS_RI_856x480, 0x00, 0x00, 0x00, 0x00, 0x2a,
351          -1},
352         {0x4f, 0x9a1f, 0x0000, SIS_RI_320x200, 0x00, 0x00, 0x04, 0x04, 0x1a, 0},        /* 320x200x32 */
353         {0x53, 0x9a1f, 0x0000, SIS_RI_320x240, 0x00, 0x00, 0x04, 0x04, 0x1b, 2},        /* 320x240x32 */
354         {0x54, 0xba1f, 0x0000, SIS_RI_400x300, 0x00, 0x00, 0x07, 0x07, 0x1c, 3},        /* 400x300x32 */
355         {0x5f, 0x6a1b, 0x0000, SIS_RI_768x576, 0x00, 0x00, 0x06, 0x06, 0x2c, -1},       /* 768x576 */
356         {0x60, 0x6a1d, 0x0000, SIS_RI_768x576, 0x00, 0x00, 0x06, 0x06, 0x2c,
357          -1},
358         {0x61, 0x6a3f, 0x0000, SIS_RI_768x576, 0x00, 0x00, 0x06, 0x06, 0x2c,
359          -1},
360         {0x1d, 0x6a1b, 0x0000, SIS_RI_960x540, 0x00, 0x00, 0x00, 0x00, 0x2d, -1},       /* 960x540 */
361         {0x1e, 0x6a3d, 0x0000, SIS_RI_960x540, 0x00, 0x00, 0x00, 0x00, 0x2d,
362          -1},
363         {0x1f, 0x6a7f, 0x0000, SIS_RI_960x540, 0x00, 0x00, 0x00, 0x00, 0x2d,
364          -1},
365         {0x20, 0x6a1b, 0x0000, SIS_RI_960x600, 0x00, 0x00, 0x00, 0x00, 0x2e, -1},       /* 960x600 */
366         {0x21, 0x6a3d, 0x0000, SIS_RI_960x600, 0x00, 0x00, 0x00, 0x00, 0x2e,
367          -1},
368         {0x22, 0x6a7f, 0x0000, SIS_RI_960x600, 0x00, 0x00, 0x00, 0x00, 0x2e,
369          -1},
370         {0x29, 0x4e1b, 0x0000, SIS_RI_1152x864, 0x00, 0x00, 0x00, 0x00, 0x33, -1},      /* 1152x864 */
371         {0x2a, 0x4e3d, 0x0000, SIS_RI_1152x864, 0x00, 0x00, 0x00, 0x00, 0x33,
372          -1},
373         {0x2b, 0x4e7f, 0x0000, SIS_RI_1152x864, 0x00, 0x00, 0x00, 0x00, 0x33,
374          -1},
375         {0xff, 0x0000, 0x0000, 0, 0x00, 0x00, 0x00, 0x00, 0x00, -1}
376 };
377
378 static const struct SiS_Ext2 SiSUSB_RefIndex[] = {
379         {0x085f, 0x0d, 0x03, 0x05, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x0 */
380         {0x0067, 0x0e, 0x04, 0x05, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x1 */
381         {0x0067, 0x0f, 0x08, 0x48, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x2 */
382         {0x0067, 0x10, 0x07, 0x8b, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x3 */
383         {0x0047, 0x11, 0x0a, 0x00, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x4 */
384         {0x0047, 0x12, 0x0d, 0x00, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x5 */
385         {0x0047, 0x13, 0x13, 0x00, 0x05, 0x30, 800, 600, 0x20, 0x00, 0x00},     /* 0x6 */
386         {0x0107, 0x14, 0x1c, 0x00, 0x05, 0x30, 800, 600, 0x20, 0x00, 0x00},     /* 0x7 */
387         {0xc85f, 0x05, 0x00, 0x04, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0x8 */
388         {0xc067, 0x06, 0x02, 0x04, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0x9 */
389         {0xc067, 0x07, 0x02, 0x47, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xa */
390         {0xc067, 0x08, 0x03, 0x8a, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xb */
391         {0xc047, 0x09, 0x05, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xc */
392         {0xc047, 0x0a, 0x09, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xd */
393         {0xc047, 0x0b, 0x0e, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xe */
394         {0xc047, 0x0c, 0x15, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xf */
395         {0x487f, 0x04, 0x00, 0x00, 0x00, 0x2f, 640, 400, 0x30, 0x55, 0x6e},     /* 0x10 */
396         {0xc06f, 0x3c, 0x01, 0x06, 0x13, 0x31, 720, 480, 0x30, 0x00, 0x00},     /* 0x11 */
397         {0x006f, 0x3d, 0x6f, 0x06, 0x14, 0x32, 720, 576, 0x30, 0x00, 0x00},     /* 0x12 (6f was 03) */
398         {0x0087, 0x15, 0x06, 0x00, 0x06, 0x38, 1024, 768, 0x30, 0x00, 0x00},    /* 0x13 */
399         {0xc877, 0x16, 0x0b, 0x06, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},    /* 0x14 */
400         {0xc067, 0x17, 0x0f, 0x49, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},    /* 0x15 */
401         {0x0067, 0x18, 0x11, 0x00, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},    /* 0x16 */
402         {0x0047, 0x19, 0x16, 0x8c, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},    /* 0x17 */
403         {0x0107, 0x1a, 0x1b, 0x00, 0x06, 0x38, 1024, 768, 0x10, 0x00, 0x00},    /* 0x18 */
404         {0x0107, 0x1b, 0x1f, 0x00, 0x06, 0x38, 1024, 768, 0x10, 0x00, 0x00},    /* 0x19 */
405         {0x407f, 0x00, 0x00, 0x00, 0x00, 0x41, 320, 200, 0x30, 0x56, 0x4e},     /* 0x1a */
406         {0xc07f, 0x01, 0x00, 0x04, 0x04, 0x50, 320, 240, 0x30, 0x00, 0x00},     /* 0x1b */
407         {0x007f, 0x02, 0x04, 0x05, 0x05, 0x51, 400, 300, 0x30, 0x00, 0x00},     /* 0x1c */
408         {0xc077, 0x03, 0x0b, 0x06, 0x06, 0x52, 512, 384, 0x30, 0x00, 0x00},     /* 0x1d */
409         {0x0077, 0x32, 0x40, 0x08, 0x18, 0x70, 800, 480, 0x30, 0x00, 0x00},     /* 0x1e */
410         {0x0047, 0x33, 0x07, 0x08, 0x18, 0x70, 800, 480, 0x30, 0x00, 0x00},     /* 0x1f */
411         {0x0047, 0x34, 0x0a, 0x08, 0x18, 0x70, 800, 480, 0x30, 0x00, 0x00},     /* 0x20 */
412         {0x0077, 0x35, 0x0b, 0x09, 0x19, 0x71, 1024, 576, 0x30, 0x00, 0x00},    /* 0x21 */
413         {0x0047, 0x36, 0x11, 0x09, 0x19, 0x71, 1024, 576, 0x30, 0x00, 0x00},    /* 0x22 */
414         {0x0047, 0x37, 0x16, 0x09, 0x19, 0x71, 1024, 576, 0x30, 0x00, 0x00},    /* 0x23 */
415         {0x1137, 0x38, 0x19, 0x0a, 0x0c, 0x75, 1280, 720, 0x30, 0x00, 0x00},    /* 0x24 */
416         {0x1107, 0x39, 0x1e, 0x0a, 0x0c, 0x75, 1280, 720, 0x30, 0x00, 0x00},    /* 0x25 */
417         {0x1307, 0x3a, 0x20, 0x0a, 0x0c, 0x75, 1280, 720, 0x30, 0x00, 0x00},    /* 0x26 */
418         {0x0077, 0x42, 0x5b, 0x08, 0x11, 0x23, 1280, 768, 0x30, 0x00, 0x00},    /* 0x27 */
419         {0x0087, 0x45, 0x57, 0x00, 0x16, 0x39, 848, 480, 0x30, 0x00, 0x00},     /* 0x28 38Hzi  */
420         {0xc067, 0x46, 0x55, 0x0b, 0x16, 0x39, 848, 480, 0x30, 0x00, 0x00},     /* 0x29 848x480-60Hz   */
421         {0x0087, 0x47, 0x57, 0x00, 0x17, 0x3f, 856, 480, 0x30, 0x00, 0x00},     /* 0x2a 856x480-38Hzi  */
422         {0xc067, 0x48, 0x57, 0x00, 0x17, 0x3f, 856, 480, 0x30, 0x00, 0x00},     /* 0x2b 856x480-60Hz   */
423         {0x006f, 0x4d, 0x71, 0x06, 0x15, 0x5f, 768, 576, 0x30, 0x00, 0x00},     /* 0x2c 768x576-56Hz   */
424         {0x0067, 0x52, 0x6a, 0x00, 0x1c, 0x1d, 960, 540, 0x30, 0x00, 0x00},     /* 0x2d 960x540 60Hz */
425         {0x0077, 0x53, 0x6b, 0x0b, 0x1d, 0x20, 960, 600, 0x30, 0x00, 0x00},     /* 0x2e 960x600 60Hz */
426         {0x0087, 0x1c, 0x11, 0x00, 0x07, 0x3a, 1280, 1024, 0x30, 0x00, 0x00},   /* 0x2f */
427         {0x0137, 0x1d, 0x19, 0x07, 0x07, 0x3a, 1280, 1024, 0x00, 0x00, 0x00},   /* 0x30 */
428         {0x0107, 0x1e, 0x1e, 0x00, 0x07, 0x3a, 1280, 1024, 0x00, 0x00, 0x00},   /* 0x31 */
429         {0x0207, 0x1f, 0x20, 0x00, 0x07, 0x3a, 1280, 1024, 0x00, 0x00, 0x00},   /* 0x32 */
430         {0x0127, 0x54, 0x6d, 0x00, 0x1a, 0x29, 1152, 864, 0x30, 0x00, 0x00},    /* 0x33 1152x864-60Hz  */
431         {0x0127, 0x44, 0x19, 0x00, 0x1a, 0x29, 1152, 864, 0x30, 0x00, 0x00},    /* 0x34 1152x864-75Hz  */
432         {0x0127, 0x4a, 0x1e, 0x00, 0x1a, 0x29, 1152, 864, 0x30, 0x00, 0x00},    /* 0x35 1152x864-85Hz  */
433         {0xffff, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0, 0, 0x00, 0x00}
434 };
435
436 static const struct SiS_CRT1Table SiSUSB_CRT1Table[] = {
437         {{0x2d, 0x27, 0x28, 0x90, 0x2c, 0x80, 0xbf, 0x1f,
438           0x9c, 0x8e, 0x8f, 0x96, 0xb9, 0x30, 0x00, 0x00,
439           0x00}},               /* 0x0 */
440         {{0x2d, 0x27, 0x28, 0x90, 0x2c, 0x80, 0x0b, 0x3e,
441           0xe9, 0x8b, 0xdf, 0xe7, 0x04, 0x00, 0x00, 0x00,
442           0x00}},               /* 0x1 */
443         {{0x3d, 0x31, 0x31, 0x81, 0x37, 0x1f, 0x72, 0xf0,
444           0x58, 0x8c, 0x57, 0x57, 0x73, 0x20, 0x00, 0x05,
445           0x01}},               /* 0x2 */
446         {{0x4f, 0x3f, 0x3f, 0x93, 0x45, 0x0d, 0x24, 0xf5,
447           0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x01,
448           0x01}},               /* 0x3 */
449         {{0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
450           0x9c, 0x8e, 0x8f, 0x96, 0xb9, 0x30, 0x00, 0x05,
451           0x00}},               /* 0x4 */
452         {{0x5f, 0x4f, 0x4f, 0x83, 0x55, 0x81, 0x0b, 0x3e,
453           0xe9, 0x8b, 0xdf, 0xe8, 0x0c, 0x00, 0x00, 0x05,
454           0x00}},               /* 0x5 */
455         {{0x63, 0x4f, 0x4f, 0x87, 0x56, 0x9b, 0x06, 0x3e,
456           0xe8, 0x8a, 0xdf, 0xe7, 0x07, 0x00, 0x00, 0x01,
457           0x00}},               /* 0x6 */
458         {{0x64, 0x4f, 0x4f, 0x88, 0x55, 0x9d, 0xf2, 0x1f,
459           0xe0, 0x83, 0xdf, 0xdf, 0xf3, 0x10, 0x00, 0x01,
460           0x00}},               /* 0x7 */
461         {{0x63, 0x4f, 0x4f, 0x87, 0x5a, 0x81, 0xfb, 0x1f,
462           0xe0, 0x83, 0xdf, 0xdf, 0xfc, 0x10, 0x00, 0x05,
463           0x00}},               /* 0x8 */
464         {{0x65, 0x4f, 0x4f, 0x89, 0x58, 0x80, 0xfb, 0x1f,
465           0xe0, 0x83, 0xdf, 0xdf, 0xfc, 0x10, 0x00, 0x05,
466           0x61}},               /* 0x9 */
467         {{0x65, 0x4f, 0x4f, 0x89, 0x58, 0x80, 0x01, 0x3e,
468           0xe0, 0x83, 0xdf, 0xdf, 0x02, 0x00, 0x00, 0x05,
469           0x61}},               /* 0xa */
470         {{0x67, 0x4f, 0x4f, 0x8b, 0x58, 0x81, 0x0d, 0x3e,
471           0xe0, 0x83, 0xdf, 0xdf, 0x0e, 0x00, 0x00, 0x05,
472           0x61}},               /* 0xb */
473         {{0x65, 0x4f, 0x4f, 0x89, 0x57, 0x9f, 0xfb, 0x1f,
474           0xe6, 0x8a, 0xdf, 0xdf, 0xfc, 0x10, 0x00, 0x01,
475           0x00}},               /* 0xc */
476         {{0x7b, 0x63, 0x63, 0x9f, 0x6a, 0x93, 0x6f, 0xf0,
477           0x58, 0x8a, 0x57, 0x57, 0x70, 0x20, 0x00, 0x05,
478           0x01}},               /* 0xd */
479         {{0x7f, 0x63, 0x63, 0x83, 0x6c, 0x1c, 0x72, 0xf0,
480           0x58, 0x8c, 0x57, 0x57, 0x73, 0x20, 0x00, 0x06,
481           0x01}},               /* 0xe */
482         {{0x7d, 0x63, 0x63, 0x81, 0x6e, 0x1d, 0x98, 0xf0,
483           0x7c, 0x82, 0x57, 0x57, 0x99, 0x00, 0x00, 0x06,
484           0x01}},               /* 0xf */
485         {{0x7f, 0x63, 0x63, 0x83, 0x69, 0x13, 0x6f, 0xf0,
486           0x58, 0x8b, 0x57, 0x57, 0x70, 0x20, 0x00, 0x06,
487           0x01}},               /* 0x10 */
488         {{0x7e, 0x63, 0x63, 0x82, 0x6b, 0x13, 0x75, 0xf0,
489           0x58, 0x8b, 0x57, 0x57, 0x76, 0x20, 0x00, 0x06,
490           0x01}},               /* 0x11 */
491         {{0x81, 0x63, 0x63, 0x85, 0x6d, 0x18, 0x7a, 0xf0,
492           0x58, 0x8b, 0x57, 0x57, 0x7b, 0x20, 0x00, 0x06,
493           0x61}},               /* 0x12 */
494         {{0x83, 0x63, 0x63, 0x87, 0x6e, 0x19, 0x81, 0xf0,
495           0x58, 0x8b, 0x57, 0x57, 0x82, 0x20, 0x00, 0x06,
496           0x61}},               /* 0x13 */
497         {{0x85, 0x63, 0x63, 0x89, 0x6f, 0x1a, 0x91, 0xf0,
498           0x58, 0x8b, 0x57, 0x57, 0x92, 0x20, 0x00, 0x06,
499           0x61}},               /* 0x14 */
500         {{0x99, 0x7f, 0x7f, 0x9d, 0x84, 0x1a, 0x96, 0x1f,
501           0x7f, 0x83, 0x7f, 0x7f, 0x97, 0x10, 0x00, 0x02,
502           0x00}},               /* 0x15 */
503         {{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x24, 0xf5,
504           0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x02,
505           0x01}},               /* 0x16 */
506         {{0xa1, 0x7f, 0x7f, 0x85, 0x86, 0x97, 0x24, 0xf5,
507           0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x02,
508           0x01}},               /* 0x17 */
509         {{0x9f, 0x7f, 0x7f, 0x83, 0x85, 0x91, 0x1e, 0xf5,
510           0x00, 0x83, 0xff, 0xff, 0x1f, 0x10, 0x00, 0x02,
511           0x01}},               /* 0x18 */
512         {{0xa7, 0x7f, 0x7f, 0x8b, 0x89, 0x95, 0x26, 0xf5,
513           0x00, 0x83, 0xff, 0xff, 0x27, 0x10, 0x00, 0x02,
514           0x01}},               /* 0x19 */
515         {{0xa9, 0x7f, 0x7f, 0x8d, 0x8c, 0x9a, 0x2c, 0xf5,
516           0x00, 0x83, 0xff, 0xff, 0x2d, 0x14, 0x00, 0x02,
517           0x62}},               /* 0x1a */
518         {{0xab, 0x7f, 0x7f, 0x8f, 0x8d, 0x9b, 0x35, 0xf5,
519           0x00, 0x83, 0xff, 0xff, 0x36, 0x14, 0x00, 0x02,
520           0x62}},               /* 0x1b */
521         {{0xcf, 0x9f, 0x9f, 0x93, 0xb2, 0x01, 0x14, 0xba,
522           0x00, 0x83, 0xff, 0xff, 0x15, 0x00, 0x00, 0x03,
523           0x00}},               /* 0x1c */
524         {{0xce, 0x9f, 0x9f, 0x92, 0xa9, 0x17, 0x28, 0x5a,
525           0x00, 0x83, 0xff, 0xff, 0x29, 0x09, 0x00, 0x07,
526           0x01}},               /* 0x1d */
527         {{0xce, 0x9f, 0x9f, 0x92, 0xa5, 0x17, 0x28, 0x5a,
528           0x00, 0x83, 0xff, 0xff, 0x29, 0x09, 0x00, 0x07,
529           0x01}},               /* 0x1e */
530         {{0xd3, 0x9f, 0x9f, 0x97, 0xab, 0x1f, 0x2e, 0x5a,
531           0x00, 0x83, 0xff, 0xff, 0x2f, 0x09, 0x00, 0x07,
532           0x01}},               /* 0x1f */
533         {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
534           0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
535           0x00}},               /* 0x20 */
536         {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
537           0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
538           0x00}},               /* 0x21 */
539         {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
540           0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
541           0x00}},               /* 0x22 */
542         {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
543           0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
544           0x00}},               /* 0x23 */
545         {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
546           0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
547           0x00}},               /* 0x24 */
548         {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
549           0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
550           0x00}},               /* 0x25 */
551         {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
552           0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
553           0x00}},               /* 0x26 */
554         {{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
555           0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
556           0x00}},               /* 0x27 */
557         {{0x43, 0xef, 0xef, 0x87, 0x06, 0x00, 0xd4, 0x1f,
558           0xa0, 0x83, 0x9f, 0x9f, 0xd5, 0x1f, 0x41, 0x05,
559           0x63}},               /* 0x28 */
560         {{0x45, 0xef, 0xef, 0x89, 0x07, 0x01, 0xd9, 0x1f,
561           0xa0, 0x83, 0x9f, 0x9f, 0xda, 0x1f, 0x41, 0x05,
562           0x63}},               /* 0x29 */
563         {{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
564           0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
565           0x00}},               /* 0x2a */
566         {{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
567           0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
568           0x00}},               /* 0x2b */
569         {{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
570           0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
571           0x00}},               /* 0x2c */
572         {{0x59, 0xff, 0xff, 0x9d, 0x17, 0x13, 0x33, 0xba,
573           0x00, 0x83, 0xff, 0xff, 0x34, 0x0f, 0x41, 0x05,
574           0x44}},               /* 0x2d */
575         {{0x5b, 0xff, 0xff, 0x9f, 0x18, 0x14, 0x38, 0xba,
576           0x00, 0x83, 0xff, 0xff, 0x39, 0x0f, 0x41, 0x05,
577           0x44}},               /* 0x2e */
578         {{0x5b, 0xff, 0xff, 0x9f, 0x18, 0x14, 0x3d, 0xba,
579           0x00, 0x83, 0xff, 0xff, 0x3e, 0x0f, 0x41, 0x05,
580           0x44}},               /* 0x2f */
581         {{0x5d, 0xff, 0xff, 0x81, 0x19, 0x95, 0x41, 0xba,
582           0x00, 0x84, 0xff, 0xff, 0x42, 0x0f, 0x41, 0x05,
583           0x44}},               /* 0x30 */
584         {{0x55, 0xff, 0xff, 0x99, 0x0d, 0x0c, 0x3e, 0xba,
585           0x00, 0x84, 0xff, 0xff, 0x3f, 0x0f, 0x41, 0x05,
586           0x00}},               /* 0x31 */
587         {{0x7f, 0x63, 0x63, 0x83, 0x6c, 0x1c, 0x72, 0xba,
588           0x27, 0x8b, 0xdf, 0xdf, 0x73, 0x00, 0x00, 0x06,
589           0x01}},               /* 0x32 */
590         {{0x7f, 0x63, 0x63, 0x83, 0x69, 0x13, 0x6f, 0xba,
591           0x26, 0x89, 0xdf, 0xdf, 0x6f, 0x00, 0x00, 0x06,
592           0x01}},               /* 0x33 */
593         {{0x7f, 0x63, 0x63, 0x82, 0x6b, 0x13, 0x75, 0xba,
594           0x29, 0x8c, 0xdf, 0xdf, 0x75, 0x00, 0x00, 0x06,
595           0x01}},               /* 0x34 */
596         {{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x24, 0xf1,
597           0xaf, 0x85, 0x3f, 0x3f, 0x25, 0x30, 0x00, 0x02,
598           0x01}},               /* 0x35 */
599         {{0x9f, 0x7f, 0x7f, 0x83, 0x85, 0x91, 0x1e, 0xf1,
600           0xad, 0x81, 0x3f, 0x3f, 0x1f, 0x30, 0x00, 0x02,
601           0x01}},               /* 0x36 */
602         {{0xa7, 0x7f, 0x7f, 0x88, 0x89, 0x95, 0x26, 0xf1,
603           0xb1, 0x85, 0x3f, 0x3f, 0x27, 0x30, 0x00, 0x02,
604           0x01}},               /* 0x37 */
605         {{0xce, 0x9f, 0x9f, 0x92, 0xa9, 0x17, 0x28, 0xc4,
606           0x7a, 0x8e, 0xcf, 0xcf, 0x29, 0x21, 0x00, 0x07,
607           0x01}},               /* 0x38 */
608         {{0xce, 0x9f, 0x9f, 0x92, 0xa5, 0x17, 0x28, 0xd4,
609           0x7a, 0x8e, 0xcf, 0xcf, 0x29, 0x21, 0x00, 0x07,
610           0x01}},               /* 0x39 */
611         {{0xd3, 0x9f, 0x9f, 0x97, 0xab, 0x1f, 0x2e, 0xd4,
612           0x7d, 0x81, 0xcf, 0xcf, 0x2f, 0x21, 0x00, 0x07,
613           0x01}},               /* 0x3a */
614         {{0xdc, 0x9f, 0x9f, 0x80, 0xaf, 0x9d, 0xe6, 0xff,
615           0xc0, 0x83, 0xbf, 0xbf, 0xe7, 0x10, 0x00, 0x07,
616           0x01}},               /* 0x3b */
617         {{0x6b, 0x59, 0x59, 0x8f, 0x5e, 0x8c, 0x0b, 0x3e,
618           0xe9, 0x8b, 0xdf, 0xe7, 0x04, 0x00, 0x00, 0x05,
619           0x00}},               /* 0x3c */
620         {{0x6d, 0x59, 0x59, 0x91, 0x60, 0x89, 0x53, 0xf0,
621           0x41, 0x84, 0x3f, 0x3f, 0x54, 0x00, 0x00, 0x05,
622           0x41}},               /* 0x3d */
623         {{0x86, 0x6a, 0x6a, 0x8a, 0x74, 0x06, 0x8c, 0x15,
624           0x4f, 0x83, 0xef, 0xef, 0x8d, 0x30, 0x00, 0x02,
625           0x00}},               /* 0x3e */
626         {{0x81, 0x6a, 0x6a, 0x85, 0x70, 0x00, 0x0f, 0x3e,
627           0xeb, 0x8e, 0xdf, 0xdf, 0x10, 0x00, 0x00, 0x02,
628           0x00}},               /* 0x3f */
629         {{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x1e, 0xf1,
630           0xae, 0x85, 0x57, 0x57, 0x1f, 0x30, 0x00, 0x02,
631           0x01}},               /* 0x40 */
632         {{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x24, 0xf5,
633           0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x02,
634           0x01}},               /* 0x41 */
635         {{0xce, 0x9f, 0x9f, 0x92, 0xa9, 0x17, 0x20, 0xf5,
636           0x03, 0x88, 0xff, 0xff, 0x21, 0x10, 0x00, 0x07,
637           0x01}},               /* 0x42 */
638         {{0xe6, 0xae, 0xae, 0x8a, 0xbd, 0x90, 0x3d, 0x10,
639           0x1a, 0x8d, 0x19, 0x19, 0x3e, 0x2f, 0x00, 0x03,
640           0x00}},               /* 0x43 */
641         {{0xc3, 0x8f, 0x8f, 0x87, 0x9b, 0x0b, 0x82, 0xef,
642           0x60, 0x83, 0x5f, 0x5f, 0x83, 0x10, 0x00, 0x07,
643           0x01}},               /* 0x44 */
644         {{0x86, 0x69, 0x69, 0x8A, 0x74, 0x06, 0x8C, 0x15,
645           0x4F, 0x83, 0xEF, 0xEF, 0x8D, 0x30, 0x00, 0x02,
646           0x00}},               /* 0x45 */
647         {{0x83, 0x69, 0x69, 0x87, 0x6f, 0x1d, 0x03, 0x3E,
648           0xE5, 0x8d, 0xDF, 0xe4, 0x04, 0x00, 0x00, 0x06,
649           0x00}},               /* 0x46 */
650         {{0x86, 0x6A, 0x6A, 0x8A, 0x74, 0x06, 0x8C, 0x15,
651           0x4F, 0x83, 0xEF, 0xEF, 0x8D, 0x30, 0x00, 0x02,
652           0x00}},               /* 0x47 */
653         {{0x81, 0x6A, 0x6A, 0x85, 0x70, 0x00, 0x0F, 0x3E,
654           0xEB, 0x8E, 0xDF, 0xDF, 0x10, 0x00, 0x00, 0x02,
655           0x00}},               /* 0x48 */
656         {{0xdd, 0xa9, 0xa9, 0x81, 0xb4, 0x97, 0x26, 0xfd,
657           0x01, 0x8d, 0xff, 0x00, 0x27, 0x10, 0x00, 0x03,
658           0x01}},               /* 0x49 */
659         {{0xd9, 0x8f, 0x8f, 0x9d, 0xba, 0x0a, 0x8a, 0xff,
660           0x60, 0x8b, 0x5f, 0x5f, 0x8b, 0x10, 0x00, 0x03,
661           0x01}},               /* 0x4a */
662         {{0xea, 0xae, 0xae, 0x8e, 0xba, 0x82, 0x40, 0x10,
663           0x1b, 0x87, 0x19, 0x1a, 0x41, 0x0f, 0x00, 0x03,
664           0x00}},               /* 0x4b */
665         {{0xd3, 0x9f, 0x9f, 0x97, 0xab, 0x1f, 0xf1, 0xff,
666           0xc0, 0x83, 0xbf, 0xbf, 0xf2, 0x10, 0x00, 0x07,
667           0x01}},               /* 0x4c */
668         {{0x75, 0x5f, 0x5f, 0x99, 0x66, 0x90, 0x53, 0xf0,
669           0x41, 0x84, 0x3f, 0x3f, 0x54, 0x00, 0x00, 0x05,
670           0x41}},
671         {{0x2d, 0x27, 0x28, 0x90, 0x2c, 0x80, 0x0b, 0x3e,
672           0xe9, 0x8b, 0xdf, 0xe7, 0x04, 0x00, 0x00, 0x00,
673           0x00}},               /* 0x4e */
674         {{0xcd, 0x9f, 0x9f, 0x91, 0xab, 0x1c, 0x3a, 0xff,
675           0x20, 0x83, 0x1f, 0x1f, 0x3b, 0x10, 0x00, 0x07,
676           0x21}},               /* 0x4f */
677         {{0x15, 0xd1, 0xd1, 0x99, 0xe2, 0x19, 0x3d, 0x10,
678           0x1a, 0x8d, 0x19, 0x19, 0x3e, 0x2f, 0x01, 0x0c,
679           0x20}},               /* 0x50 */
680         {{0x0e, 0xef, 0xef, 0x92, 0xfe, 0x03, 0x30, 0xf0,
681           0x1e, 0x83, 0x1b, 0x1c, 0x31, 0x00, 0x01, 0x00,
682           0x61}},               /* 0x51 */
683         {{0x85, 0x77, 0x77, 0x89, 0x7d, 0x01, 0x31, 0xf0,
684           0x1e, 0x84, 0x1b, 0x1c, 0x32, 0x00, 0x00, 0x02,
685           0x41}},               /* 0x52 */
686         {{0x87, 0x77, 0x77, 0x8b, 0x81, 0x0b, 0x68, 0xf0,
687           0x5a, 0x80, 0x57, 0x57, 0x69, 0x00, 0x00, 0x02,
688           0x01}},               /* 0x53 */
689         {{0xcd, 0x8f, 0x8f, 0x91, 0x9b, 0x1b, 0x7a, 0xff,
690           0x64, 0x8c, 0x5f, 0x62, 0x7b, 0x10, 0x00, 0x07,
691           0x41}}                /* 0x54 */
692 };
693
694 static const struct SiS_VCLKData SiSUSB_VCLKData[] = {
695         {0x1b, 0xe1, 25},       /* 0x00 */
696         {0x4e, 0xe4, 28},       /* 0x01 */
697         {0x57, 0xe4, 31},       /* 0x02 */
698         {0xc3, 0xc8, 36},       /* 0x03 */
699         {0x42, 0xe2, 40},       /* 0x04 */
700         {0xfe, 0xcd, 43},       /* 0x05 */
701         {0x5d, 0xc4, 44},       /* 0x06 */
702         {0x52, 0xe2, 49},       /* 0x07 */
703         {0x53, 0xe2, 50},       /* 0x08 */
704         {0x74, 0x67, 52},       /* 0x09 */
705         {0x6d, 0x66, 56},       /* 0x0a */
706         {0x5a, 0x64, 65},       /* 0x0b */
707         {0x46, 0x44, 67},       /* 0x0c */
708         {0xb1, 0x46, 68},       /* 0x0d */
709         {0xd3, 0x4a, 72},       /* 0x0e */
710         {0x29, 0x61, 75},       /* 0x0f */
711         {0x6e, 0x46, 76},       /* 0x10 */
712         {0x2b, 0x61, 78},       /* 0x11 */
713         {0x31, 0x42, 79},       /* 0x12 */
714         {0xab, 0x44, 83},       /* 0x13 */
715         {0x46, 0x25, 84},       /* 0x14 */
716         {0x78, 0x29, 86},       /* 0x15 */
717         {0x62, 0x44, 94},       /* 0x16 */
718         {0x2b, 0x41, 104},      /* 0x17 */
719         {0x3a, 0x23, 105},      /* 0x18 */
720         {0x70, 0x44, 108},      /* 0x19 */
721         {0x3c, 0x23, 109},      /* 0x1a */
722         {0x5e, 0x43, 113},      /* 0x1b */
723         {0xbc, 0x44, 116},      /* 0x1c */
724         {0xe0, 0x46, 132},      /* 0x1d */
725         {0x54, 0x42, 135},      /* 0x1e */
726         {0xea, 0x2a, 139},      /* 0x1f */
727         {0x41, 0x22, 157},      /* 0x20 */
728         {0x70, 0x24, 162},      /* 0x21 */
729         {0x30, 0x21, 175},      /* 0x22 */
730         {0x4e, 0x22, 189},      /* 0x23 */
731         {0xde, 0x26, 194},      /* 0x24 */
732         {0x62, 0x06, 202},      /* 0x25 */
733         {0x3f, 0x03, 229},      /* 0x26 */
734         {0xb8, 0x06, 234},      /* 0x27 */
735         {0x34, 0x02, 253},      /* 0x28 */
736         {0x58, 0x04, 255},      /* 0x29 */
737         {0x24, 0x01, 265},      /* 0x2a */
738         {0x9b, 0x02, 267},      /* 0x2b */
739         {0x70, 0x05, 270},      /* 0x2c */
740         {0x25, 0x01, 272},      /* 0x2d */
741         {0x9c, 0x02, 277},      /* 0x2e */
742         {0x27, 0x01, 286},      /* 0x2f */
743         {0x3c, 0x02, 291},      /* 0x30 */
744         {0xef, 0x0a, 292},      /* 0x31 */
745         {0xf6, 0x0a, 310},      /* 0x32 */
746         {0x95, 0x01, 315},      /* 0x33 */
747         {0xf0, 0x09, 324},      /* 0x34 */
748         {0xfe, 0x0a, 331},      /* 0x35 */
749         {0xf3, 0x09, 332},      /* 0x36 */
750         {0xea, 0x08, 340},      /* 0x37 */
751         {0xe8, 0x07, 376},      /* 0x38 */
752         {0xde, 0x06, 389},      /* 0x39 */
753         {0x52, 0x2a, 54},       /* 0x3a 301 TV */
754         {0x52, 0x6a, 27},       /* 0x3b 301 TV */
755         {0x62, 0x24, 70},       /* 0x3c 301 TV */
756         {0x62, 0x64, 70},       /* 0x3d 301 TV */
757         {0xa8, 0x4c, 30},       /* 0x3e 301 TV */
758         {0x20, 0x26, 33},       /* 0x3f 301 TV */
759         {0x31, 0xc2, 39},       /* 0x40 */
760         {0x60, 0x36, 30},       /* 0x41 Chrontel */
761         {0x40, 0x4a, 28},       /* 0x42 Chrontel */
762         {0x9f, 0x46, 44},       /* 0x43 Chrontel */
763         {0x97, 0x2c, 26},       /* 0x44 */
764         {0x44, 0xe4, 25},       /* 0x45 Chrontel */
765         {0x7e, 0x32, 47},       /* 0x46 Chrontel */
766         {0x8a, 0x24, 31},       /* 0x47 Chrontel */
767         {0x97, 0x2c, 26},       /* 0x48 Chrontel */
768         {0xce, 0x3c, 39},       /* 0x49 */
769         {0x52, 0x4a, 36},       /* 0x4a Chrontel */
770         {0x34, 0x61, 95},       /* 0x4b */
771         {0x78, 0x27, 108},      /* 0x4c - was 102 */
772         {0x66, 0x43, 123},      /* 0x4d Modes 0x26-0x28 (1400x1050) */
773         {0x41, 0x4e, 21},       /* 0x4e */
774         {0xa1, 0x4a, 29},       /* 0x4f Chrontel */
775         {0x19, 0x42, 42},       /* 0x50 */
776         {0x54, 0x46, 58},       /* 0x51 Chrontel */
777         {0x25, 0x42, 61},       /* 0x52 */
778         {0x44, 0x44, 66},       /* 0x53 Chrontel */
779         {0x3a, 0x62, 70},       /* 0x54 Chrontel */
780         {0x62, 0xc6, 34},       /* 0x55 848x480-60 */
781         {0x6a, 0xc6, 37},       /* 0x56 848x480-75 - TEMP */
782         {0xbf, 0xc8, 35},       /* 0x57 856x480-38i,60 */
783         {0x30, 0x23, 88},       /* 0x58 1360x768-62 (is 60Hz!) */
784         {0x52, 0x07, 149},      /* 0x59 1280x960-85 */
785         {0x56, 0x07, 156},      /* 0x5a 1400x1050-75 */
786         {0x70, 0x29, 81},       /* 0x5b 1280x768 LCD */
787         {0x45, 0x25, 83},       /* 0x5c 1280x800  */
788         {0x70, 0x0a, 147},      /* 0x5d 1680x1050 */
789         {0x70, 0x24, 162},      /* 0x5e 1600x1200 */
790         {0x5a, 0x64, 65},       /* 0x5f 1280x720 - temp */
791         {0x63, 0x46, 68},       /* 0x60 1280x768_2 */
792         {0x31, 0x42, 79},       /* 0x61 1280x768_3 - temp */
793         {0, 0, 0},              /* 0x62 - custom (will be filled out at run-time) */
794         {0x5a, 0x64, 65},       /* 0x63 1280x720 (LCD LVDS) */
795         {0x70, 0x28, 90},       /* 0x64 1152x864@60 */
796         {0x41, 0xc4, 32},       /* 0x65 848x480@60 */
797         {0x5c, 0xc6, 32},       /* 0x66 856x480@60 */
798         {0x76, 0xe7, 27},       /* 0x67 720x480@60 */
799         {0x5f, 0xc6, 33},       /* 0x68 720/768x576@60 */
800         {0x52, 0x27, 75},       /* 0x69 1920x1080i 60Hz interlaced */
801         {0x7c, 0x6b, 38},       /* 0x6a 960x540@60 */
802         {0xe3, 0x56, 41},       /* 0x6b 960x600@60 */
803         {0x45, 0x25, 83},       /* 0x6c 1280x800 */
804         {0x70, 0x28, 90},       /* 0x6d 1152x864@60 */
805         {0x15, 0xe1, 20},       /* 0x6e 640x400@60 (fake, not actually used) */
806         {0x5f, 0xc6, 33},       /* 0x6f 720x576@60 */
807         {0x37, 0x5a, 10},       /* 0x70 320x200@60 (fake, not actually used) */
808         {0x2b, 0xc2, 35}        /* 0x71 768@576@60 */
809 };
810
811 int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
812 int SiSUSBSetVESAMode(struct SiS_Private *SiS_Pr, unsigned short VModeNo);
813
814 extern int sisusb_setreg(struct sisusb_usb_data *sisusb, int port, u8 data);
815 extern int sisusb_getreg(struct sisusb_usb_data *sisusb, int port, u8 * data);
816 extern int sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port,
817                             u8 index, u8 data);
818 extern int sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port,
819                             u8 index, u8 * data);
820 extern int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port,
821                                  u8 idx, u8 myand, u8 myor);
822 extern int sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port,
823                               u8 index, u8 myor);
824 extern int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port,
825                                u8 idx, u8 myand);
826
827 void sisusb_delete(struct kref *kref);
828 int sisusb_writeb(struct sisusb_usb_data *sisusb, u32 adr, u8 data);
829 int sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 * data);
830 int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src,
831                        u32 dest, int length, size_t * bytes_written);
832 int sisusb_reset_text_mode(struct sisusb_usb_data *sisusb, int init);
833 int sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot,
834                          u8 * arg, int cmapsz, int ch512, int dorecalc,
835                          struct vc_data *c, int fh, int uplock);
836 void sisusb_set_cursor(struct sisusb_usb_data *sisusb, unsigned int location);
837 int sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last);
838 void sisusb_console_exit(struct sisusb_usb_data *sisusb);
839 void sisusb_init_concode(void);
840
841 #endif