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
129typedef struct ViaPanelMode {
130    int Width;
131    int Height;
132    Bool useDualEdge;
133    Bool useDithering;
134} ViaPanelModeRec, *ViaPanelModePtr ;
135
136typedef 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
162typedef 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
196typedef struct _VIATMDSRec {
197    I2CBusPtr pVIATMDSI2CBus;
198} VIATMDSRec, *VIATMDSRecPtr;
199
200typedef 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 */
211void viaUnmapMMIO(ScrnInfoPtr pScrn);
212void viaDisableVQ(ScrnInfoPtr pScrn);
213Bool umsAccelInit(ScreenPtr pScreen);
214Bool umsCreate(ScrnInfoPtr pScrn);
215Bool umsPreInit(ScrnInfoPtr pScrn);
216Bool umsCrtcInit(ScrnInfoPtr pScrn);
217
218/* via_output.c */
219void viaDIP0SetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
220void viaDIP0EnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
221void viaDIP0SetClockDriveStrength(ScrnInfoPtr pScrn,
222                                    CARD8 clockDriveStrength);
223void viaDIP0SetDataDriveStrength(ScrnInfoPtr pScrn,
224                                    CARD8 dataDriveStrength);
225void viaDVP0SetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
226void viaDVP0EnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
227void viaDVP0SetClockDriveStrength(ScrnInfoPtr pScrn,
228                                    CARD8 clockDriveStrength);
229void viaDVP0SetDataDriveStrength(ScrnInfoPtr pScrn,
230                                    CARD8 dataDriveStrength);
231void viaDVP1SetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
232void viaDVP1EnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
233void viaDVP1SetClockDriveStrength(ScrnInfoPtr pScrn,
234                                    CARD8 clockDriveStrength);
235void viaDVP1SetDataDriveStrength(ScrnInfoPtr pScrn,
236                                    CARD8 dataDriveStrength);
237void viaDFPLowSetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
238void viaDFPLowEnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
239void viaOutputDetect(ScrnInfoPtr pScrn);
240CARD32 ViaGetMemoryBandwidth(ScrnInfoPtr pScrn);
241CARD32 ViaModeDotClockTranslate(ScrnInfoPtr pScrn, DisplayModePtr mode);
242void viaProbePinStrapping(ScrnInfoPtr pScrn);
243void ViaSetPrimaryDotclock(ScrnInfoPtr pScrn, CARD32 clock);
244void ViaSetSecondaryDotclock(ScrnInfoPtr pScrn, CARD32 clock);
245void ViaSetUseExternalClock(vgaHWPtr hwp);
246
247/* via_display.c */
248void viaIGA2DisplayChannel(ScrnInfoPtr pScrn, Bool channelState);
249void viaDisplayInit(ScrnInfoPtr pScrn);
250void ViaGammaDisable(ScrnInfoPtr pScrn);
251void viaIGAInitCommon(ScrnInfoPtr pScrn);
252void viaIGA1Init(ScrnInfoPtr pScrn);
253void viaIGA1SetFBStartingAddress(xf86CrtcPtr crtc, int x, int y);
254void viaIGA1SetDisplayRegister(ScrnInfoPtr pScrn, DisplayModePtr mode);
255void viaIGA1Save(ScrnInfoPtr pScrn);
256void viaIGA1Restore(ScrnInfoPtr pScrn);
257void viaIGA2Init(ScrnInfoPtr pScrn);
258void viaIGA2SetFBStartingAddress(xf86CrtcPtr crtc, int x, int y);
259void viaIGA2SetDisplayRegister(ScrnInfoPtr pScrn, DisplayModePtr mode);
260void viaIGA2Save(ScrnInfoPtr pScrn);
261void viaIGA2Restore(ScrnInfoPtr pScrn);
262void ViaShadowCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode);
263
264/* via_analog.c */
265void via_analog_init(ScrnInfoPtr pScrn);
266
267/* via_lvds.c */
268void viaLVDS1SetIOPadSetting(ScrnInfoPtr pScrn, CARD8 ioPadState);
269void via_lvds_init(ScrnInfoPtr pScrn);
270
271/* via_tmds.c */
272void viaExtTMDSSetDisplaySource(ScrnInfoPtr pScrn, CARD8 displaySource);
273void viaExtTMDSEnableIOPads(ScrnInfoPtr pScrn, CARD8 ioPadState);
274void viaExtTMDSSetClockDriveStrength(ScrnInfoPtr pScrn,
275                                        CARD8 clockDriveStrength);
276void viaExtTMDSSetDataDriveStrength(ScrnInfoPtr pScrn,
277                                        CARD8 dataDriveStrength);
278void via_dvi_init(ScrnInfoPtr pScrn);
279
280/*via_tv.c */
281#ifdef HAVE_DEBUG
282void ViaTVPrintRegs(ScrnInfoPtr pScrn);
283#endif
284Bool via_tv_init(ScrnInfoPtr pScrn);
285
286/* via_vt162x.c */
287I2CDevPtr ViaVT162xDetect(ScrnInfoPtr pScrn, I2CBusPtr pBus, CARD8 Address);
288void ViaVT162xInit(ScrnInfoPtr pScrn);
289
290/* via_ch7xxx.c */
291I2CDevPtr ViaCH7xxxDetect(ScrnInfoPtr pScrn, I2CBusPtr pBus, CARD8 Address);
292void ViaCH7xxxInit(ScrnInfoPtr pScrn);
293
294#endif /* _VIA_BIOS_H_ */
295