d7636e0b |
1 | #ifndef _LINUX_XGIFB |
2 | #define _LINUX_XGIFB |
3 | #include <linux/spinlock.h> |
4 | #include <asm/ioctl.h> |
5 | #include <asm/types.h> |
6 | |
7 | #define DISPTYPE_CRT1 0x00000008L |
8 | #define DISPTYPE_CRT2 0x00000004L |
9 | #define DISPTYPE_LCD 0x00000002L |
10 | #define DISPTYPE_TV 0x00000001L |
11 | #define DISPTYPE_DISP1 DISPTYPE_CRT1 |
12 | #define DISPTYPE_DISP2 (DISPTYPE_CRT2 | DISPTYPE_LCD | DISPTYPE_TV) |
13 | #define DISPMODE_SINGLE 0x00000020L |
14 | #define DISPMODE_MIRROR 0x00000010L |
15 | #define DISPMODE_DUALVIEW 0x00000040L |
16 | |
17 | #define HASVB_NONE 0x00 |
18 | #define HASVB_301 0x01 |
19 | #define HASVB_LVDS 0x02 |
20 | #define HASVB_TRUMPION 0x04 |
21 | #define HASVB_LVDS_CHRONTEL 0x10 |
22 | #define HASVB_302 0x20 |
23 | #define HASVB_303 0x40 |
24 | #define HASVB_CHRONTEL 0x80 |
25 | |
26 | #ifndef XGIFB_ID |
27 | #define XGIFB_ID 0x53495346 /* Identify myself with 'XGIF' */ |
28 | #endif |
29 | |
30 | typedef enum _XGI_CHIP_TYPE { |
31 | XGI_VGALegacy = 0, |
32 | XGI_300, |
33 | XGI_630, |
34 | XGI_730, |
35 | XGI_540, |
36 | XGI_315H, |
37 | XGI_315, |
38 | XGI_315PRO, |
39 | XGI_550, |
40 | XGI_640, |
41 | XGI_740, |
42 | XGI_650, |
43 | XGI_650M, |
44 | XGI_330 = 16, |
45 | XGI_660, |
46 | XGI_661, |
47 | XGI_760, |
48 | XG40 = 32, |
49 | XG41, |
50 | XG42, |
51 | XG45, |
52 | XG20 = 48, |
53 | XG21, |
54 | XG27, |
55 | MAX_XGI_CHIP |
56 | } XGI_CHIP_TYPE; |
57 | |
58 | typedef enum _TVTYPE { |
59 | TVMODE_NTSC = 0, |
60 | TVMODE_PAL, |
61 | TVMODE_HIVISION, |
62 | TVTYPE_PALM, // vicki@030226 |
63 | TVTYPE_PALN, // vicki@030226 |
64 | TVTYPE_NTSCJ, // vicki@030226 |
65 | TVMODE_TOTAL |
66 | } XGI_TV_TYPE; |
67 | |
68 | |
69 | typedef struct _XGIFB_INFO XGIfb_info; |
70 | struct _XGIFB_INFO { |
71 | |
72 | unsigned long XGIfb_id; |
73 | int chip_id; /* PCI ID of detected chip */ |
74 | int memory; /* video memory in KB which XGIfb manages */ |
75 | int heapstart; /* heap start (= XGIfb "mem" argument) in KB */ |
76 | unsigned char fbvidmode; /* current XGIfb mode */ |
77 | |
78 | unsigned char XGIfb_version; |
79 | unsigned char XGIfb_revision; |
80 | unsigned char XGIfb_patchlevel; |
81 | |
82 | unsigned char XGIfb_caps; /* XGIfb capabilities */ |
83 | |
84 | int XGIfb_tqlen; /* turbo queue length (in KB) */ |
85 | |
86 | unsigned int XGIfb_pcibus; /* The card's PCI ID */ |
87 | unsigned int XGIfb_pcislot; |
88 | unsigned int XGIfb_pcifunc; |
89 | |
90 | unsigned char XGIfb_lcdpdc; /* PanelDelayCompensation */ |
91 | |
92 | unsigned char XGIfb_lcda; /* Detected status of LCDA for low res/text modes */ |
93 | |
94 | char reserved[235]; /* for future use */ |
95 | }; |
96 | |
97 | |
98 | |
99 | |
100 | typedef enum _TVPLUGTYPE { // vicki@030226 |
101 | // TVPLUG_Legacy = 0, |
102 | // TVPLUG_COMPOSITE, |
103 | // TVPLUG_SVIDEO, |
104 | // TVPLUG_SCART, |
105 | // TVPLUG_TOTAL |
106 | TVPLUG_UNKNOWN = 0, |
107 | TVPLUG_COMPOSITE = 1, |
108 | TVPLUG_SVIDEO = 2, |
109 | TVPLUG_COMPOSITE_AND_SVIDEO = 3, |
110 | TVPLUG_SCART = 4, |
111 | TVPLUG_YPBPR_525i = 5, |
112 | TVPLUG_YPBPR_525P = 6, |
113 | TVPLUG_YPBPR_750P = 7, |
114 | TVPLUG_YPBPR_1080i = 8, |
115 | TVPLUG_TOTAL |
116 | } XGI_TV_PLUG; |
117 | |
118 | |
119 | struct mode_info { |
120 | int bpp; |
121 | int xres; |
122 | int yres; |
123 | int v_xres; |
124 | int v_yres; |
125 | int org_x; |
126 | int org_y; |
127 | unsigned int vrate; |
128 | }; |
129 | |
130 | struct ap_data { |
131 | struct mode_info minfo; |
132 | unsigned long iobase; |
133 | unsigned int mem_size; |
134 | unsigned long disp_state; |
135 | XGI_CHIP_TYPE chip; |
136 | unsigned char hasVB; |
137 | XGI_TV_TYPE TV_type; |
138 | XGI_TV_PLUG TV_plug; |
139 | unsigned long version; |
140 | char reserved[256]; |
141 | }; |
142 | |
143 | |
144 | |
145 | /* If changing this, vgatypes.h must also be changed (for X driver) */ |
146 | |
147 | |
148 | /* |
149 | * NOTE! The ioctl types used to be "size_t" by mistake, but were |
150 | * really meant to be __u32. Changed to "__u32" even though that |
151 | * changes the value on 64-bit architectures, because the value |
152 | * (with a 4-byte size) is also hardwired in vgatypes.h for user |
153 | * space exports. So "__u32" is actually more compatible, duh! |
154 | */ |
155 | #define XGIFB_GET_INFO _IOR('n',0xF8,__u32) |
156 | #define XGIFB_GET_VBRSTATUS _IOR('n',0xF9,__u32) |
157 | |
158 | |
159 | |
160 | struct video_info{ |
161 | int chip_id; |
162 | unsigned int video_size; |
163 | unsigned long video_base; |
164 | char * video_vbase; |
165 | unsigned long mmio_base; |
166 | char * mmio_vbase; |
167 | unsigned long vga_base; |
168 | unsigned long mtrr; |
169 | unsigned long heapstart; |
170 | |
171 | int video_bpp; |
172 | int video_cmap_len; |
173 | int video_width; |
174 | int video_height; |
175 | int video_vwidth; |
176 | int video_vheight; |
177 | int org_x; |
178 | int org_y; |
179 | int video_linelength; |
180 | unsigned int refresh_rate; |
181 | |
182 | unsigned long disp_state; |
183 | unsigned char hasVB; |
184 | unsigned char TV_type; |
185 | unsigned char TV_plug; |
186 | |
187 | XGI_CHIP_TYPE chip; |
188 | unsigned char revision_id; |
189 | |
190 | unsigned short DstColor; |
191 | unsigned long XGI310_AccelDepth; |
192 | unsigned long CommandReg; |
193 | |
194 | spinlock_t lockaccel; |
195 | |
196 | unsigned int pcibus; |
197 | unsigned int pcislot; |
198 | unsigned int pcifunc; |
199 | |
200 | int accel; |
201 | unsigned short subsysvendor; |
202 | unsigned short subsysdevice; |
203 | |
204 | char reserved[236]; |
205 | }; |
206 | |
207 | |
208 | extern struct video_info xgi_video_info; |
209 | |
210 | #ifdef __KERNEL__ |
211 | //extern void xgi_malloc(struct xgi_memreq *req); |
212 | extern void xgi_free(unsigned long base); |
213 | extern void xgi_dispinfo(struct ap_data *rec); |
214 | #endif |
215 | #endif |