1 /*
2  * Copyright 2016 Kevin Brace
3  * Copyright 2005-2016 The OpenChrome Project
4  *                     [https://www.freedesktop.org/wiki/Openchrome]
5  * Copyright 2004-2005 The Unichrome Project  [unichrome.sf.net]
6  * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
7  * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining a
10  * copy of this software and associated documentation files (the "Software"),
11  * to deal in the Software without restriction, including without limitation
12  * the rights to use, copy, modify, merge, publish, distribute, sub license,
13  * and/or sell copies of the Software, and to permit persons to whom the
14  * Software is furnished to do so, subject to the following conditions:
15  *
16  * The above copyright notice and this permission notice (including the
17  * next paragraph) shall be included in all copies or substantial portions
18  * of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
23  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26  * DEALINGS IN THE SOFTWARE.
27  */
28 
29 #ifndef _VIA_BIOS_H_
30 #define _VIA_BIOS_H_ 1
31 
32 #include "via_vgahw.h"
33 
34 #define     VIA_PANEL6X4                    0
35 #define     VIA_PANEL8X6                    1
36 #define     VIA_PANEL10X7                   2
37 #define     VIA_PANEL12X7                   3
38 #define     VIA_PANEL12X10                  4
39 #define     VIA_PANEL14X10                  5
40 #define     VIA_PANEL16X12                  6
41 #define     VIA_PANEL12X8                   7
42 #define     VIA_PANEL8X4                    8
43 #define     VIA_PANEL1366X7                 9
44 #define     VIA_PANEL1360X7                 10
45 #define     VIA_PANEL1920x1080              11
46 #define     VIA_PANEL1920x1200              12
47 #define     VIA_PANEL10X6                   13
48 #define     VIA_PANEL14X9                   14
49 #define     VIA_PANEL1280X720               15
50 #define     VIA_PANEL12X9                   16
51 #define     VIA_PANEL_INVALID               255
52 
53 #define     TVTYPE_NONE                     0x00
54 #define     TVTYPE_NTSC                     0x01
55 #define     TVTYPE_PAL                      0x02
56 #define     TVTYPE_480P                     0X03
57 #define     TVTYPE_576P                     0X04
58 #define     TVTYPE_720P                     0X05
59 #define     TVTYPE_1080I                    0X06
60 
61 #define     TVOUTPUT_NONE                   0x00
62 #define     TVOUTPUT_COMPOSITE              0x01
63 #define     TVOUTPUT_SVIDEO                 0x02
64 #define     TVOUTPUT_RGB                    0x04
65 #define     TVOUTPUT_YCBCR                  0x08
66 #define     TVOUTPUT_SC                     0x16
67 
68 #define  VIA_NONETV   0
69 #define  VIA_VT1621   1 /* TV2PLUS */
70 #define  VIA_VT1622   2 /* TV3 */
71 #define  VIA_VT1623   3 /* also VT1622A */
72 #define  VIA_VT1625   4
73 #define  VIA_CH7011   5
74 #define  VIA_CH7019A  6
75 #define  VIA_CH7019B  7
76 #define  VIA_CH7017   8
77 #define  VIA_CH7304   9
78 #define  VIA_CH7305   10
79 
80 
81 #define     VIA_TVNORMAL                    0
82 #define     VIA_TVOVER                      1
83 
84 #define     VIA_DEVICE_NONE                 0x00
85 #define	    VIA_DEVICE_CRT		    0x01
86 #define	    VIA_DEVICE_LCD		    0x02
87 #define	    VIA_DEVICE_TV		    0x04
88 #define	    VIA_DEVICE_DFP		    0x08
89 
90 #define     VIA_I2C_NONE                    0x00
91 #define     VIA_I2C_BUS1                    0x01
92 #define     VIA_I2C_BUS2                    0x02
93 #define     VIA_I2C_BUS3                    0x04
94 
95 /* System Memory CLK */
96 #define VIA_MEM_SDR66   0x00
97 #define VIA_MEM_SDR100  0x01
98 #define VIA_MEM_SDR133  0x02
99 #define VIA_MEM_DDR200  0x03
100 #define VIA_MEM_DDR266  0x04
101 #define VIA_MEM_DDR333  0x05
102 #define VIA_MEM_DDR400  0x06
103 #define VIA_MEM_DDR533  0x07
104 #define VIA_MEM_DDR667  0x08
105 #define VIA_MEM_DDR800  0x09
106 #define VIA_MEM_DDR1066 0x0A
107 #define VIA_MEM_END     0x0B
108 #define VIA_MEM_NONE    0xFF
109 
110 /* Digital Output Bus Width */
111 #define	    VIA_DI_12BIT		    0x00
112 #define	    VIA_DI_24BIT		    0x01
113 
114 /* Digital Port */
115 #define     VIA_DI_PORT_NONE        0x0
116 #define     VIA_DI_PORT_DVP0        0x1
117 #define     VIA_DI_PORT_DVP1        0x2
118 #define     VIA_DI_PORT_DFPLOW      0x4
119 #define     VIA_DI_PORT_LVDS1       0x4
120 #define     VIA_DI_PORT_TMDS        0x4
121 #define     VIA_DI_PORT_DFPHIGH     0x8
122 #define     VIA_DI_PORT_LVDS2       0x8
123 
124 /* External TMDS (DVI) Transmitter Type */
125 #define     VIA_TMDS_NONE           0x0
126 #define     VIA_TMDS_VT1632         0x1
127 
128 
129 typedef struct ViaPanelMode {
130     int Width;
131     int Height;
132     Bool useDualEdge;
133     Bool useDithering;
134 } ViaPanelModeRec, *ViaPanelModePtr ;
135 
136 typedef struct ViaPanelInfo {
137     Bool IsActive ;
138     /* Native physical resolution */
139     int NativeHeight;
140     int NativeWidth;
141     Bool useDualEdge;
142     Bool useDithering;
143 
144     /* Native resolution index, see via_panel.c */
145     CARD8 NativeModeIndex;
146     /* Determine if we must use the hardware scaler
147      * It might be false even if the "Center" option
148      * was specified
149      */
150     Bool            Scale;
151 
152     /* Panel/LCD entries */
153     CARD16      ResolutionIndex;
154     int         PanelIndex;
155     Bool        Center;
156     Bool        SetDVI;
157     /* LCD Simultaneous Expand Mode HWCursor Y Scale */
158     Bool        scaleY;
159     int         resY;
160 } ViaPanelInfoRec, *ViaPanelInfoPtr ;
161 
162 typedef struct _VIABIOSINFO {
163 	xf86OutputPtr analog;
164 	xf86OutputPtr tv;
165 
166     CARD32      Clock; /* register value for the dotclock */
167     Bool        ClockExternal;
168     CARD32      Bandwidth; /* available memory bandwidth */
169 
170     /* TV entries */
171     int         TVEncoder;
172     int         TVOutput;
173     I2CDevPtr   TVI2CDev;
174     int         TVType;
175     Bool        TVDotCrawl;
176     int         TVDeflicker;
177     CARD8       TVRegs[0xFF];
178     int         TVNumRegs;
179 
180     /* TV Callbacks */
181     void (*TVSave) (ScrnInfoPtr pScrn);
182     void (*TVRestore) (ScrnInfoPtr pScrn);
183     Bool (*TVDACSense) (ScrnInfoPtr pScrn);
184     ModeStatus (*TVModeValid) (ScrnInfoPtr pScrn, DisplayModePtr mode);
185     void (*TVModeI2C) (ScrnInfoPtr pScrn, DisplayModePtr mode);
186     void (*TVModeCrtc) (xf86CrtcPtr crtc, DisplayModePtr mode);
187     void (*TVPower) (ScrnInfoPtr pScrn, Bool On);
188     void (*LCDPower) (ScrnInfoPtr pScrn, Bool On);
189     DisplayModePtr TVModes;
190     int            TVNumModes;
191     void (*TVPrintRegs) (ScrnInfoPtr pScrn);
192 
193 } VIABIOSInfoRec, *VIABIOSInfoPtr;
194 
195 
196 typedef struct _VIATMDSRec {
197     I2CBusPtr pVIATMDSI2CBus;
198 } VIATMDSRec, *VIATMDSRecPtr;
199 
200 typedef struct
201 {
202     CARD16 X;
203     CARD16 Y;
204     CARD16 Bpp;
205     CARD8 bRamClock;
206     CARD8 bTuningValue;
207 } ViaExpireNumberTable;
208 
209 
210 /* via_ums.c */
211 void viaUnmapMMIO(ScrnInfoPtr pScrn);
212 void viaDisableVQ(ScrnInfoPtr pScrn);
213 Bool umsAccelInit(ScreenPtr pScreen);
214 Bool umsCreate(ScrnInfoPtr pScrn);
215 Bool umsPreInit(ScrnInfoPtr pScrn);
216 Bool umsCrtcInit(ScrnInfoPtr pScrn);
217 
218 /* via_output.c */
219 void viaDIP0SetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
220 void viaDIP0EnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
221 void viaDIP0SetClockDriveStrength(ScrnInfoPtr pScrn,
222                                     CARD8 clockDriveStrength);
223 void viaDIP0SetDataDriveStrength(ScrnInfoPtr pScrn,
224                                     CARD8 dataDriveStrength);
225 void viaDVP0SetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
226 void viaDVP0EnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
227 void viaDVP0SetClockDriveStrength(ScrnInfoPtr pScrn,
228                                     CARD8 clockDriveStrength);
229 void viaDVP0SetDataDriveStrength(ScrnInfoPtr pScrn,
230                                     CARD8 dataDriveStrength);
231 void viaDVP1SetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
232 void viaDVP1EnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
233 void viaDVP1SetClockDriveStrength(ScrnInfoPtr pScrn,
234                                     CARD8 clockDriveStrength);
235 void viaDVP1SetDataDriveStrength(ScrnInfoPtr pScrn,
236                                     CARD8 dataDriveStrength);
237 void viaDFPLowSetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
238 void viaDFPLowEnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
239 void viaOutputDetect(ScrnInfoPtr pScrn);
240 CARD32 ViaGetMemoryBandwidth(ScrnInfoPtr pScrn);
241 CARD32 ViaModeDotClockTranslate(ScrnInfoPtr pScrn, DisplayModePtr mode);
242 void viaProbePinStrapping(ScrnInfoPtr pScrn);
243 void ViaSetPrimaryDotclock(ScrnInfoPtr pScrn, CARD32 clock);
244 void ViaSetSecondaryDotclock(ScrnInfoPtr pScrn, CARD32 clock);
245 void ViaSetUseExternalClock(vgaHWPtr hwp);
246 
247 /* via_display.c */
248 void viaIGA2DisplayChannel(ScrnInfoPtr pScrn, Bool channelState);
249 void viaDisplayInit(ScrnInfoPtr pScrn);
250 void ViaGammaDisable(ScrnInfoPtr pScrn);
251 void viaIGAInitCommon(ScrnInfoPtr pScrn);
252 void viaIGA1Init(ScrnInfoPtr pScrn);
253 void viaIGA1SetFBStartingAddress(xf86CrtcPtr crtc, int x, int y);
254 void viaIGA1SetDisplayRegister(ScrnInfoPtr pScrn, DisplayModePtr mode);
255 void viaIGA1Save(ScrnInfoPtr pScrn);
256 void viaIGA1Restore(ScrnInfoPtr pScrn);
257 void viaIGA2Init(ScrnInfoPtr pScrn);
258 void viaIGA2SetFBStartingAddress(xf86CrtcPtr crtc, int x, int y);
259 void viaIGA2SetDisplayRegister(ScrnInfoPtr pScrn, DisplayModePtr mode);
260 void viaIGA2Save(ScrnInfoPtr pScrn);
261 void viaIGA2Restore(ScrnInfoPtr pScrn);
262 void ViaShadowCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode);
263 
264 /* via_analog.c */
265 void via_analog_init(ScrnInfoPtr pScrn);
266 
267 /* via_lvds.c */
268 void viaLVDS1SetIOPadSetting(ScrnInfoPtr pScrn, CARD8 ioPadState);
269 void via_lvds_init(ScrnInfoPtr pScrn);
270 
271 /* via_tmds.c */
272 void viaExtTMDSSetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
273 void viaExtTMDSEnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
274 void viaExtTMDSSetClockDriveStrength(ScrnInfoPtr pScrn,
275                                         CARD8 clockDriveStrength);
276 void viaExtTMDSSetDataDriveStrength(ScrnInfoPtr pScrn,
277                                         CARD8 dataDriveStrength);
278 void via_dvi_init(ScrnInfoPtr pScrn);
279 
280 /*via_tv.c */
281 #ifdef HAVE_DEBUG
282 void ViaTVPrintRegs(ScrnInfoPtr pScrn);
283 #endif
284 Bool via_tv_init(ScrnInfoPtr pScrn);
285 
286 /* via_vt162x.c */
287 I2CDevPtr ViaVT162xDetect(ScrnInfoPtr pScrn, I2CBusPtr pBus, CARD8 Address);
288 void ViaVT162xInit(ScrnInfoPtr pScrn);
289 
290 /* via_ch7xxx.c */
291 I2CDevPtr ViaCH7xxxDetect(ScrnInfoPtr pScrn, I2CBusPtr pBus, CARD8 Address);
292 void ViaCH7xxxInit(ScrnInfoPtr pScrn);
293 
294 #endif /* _VIA_BIOS_H_ */
295