blob: 3bd965b6cad5297a42192af383323d9a9771af73 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
|
/*
* Copyright (C) 2009 RDC Semiconductor Co.,Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For technical support :
* <jason.lin@rdc.com.tw>
*/
#define X_INFO 0
#define X_WARNING 1
#define X_ERROR 2
/* Verberse level define */
typedef unsigned char UCHAR;
typedef unsigned short USHORT;
typedef unsigned long ULONG;
typedef enum _bool
{
FALSE = 0,
TRUE = 1
}bool;
#ifndef ErrorLevel
#define ErrorLevel 0 /* Report Error message */
#endif
#ifndef DefaultLevel
#define DefaultLevel 4 /* Driver entry function */
#endif
#ifndef InfoLevel
#define InfoLevel 5 /* Report information */
#endif
#ifndef InternalLevel
#define InternalLevel 6 /* Driver interanl function entry */
#endif
/* Related IO offset */
#define ATTR_ADDR 0X0040
#define ATTR_DATA_WRITE 0X0040
#define ATTR_DATA_READ 0X0041
#define MISC_WRITE 0X0042
#define INPUT_STATUS_0_READ 0X0042
#define RIO_VGA_ENABLE 0X0043
#define SEQ_INDEX 0X0044
#define SEQ_DATA 0X0045
#define PEL_MASK 0X0046
#define DAC_INDEX_READ 0X0047
#define FEAT_CTRL_READ 0X004A
#define MISC_READ 0X004C
#define GRAPH_INDEX 0X004E
#define GRAPH_DATA 0X004F
#define MONO_CRTC_INDEX 0X0034
#define MONO_CRTC_DATA 0X0035
#define MONO_INPUT_STATUS1_READ 0X003A
#define COLOR_CRTC_INDEX 0X0054
#define COLOR_CRTC_DATA 0X0055
#define COLOR_INPUT_STATUS1_READ 0X005A
#define VBIOSVerNum 0x00000
/* Scratch registers */
#define SCRATCH_01 0x81 * 0x100
#define IDX_SCRATCH_01 SCRATCH_01 + 0xFF
#define IDX_IGA1_DEV_ID SCRATCH_01 + 0x0F
#define IDX_IGA2_DEV_ID SCRATCH_01 + 0xF0
#define SCRATCH_02 0x82 * 0x100
#define IDX_SCRATCH_02 SCRATCH_02 + 0xFF
#define IDX_DISPLAY1_CHANGED SCRATCH_02 + 0x01
#define IDX_DISPLAY2_CHANGED SCRATCH_02 + 0x02
#define IDX_PWR_SEQ_ON SCRATCH_02 + 0x04
#define SCRATCH_03 0x83 * 0x100
#define IDX_SCRATCH_03 SCRATCH_03 + 0xFF
#define IDX_IGA2_VESA_MODE SCRATCH_03 + 0xFF
#define SCRATCH_04 0x84 * 0x100
#define IDX_SCRATCH_04 SCRATCH_04 + 0xFF
#define IDX_IGA2_VESA_MODE_OVERFLOW SCRATCH_04 + 0x01
#define IDX_IGA2_RRATE_ID SCRATCH_04 + 0xFE
#define SCRATCH_05 0x85 * 0x100
#define IDX_SCRATCH_05 SCRATCH_05 + 0xFF
#define IDX_TV1_TYPE SCRATCH_05 + 0x0F
#define IDX_TV1_CONNECTION_TYPE SCRATCH_05 + 0x30
#define SCRATCH_06 0x86 * 0x100
#define IDX_SCRATCH_06 SCRATCH_06 + 0xFF
#define IDX_TV2_TYPE SCRATCH_06 + 0x0F
#define IDX_TV2_CONNECTION_TYPE SCRATCH_06 + 0x30
#define SCRATCH_07 0x87 * 0x100
#define IDX_SCRATCH_07 SCRATCH_07 + 0xFF
#define IDX_HDTV1_TYPE SCRATCH_07 + 0x07
#define IDX_HDTV1_CONNECTION_TYPE SCRATCH_07 + 0x08
#define IDX_HDTV2_TYPE SCRATCH_07 + 0x70
#define IDX_HDTV2_CONNECTION_TYPE SCRATCH_07 + 0x80
#define SCRATCH_08 0x88 * 0x100
#define IDX_SCRATCH_08 SCRATCH_08 + 0xFF
#define IDX_HDMI1_TYPE SCRATCH_08 + 0x0F
#define IDX_HDMI2_TYPE SCRATCH_08 + 0xF0
#define SCRATCH_09 0x89 * 0x100
#define IDX_SCRATCH_09 SCRATCH_09 + 0xFF
#define IDX_HDMI1_CONNECTION_TYPE SCRATCH_09 + 0x03
#define IDX_HDMI2_CONNECTION_TYPE SCRATCH_09 + 0x30
#define SCRATCH_10 0x8A * 0x100
#define IDX_SCRATCH_10 SCRATCH_10 + 0xFF
#define IDX_LCD_H_SIZE_OVERFLOW SCRATCH_10 + 0xF0
#define IDX_LCD_V_SIZE_OVERFLOW SCRATCH_10 + 0x0F
#define SCRATCH_11 0x8B * 0x100
#define IDX_SCRATCH_11 SCRATCH_11 + 0xFF
#define IDX_LCD_H_SIZE SCRATCH_11 + 0xFF
#define SCRATCH_12 0x8C * 0x100
#define IDX_SCRATCH_12 SCRATCH_12 + 0xFF
#define IDX_LCD_V_SIZE SCRATCH_12 + 0xFF
#define SCRATCH_13 0x8D * 0x100
#define IDX_SCRATCH_13 SCRATCH_13 + 0xFF
#define IDX_IGA1_VESA_MODE_OVERFLOW SCRATCH_13 + 0x01
#define IDX_IGA1_RRATE_ID SCRATCH_13 + 0xFE
#define SCRATCH_14 0x8E * 0x100
#define IDX_SCRATCH_14 SCRATCH_14 + 0xFF
#define IDX_IGA1_VGA_MODE SCRATCH_14 + 0xFF
#define IDX_IGA1_VESA_MODE SCRATCH_14 + 0xFF
#define SCRATCH_15 0x8F * 0x100
#define IDX_SCRATCH_15 SCRATCH_15 + 0xFF
#define IDX_NEW_IGA1_DEV_ID SCRATCH_15 + 0x0F
#define IDX_NEW_IGA2_DEV_ID SCRATCH_15 + 0xF0
#define SCRATCH_16 0x90 * 0x100
#define IDX_SCRATCH_16 SCRATCH_16 + 0xFF
#define IDX_KEEP_DISPLAY_OFF SCRATCH_16 + 0x80
#define IDX_DPMS_STATE SCRATCH_16 + 0x40
#define IDX_LINEAR_MODE SCRATCH_16 + 0x20
#define SCRATCH_17 0x91 * 0x100
#define IDX_SCRATCH_17 SCRATCH_17 + 0xFF
#define IDX_LCD2_H_SIZE_OVERFLOW SCRATCH_10 + 0xF0
#define IDX_LCD2_V_SIZE_OVERFLOW SCRATCH_10 + 0x0F
#define SCRATCH_18 0x92 * 0x100
#define IDX_SCRATCH_18 SCRATCH_18 + 0xFF
#define IDX_LCD2_H_SIZE SCRATCH_18 + 0xFF
#define SCRATCH_19 0x93 * 0x100
#define IDX_SCRATCH_19 SCRATCH_19 + 0xFF
#define IDX_LCD2_V_SIZE SCRATCH_19 + 0xFF
#define SCRATCH_20 0x94 * 0x100
#define IDX_SCRATCH_20 SCRATCH_20 + 0xFF
#define IDX_LVDS1_TX_ID SCRATCH_20 + 0xF0
#define IDX_LVDS2_TX_ID SCRATCH_20 + 0x0F
#define SCRATCH_21 0x95 * 0x100
#define IDX_SCRATCH_21 SCRATCH_21 + 0xFF
#define IDX_TMDS1_TX_ID SCRATCH_21 + 0xF0
#define IDX_TMDS2_TX_ID SCRATCH_21 + 0x0F
#define SCRATCH_22 0x96 * 0x100
#define IDX_SCRATCH_22 SCRATCH_22 + 0xFF
#define IDX_TV1_ENCODER_ID SCRATCH_22 + 0xF0
#define IDX_TV2_ENCODER_ID SCRATCH_22 + 0x0F
#define SCRATCH_23 0x97 * 0x100
#define IDX_SCRATCH_23 SCRATCH_23 + 0xFF
#define IDX_LCD1_TABLE_INDEX SCRATCH_23 + 0xF0
#define IDX_LCD2_TABLE_INDEX SCRATCH_23 + 0x0F
/* For Bit mask using */
#define BIT0 0x00000001
#define BIT1 0x00000002
#define BIT2 0x00000004
#define BIT3 0x00000008
#define BIT4 0x00000010
#define BIT5 0x00000020
#define BIT6 0x00000040
#define BIT7 0x00000080
#define BIT8 0x00000100
#define BIT9 0x00000200
#define BIT10 0x00000400
#define BIT11 0x00000800
#define BIT12 0x00001000
#define BIT13 0x00002000
#define BIT14 0x00004000
#define BIT15 0x00008000
#define BIT16 0x00010000
#define BIT17 0x00020000
#define BIT18 0x00040000
#define BIT19 0x00080000
#define BIT20 0x00100000
#define BIT21 0x00200000
#define BIT22 0x00400000
#define BIT23 0x00800000
#define BIT24 0x01000000
#define BIT25 0x02000000
#define BIT26 0x04000000
#define BIT27 0x08000000
#define BIT28 0x10000000
#define BIT29 0x20000000
#define BIT30 0x40000000
#define BIT31 0x80000000
/* definition of output ports */
#define CRT_PORT 0
#define DVP1 1
#define DVP2 2
#define DVP12 3
/* definition of RRATE_TABLE.RRate_ID */
#define RR60 0
#define RR50I 1
#define RR59_94I 2
#define RR50 3
#define RR56 4
#define RR59_94 5
#define RR24 6
#define RR70 7
#define RR75 8
#define RR80 9
#define RR85 10
#define RR90 11
#define RR100 12
#define RR120 13
#define RR72 14
#define RR65 15
/* Output Device Index */
#define LCD_ID 1
#define DVI_ID 2
#define CRT_ID 3
#define HDMI_ID 4
#define HDTV_ID 5
#define TV_ID 6
#define LCD2_ID 8
#define DVI2_ID 9
#define CRT2_ID 10
#define HDMI2_ID 11
#define HDTV2_ID 12
#define TV2_ID 13
/* Output Device Combination Bit */
#define B_LCD BIT0
#define B_DVI BIT1
#define B_CRT BIT2
#define B_HDMI BIT3
#define B_HDTV BIT4
#define B_TV BIT5
#define B_LCD2 BIT7
#define B_DVI2 BIT8
#define B_CRT2 BIT9
#define B_HDMI2 BIT10
#define B_HDTV2 BIT11
#define B_TV2 BIT12
/* clock definition */
#define PLLReferenceClock 14318
#define MaxFCKVCO9003A 810000
#define MinFCKVCO9003A 350000
#define MaxFCKVCO9001A 1600000
#define MinFCKVCO9001A 833000
/* DPMS State */
#define DPMS__ON 0
#define DPMS__STANDBY 1
#define DPMS__SUSPEND 2
#define DPMS__OFF 3
/* definitions only for PANEL_TABLE.Attribute */
#define SEQ BIT1 /* sequential output format */
#define TTL BIT6 /* TTL LCD */
/* _PORT_CONFIG.TX_Enc_ID */
#define NONE 0x00 /* no TX/encoder */
#define TX_VT1636 0x01
#define TX_SIL1162 0x02
#define TX_HW 0x03 /* hardwired TX */
#define ENC_VT1625 0x04
#define DSTN 0x05 /* DSTN */
/* _PORT_CONFIG.Attribute */
#define Dev_SUPPORT BIT0 /* Device Support */
#define TX_DIT BIT1
#define TX_PS BIT2
#define DSTN_COLOR BIT3 /* DSTN color */
#define DSTN_MONO 0 /* DSTN mono */
#define DSTN_6X4 BIT4 /* DSTN 640x480 */
#define DSTN_3X2 0 /* DSTN 320x240 */
#define TX_MSB BIT5
/* definitions of display path */
#define DISP1 1
#define DISP2 2
/* mode numbers */
#define MODE_640x480x8 0x101
#define MODE_800x600x8 0x103
#define MODE_1024x768x8 0x105
#define MODE_1280x1024x8 0x107
#define MODE_640x480x16 0x111
#define MODE_640x480x32 0x112
#define MODE_800x600x16 0x114
#define MODE_800x600x32 0x115
#define MODE_1024x768x16 0x117
#define MODE_1024x768x32 0x118
#define MODE_1280x1024x16 0x11A
#define MODE_1280x1024x32 0x11B
#define MODE_1600x1200x8 0x120
#define MODE_1600x1200x16 0x121
#define MODE_1600x1200x32 0x122
#define MODE_320x240x8 0x123
#define MODE_320x240x16 0x124
#define MODE_320x240x32 0x125
#define MODE_720x480x8 0x126
#define MODE_720x480x16 0x127
#define MODE_720x480x32 0x128
#define MODE_1360x768x8 0x129
#define MODE_1360x768x16 0x12A
#define MODE_1360x768x32 0x12B
#define MODE_848x480x8 0x12C
#define MODE_848x480x16 0x12D
#define MODE_848x480x32 0x12E
#define MODE_1440x900x8 0x12F
#define MODE_1440x900x16 0x130
#define MODE_1440x900x32 0x131
#define MODE_1152x864x8 0x132
#define MODE_1152x864x16 0x133
#define MODE_1152x864x32 0x134
#define MODE_1280x960x8 0x135
#define MODE_1280x960x16 0x136
#define MODE_1280x960x32 0x137
#define MODE_1400x1050x8 0x138
#define MODE_1400x1050x16 0x139
#define MODE_1400x1050x32 0x13A
#define MODE_800x480x8 0x13B
#define MODE_800x480x16 0x13C
#define MODE_800x480x32 0x13D
#define MODE_1024x600x8 0x13E
#define MODE_1024x600x16 0x13F
#define MODE_1024x600x32 0x140
#define MODE_USR_DEF1x8 0x1F1
#define MODE_USR_DEF1x16 0x1F2
#define MODE_USR_DEF1x32 0x1F3
#define MODE_USR_DEF2x8 0x1F4
#define MODE_USR_DEF2x16 0x1F5
#define MODE_USR_DEF2x32 0x1F6
typedef struct _RRATE_TABLE RRATE_TABLE;
typedef struct _MODE_INFO MODE_INFO;
typedef struct _PANEL_TABLE PANEL_TABLE;
typedef struct _PORT_CONFIG PORT_CONFIG;
typedef struct _VESA_TABLE VESA_TABLE;
struct _RRATE_TABLE {
ULONG Clock; /* in khz */
UCHAR RRate_ID;
USHORT Attribute;
USHORT H_Blank_Time;
USHORT H_Sync_Start;
USHORT H_Sync_Time;
USHORT V_Blank_Time;
USHORT V_Sync_Start;
USHORT V_Sync_Time;
}__attribute__((packed));;
struct _MODE_INFO{
USHORT H_Size;
USHORT V_Size;
USHORT Mode_ID_8bpp;
USHORT Mode_ID_16bpp;
USHORT Mode_ID_32bpp;
UCHAR RRTableCount;
}__attribute__((packed));;
struct _PANEL_TABLE {
USHORT TD0;
USHORT TD1;
USHORT TD2;
USHORT TD3;
USHORT TD5;
USHORT TD6;
USHORT TD7;
UCHAR PWM_Clock;
USHORT Reserved1;
USHORT Reserved2;
RRATE_TABLE Timing;
}__attribute__((packed));;
struct _VESA_TABLE {
MODE_INFO ModeInfo;
RRATE_TABLE RRateTable;
}__attribute__((packed));;
#if 0
typedef struct _LCD_TABLE {
MODE_INFO ModeInfo;
PANEL_TABLE *pPanelTable;
} LCD_TABLE;
#endif
typedef struct _REG_OP {
UCHAR RegGroup;
UCHAR RegMask;
UCHAR RegIndex;
UCHAR RegShiftBit;
} REG_OP;
#if 0
typedef struct _REG_PACKAGE {
UCHAR RegGroup;
UCHAR RegIndex;
UCHAR RegValue;
UCHAR RegMask;
} REG_PACKAGE;
#else
/* definitions for SerialLoadTable() */
#define CR 0x00
#define SR 0x01
#define GR 0x02
#define I2C 0x03
#define NR 0xFF
#define BITS BIT7
#endif
typedef struct _PLL_Info {
UCHAR NS;
UCHAR MS;
UCHAR RS;
}PLL_Info;
struct _PORT_CONFIG
{
UCHAR DevID;
UCHAR PortID;
UCHAR TX_Enc_ID;
UCHAR TX_I2C_Port;
UCHAR TX_I2C_Addr;
UCHAR Attribute;
}__attribute__((packed));;
/* PCI Data Structure */
#define OFF_VID 0
#define OFF_DID 2
#define OFF_PTR_VPD 4
#define OFF_PCI_DS_LEN 6
#define OFF_PCI_DS_REV 8
#define OFF_CLASS_CODE1 9
#define OFF_CLASS_CODE2 10
#define OFF_CLASS_CODE3 11
#define OFF_SIZE_VBIOS 12
#define OFF_ROM_CODE_REV 14
#define OFF_PC_AT_COMP 16
#define OFF_LII 17
#define OFF_RESERVED 18
/* Definition of PCI Data Structure.RESERVED */
|