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