Home | History | Annotate | Line # | Download | only in src
      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