init301.h revision 72b676d7
1/* $XFree86$ */
2/* $XdotOrg$ */
3/*
4 * Data and prototypes for init301.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  _INIT301_H_
54#define  _INIT301_H_
55
56#include "osdef.h"
57#include "initdef.h"
58
59#ifdef SIS_XORG_XF86
60#include "sis.h"
61#include "sis_regs.h"
62#endif
63
64#ifdef SIS_LINUX_KERNEL
65#include "vgatypes.h"
66#include "vstruct.h"
67#ifdef SIS_CP
68#undef SIS_CP
69#endif
70#include <linux/config.h>
71#include <linux/version.h>
72#include <linux/types.h>
73#include <asm/io.h>
74#include <linux/fb.h>
75#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
76#include <video/fbcon.h>
77#endif
78#include "sis.h"
79#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
80#include <linux/sisfb.h>
81#else
82#include <video/sisfb.h>
83#endif
84#endif
85
86static const unsigned char SiS_YPbPrTable[5][64] = {
87	{	/* 525i */
88		0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
89		0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
90		0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
91		0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
92		0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
93		0x03,0x0a,0x65,0x9d,0x08,0x92,0x8f,0x40,
94		0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x53,
95		0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
96	},
97	{	/* 525p */
98		0x33,0x06,0x06,0x09,0x0b,0x0c,0x0c,0x0c,
99		0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
100		0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
101		0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4f,0x13,
102		0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
103		0x51,0x5e,0x60,0x49,0x7d,0x92,0x0f,0x40,
104		0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4e,
105		0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
106	},
107	{	/* 750p */
108#if 0 /* OK, but sticks to left edge */
109		0x13,0x1d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
110		0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
111		0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
112		0xed,0x50,0x70,0x9f,0x16,0x59,0x21 /*0x2b*/,0x13,
113		0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
114		0x4b,0x4b,0x65 /*0x6f*/,0x2f,0x63,0x92,0x0f,0x40,
115		0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x27,
116		0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
117#endif
118		0x23,0x2d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
119		0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
120		0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
121		0xed,0x50,0x70,0x9f,0x16,0x59,0x60,0x13,
122		0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
123		0x4b,0x4b,0x6f,0x2f,0x63,0x92,0x0f,0x40,
124		0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x73,
125		0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
126	},
127	{	/* 625i */
128		0x19,0x52,0x35,0x6e,0x04,0x38,0x3d,0x70,
129		0x94,0x49,0x01,0x12,0x06,0x3e,0x35,0x6d,
130		0x06,0x14,0x3e,0x35,0x6d,0x00,0x45,0x2b,
131		0x70,0x50,0x00,0x9b,0x00,0xd9,0x5d,0x17,
132		0x7d,0x05,0x45,0x00,0x00,0xe8,0x00,0x02,
133		0x0d,0x00,0x68,0xb0,0x0b,0x92,0x8f,0x40,
134		0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x63,
135		0x00,0x40,0x3e,0x00,0xe1,0x02,0x28,0x00
136	},
137	{	/* 625p */
138		0x3a,0x06,0x6a,0x6e,0x0b,0x70,0x0c,0x0c,
139		0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
140		0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
141		0x70,0x50,0xb2,0x9f,0x16,0x59,0x4f,0x13,
142		0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
143		0x51,0x5e,0x60,0x49,0x7d,0x92,0x0f,0x40,
144		0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4e,
145		0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
146	}
147};
148
149static const unsigned char SiS_TVPhase[] =
150{
151	0x21,0xED,0xBA,0x08,	/* 0x00 SiS_NTSCPhase */
152	0x2A,0x05,0xE3,0x00,	/* 0x01 SiS_PALPhase */
153	0x21,0xE4,0x2E,0x9B,	/* 0x02 SiS_PALMPhase */
154	0x21,0xF4,0x3E,0xBA,	/* 0x03 SiS_PALNPhase */
155	0x1E,0x8B,0xA2,0xA7,
156	0x1E,0x83,0x0A,0xE0,	/* 0x05 SiS_SpecialPhaseM */
157	0x00,0x00,0x00,0x00,
158	0x00,0x00,0x00,0x00,
159	0x21,0xF0,0x7B,0xD6,	/* 0x08 SiS_NTSCPhase2 */
160	0x2A,0x09,0x86,0xE9,	/* 0x09 SiS_PALPhase2 */
161	0x21,0xE6,0xEF,0xA4,	/* 0x0a SiS_PALMPhase2 */
162	0x21,0xF6,0x94,0x46,	/* 0x0b SiS_PALNPhase2 */
163	0x1E,0x8B,0xA2,0xA7,
164	0x1E,0x83,0x0A,0xE0,	/* 0x0d SiS_SpecialPhaseM */
165	0x00,0x00,0x00,0x00,
166	0x00,0x00,0x00,0x00,
167	0x1e,0x8c,0x5c,0x7a,	/* 0x10 SiS_SpecialPhase */
168	0x25,0xd4,0xfd,0x5e	/* 0x11 SiS_SpecialPhaseJ */
169};
170
171static const unsigned char SiS_HiTVGroup3_1[] = {
172	0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
173	0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
174	0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
175	0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
176	0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
177	0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
178	0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
179	0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
180};
181
182static const unsigned char SiS_HiTVGroup3_2[] = {
183	0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
184	0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
185	0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
186	0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
187	0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
188	0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
189	0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
190	0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
191};
192
193#ifdef SIS315H
194/* 661 et al LCD data structure (2.03.00) */
195static const unsigned char SiS_LCDStruct661[] = {
196    /* 1024x768 */
197/*  type|CR37|   HDE   |   VDE   |    HT   |    VT   |   hss    | hse   */
198    0x02,0xC0,0x00,0x04,0x00,0x03,0x40,0x05,0x26,0x03,0x10,0x00,0x88,
199    0x00,0x02,0x00,0x06,0x00,0x41,0x5A,0x64,0x00,0x00,0x00,0x00,0x04,
200    /*  | vss     |    vse  |clck|  clock  |CRT2DataP|CRT2DataP|idx     */
201    /*					      VESA    non-VESA  noscale */
202    /* 1280x1024 */
203    0x03,0xC0,0x00,0x05,0x00,0x04,0x98,0x06,0x2A,0x04,0x30,0x00,0x70,
204    0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x08,
205    /* 1400x1050 */
206    0x09,0x20,0x78,0x05,0x1A,0x04,0x98,0x06,0x2A,0x04,0x18,0x00,0x38,
207    0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x09,
208    /* 1600x1200 */
209    0x0B,0xE0,0x40,0x06,0xB0,0x04,0x70,0x08,0xE2,0x04,0x40,0x00,0xC0,
210    0x00,0x01,0x00,0x03,0x00,0xA2,0x70,0x24,0x00,0x00,0x00,0x00,0x0A,
211    /* 1280x768 (_2) */
212    0x0A,0xE0,0x00,0x05,0x00,0x03,0x7C,0x06,0x26,0x03,0x30,0x00,0x70,
213    0x00,0x03,0x00,0x06,0x00,0x4D,0xC8,0x48,0x00,0x00,0x00,0x00,0x06,
214    /* 1280x720 */
215    0x0E,0xE0,0x00,0x05,0xD0,0x02,0x80,0x05,0x26,0x03,0x10,0x00,0x20,
216    0x00,0x01,0x00,0x06,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x05,
217    /* 1280x800 (_2) */
218    0x0C,0xE0,0x00,0x05,0x20,0x03,0x10,0x06,0x2C,0x03,0x30,0x00,0x70,
219    0x00,0x04,0x00,0x03,0x00,0x49,0xCE,0x1E,0x00,0x00,0x00,0x00,0x09,
220    /* 1680x1050 */
221    0x0D,0xE0,0x90,0x06,0x1A,0x04,0x6C,0x07,0x2A,0x04,0x1A,0x00,0x4C,
222    0x00,0x03,0x00,0x06,0x00,0x79,0xBE,0x44,0x00,0x00,0x00,0x00,0x06,
223    /* 1280x800_3 */
224    0x0C,0xE0,0x00,0x05,0x20,0x03,0xAA,0x05,0x2E,0x03,0x30,0x00,0x50,
225    0x00,0x04,0x00,0x03,0x00,0x47,0xA9,0x10,0x00,0x00,0x00,0x00,0x07,
226    /* 800x600 */
227    0x01,0xC0,0x20,0x03,0x58,0x02,0x20,0x04,0x74,0x02,0x2A,0x00,0x80,
228    0x00,0x06,0x00,0x04,0x00,0x28,0x63,0x4B,0x00,0x00,0x00,0x00,0x00,
229    /* 1280x854 */
230    0x08,0xE0,0x00,0x05,0x56,0x03,0x80,0x06,0x5d,0x03,0x10,0x00,0x70,
231    0x00,0x01,0x00,0x03,0x00,0x54,0x75,0x13,0x00,0x00,0x00,0x00,0x08
232};
233#endif
234
235#ifdef SIS300
236static unsigned char SiS300_TrumpionData[14][80] = {
237  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
238    0x20,0x03,0x0B,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x10,0x00,0x00,0x04,0x23,
239    0x00,0x00,0x03,0x28,0x03,0x10,0x05,0x08,0x40,0x10,0x00,0x10,0x04,0x23,0x00,0x23,
240    0x03,0x11,0x60,0xBC,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x09,0x04,0x04,0x05,
241    0x04,0x0C,0x09,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5A,0x01,0xBE,0x01,0x00 },
242  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x27,0x00,0x80,0x02,
243    0x20,0x03,0x07,0x00,0x5E,0x01,0x0D,0x02,0x60,0x0C,0x30,0x11,0x00,0x00,0x04,0x23,
244    0x00,0x00,0x03,0x80,0x03,0x28,0x06,0x08,0x40,0x11,0x00,0x11,0x04,0x23,0x00,0x23,
245    0x03,0x11,0x60,0x90,0x01,0xFF,0x0F,0xF4,0x19,0x01,0x00,0x05,0x01,0x00,0x04,0x05,
246    0x04,0x0C,0x02,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEC,0x57,0x01,0xBE,0x01,0x00 },
247  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
248    0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
249    0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
250    0x03,0x11,0x60,0xD9,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
251    0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x59,0x01,0xBE,0x01,0x00 },
252  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
253    0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
254    0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
255    0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
256    0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
257  { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
258    0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
259    0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
260    0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
261    0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
262  { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
263    0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
264    0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
265    0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
266    0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
267  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
268    0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
269    0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
270    0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
271    0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
272  /* variant 2 */
273  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
274    0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
275    0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
276    0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
277    0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
278  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
279    0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
280    0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
281    0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
282    0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
283  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
284    0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
285    0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
286    0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
287    0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
288  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
289    0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
290    0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
291    0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
292    0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
293  { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
294    0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
295    0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
296    0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
297    0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
298  { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
299    0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
300    0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
301    0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
302    0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
303  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
304    0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
305    0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
306    0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
307    0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 }
308};
309#endif
310
311void		SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
312#ifndef SIS_LINUX_KERNEL
313void		SiS_LockCRT2(struct SiS_Private *SiS_Pr);
314#endif
315void		SiS_EnableCRT2(struct SiS_Private *SiS_Pr);
316unsigned short	SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
317void		SiS_WaitRetrace1(struct SiS_Private *SiS_Pr);
318BOOLEAN		SiS_IsDualEdge(struct SiS_Private *SiS_Pr);
319BOOLEAN		SiS_IsVAMode(struct SiS_Private *SiS_Pr);
320void		SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
321			unsigned short ModeIdIndex, int checkcrt2mode);
322void		SiS_SetYPbPr(struct SiS_Private *SiS_Pr);
323void    	SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
324			unsigned short ModeIdIndex);
325void		SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
326		unsigned short ModeIdIndex);
327unsigned short	SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
328			unsigned short RefreshRateTableIndex);
329unsigned short	SiS_GetResInfo(struct SiS_Private *SiS_Pr,unsigned short ModeNo,unsigned short ModeIdIndex);
330void		SiS_DisableBridge(struct SiS_Private *SiS_Pr);
331#ifndef SIS_LINUX_KERNEL
332void		SiS_EnableBridge(struct SiS_Private *SiS_Pr);
333#endif
334BOOLEAN		SiS_SetCRT2Group(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
335void		SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr);
336void		SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr);
337
338void		SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
339unsigned short	SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax);
340void		SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
341unsigned short	SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempax);
342#ifndef SIS_LINUX_KERNEL
343void		SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
344unsigned short	SiS_GetCH70xx(struct SiS_Private *SiS_Pr, unsigned short tempax);
345#endif
346void		SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
347			unsigned char orval,unsigned short andval);
348#ifdef SIS315H
349static void	SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr);
350static void	SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr);
351static void	SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr);
352static void	SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr);
353void		SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr);
354void		SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr);
355#endif /* 315 */
356
357#ifdef SIS300
358static  BOOLEAN	SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr);
359void		SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo);
360#endif
361
362void		SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime);
363unsigned short	SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr);
364unsigned short	SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
365			unsigned short adaptnum, unsigned short DDCdatatype,
366			unsigned char *buffer, unsigned int VBFlags2);
367
368#ifdef SIS_XORG_XF86
369unsigned short		SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
370				int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
371				BOOLEAN checkcr32, unsigned int VBFlags2);
372unsigned short		SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
373unsigned short		SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
374				unsigned char *buffer);
375#else
376static unsigned short	SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
377				int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
378				BOOLEAN checkcr32, unsigned int VBFlags2);
379static unsigned short	SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
380static unsigned short	SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
381				unsigned char *buffer);
382#endif
383static void		SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr);
384static unsigned short	SiS_SetStart(struct SiS_Private *SiS_Pr);
385static unsigned short	SiS_SetStop(struct SiS_Private *SiS_Pr);
386static unsigned short	SiS_SetSCLKLow(struct SiS_Private *SiS_Pr);
387static unsigned short	SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr);
388static unsigned short	SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr);
389static unsigned short	SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax);
390static unsigned short	SiS_CheckACK(struct SiS_Private *SiS_Pr);
391static unsigned short	SiS_WriteDABDDC(struct SiS_Private *SiS_Pr);
392static unsigned short	SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr);
393static unsigned short	SiS_PrepareDDC(struct SiS_Private *SiS_Pr);
394static void		SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno);
395static unsigned short	SiS_DoProbeDDC(struct SiS_Private *SiS_Pr);
396
397#ifdef SIS300
398static void		SiS_OEM300Setting(struct SiS_Private *SiS_Pr,
399				unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefTabindex);
400static void		SetOEMLCDData2(struct SiS_Private *SiS_Pr,
401				unsigned short ModeNo, unsigned short ModeIdIndex,unsigned short RefTableIndex);
402#endif
403#ifdef SIS315H
404static void		SiS_OEM310Setting(struct SiS_Private *SiS_Pr,
405				unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
406static void		SiS_OEM661Setting(struct SiS_Private *SiS_Pr,
407				unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
408static void		SiS_FinalizeLCD(struct SiS_Private *, unsigned short, unsigned short);
409#endif
410
411extern void		SiS_SetReg(SISIOADDRESS, unsigned short, unsigned short);
412extern void		SiS_SetRegByte(SISIOADDRESS, unsigned short);
413extern void		SiS_SetRegShort(SISIOADDRESS, unsigned short);
414extern void		SiS_SetRegLong(SISIOADDRESS, unsigned int);
415extern unsigned char	SiS_GetReg(SISIOADDRESS, unsigned short);
416extern unsigned char	SiS_GetRegByte(SISIOADDRESS);
417extern unsigned short	SiS_GetRegShort(SISIOADDRESS);
418extern unsigned int	SiS_GetRegLong(SISIOADDRESS);
419extern void		SiS_SetRegANDOR(SISIOADDRESS, unsigned short, unsigned short, unsigned short);
420extern void		SiS_SetRegOR(SISIOADDRESS, unsigned short, unsigned short);
421extern void		SiS_SetRegAND(SISIOADDRESS, unsigned short, unsigned short);
422extern void		SiS_DisplayOff(struct SiS_Private *SiS_Pr);
423extern void		SiS_DisplayOn(struct SiS_Private *SiS_Pr);
424extern BOOLEAN		SiS_SearchModeID(struct SiS_Private *, unsigned short *, unsigned short *);
425extern unsigned short	SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
426				unsigned short ModeIdIndex);
427extern unsigned short	SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
428extern unsigned short	SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
429extern unsigned short	SiS_GetOffset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
430				unsigned short RefreshRateTableIndex);
431extern void		SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
432				unsigned short ModeIdIndex);
433extern void		SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
434				unsigned short ModeIdIndex);
435extern void		SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
436extern unsigned short	SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
437extern unsigned short	SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
438#ifdef SIS300
439extern void		SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *tempbx,
440				unsigned short *tempcl);
441extern unsigned short	SiS_GetFIFOThresholdB300(unsigned short tempbx, unsigned short tempcl);
442extern unsigned short	SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
443#ifdef SIS_LINUX_KERNEL
444extern unsigned int	sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
445extern unsigned int	sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg);
446#endif
447#endif
448#ifdef SIS315H
449extern void		SiS_SetGroup2_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
450				unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex);
451#endif
452
453#endif
454