]> Pileus Git - ~andy/linux/blob - drivers/staging/xgifb/XGI_main.h
staging: xgifb: delete unused definitions
[~andy/linux] / drivers / staging / xgifb / XGI_main.h
1 #ifndef _XGIFB_MAIN
2 #define _XGIFB_MAIN
3
4
5 /* ------------------- Constant Definitions ------------------------- */
6
7
8 #include "XGIfb.h"
9 #include "vb_struct.h"
10 #include "vb_def.h"
11
12 #define XGIFAIL(x) do { printk(x "\n"); return -EINVAL; } while (0)
13
14 #define VER_MAJOR                 0
15 #define VER_MINOR                 8
16 #define VER_LEVEL                 1
17
18 #ifndef PCI_VENDOR_ID_XG
19 #define PCI_VENDOR_ID_XG          0x18CA
20 #endif
21
22 #ifndef PCI_DEVICE_ID_XG_40
23 #define PCI_DEVICE_ID_XG_40      0x040
24 #endif
25 #ifndef PCI_DEVICE_ID_XG_41
26 #define PCI_DEVICE_ID_XG_41      0x041
27 #endif
28 #ifndef PCI_DEVICE_ID_XG_42
29 #define PCI_DEVICE_ID_XG_42      0x042
30 #endif
31 #ifndef PCI_DEVICE_ID_XG_20
32 #define PCI_DEVICE_ID_XG_20      0x020
33 #endif
34 #ifndef PCI_DEVICE_ID_XG_27
35 #define PCI_DEVICE_ID_XG_27      0x027
36 #endif
37
38 static DEFINE_PCI_DEVICE_TABLE(xgifb_pci_table) = {
39         {PCI_VENDOR_ID_XG, PCI_DEVICE_ID_XG_20, PCI_ANY_ID, PCI_ANY_ID,
40          0, 0, 0},
41         {PCI_VENDOR_ID_XG, PCI_DEVICE_ID_XG_27, PCI_ANY_ID, PCI_ANY_ID,
42          0, 0, 1},
43         {PCI_VENDOR_ID_XG, PCI_DEVICE_ID_XG_40, PCI_ANY_ID, PCI_ANY_ID,
44          0, 0, 2},
45         {PCI_VENDOR_ID_XG, PCI_DEVICE_ID_XG_42, PCI_ANY_ID, PCI_ANY_ID,
46          0, 0, 3},
47         {0}
48 };
49
50 MODULE_DEVICE_TABLE(pci, xgifb_pci_table);
51
52 /* To be included in fb.h */
53 #ifndef FB_ACCEL_XGI_XABRE
54 #define FB_ACCEL_XGI_XABRE      41      /* XGI 330 ("Xabre")            */
55 #endif
56
57 #define SEQ_DATA                  0x15
58
59 #define XGISR                     XGI_Pr.P3c4
60 #define XGICR                     XGI_Pr.P3d4
61 #define XGIDACA                   XGI_Pr.P3c8
62 #define XGIDACD                   XGI_Pr.P3c9
63 #define XGIPART1                  XGI_Pr.Part1Port
64 #define XGIPART2                  XGI_Pr.Part2Port
65 #define XGIPART3                  XGI_Pr.Part3Port
66 #define XGIPART4                  XGI_Pr.Part4Port
67 #define XGIPART5                  XGI_Pr.Part5Port
68 #define XGIDAC2A                  XGIPART5
69 #define XGIDAC2D                  (XGIPART5 + 1)
70
71 #define IND_XGI_PASSWORD          0x05  /* SRs */
72 #define IND_XGI_RAMDAC_CONTROL    0x07
73 #define IND_XGI_DRAM_SIZE         0x14
74 #define IND_XGI_MODULE_ENABLE     0x1E
75 #define IND_XGI_PCI_ADDRESS_SET   0x20
76
77 #define IND_XGI_SCRATCH_REG_CR30  0x30  /* CRs */
78 #define IND_XGI_SCRATCH_REG_CR31  0x31
79 #define IND_XGI_SCRATCH_REG_CR32  0x32
80 #define IND_XGI_SCRATCH_REG_CR33  0x33
81 #define IND_XGI_LCD_PANEL         0x36
82 #define IND_XGI_SCRATCH_REG_CR37  0x37
83
84 #define IND_XGI_CRT2_WRITE_ENABLE_315 0x2F
85
86 #define XGI_PASSWORD              0x86  /* SR05 */
87
88 #define XGI_DRAM_SIZE_MASK     0xF0  /*SR14 */
89 #define XGI_DRAM_SIZE_1MB      0x00
90 #define XGI_DRAM_SIZE_2MB      0x01
91 #define XGI_DRAM_SIZE_4MB      0x02
92 #define XGI_DRAM_SIZE_8MB      0x03
93 #define XGI_DRAM_SIZE_16MB     0x04
94 #define XGI_DRAM_SIZE_32MB     0x05
95 #define XGI_DRAM_SIZE_64MB     0x06
96 #define XGI_DRAM_SIZE_128MB    0x07
97 #define XGI_DRAM_SIZE_256MB    0x08
98
99 #define XGI_ENABLE_2D             0x40  /* SR1E */
100
101 #define XGI_MEM_MAP_IO_ENABLE     0x01  /* SR20 */
102 #define XGI_PCI_ADDR_ENABLE       0x80
103
104 #define XGI_SIMULTANEOUS_VIEW_ENABLE  0x01  /* CR30 */
105 #define XGI_VB_OUTPUT_COMPOSITE   0x04
106 #define XGI_VB_OUTPUT_SVIDEO      0x08
107 #define XGI_VB_OUTPUT_SCART       0x10
108 #define XGI_VB_OUTPUT_LCD         0x20
109 #define XGI_VB_OUTPUT_CRT2        0x40
110 #define XGI_VB_OUTPUT_HIVISION    0x80
111
112 #define XGI_VB_OUTPUT_DISABLE     0x20  /* CR31 */
113 #define XGI_DRIVER_MODE           0x40
114
115 #define XGI_VB_COMPOSITE          0x01  /* CR32 */
116 #define XGI_VB_SVIDEO             0x02
117 #define XGI_VB_SCART              0x04
118 #define XGI_VB_LCD                0x08
119 #define XGI_VB_CRT2               0x10
120 #define XGI_CRT1                  0x20
121 #define XGI_VB_HIVISION           0x40
122 #define XGI_VB_YPBPR              0x80
123 #define XGI_VB_TV                 (XGI_VB_COMPOSITE | XGI_VB_SVIDEO | \
124                                    XGI_VB_SCART | XGI_VB_HIVISION|XGI_VB_YPBPR)
125
126 #define XGI_EXTERNAL_CHIP_MASK             0x0E  /* CR37 */
127 #define XGI310_EXTERNAL_CHIP_LVDS          0x02  /* in CR37 << 1 ! */
128 #define XGI310_EXTERNAL_CHIP_LVDS_CHRONTEL 0x03  /* in CR37 << 1 ! */
129
130 /* ------------------- Global Variables ----------------------------- */
131
132 /* Fbcon variables */
133 static struct fb_info *fb_info;
134
135
136 static int    video_type = FB_TYPE_PACKED_PIXELS;
137
138 static struct fb_var_screeninfo default_var = {
139         .xres           = 0,
140         .yres           = 0,
141         .xres_virtual   = 0,
142         .yres_virtual   = 0,
143         .xoffset        = 0,
144         .yoffset        = 0,
145         .bits_per_pixel = 0,
146         .grayscale      = 0,
147         .red            = {0, 8, 0},
148         .green          = {0, 8, 0},
149         .blue           = {0, 8, 0},
150         .transp         = {0, 0, 0},
151         .nonstd         = 0,
152         .activate       = FB_ACTIVATE_NOW,
153         .height         = -1,
154         .width          = -1,
155         .accel_flags    = 0,
156         .pixclock       = 0,
157         .left_margin    = 0,
158         .right_margin   = 0,
159         .upper_margin   = 0,
160         .lower_margin   = 0,
161         .hsync_len      = 0,
162         .vsync_len      = 0,
163         .sync           = 0,
164         .vmode          = FB_VMODE_NONINTERLACED,
165 };
166
167 static struct fb_fix_screeninfo XGIfb_fix = {
168         .id             = "XGI",
169         .type           = FB_TYPE_PACKED_PIXELS,
170         .xpanstep       = 1,
171         .ypanstep       = 1,
172 };
173 static char myid[20];
174 static u32 pseudo_palette[17];
175
176
177 /* display status */
178 static int XGIfb_off;
179 static int XGIfb_crt1off;
180 static int XGIfb_forcecrt1 = -1;
181 static int XGIfb_userom ;
182 /*static int XGIfb_useoem = -1; */
183
184 /* global flags */
185 static int XGIfb_registered;
186 static int XGIfb_tvmode;
187 static int XGIfb_pdc;
188 static int enable_dstn;
189 static int XGIfb_ypan = -1;
190
191
192 static int XGIfb_CRT2_write_enable;
193
194 /* TW: CRT2 type (for overriding autodetection) */
195 static int XGIfb_crt2type = -1;
196 /* PR: Tv plug type (for overriding autodetection) */
197 static int XGIfb_tvplug = -1;
198
199 static unsigned char XGIfb_detectedpdc;
200
201 static unsigned char XGIfb_detectedlcda = 0xff;
202
203
204
205
206 /* TW: For ioctl XGIFB_GET_INFO */
207 /* XGIfb_info XGIfbinfo; */
208
209 /* TW: Hardware extension; contains data on hardware */
210 static struct xgi_hw_device_info XGIhw_ext;
211
212 /* TW: XGI private structure */
213 static struct vb_device_info  XGI_Pr;
214
215 #define MD_XGI300 1
216 #define MD_XGI315 2
217
218 /* mode table */
219 /* NOT const - will be patched for 1280x960 mode number chaos reasons */
220 static struct _XGIbios_mode {
221         char name[15];
222         u8 mode_no;
223         u16 vesa_mode_no_1;  /* "XGI defined" VESA mode number */
224         u16 vesa_mode_no_2;  /* Real VESA mode numbers */
225         u16 xres;
226         u16 yres;
227         u16 bpp;
228         u16 rate_idx;
229         u16 cols;
230         u16 rows;
231         u8  chipset;
232 } XGIbios_mode[] = {
233 #define MODE_INDEX_NONE           0  /* TW: index for mode=none */
234         {"none",         0xFF, 0x0000, 0x0000,    0,    0,  0, 0,   0,  0,
235          MD_XGI300|MD_XGI315},  /* TW: for mode "none" */
236         {"320x240x16",   0x56, 0x0000, 0x0000,  320,  240, 16, 1,  40, 15,
237          MD_XGI315},
238         {"320x480x8",    0x5A, 0x0000, 0x0000,  320,  480,  8, 1,  40, 30,
239          MD_XGI315},  /* TW: FSTN */
240         {"320x480x16",   0x5B, 0x0000, 0x0000,  320,  480, 16, 1,  40, 30,
241          MD_XGI315},  /* TW: FSTN */
242         {"640x480x8",    0x2E, 0x0101, 0x0101,  640,  480,  8, 1,  80, 30,
243          MD_XGI300|MD_XGI315},
244         {"640x480x16",   0x44, 0x0111, 0x0111,  640,  480, 16, 1,  80, 30,
245          MD_XGI300|MD_XGI315},
246         {"640x480x24",   0x62, 0x013a, 0x0112,  640,  480, 32, 1,  80, 30,
247          MD_XGI300|MD_XGI315},  /* TW: That's for people who mix up color-
248                                         and fb depth */
249         {"640x480x32",   0x62, 0x013a, 0x0112,  640,  480, 32, 1,  80, 30,
250          MD_XGI300|MD_XGI315},
251         {"720x480x8",    0x31, 0x0000, 0x0000,  720,  480,  8, 1,  90, 30,
252          MD_XGI300|MD_XGI315},
253         {"720x480x16",   0x33, 0x0000, 0x0000,  720,  480, 16, 1,  90, 30,
254          MD_XGI300|MD_XGI315},
255         {"720x480x24",   0x35, 0x0000, 0x0000,  720,  480, 32, 1,  90, 30,
256          MD_XGI300|MD_XGI315},
257         {"720x480x32",   0x35, 0x0000, 0x0000,  720,  480, 32, 1,  90, 30,
258          MD_XGI300|MD_XGI315},
259         {"720x576x8",    0x32, 0x0000, 0x0000,  720,  576,  8, 1,  90, 36,
260          MD_XGI300|MD_XGI315},
261         {"720x576x16",   0x34, 0x0000, 0x0000,  720,  576, 16, 1,  90, 36,
262          MD_XGI300|MD_XGI315},
263         {"720x576x24",   0x36, 0x0000, 0x0000,  720,  576, 32, 1,  90, 36,
264          MD_XGI300|MD_XGI315},
265         {"720x576x32",   0x36, 0x0000, 0x0000,  720,  576, 32, 1,  90, 36,
266          MD_XGI300|MD_XGI315},
267         {"800x480x8",    0x70, 0x0000, 0x0000,  800,  480,  8, 1, 100, 30,
268          MD_XGI300|MD_XGI315},
269         {"800x480x16",   0x7a, 0x0000, 0x0000,  800,  480, 16, 1, 100, 30,
270          MD_XGI300|MD_XGI315},
271         {"800x480x24",   0x76, 0x0000, 0x0000,  800,  480, 32, 1, 100, 30,
272          MD_XGI300|MD_XGI315},
273         {"800x480x32",   0x76, 0x0000, 0x0000,  800,  480, 32, 1, 100, 30,
274          MD_XGI300|MD_XGI315},
275 #define DEFAULT_MODE              21 /* TW: index for 800x600x8 */
276 #define DEFAULT_LCDMODE           21 /* TW: index for 800x600x8 */
277 #define DEFAULT_TVMODE            21 /* TW: index for 800x600x8 */
278         {"800x600x8",    0x30, 0x0103, 0x0103,  800,  600,  8, 1, 100, 37,
279          MD_XGI300|MD_XGI315},
280         {"800x600x16",   0x47, 0x0114, 0x0114,  800,  600, 16, 1, 100, 37,
281          MD_XGI300|MD_XGI315},
282         {"800x600x24",   0x63, 0x013b, 0x0115,  800,  600, 32, 1, 100, 37,
283          MD_XGI300|MD_XGI315},
284         {"800x600x32",   0x63, 0x013b, 0x0115,  800,  600, 32, 1, 100, 37,
285          MD_XGI300|MD_XGI315},
286         {"1024x576x8",   0x71, 0x0000, 0x0000, 1024,  576,  8, 1, 128, 36,
287          MD_XGI300|MD_XGI315},
288         {"1024x576x16",  0x74, 0x0000, 0x0000, 1024,  576, 16, 1, 128, 36,
289          MD_XGI300|MD_XGI315},
290         {"1024x576x24",  0x77, 0x0000, 0x0000, 1024,  576, 32, 1, 128, 36,
291          MD_XGI300|MD_XGI315},
292         {"1024x576x32",  0x77, 0x0000, 0x0000, 1024,  576, 32, 1, 128, 36,
293          MD_XGI300|MD_XGI315},
294         {"1024x600x8",   0x20, 0x0000, 0x0000, 1024,  600,  8, 1, 128, 37,
295          MD_XGI300          },  /* TW: 300 series only */
296         {"1024x600x16",  0x21, 0x0000, 0x0000, 1024,  600, 16, 1, 128, 37,
297          MD_XGI300          },
298         {"1024x600x24",  0x22, 0x0000, 0x0000, 1024,  600, 32, 1, 128, 37,
299          MD_XGI300          },
300         {"1024x600x32",  0x22, 0x0000, 0x0000, 1024,  600, 32, 1, 128, 37,
301          MD_XGI300          },
302         {"1024x768x8",   0x38, 0x0105, 0x0105, 1024,  768,  8, 1, 128, 48,
303          MD_XGI300|MD_XGI315},
304         {"1024x768x16",  0x4A, 0x0117, 0x0117, 1024,  768, 16, 1, 128, 48,
305          MD_XGI300|MD_XGI315},
306         {"1024x768x24",  0x64, 0x013c, 0x0118, 1024,  768, 32, 1, 128, 48,
307          MD_XGI300|MD_XGI315},
308         {"1024x768x32",  0x64, 0x013c, 0x0118, 1024,  768, 32, 1, 128, 48,
309          MD_XGI300|MD_XGI315},
310         {"1152x768x8",   0x23, 0x0000, 0x0000, 1152,  768,  8, 1, 144, 48,
311          MD_XGI300          },  /* TW: 300 series only */
312         {"1152x768x16",  0x24, 0x0000, 0x0000, 1152,  768, 16, 1, 144, 48,
313          MD_XGI300          },
314         {"1152x768x24",  0x25, 0x0000, 0x0000, 1152,  768, 32, 1, 144, 48,
315          MD_XGI300          },
316         {"1152x768x32",  0x25, 0x0000, 0x0000, 1152,  768, 32, 1, 144, 48,
317          MD_XGI300          },
318         {"1280x720x8",   0x79, 0x0000, 0x0000, 1280,  720,  8, 1, 160, 45,
319          MD_XGI300|MD_XGI315},
320         {"1280x720x16",  0x75, 0x0000, 0x0000, 1280,  720, 16, 1, 160, 45,
321          MD_XGI300|MD_XGI315},
322         {"1280x720x24",  0x78, 0x0000, 0x0000, 1280,  720, 32, 1, 160, 45,
323          MD_XGI300|MD_XGI315},
324         {"1280x720x32",  0x78, 0x0000, 0x0000, 1280,  720, 32, 1, 160, 45,
325          MD_XGI300|MD_XGI315},
326         {"1280x768x8",   0x23, 0x0000, 0x0000, 1280,  768,  8, 1, 160, 48,
327          MD_XGI315},  /* TW: 310/325 series only */
328         {"1280x768x16",  0x24, 0x0000, 0x0000, 1280,  768, 16, 1, 160, 48,
329          MD_XGI315},
330         {"1280x768x24",  0x25, 0x0000, 0x0000, 1280,  768, 32, 1, 160, 48,
331          MD_XGI315},
332         {"1280x768x32",  0x25, 0x0000, 0x0000, 1280,  768, 32, 1, 160, 48,
333          MD_XGI315},
334         {"1280x960x8",   0x7C, 0x0000, 0x0000, 1280,  960,  8, 1, 160, 60,
335          MD_XGI300|MD_XGI315},  /* TW: Modenumbers being patched */
336         {"1280x960x16",  0x7D, 0x0000, 0x0000, 1280,  960, 16, 1, 160, 60,
337          MD_XGI300|MD_XGI315},
338         {"1280x960x24",  0x7E, 0x0000, 0x0000, 1280,  960, 32, 1, 160, 60,
339          MD_XGI300|MD_XGI315},
340         {"1280x960x32",  0x7E, 0x0000, 0x0000, 1280,  960, 32, 1, 160, 60,
341          MD_XGI300|MD_XGI315},
342         {"1280x1024x8",  0x3A, 0x0107, 0x0107, 1280, 1024,  8, 1, 160, 64,
343          MD_XGI300|MD_XGI315},
344         {"1280x1024x16", 0x4D, 0x011a, 0x011a, 1280, 1024, 16, 1, 160, 64,
345          MD_XGI300|MD_XGI315},
346         {"1280x1024x24", 0x65, 0x013d, 0x011b, 1280, 1024, 32, 1, 160, 64,
347          MD_XGI300|MD_XGI315},
348         {"1280x1024x32", 0x65, 0x013d, 0x011b, 1280, 1024, 32, 1, 160, 64,
349          MD_XGI300|MD_XGI315},
350         {"1400x1050x8",  0x26, 0x0000, 0x0000, 1400, 1050,  8, 1, 175, 65,
351          MD_XGI315},  /* TW: 310/325 series only */
352         {"1400x1050x16", 0x27, 0x0000, 0x0000, 1400, 1050, 16, 1, 175, 65,
353          MD_XGI315},
354         {"1400x1050x24", 0x28, 0x0000, 0x0000, 1400, 1050, 32, 1, 175, 65,
355          MD_XGI315},
356         {"1400x1050x32", 0x28, 0x0000, 0x0000, 1400, 1050, 32, 1, 175, 65,
357          MD_XGI315},
358         {"1600x1200x8",  0x3C, 0x0130, 0x011c, 1600, 1200,  8, 1, 200, 75,
359          MD_XGI300|MD_XGI315},
360         {"1600x1200x16", 0x3D, 0x0131, 0x011e, 1600, 1200, 16, 1, 200, 75,
361          MD_XGI300|MD_XGI315},
362         {"1600x1200x24", 0x66, 0x013e, 0x011f, 1600, 1200, 32, 1, 200, 75,
363          MD_XGI300|MD_XGI315},
364         {"1600x1200x32", 0x66, 0x013e, 0x011f, 1600, 1200, 32, 1, 200, 75,
365          MD_XGI300|MD_XGI315},
366         {"1920x1440x8",  0x68, 0x013f, 0x0000, 1920, 1440,  8, 1, 240, 75,
367          MD_XGI300|MD_XGI315},
368         {"1920x1440x16", 0x69, 0x0140, 0x0000, 1920, 1440, 16, 1, 240, 75,
369          MD_XGI300|MD_XGI315},
370         {"1920x1440x24", 0x6B, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75,
371          MD_XGI300|MD_XGI315},
372         {"1920x1440x32", 0x6B, 0x0141, 0x0000, 1920, 1440, 32, 1, 240, 75,
373          MD_XGI300|MD_XGI315},
374         {"2048x1536x8",  0x6c, 0x0000, 0x0000, 2048, 1536,  8, 1, 256, 96,
375          MD_XGI315},  /* TW: 310/325 series only */
376         {"2048x1536x16", 0x6d, 0x0000, 0x0000, 2048, 1536, 16, 1, 256, 96,
377          MD_XGI315},
378         {"2048x1536x24", 0x6e, 0x0000, 0x0000, 2048, 1536, 32, 1, 256, 96,
379          MD_XGI315},
380         {"2048x1536x32", 0x6e, 0x0000, 0x0000, 2048, 1536, 32, 1, 256, 96,
381          MD_XGI315},
382         {"\0", 0x00, 0, 0, 0, 0, 0, 0, 0}
383 };
384
385 /* mode-related variables */
386 #ifdef MODULE
387 static int xgifb_mode_idx = 1;
388 #else
389 static int xgifb_mode_idx = -1; /* Use a default mode if we are
390                                         inside the kernel */
391 #endif
392 static u8  XGIfb_mode_no;
393 static u8  XGIfb_rate_idx;
394
395 /* TW: CR36 evaluation */
396 static const unsigned short XGI300paneltype[] = {
397          LCD_UNKNOWN,  LCD_800x600, LCD_1024x768, LCD_1280x1024,
398         LCD_1280x960,  LCD_640x480, LCD_1024x600, LCD_1152x768,
399         LCD_1024x768, LCD_1024x768, LCD_1024x768,
400         LCD_1024x768, LCD_1024x768, LCD_1024x768, LCD_1024x768};
401
402 static const unsigned short XGI310paneltype[] = {
403          LCD_UNKNOWN,   LCD_800x600, LCD_1024x768, LCD_1280x1024,
404          LCD_640x480,  LCD_1024x600, LCD_1152x864, LCD_1280x960,
405         LCD_1152x768, LCD_1400x1050, LCD_1280x768, LCD_1600x1200,
406         LCD_1024x768,  LCD_1024x768, LCD_1024x768};
407
408 static const struct _XGI_crt2type {
409         char name[10];
410         int type_no;
411         int tvplug_no;
412 } XGI_crt2type[] = {
413         {"NONE",        0,              -1},
414         {"LCD",         DISPTYPE_LCD,   -1},
415         {"TV",          DISPTYPE_TV,    -1},
416         {"VGA",         DISPTYPE_CRT2,  -1},
417         {"SVIDEO",      DISPTYPE_TV,    TVPLUG_SVIDEO},
418         {"COMPOSITE",   DISPTYPE_TV,    TVPLUG_COMPOSITE},
419         {"SCART",       DISPTYPE_TV,    TVPLUG_SCART},
420         {"none",        0,              -1},
421         {"lcd",         DISPTYPE_LCD,   -1},
422         {"tv",          DISPTYPE_TV,    -1},
423         {"vga",         DISPTYPE_CRT2,  -1},
424         {"svideo",      DISPTYPE_TV,    TVPLUG_SVIDEO},
425         {"composite",   DISPTYPE_TV,    TVPLUG_COMPOSITE},
426         {"scart",       DISPTYPE_TV,    TVPLUG_SCART},
427         {"\0",          -1,             -1}
428 };
429
430 /* TV standard */
431 static const struct _XGI_tvtype {
432         char name[6];
433         int type_no;
434 } XGI_tvtype[] = {
435         {"PAL",         1},
436         {"NTSC",        2},
437         {"pal",         1},
438         {"ntsc",        2},
439         {"\0",          -1}
440 };
441
442 static const struct _XGI_vrate {
443         u16 idx;
444         u16 xres;
445         u16 yres;
446         u16 refresh;
447 } XGIfb_vrate[] = {
448         {1,  640,  480, 60}, {2,  640,  480,  72},
449         {3, 640,   480,  75}, {4,  640, 480,  85},
450
451         {5,  640,  480, 100}, {6,  640,  480, 120},
452         {7, 640,   480, 160}, {8,  640, 480, 200},
453
454         {1,  720,  480, 60},
455         {1,  720,  576, 58},
456         {1,  800,  480, 60}, {2,  800,  480,  75}, {3, 800,   480,  85},
457         {1,  800,  600,  60}, {2, 800,   600,  72}, {3,  800, 600,  75},
458         {4,  800,  600, 85}, {5,  800,  600, 100},
459         {6, 800,   600, 120}, {7,  800, 600, 160},
460
461         {1, 1024,  768,  60}, {2, 1024,  768,  70}, {3, 1024, 768,  75},
462         {4, 1024,  768, 85}, {5, 1024,  768, 100}, {6, 1024,  768, 120},
463         {1, 1024,  576, 60}, {2, 1024,  576,  75}, {3, 1024,  576,  85},
464         {1, 1024,  600, 60},
465         {1, 1152,  768, 60},
466         {1, 1280,  720, 60}, {2, 1280,  720,  75}, {3, 1280,  720,  85},
467         {1, 1280,  768, 60},
468         {1, 1280, 1024,  60}, {2, 1280, 1024,  75}, {3, 1280, 1024,  85},
469         {1, 1280,  960, 70},
470         {1, 1400, 1050, 60},
471         {1, 1600, 1200, 60}, {2, 1600, 1200,  65},
472         {3, 1600, 1200,  70}, {4, 1600, 1200,  75},
473
474         {5, 1600, 1200, 85}, {6, 1600, 1200, 100},
475         {7, 1600, 1200, 120},
476
477         {1, 1920, 1440, 60}, {2, 1920, 1440,  65},
478         {3, 1920, 1440,  70}, {4, 1920, 1440,  75},
479
480         {5, 1920, 1440, 85}, {6, 1920, 1440, 100},
481         {1, 2048, 1536, 60}, {2, 2048, 1536,  65},
482         {3, 2048, 1536,  70}, {4, 2048, 1536,  75},
483
484         {5, 2048, 1536, 85},
485         {0, 0, 0, 0}
486 };
487
488 static const struct _chswtable {
489         int subsysVendor;
490         int subsysCard;
491         char *vendorName;
492         char *cardName;
493 } mychswtable[] = {
494         { 0x1631, 0x1002, "Mitachi", "0x1002" },
495         { 0,      0,      ""       , ""       }
496 };
497
498 /* Eden Chen */
499 static const struct _XGI_TV_filter {
500         u8 filter[9][4];
501 } XGI_TV_filter[] = {
502         { { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_0 */
503             {0x00, 0xE0, 0x10, 0x60},
504             {0x00, 0xEE, 0x10, 0x44},
505             {0x00, 0xF4, 0x10, 0x38},
506             {0xF8, 0xF4, 0x18, 0x38},
507             {0xFC, 0xFB, 0x14, 0x2A},
508             {0x00, 0x00, 0x10, 0x20},
509             {0x00, 0x04, 0x10, 0x18},
510             {0xFF, 0xFF, 0xFF, 0xFF} } },
511         { { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_1 */
512             {0x00, 0xE0, 0x10, 0x60},
513             {0x00, 0xEE, 0x10, 0x44},
514             {0x00, 0xF4, 0x10, 0x38},
515             {0xF8, 0xF4, 0x18, 0x38},
516             {0xFC, 0xFB, 0x14, 0x2A},
517             {0x00, 0x00, 0x10, 0x20},
518             {0x00, 0x04, 0x10, 0x18},
519             {0xFF, 0xFF, 0xFF, 0xFF} } },
520         { { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_2 */
521             {0xF5, 0xEE, 0x1B, 0x44},
522             {0xF8, 0xF4, 0x18, 0x38},
523             {0xEB, 0x04, 0x25, 0x18},
524             {0xF1, 0x05, 0x1F, 0x16},
525             {0xF6, 0x06, 0x1A, 0x14},
526             {0xFA, 0x06, 0x16, 0x14},
527             {0x00, 0x04, 0x10, 0x18},
528             {0xFF, 0xFF, 0xFF, 0xFF} } },
529         { { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_3 */
530             {0xF1, 0x04, 0x1F, 0x18},
531             {0xEE, 0x0D, 0x22, 0x06},
532             {0xF7, 0x06, 0x19, 0x14},
533             {0xF4, 0x0B, 0x1C, 0x0A},
534             {0xFA, 0x07, 0x16, 0x12},
535             {0xF9, 0x0A, 0x17, 0x0C},
536             {0x00, 0x07, 0x10, 0x12},
537             {0xFF, 0xFF, 0xFF, 0xFF} } },
538         { { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_4 */
539             {0x00, 0xE0, 0x10, 0x60},
540             {0x00, 0xEE, 0x10, 0x44},
541             {0x00, 0xF4, 0x10, 0x38},
542             {0xF8, 0xF4, 0x18, 0x38},
543             {0xFC, 0xFB, 0x14, 0x2A},
544             {0x00, 0x00, 0x10, 0x20},
545             {0x00, 0x04, 0x10, 0x18},
546             {0xFF, 0xFF, 0xFF, 0xFF} } },
547         { { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_5 */
548             {0xF5, 0xEE, 0x1B, 0x44},
549             {0xF8, 0xF4, 0x18, 0x38},
550             {0xEB, 0x04, 0x25, 0x18},
551             {0xF1, 0x05, 0x1F, 0x16},
552             {0xF6, 0x06, 0x1A, 0x14},
553             {0xFA, 0x06, 0x16, 0x14},
554             {0x00, 0x04, 0x10, 0x18},
555             {0xFF, 0xFF, 0xFF, 0xFF} } },
556         { { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_6 */
557             {0xEB, 0x04, 0x25, 0x18},
558             {0xE7, 0x0E, 0x29, 0x04},
559             {0xEE, 0x0C, 0x22, 0x08},
560             {0xF6, 0x0B, 0x1A, 0x0A},
561             {0xF9, 0x0A, 0x17, 0x0C},
562             {0xFC, 0x0A, 0x14, 0x0C},
563             {0x00, 0x08, 0x10, 0x10},
564             {0xFF, 0xFF, 0xFF, 0xFF} } },
565         { { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_7 */
566             {0xEC, 0x02, 0x24, 0x1C},
567             {0xF2, 0x04, 0x1E, 0x18},
568             {0xEB, 0x15, 0x25, 0xF6},
569             {0xF4, 0x10, 0x1C, 0x00},
570             {0xF8, 0x0F, 0x18, 0x02},
571             {0x00, 0x04, 0x10, 0x18},
572             {0x01, 0x06, 0x0F, 0x14},
573             {0xFF, 0xFF, 0xFF, 0xFF} } },
574         { { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_0 */
575             {0x00, 0xE0, 0x10, 0x60},
576             {0x00, 0xEE, 0x10, 0x44},
577             {0x00, 0xF4, 0x10, 0x38},
578             {0xF8, 0xF4, 0x18, 0x38},
579             {0xFC, 0xFB, 0x14, 0x2A},
580             {0x00, 0x00, 0x10, 0x20},
581             {0x00, 0x04, 0x10, 0x18},
582             {0xFF, 0xFF, 0xFF, 0xFF} } },
583         { { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_1 */
584             {0x00, 0xE0, 0x10, 0x60},
585             {0x00, 0xEE, 0x10, 0x44},
586             {0x00, 0xF4, 0x10, 0x38},
587             {0xF8, 0xF4, 0x18, 0x38},
588             {0xFC, 0xFB, 0x14, 0x2A},
589             {0x00, 0x00, 0x10, 0x20},
590             {0x00, 0x04, 0x10, 0x18},
591             {0xFF, 0xFF, 0xFF, 0xFF} } },
592         { { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_2 */
593             {0xF5, 0xEE, 0x1B, 0x44},
594             {0xF8, 0xF4, 0x18, 0x38},
595             {0xF1, 0xF7, 0x01, 0x32},
596             {0xF5, 0xFB, 0x1B, 0x2A},
597             {0xF9, 0xFF, 0x17, 0x22},
598             {0xFB, 0x01, 0x15, 0x1E},
599             {0x00, 0x04, 0x10, 0x18},
600             {0xFF, 0xFF, 0xFF, 0xFF} } },
601         { { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_3 */
602             {0xF5, 0xFB, 0x1B, 0x2A},
603             {0xEE, 0xFE, 0x22, 0x24},
604             {0xF3, 0x00, 0x1D, 0x20},
605             {0xF9, 0x03, 0x17, 0x1A},
606             {0xFB, 0x02, 0x14, 0x1E},
607             {0xFB, 0x04, 0x15, 0x18},
608             {0x00, 0x06, 0x10, 0x14},
609             {0xFF, 0xFF, 0xFF, 0xFF} } },
610         { { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_4 */
611             {0x00, 0xE0, 0x10, 0x60},
612             {0x00, 0xEE, 0x10, 0x44},
613             {0x00, 0xF4, 0x10, 0x38},
614             {0xF8, 0xF4, 0x18, 0x38},
615             {0xFC, 0xFB, 0x14, 0x2A},
616             {0x00, 0x00, 0x10, 0x20},
617             {0x00, 0x04, 0x10, 0x18},
618             {0xFF, 0xFF, 0xFF, 0xFF} } },
619         { { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_5 */
620             {0xF5, 0xEE, 0x1B, 0x44},
621             {0xF8, 0xF4, 0x18, 0x38},
622             {0xF1, 0xF7, 0x1F, 0x32},
623             {0xF5, 0xFB, 0x1B, 0x2A},
624             {0xF9, 0xFF, 0x17, 0x22},
625             {0xFB, 0x01, 0x15, 0x1E},
626             {0x00, 0x04, 0x10, 0x18},
627             {0xFF, 0xFF, 0xFF, 0xFF} } },
628         { { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_6 */
629             {0xF5, 0xEE, 0x1B, 0x2A},
630             {0xEE, 0xFE, 0x22, 0x24},
631             {0xF3, 0x00, 0x1D, 0x20},
632             {0xF9, 0x03, 0x17, 0x1A},
633             {0xFB, 0x02, 0x14, 0x1E},
634             {0xFB, 0x04, 0x15, 0x18},
635             {0x00, 0x06, 0x10, 0x14},
636             {0xFF, 0xFF, 0xFF, 0xFF} } },
637         { { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_7 */
638             {0xF5, 0xEE, 0x1B, 0x44},
639             {0xF8, 0xF4, 0x18, 0x38},
640             {0xFC, 0xFB, 0x14, 0x2A},
641             {0xEB, 0x05, 0x25, 0x16},
642             {0xF1, 0x05, 0x1F, 0x16},
643             {0xFA, 0x07, 0x16, 0x12},
644             {0x00, 0x07, 0x10, 0x12},
645             {0xFF, 0xFF, 0xFF, 0xFF} } }
646 };
647
648 static int           filter = -1;
649 static unsigned char filter_tb;
650
651 #endif