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