1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright 2006-2007 Advanced Micro Devices, Inc. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Permission is hereby granted, free of charge, to any person obtaining a 5*4882a593Smuzhiyun * copy of this software and associated documentation files (the "Software"), 6*4882a593Smuzhiyun * to deal in the Software without restriction, including without limitation 7*4882a593Smuzhiyun * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*4882a593Smuzhiyun * and/or sell copies of the Software, and to permit persons to whom the 9*4882a593Smuzhiyun * Software is furnished to do so, subject to the following conditions: 10*4882a593Smuzhiyun * 11*4882a593Smuzhiyun * The above copyright notice and this permission notice shall be included in 12*4882a593Smuzhiyun * all copies or substantial portions of the Software. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*4882a593Smuzhiyun * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17*4882a593Smuzhiyun * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18*4882a593Smuzhiyun * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19*4882a593Smuzhiyun * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20*4882a593Smuzhiyun * OTHER DEALINGS IN THE SOFTWARE. 21*4882a593Smuzhiyun */ 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /****************************************************************************/ 25*4882a593Smuzhiyun /*Portion I: Definitions shared between VBIOS and Driver */ 26*4882a593Smuzhiyun /****************************************************************************/ 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #ifndef _ATOMBIOS_H 30*4882a593Smuzhiyun #define _ATOMBIOS_H 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #define ATOM_VERSION_MAJOR 0x00020000 33*4882a593Smuzhiyun #define ATOM_VERSION_MINOR 0x00000002 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define ATOM_HEADER_VERSION (ATOM_VERSION_MAJOR | ATOM_VERSION_MINOR) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* Endianness should be specified before inclusion, 38*4882a593Smuzhiyun * default to little endian 39*4882a593Smuzhiyun */ 40*4882a593Smuzhiyun #ifndef ATOM_BIG_ENDIAN 41*4882a593Smuzhiyun #error Endian not specified 42*4882a593Smuzhiyun #endif 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #ifdef _H2INC 45*4882a593Smuzhiyun #ifndef ULONG 46*4882a593Smuzhiyun typedef unsigned long ULONG; 47*4882a593Smuzhiyun #endif 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #ifndef UCHAR 50*4882a593Smuzhiyun typedef unsigned char UCHAR; 51*4882a593Smuzhiyun #endif 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #ifndef USHORT 54*4882a593Smuzhiyun typedef unsigned short USHORT; 55*4882a593Smuzhiyun #endif 56*4882a593Smuzhiyun #endif 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #define ATOM_DAC_A 0 59*4882a593Smuzhiyun #define ATOM_DAC_B 1 60*4882a593Smuzhiyun #define ATOM_EXT_DAC 2 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #define ATOM_CRTC1 0 63*4882a593Smuzhiyun #define ATOM_CRTC2 1 64*4882a593Smuzhiyun #define ATOM_CRTC3 2 65*4882a593Smuzhiyun #define ATOM_CRTC4 3 66*4882a593Smuzhiyun #define ATOM_CRTC5 4 67*4882a593Smuzhiyun #define ATOM_CRTC6 5 68*4882a593Smuzhiyun #define ATOM_CRTC_INVALID 0xFF 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #define ATOM_DIGA 0 71*4882a593Smuzhiyun #define ATOM_DIGB 1 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define ATOM_PPLL1 0 74*4882a593Smuzhiyun #define ATOM_PPLL2 1 75*4882a593Smuzhiyun #define ATOM_DCPLL 2 76*4882a593Smuzhiyun #define ATOM_PPLL0 2 77*4882a593Smuzhiyun #define ATOM_PPLL3 3 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define ATOM_EXT_PLL1 8 80*4882a593Smuzhiyun #define ATOM_EXT_PLL2 9 81*4882a593Smuzhiyun #define ATOM_EXT_CLOCK 10 82*4882a593Smuzhiyun #define ATOM_PPLL_INVALID 0xFF 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun #define ENCODER_REFCLK_SRC_P1PLL 0 85*4882a593Smuzhiyun #define ENCODER_REFCLK_SRC_P2PLL 1 86*4882a593Smuzhiyun #define ENCODER_REFCLK_SRC_DCPLL 2 87*4882a593Smuzhiyun #define ENCODER_REFCLK_SRC_EXTCLK 3 88*4882a593Smuzhiyun #define ENCODER_REFCLK_SRC_INVALID 0xFF 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #define ATOM_SCALER1 0 91*4882a593Smuzhiyun #define ATOM_SCALER2 1 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun #define ATOM_SCALER_DISABLE 0 94*4882a593Smuzhiyun #define ATOM_SCALER_CENTER 1 95*4882a593Smuzhiyun #define ATOM_SCALER_EXPANSION 2 96*4882a593Smuzhiyun #define ATOM_SCALER_MULTI_EX 3 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #define ATOM_DISABLE 0 99*4882a593Smuzhiyun #define ATOM_ENABLE 1 100*4882a593Smuzhiyun #define ATOM_LCD_BLOFF (ATOM_DISABLE+2) 101*4882a593Smuzhiyun #define ATOM_LCD_BLON (ATOM_ENABLE+2) 102*4882a593Smuzhiyun #define ATOM_LCD_BL_BRIGHTNESS_CONTROL (ATOM_ENABLE+3) 103*4882a593Smuzhiyun #define ATOM_LCD_SELFTEST_START (ATOM_DISABLE+5) 104*4882a593Smuzhiyun #define ATOM_LCD_SELFTEST_STOP (ATOM_ENABLE+5) 105*4882a593Smuzhiyun #define ATOM_ENCODER_INIT (ATOM_DISABLE+7) 106*4882a593Smuzhiyun #define ATOM_INIT (ATOM_DISABLE+7) 107*4882a593Smuzhiyun #define ATOM_GET_STATUS (ATOM_DISABLE+8) 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun #define ATOM_BLANKING 1 110*4882a593Smuzhiyun #define ATOM_BLANKING_OFF 0 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #define ATOM_CURSOR1 0 113*4882a593Smuzhiyun #define ATOM_CURSOR2 1 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun #define ATOM_ICON1 0 116*4882a593Smuzhiyun #define ATOM_ICON2 1 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun #define ATOM_CRT1 0 119*4882a593Smuzhiyun #define ATOM_CRT2 1 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun #define ATOM_TV_NTSC 1 122*4882a593Smuzhiyun #define ATOM_TV_NTSCJ 2 123*4882a593Smuzhiyun #define ATOM_TV_PAL 3 124*4882a593Smuzhiyun #define ATOM_TV_PALM 4 125*4882a593Smuzhiyun #define ATOM_TV_PALCN 5 126*4882a593Smuzhiyun #define ATOM_TV_PALN 6 127*4882a593Smuzhiyun #define ATOM_TV_PAL60 7 128*4882a593Smuzhiyun #define ATOM_TV_SECAM 8 129*4882a593Smuzhiyun #define ATOM_TV_CV 16 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun #define ATOM_DAC1_PS2 1 132*4882a593Smuzhiyun #define ATOM_DAC1_CV 2 133*4882a593Smuzhiyun #define ATOM_DAC1_NTSC 3 134*4882a593Smuzhiyun #define ATOM_DAC1_PAL 4 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun #define ATOM_DAC2_PS2 ATOM_DAC1_PS2 137*4882a593Smuzhiyun #define ATOM_DAC2_CV ATOM_DAC1_CV 138*4882a593Smuzhiyun #define ATOM_DAC2_NTSC ATOM_DAC1_NTSC 139*4882a593Smuzhiyun #define ATOM_DAC2_PAL ATOM_DAC1_PAL 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun #define ATOM_PM_ON 0 142*4882a593Smuzhiyun #define ATOM_PM_STANDBY 1 143*4882a593Smuzhiyun #define ATOM_PM_SUSPEND 2 144*4882a593Smuzhiyun #define ATOM_PM_OFF 3 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun /* Bit0:{=0:single, =1:dual}, 147*4882a593Smuzhiyun Bit1 {=0:666RGB, =1:888RGB}, 148*4882a593Smuzhiyun Bit2:3:{Grey level} 149*4882a593Smuzhiyun Bit4:{=0:LDI format for RGB888, =1 FPDI format for RGB888}*/ 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #define ATOM_PANEL_MISC_DUAL 0x00000001 152*4882a593Smuzhiyun #define ATOM_PANEL_MISC_888RGB 0x00000002 153*4882a593Smuzhiyun #define ATOM_PANEL_MISC_GREY_LEVEL 0x0000000C 154*4882a593Smuzhiyun #define ATOM_PANEL_MISC_FPDI 0x00000010 155*4882a593Smuzhiyun #define ATOM_PANEL_MISC_GREY_LEVEL_SHIFT 2 156*4882a593Smuzhiyun #define ATOM_PANEL_MISC_SPATIAL 0x00000020 157*4882a593Smuzhiyun #define ATOM_PANEL_MISC_TEMPORAL 0x00000040 158*4882a593Smuzhiyun #define ATOM_PANEL_MISC_API_ENABLED 0x00000080 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun #define MEMTYPE_DDR1 "DDR1" 162*4882a593Smuzhiyun #define MEMTYPE_DDR2 "DDR2" 163*4882a593Smuzhiyun #define MEMTYPE_DDR3 "DDR3" 164*4882a593Smuzhiyun #define MEMTYPE_DDR4 "DDR4" 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun #define ASIC_BUS_TYPE_PCI "PCI" 167*4882a593Smuzhiyun #define ASIC_BUS_TYPE_AGP "AGP" 168*4882a593Smuzhiyun #define ASIC_BUS_TYPE_PCIE "PCI_EXPRESS" 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun /* Maximum size of that FireGL flag string */ 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun #define ATOM_FIREGL_FLAG_STRING "FGL" //Flag used to enable FireGL Support 173*4882a593Smuzhiyun #define ATOM_MAX_SIZE_OF_FIREGL_FLAG_STRING 3 //sizeof( ATOM_FIREGL_FLAG_STRING ) 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun #define ATOM_FAKE_DESKTOP_STRING "DSK" //Flag used to enable mobile ASIC on Desktop 176*4882a593Smuzhiyun #define ATOM_MAX_SIZE_OF_FAKE_DESKTOP_STRING ATOM_MAX_SIZE_OF_FIREGL_FLAG_STRING 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun #define ATOM_M54T_FLAG_STRING "M54T" //Flag used to enable M54T Support 179*4882a593Smuzhiyun #define ATOM_MAX_SIZE_OF_M54T_FLAG_STRING 4 //sizeof( ATOM_M54T_FLAG_STRING ) 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun #define HW_ASSISTED_I2C_STATUS_FAILURE 2 182*4882a593Smuzhiyun #define HW_ASSISTED_I2C_STATUS_SUCCESS 1 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun #pragma pack(1) /* BIOS data must use byte alignment */ 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun /* Define offset to location of ROM header. */ 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun #define OFFSET_TO_POINTER_TO_ATOM_ROM_HEADER 0x00000048L 189*4882a593Smuzhiyun #define OFFSET_TO_ATOM_ROM_IMAGE_SIZE 0x00000002L 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun #define OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE 0x94 192*4882a593Smuzhiyun #define MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE 20 /* including the terminator 0x0! */ 193*4882a593Smuzhiyun #define OFFSET_TO_GET_ATOMBIOS_STRINGS_NUMBER 0x002f 194*4882a593Smuzhiyun #define OFFSET_TO_GET_ATOMBIOS_STRINGS_START 0x006e 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun /* Common header for all ROM Data tables. 197*4882a593Smuzhiyun Every table pointed _ATOM_MASTER_DATA_TABLE has this common header. 198*4882a593Smuzhiyun And the pointer actually points to this header. */ 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun typedef struct _ATOM_COMMON_TABLE_HEADER 201*4882a593Smuzhiyun { 202*4882a593Smuzhiyun USHORT usStructureSize; 203*4882a593Smuzhiyun UCHAR ucTableFormatRevision; /*Change it when the Parser is not backward compatible */ 204*4882a593Smuzhiyun UCHAR ucTableContentRevision; /*Change it only when the table needs to change but the firmware */ 205*4882a593Smuzhiyun /*Image can't be updated, while Driver needs to carry the new table! */ 206*4882a593Smuzhiyun }ATOM_COMMON_TABLE_HEADER; 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /****************************************************************************/ 209*4882a593Smuzhiyun // Structure stores the ROM header. 210*4882a593Smuzhiyun /****************************************************************************/ 211*4882a593Smuzhiyun typedef struct _ATOM_ROM_HEADER 212*4882a593Smuzhiyun { 213*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 214*4882a593Smuzhiyun UCHAR uaFirmWareSignature[4]; /*Signature to distinguish between Atombios and non-atombios, 215*4882a593Smuzhiyun atombios should init it as "ATOM", don't change the position */ 216*4882a593Smuzhiyun USHORT usBiosRuntimeSegmentAddress; 217*4882a593Smuzhiyun USHORT usProtectedModeInfoOffset; 218*4882a593Smuzhiyun USHORT usConfigFilenameOffset; 219*4882a593Smuzhiyun USHORT usCRC_BlockOffset; 220*4882a593Smuzhiyun USHORT usBIOS_BootupMessageOffset; 221*4882a593Smuzhiyun USHORT usInt10Offset; 222*4882a593Smuzhiyun USHORT usPciBusDevInitCode; 223*4882a593Smuzhiyun USHORT usIoBaseAddress; 224*4882a593Smuzhiyun USHORT usSubsystemVendorID; 225*4882a593Smuzhiyun USHORT usSubsystemID; 226*4882a593Smuzhiyun USHORT usPCI_InfoOffset; 227*4882a593Smuzhiyun USHORT usMasterCommandTableOffset; /*Offset for SW to get all command table offsets, Don't change the position */ 228*4882a593Smuzhiyun USHORT usMasterDataTableOffset; /*Offset for SW to get all data table offsets, Don't change the position */ 229*4882a593Smuzhiyun UCHAR ucExtendedFunctionCode; 230*4882a593Smuzhiyun UCHAR ucReserved; 231*4882a593Smuzhiyun }ATOM_ROM_HEADER; 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun /*==============================Command Table Portion==================================== */ 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun #ifdef UEFI_BUILD 236*4882a593Smuzhiyun #define UTEMP USHORT 237*4882a593Smuzhiyun #define USHORT void* 238*4882a593Smuzhiyun #endif 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun /****************************************************************************/ 241*4882a593Smuzhiyun // Structures used in Command.mtb 242*4882a593Smuzhiyun /****************************************************************************/ 243*4882a593Smuzhiyun typedef struct _ATOM_MASTER_LIST_OF_COMMAND_TABLES{ 244*4882a593Smuzhiyun USHORT ASIC_Init; //Function Table, used by various SW components,latest version 1.1 245*4882a593Smuzhiyun USHORT GetDisplaySurfaceSize; //Atomic Table, Used by Bios when enabling HW ICON 246*4882a593Smuzhiyun USHORT ASIC_RegistersInit; //Atomic Table, indirectly used by various SW components,called from ASIC_Init 247*4882a593Smuzhiyun USHORT VRAM_BlockVenderDetection; //Atomic Table, used only by Bios 248*4882a593Smuzhiyun USHORT DIGxEncoderControl; //Only used by Bios 249*4882a593Smuzhiyun USHORT MemoryControllerInit; //Atomic Table, indirectly used by various SW components,called from ASIC_Init 250*4882a593Smuzhiyun USHORT EnableCRTCMemReq; //Function Table,directly used by various SW components,latest version 2.1 251*4882a593Smuzhiyun USHORT MemoryParamAdjust; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock if needed 252*4882a593Smuzhiyun USHORT DVOEncoderControl; //Function Table,directly used by various SW components,latest version 1.2 253*4882a593Smuzhiyun USHORT GPIOPinControl; //Atomic Table, only used by Bios 254*4882a593Smuzhiyun USHORT SetEngineClock; //Function Table,directly used by various SW components,latest version 1.1 255*4882a593Smuzhiyun USHORT SetMemoryClock; //Function Table,directly used by various SW components,latest version 1.1 256*4882a593Smuzhiyun USHORT SetPixelClock; //Function Table,directly used by various SW components,latest version 1.2 257*4882a593Smuzhiyun USHORT EnableDispPowerGating; //Atomic Table, indirectly used by various SW components,called from ASIC_Init 258*4882a593Smuzhiyun USHORT ResetMemoryDLL; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock 259*4882a593Smuzhiyun USHORT ResetMemoryDevice; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock 260*4882a593Smuzhiyun USHORT MemoryPLLInit; //Atomic Table, used only by Bios 261*4882a593Smuzhiyun USHORT AdjustDisplayPll; //Atomic Table, used by various SW componentes. 262*4882a593Smuzhiyun USHORT AdjustMemoryController; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock 263*4882a593Smuzhiyun USHORT EnableASIC_StaticPwrMgt; //Atomic Table, only used by Bios 264*4882a593Smuzhiyun USHORT SetUniphyInstance; //Atomic Table, only used by Bios 265*4882a593Smuzhiyun USHORT DAC_LoadDetection; //Atomic Table, directly used by various SW components,latest version 1.2 266*4882a593Smuzhiyun USHORT LVTMAEncoderControl; //Atomic Table,directly used by various SW components,latest version 1.3 267*4882a593Smuzhiyun USHORT HW_Misc_Operation; //Atomic Table, directly used by various SW components,latest version 1.1 268*4882a593Smuzhiyun USHORT DAC1EncoderControl; //Atomic Table, directly used by various SW components,latest version 1.1 269*4882a593Smuzhiyun USHORT DAC2EncoderControl; //Atomic Table, directly used by various SW components,latest version 1.1 270*4882a593Smuzhiyun USHORT DVOOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 271*4882a593Smuzhiyun USHORT CV1OutputControl; //Atomic Table, Atomic Table, Obsolete from Ry6xx, use DAC2 Output instead 272*4882a593Smuzhiyun USHORT GetConditionalGoldenSetting; //Only used by Bios 273*4882a593Smuzhiyun USHORT TVEncoderControl; //Function Table,directly used by various SW components,latest version 1.1 274*4882a593Smuzhiyun USHORT PatchMCSetting; //only used by BIOS 275*4882a593Smuzhiyun USHORT MC_SEQ_Control; //only used by BIOS 276*4882a593Smuzhiyun USHORT Gfx_Harvesting; //Atomic Table, Obsolete from Ry6xx, Now only used by BIOS for GFX harvesting 277*4882a593Smuzhiyun USHORT EnableScaler; //Atomic Table, used only by Bios 278*4882a593Smuzhiyun USHORT BlankCRTC; //Atomic Table, directly used by various SW components,latest version 1.1 279*4882a593Smuzhiyun USHORT EnableCRTC; //Atomic Table, directly used by various SW components,latest version 1.1 280*4882a593Smuzhiyun USHORT GetPixelClock; //Atomic Table, directly used by various SW components,latest version 1.1 281*4882a593Smuzhiyun USHORT EnableVGA_Render; //Function Table,directly used by various SW components,latest version 1.1 282*4882a593Smuzhiyun USHORT GetSCLKOverMCLKRatio; //Atomic Table, only used by Bios 283*4882a593Smuzhiyun USHORT SetCRTC_Timing; //Atomic Table, directly used by various SW components,latest version 1.1 284*4882a593Smuzhiyun USHORT SetCRTC_OverScan; //Atomic Table, used by various SW components,latest version 1.1 285*4882a593Smuzhiyun USHORT SetCRTC_Replication; //Atomic Table, used only by Bios 286*4882a593Smuzhiyun USHORT SelectCRTC_Source; //Atomic Table, directly used by various SW components,latest version 1.1 287*4882a593Smuzhiyun USHORT EnableGraphSurfaces; //Atomic Table, used only by Bios 288*4882a593Smuzhiyun USHORT UpdateCRTC_DoubleBufferRegisters; //Atomic Table, used only by Bios 289*4882a593Smuzhiyun USHORT LUT_AutoFill; //Atomic Table, only used by Bios 290*4882a593Smuzhiyun USHORT EnableHW_IconCursor; //Atomic Table, only used by Bios 291*4882a593Smuzhiyun USHORT GetMemoryClock; //Atomic Table, directly used by various SW components,latest version 1.1 292*4882a593Smuzhiyun USHORT GetEngineClock; //Atomic Table, directly used by various SW components,latest version 1.1 293*4882a593Smuzhiyun USHORT SetCRTC_UsingDTDTiming; //Atomic Table, directly used by various SW components,latest version 1.1 294*4882a593Smuzhiyun USHORT ExternalEncoderControl; //Atomic Table, directly used by various SW components,latest version 2.1 295*4882a593Smuzhiyun USHORT LVTMAOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 296*4882a593Smuzhiyun USHORT VRAM_BlockDetectionByStrap; //Atomic Table, used only by Bios 297*4882a593Smuzhiyun USHORT MemoryCleanUp; //Atomic Table, only used by Bios 298*4882a593Smuzhiyun USHORT ProcessI2cChannelTransaction; //Function Table,only used by Bios 299*4882a593Smuzhiyun USHORT WriteOneByteToHWAssistedI2C; //Function Table,indirectly used by various SW components 300*4882a593Smuzhiyun USHORT ReadHWAssistedI2CStatus; //Atomic Table, indirectly used by various SW components 301*4882a593Smuzhiyun USHORT SpeedFanControl; //Function Table,indirectly used by various SW components,called from ASIC_Init 302*4882a593Smuzhiyun USHORT PowerConnectorDetection; //Atomic Table, directly used by various SW components,latest version 1.1 303*4882a593Smuzhiyun USHORT MC_Synchronization; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock 304*4882a593Smuzhiyun USHORT ComputeMemoryEnginePLL; //Atomic Table, indirectly used by various SW components,called from SetMemory/EngineClock 305*4882a593Smuzhiyun USHORT MemoryRefreshConversion; //Atomic Table, indirectly used by various SW components,called from SetMemory or SetEngineClock 306*4882a593Smuzhiyun USHORT VRAM_GetCurrentInfoBlock; //Atomic Table, used only by Bios 307*4882a593Smuzhiyun USHORT DynamicMemorySettings; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock 308*4882a593Smuzhiyun USHORT MemoryTraining; //Atomic Table, used only by Bios 309*4882a593Smuzhiyun USHORT EnableSpreadSpectrumOnPPLL; //Atomic Table, directly used by various SW components,latest version 1.2 310*4882a593Smuzhiyun USHORT TMDSAOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 311*4882a593Smuzhiyun USHORT SetVoltage; //Function Table,directly and/or indirectly used by various SW components,latest version 1.1 312*4882a593Smuzhiyun USHORT DAC1OutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 313*4882a593Smuzhiyun USHORT DAC2OutputControl; //Atomic Table, directly used by various SW components,latest version 1.1 314*4882a593Smuzhiyun USHORT ComputeMemoryClockParam; //Function Table,only used by Bios, obsolete soon.Switch to use "ReadEDIDFromHWAssistedI2C" 315*4882a593Smuzhiyun USHORT ClockSource; //Atomic Table, indirectly used by various SW components,called from ASIC_Init 316*4882a593Smuzhiyun USHORT MemoryDeviceInit; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock 317*4882a593Smuzhiyun USHORT GetDispObjectInfo; //Atomic Table, indirectly used by various SW components,called from EnableVGARender 318*4882a593Smuzhiyun USHORT DIG1EncoderControl; //Atomic Table,directly used by various SW components,latest version 1.1 319*4882a593Smuzhiyun USHORT DIG2EncoderControl; //Atomic Table,directly used by various SW components,latest version 1.1 320*4882a593Smuzhiyun USHORT DIG1TransmitterControl; //Atomic Table,directly used by various SW components,latest version 1.1 321*4882a593Smuzhiyun USHORT DIG2TransmitterControl; //Atomic Table,directly used by various SW components,latest version 1.1 322*4882a593Smuzhiyun USHORT ProcessAuxChannelTransaction; //Function Table,only used by Bios 323*4882a593Smuzhiyun USHORT DPEncoderService; //Function Table,only used by Bios 324*4882a593Smuzhiyun USHORT GetVoltageInfo; //Function Table,only used by Bios since SI 325*4882a593Smuzhiyun }ATOM_MASTER_LIST_OF_COMMAND_TABLES; 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun // For backward compatible 328*4882a593Smuzhiyun #define ReadEDIDFromHWAssistedI2C ProcessI2cChannelTransaction 329*4882a593Smuzhiyun #define DPTranslatorControl DIG2EncoderControl 330*4882a593Smuzhiyun #define UNIPHYTransmitterControl DIG1TransmitterControl 331*4882a593Smuzhiyun #define LVTMATransmitterControl DIG2TransmitterControl 332*4882a593Smuzhiyun #define SetCRTC_DPM_State GetConditionalGoldenSetting 333*4882a593Smuzhiyun #define ASIC_StaticPwrMgtStatusChange SetUniphyInstance 334*4882a593Smuzhiyun #define HPDInterruptService ReadHWAssistedI2CStatus 335*4882a593Smuzhiyun #define EnableVGA_Access GetSCLKOverMCLKRatio 336*4882a593Smuzhiyun #define EnableYUV GetDispObjectInfo 337*4882a593Smuzhiyun #define DynamicClockGating EnableDispPowerGating 338*4882a593Smuzhiyun #define SetupHWAssistedI2CStatus ComputeMemoryClockParam 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun #define TMDSAEncoderControl PatchMCSetting 341*4882a593Smuzhiyun #define LVDSEncoderControl MC_SEQ_Control 342*4882a593Smuzhiyun #define LCD1OutputControl HW_Misc_Operation 343*4882a593Smuzhiyun #define TV1OutputControl Gfx_Harvesting 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun typedef struct _ATOM_MASTER_COMMAND_TABLE 346*4882a593Smuzhiyun { 347*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 348*4882a593Smuzhiyun ATOM_MASTER_LIST_OF_COMMAND_TABLES ListOfCommandTables; 349*4882a593Smuzhiyun }ATOM_MASTER_COMMAND_TABLE; 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun /****************************************************************************/ 352*4882a593Smuzhiyun // Structures used in every command table 353*4882a593Smuzhiyun /****************************************************************************/ 354*4882a593Smuzhiyun typedef struct _ATOM_TABLE_ATTRIBUTE 355*4882a593Smuzhiyun { 356*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 357*4882a593Smuzhiyun USHORT UpdatedByUtility:1; //[15]=Table updated by utility flag 358*4882a593Smuzhiyun USHORT PS_SizeInBytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), 359*4882a593Smuzhiyun USHORT WS_SizeInBytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword), 360*4882a593Smuzhiyun #else 361*4882a593Smuzhiyun USHORT WS_SizeInBytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword), 362*4882a593Smuzhiyun USHORT PS_SizeInBytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword), 363*4882a593Smuzhiyun USHORT UpdatedByUtility:1; //[15]=Table updated by utility flag 364*4882a593Smuzhiyun #endif 365*4882a593Smuzhiyun }ATOM_TABLE_ATTRIBUTE; 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun typedef union _ATOM_TABLE_ATTRIBUTE_ACCESS 368*4882a593Smuzhiyun { 369*4882a593Smuzhiyun ATOM_TABLE_ATTRIBUTE sbfAccess; 370*4882a593Smuzhiyun USHORT susAccess; 371*4882a593Smuzhiyun }ATOM_TABLE_ATTRIBUTE_ACCESS; 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun /****************************************************************************/ 374*4882a593Smuzhiyun // Common header for all command tables. 375*4882a593Smuzhiyun // Every table pointed by _ATOM_MASTER_COMMAND_TABLE has this common header. 376*4882a593Smuzhiyun // And the pointer actually points to this header. 377*4882a593Smuzhiyun /****************************************************************************/ 378*4882a593Smuzhiyun typedef struct _ATOM_COMMON_ROM_COMMAND_TABLE_HEADER 379*4882a593Smuzhiyun { 380*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER CommonHeader; 381*4882a593Smuzhiyun ATOM_TABLE_ATTRIBUTE TableAttribute; 382*4882a593Smuzhiyun }ATOM_COMMON_ROM_COMMAND_TABLE_HEADER; 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun /****************************************************************************/ 385*4882a593Smuzhiyun // Structures used by ComputeMemoryEnginePLLTable 386*4882a593Smuzhiyun /****************************************************************************/ 387*4882a593Smuzhiyun #define COMPUTE_MEMORY_PLL_PARAM 1 388*4882a593Smuzhiyun #define COMPUTE_ENGINE_PLL_PARAM 2 389*4882a593Smuzhiyun #define ADJUST_MC_SETTING_PARAM 3 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun /****************************************************************************/ 392*4882a593Smuzhiyun // Structures used by AdjustMemoryControllerTable 393*4882a593Smuzhiyun /****************************************************************************/ 394*4882a593Smuzhiyun typedef struct _ATOM_ADJUST_MEMORY_CLOCK_FREQ 395*4882a593Smuzhiyun { 396*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 397*4882a593Smuzhiyun ULONG ulPointerReturnFlag:1; // BYTE_3[7]=1 - Return the pointer to the right Data Block; BYTE_3[7]=0 - Program the right Data Block 398*4882a593Smuzhiyun ULONG ulMemoryModuleNumber:7; // BYTE_3[6:0] 399*4882a593Smuzhiyun ULONG ulClockFreq:24; 400*4882a593Smuzhiyun #else 401*4882a593Smuzhiyun ULONG ulClockFreq:24; 402*4882a593Smuzhiyun ULONG ulMemoryModuleNumber:7; // BYTE_3[6:0] 403*4882a593Smuzhiyun ULONG ulPointerReturnFlag:1; // BYTE_3[7]=1 - Return the pointer to the right Data Block; BYTE_3[7]=0 - Program the right Data Block 404*4882a593Smuzhiyun #endif 405*4882a593Smuzhiyun }ATOM_ADJUST_MEMORY_CLOCK_FREQ; 406*4882a593Smuzhiyun #define POINTER_RETURN_FLAG 0x80 407*4882a593Smuzhiyun 408*4882a593Smuzhiyun typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS 409*4882a593Smuzhiyun { 410*4882a593Smuzhiyun ULONG ulClock; //When returen, it's the re-calculated clock based on given Fb_div Post_Div and ref_div 411*4882a593Smuzhiyun UCHAR ucAction; //0:reserved //1:Memory //2:Engine 412*4882a593Smuzhiyun UCHAR ucReserved; //may expand to return larger Fbdiv later 413*4882a593Smuzhiyun UCHAR ucFbDiv; //return value 414*4882a593Smuzhiyun UCHAR ucPostDiv; //return value 415*4882a593Smuzhiyun }COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS; 416*4882a593Smuzhiyun 417*4882a593Smuzhiyun typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V2 418*4882a593Smuzhiyun { 419*4882a593Smuzhiyun ULONG ulClock; //When return, [23:0] return real clock 420*4882a593Smuzhiyun UCHAR ucAction; //0:reserved;COMPUTE_MEMORY_PLL_PARAM:Memory;COMPUTE_ENGINE_PLL_PARAM:Engine. it return ref_div to be written to register 421*4882a593Smuzhiyun USHORT usFbDiv; //return Feedback value to be written to register 422*4882a593Smuzhiyun UCHAR ucPostDiv; //return post div to be written to register 423*4882a593Smuzhiyun }COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V2; 424*4882a593Smuzhiyun #define COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_PS_ALLOCATION COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun #define SET_CLOCK_FREQ_MASK 0x00FFFFFF //Clock change tables only take bit [23:0] as the requested clock value 428*4882a593Smuzhiyun #define USE_NON_BUS_CLOCK_MASK 0x01000000 //Applicable to both memory and engine clock change, when set, it uses another clock as the temporary clock (engine uses memory and vice versa) 429*4882a593Smuzhiyun #define USE_MEMORY_SELF_REFRESH_MASK 0x02000000 //Only applicable to memory clock change, when set, using memory self refresh during clock transition 430*4882a593Smuzhiyun #define SKIP_INTERNAL_MEMORY_PARAMETER_CHANGE 0x04000000 //Only applicable to memory clock change, when set, the table will skip predefined internal memory parameter change 431*4882a593Smuzhiyun #define FIRST_TIME_CHANGE_CLOCK 0x08000000 //Applicable to both memory and engine clock change,when set, it means this is 1st time to change clock after ASIC bootup 432*4882a593Smuzhiyun #define SKIP_SW_PROGRAM_PLL 0x10000000 //Applicable to both memory and engine clock change, when set, it means the table will not program SPLL/MPLL 433*4882a593Smuzhiyun #define USE_SS_ENABLED_PIXEL_CLOCK USE_NON_BUS_CLOCK_MASK 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun #define b3USE_NON_BUS_CLOCK_MASK 0x01 //Applicable to both memory and engine clock change, when set, it uses another clock as the temporary clock (engine uses memory and vice versa) 436*4882a593Smuzhiyun #define b3USE_MEMORY_SELF_REFRESH 0x02 //Only applicable to memory clock change, when set, using memory self refresh during clock transition 437*4882a593Smuzhiyun #define b3SKIP_INTERNAL_MEMORY_PARAMETER_CHANGE 0x04 //Only applicable to memory clock change, when set, the table will skip predefined internal memory parameter change 438*4882a593Smuzhiyun #define b3FIRST_TIME_CHANGE_CLOCK 0x08 //Applicable to both memory and engine clock change,when set, it means this is 1st time to change clock after ASIC bootup 439*4882a593Smuzhiyun #define b3SKIP_SW_PROGRAM_PLL 0x10 //Applicable to both memory and engine clock change, when set, it means the table will not program SPLL/MPLL 440*4882a593Smuzhiyun 441*4882a593Smuzhiyun typedef struct _ATOM_COMPUTE_CLOCK_FREQ 442*4882a593Smuzhiyun { 443*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 444*4882a593Smuzhiyun ULONG ulComputeClockFlag:8; // =1: COMPUTE_MEMORY_PLL_PARAM, =2: COMPUTE_ENGINE_PLL_PARAM 445*4882a593Smuzhiyun ULONG ulClockFreq:24; // in unit of 10kHz 446*4882a593Smuzhiyun #else 447*4882a593Smuzhiyun ULONG ulClockFreq:24; // in unit of 10kHz 448*4882a593Smuzhiyun ULONG ulComputeClockFlag:8; // =1: COMPUTE_MEMORY_PLL_PARAM, =2: COMPUTE_ENGINE_PLL_PARAM 449*4882a593Smuzhiyun #endif 450*4882a593Smuzhiyun }ATOM_COMPUTE_CLOCK_FREQ; 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun typedef struct _ATOM_S_MPLL_FB_DIVIDER 453*4882a593Smuzhiyun { 454*4882a593Smuzhiyun USHORT usFbDivFrac; 455*4882a593Smuzhiyun USHORT usFbDiv; 456*4882a593Smuzhiyun }ATOM_S_MPLL_FB_DIVIDER; 457*4882a593Smuzhiyun 458*4882a593Smuzhiyun typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V3 459*4882a593Smuzhiyun { 460*4882a593Smuzhiyun union 461*4882a593Smuzhiyun { 462*4882a593Smuzhiyun ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter 463*4882a593Smuzhiyun ULONG ulClockParams; //ULONG access for BE 464*4882a593Smuzhiyun ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter 465*4882a593Smuzhiyun }; 466*4882a593Smuzhiyun UCHAR ucRefDiv; //Output Parameter 467*4882a593Smuzhiyun UCHAR ucPostDiv; //Output Parameter 468*4882a593Smuzhiyun UCHAR ucCntlFlag; //Output Parameter 469*4882a593Smuzhiyun UCHAR ucReserved; 470*4882a593Smuzhiyun }COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V3; 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun // ucCntlFlag 473*4882a593Smuzhiyun #define ATOM_PLL_CNTL_FLAG_PLL_POST_DIV_EN 1 474*4882a593Smuzhiyun #define ATOM_PLL_CNTL_FLAG_MPLL_VCO_MODE 2 475*4882a593Smuzhiyun #define ATOM_PLL_CNTL_FLAG_FRACTION_DISABLE 4 476*4882a593Smuzhiyun #define ATOM_PLL_CNTL_FLAG_SPLL_ISPARE_9 8 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun // V4 are only used for APU which PLL outside GPU 480*4882a593Smuzhiyun typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V4 481*4882a593Smuzhiyun { 482*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 483*4882a593Smuzhiyun ULONG ucPostDiv:8; //return parameter: post divider which is used to program to register directly 484*4882a593Smuzhiyun ULONG ulClock:24; //Input= target clock, output = actual clock 485*4882a593Smuzhiyun #else 486*4882a593Smuzhiyun ULONG ulClock:24; //Input= target clock, output = actual clock 487*4882a593Smuzhiyun ULONG ucPostDiv:8; //return parameter: post divider which is used to program to register directly 488*4882a593Smuzhiyun #endif 489*4882a593Smuzhiyun }COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V4; 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V5 492*4882a593Smuzhiyun { 493*4882a593Smuzhiyun union 494*4882a593Smuzhiyun { 495*4882a593Smuzhiyun ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter 496*4882a593Smuzhiyun ULONG ulClockParams; //ULONG access for BE 497*4882a593Smuzhiyun ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter 498*4882a593Smuzhiyun }; 499*4882a593Smuzhiyun UCHAR ucRefDiv; //Output Parameter 500*4882a593Smuzhiyun UCHAR ucPostDiv; //Output Parameter 501*4882a593Smuzhiyun union 502*4882a593Smuzhiyun { 503*4882a593Smuzhiyun UCHAR ucCntlFlag; //Output Flags 504*4882a593Smuzhiyun UCHAR ucInputFlag; //Input Flags. ucInputFlag[0] - Strobe(1)/Performance(0) mode 505*4882a593Smuzhiyun }; 506*4882a593Smuzhiyun UCHAR ucReserved; 507*4882a593Smuzhiyun }COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V5; 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun 510*4882a593Smuzhiyun typedef struct _COMPUTE_GPU_CLOCK_INPUT_PARAMETERS_V1_6 511*4882a593Smuzhiyun { 512*4882a593Smuzhiyun ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter 513*4882a593Smuzhiyun ULONG ulReserved[2]; 514*4882a593Smuzhiyun }COMPUTE_GPU_CLOCK_INPUT_PARAMETERS_V1_6; 515*4882a593Smuzhiyun 516*4882a593Smuzhiyun //ATOM_COMPUTE_CLOCK_FREQ.ulComputeClockFlag 517*4882a593Smuzhiyun #define COMPUTE_GPUCLK_INPUT_FLAG_CLK_TYPE_MASK 0x0f 518*4882a593Smuzhiyun #define COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK 0x00 519*4882a593Smuzhiyun #define COMPUTE_GPUCLK_INPUT_FLAG_SCLK 0x01 520*4882a593Smuzhiyun 521*4882a593Smuzhiyun typedef struct _COMPUTE_GPU_CLOCK_OUTPUT_PARAMETERS_V1_6 522*4882a593Smuzhiyun { 523*4882a593Smuzhiyun COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V4 ulClock; //Output Parameter: ucPostDiv=DFS divider 524*4882a593Smuzhiyun ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter: PLL FB divider 525*4882a593Smuzhiyun UCHAR ucPllRefDiv; //Output Parameter: PLL ref divider 526*4882a593Smuzhiyun UCHAR ucPllPostDiv; //Output Parameter: PLL post divider 527*4882a593Smuzhiyun UCHAR ucPllCntlFlag; //Output Flags: control flag 528*4882a593Smuzhiyun UCHAR ucReserved; 529*4882a593Smuzhiyun }COMPUTE_GPU_CLOCK_OUTPUT_PARAMETERS_V1_6; 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun //ucPllCntlFlag 532*4882a593Smuzhiyun #define SPLL_CNTL_FLAG_VCO_MODE_MASK 0x03 533*4882a593Smuzhiyun 534*4882a593Smuzhiyun 535*4882a593Smuzhiyun // ucInputFlag 536*4882a593Smuzhiyun #define ATOM_PLL_INPUT_FLAG_PLL_STROBE_MODE_EN 1 // 1-StrobeMode, 0-PerformanceMode 537*4882a593Smuzhiyun 538*4882a593Smuzhiyun // use for ComputeMemoryClockParamTable 539*4882a593Smuzhiyun typedef struct _COMPUTE_MEMORY_CLOCK_PARAM_PARAMETERS_V2_1 540*4882a593Smuzhiyun { 541*4882a593Smuzhiyun union 542*4882a593Smuzhiyun { 543*4882a593Smuzhiyun ULONG ulClock; 544*4882a593Smuzhiyun ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output:UPPER_WORD=FB_DIV_INTEGER, LOWER_WORD=FB_DIV_FRAC shl (16-FB_FRACTION_BITS) 545*4882a593Smuzhiyun }; 546*4882a593Smuzhiyun UCHAR ucDllSpeed; //Output 547*4882a593Smuzhiyun UCHAR ucPostDiv; //Output 548*4882a593Smuzhiyun union{ 549*4882a593Smuzhiyun UCHAR ucInputFlag; //Input : ATOM_PLL_INPUT_FLAG_PLL_STROBE_MODE_EN: 1-StrobeMode, 0-PerformanceMode 550*4882a593Smuzhiyun UCHAR ucPllCntlFlag; //Output: 551*4882a593Smuzhiyun }; 552*4882a593Smuzhiyun UCHAR ucBWCntl; 553*4882a593Smuzhiyun }COMPUTE_MEMORY_CLOCK_PARAM_PARAMETERS_V2_1; 554*4882a593Smuzhiyun 555*4882a593Smuzhiyun // definition of ucInputFlag 556*4882a593Smuzhiyun #define MPLL_INPUT_FLAG_STROBE_MODE_EN 0x01 557*4882a593Smuzhiyun // definition of ucPllCntlFlag 558*4882a593Smuzhiyun #define MPLL_CNTL_FLAG_VCO_MODE_MASK 0x03 559*4882a593Smuzhiyun #define MPLL_CNTL_FLAG_BYPASS_DQ_PLL 0x04 560*4882a593Smuzhiyun #define MPLL_CNTL_FLAG_QDR_ENABLE 0x08 561*4882a593Smuzhiyun #define MPLL_CNTL_FLAG_AD_HALF_RATE 0x10 562*4882a593Smuzhiyun 563*4882a593Smuzhiyun //MPLL_CNTL_FLAG_BYPASS_AD_PLL has a wrong name, should be BYPASS_DQ_PLL 564*4882a593Smuzhiyun #define MPLL_CNTL_FLAG_BYPASS_AD_PLL 0x04 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun typedef struct _DYNAMICE_MEMORY_SETTINGS_PARAMETER 567*4882a593Smuzhiyun { 568*4882a593Smuzhiyun ATOM_COMPUTE_CLOCK_FREQ ulClock; 569*4882a593Smuzhiyun ULONG ulReserved[2]; 570*4882a593Smuzhiyun }DYNAMICE_MEMORY_SETTINGS_PARAMETER; 571*4882a593Smuzhiyun 572*4882a593Smuzhiyun typedef struct _DYNAMICE_ENGINE_SETTINGS_PARAMETER 573*4882a593Smuzhiyun { 574*4882a593Smuzhiyun ATOM_COMPUTE_CLOCK_FREQ ulClock; 575*4882a593Smuzhiyun ULONG ulMemoryClock; 576*4882a593Smuzhiyun ULONG ulReserved; 577*4882a593Smuzhiyun }DYNAMICE_ENGINE_SETTINGS_PARAMETER; 578*4882a593Smuzhiyun 579*4882a593Smuzhiyun /****************************************************************************/ 580*4882a593Smuzhiyun // Structures used by SetEngineClockTable 581*4882a593Smuzhiyun /****************************************************************************/ 582*4882a593Smuzhiyun typedef struct _SET_ENGINE_CLOCK_PARAMETERS 583*4882a593Smuzhiyun { 584*4882a593Smuzhiyun ULONG ulTargetEngineClock; //In 10Khz unit 585*4882a593Smuzhiyun }SET_ENGINE_CLOCK_PARAMETERS; 586*4882a593Smuzhiyun 587*4882a593Smuzhiyun typedef struct _SET_ENGINE_CLOCK_PS_ALLOCATION 588*4882a593Smuzhiyun { 589*4882a593Smuzhiyun ULONG ulTargetEngineClock; //In 10Khz unit 590*4882a593Smuzhiyun COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_PS_ALLOCATION sReserved; 591*4882a593Smuzhiyun }SET_ENGINE_CLOCK_PS_ALLOCATION; 592*4882a593Smuzhiyun 593*4882a593Smuzhiyun /****************************************************************************/ 594*4882a593Smuzhiyun // Structures used by SetMemoryClockTable 595*4882a593Smuzhiyun /****************************************************************************/ 596*4882a593Smuzhiyun typedef struct _SET_MEMORY_CLOCK_PARAMETERS 597*4882a593Smuzhiyun { 598*4882a593Smuzhiyun ULONG ulTargetMemoryClock; //In 10Khz unit 599*4882a593Smuzhiyun }SET_MEMORY_CLOCK_PARAMETERS; 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun typedef struct _SET_MEMORY_CLOCK_PS_ALLOCATION 602*4882a593Smuzhiyun { 603*4882a593Smuzhiyun ULONG ulTargetMemoryClock; //In 10Khz unit 604*4882a593Smuzhiyun COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_PS_ALLOCATION sReserved; 605*4882a593Smuzhiyun }SET_MEMORY_CLOCK_PS_ALLOCATION; 606*4882a593Smuzhiyun 607*4882a593Smuzhiyun /****************************************************************************/ 608*4882a593Smuzhiyun // Structures used by ASIC_Init.ctb 609*4882a593Smuzhiyun /****************************************************************************/ 610*4882a593Smuzhiyun typedef struct _ASIC_INIT_PARAMETERS 611*4882a593Smuzhiyun { 612*4882a593Smuzhiyun ULONG ulDefaultEngineClock; //In 10Khz unit 613*4882a593Smuzhiyun ULONG ulDefaultMemoryClock; //In 10Khz unit 614*4882a593Smuzhiyun }ASIC_INIT_PARAMETERS; 615*4882a593Smuzhiyun 616*4882a593Smuzhiyun typedef struct _ASIC_INIT_PS_ALLOCATION 617*4882a593Smuzhiyun { 618*4882a593Smuzhiyun ASIC_INIT_PARAMETERS sASICInitClocks; 619*4882a593Smuzhiyun SET_ENGINE_CLOCK_PS_ALLOCATION sReserved; //Caller doesn't need to init this structure 620*4882a593Smuzhiyun }ASIC_INIT_PS_ALLOCATION; 621*4882a593Smuzhiyun 622*4882a593Smuzhiyun /****************************************************************************/ 623*4882a593Smuzhiyun // Structure used by DynamicClockGatingTable.ctb 624*4882a593Smuzhiyun /****************************************************************************/ 625*4882a593Smuzhiyun typedef struct _DYNAMIC_CLOCK_GATING_PARAMETERS 626*4882a593Smuzhiyun { 627*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 628*4882a593Smuzhiyun UCHAR ucPadding[3]; 629*4882a593Smuzhiyun }DYNAMIC_CLOCK_GATING_PARAMETERS; 630*4882a593Smuzhiyun #define DYNAMIC_CLOCK_GATING_PS_ALLOCATION DYNAMIC_CLOCK_GATING_PARAMETERS 631*4882a593Smuzhiyun 632*4882a593Smuzhiyun /****************************************************************************/ 633*4882a593Smuzhiyun // Structure used by EnableDispPowerGatingTable.ctb 634*4882a593Smuzhiyun /****************************************************************************/ 635*4882a593Smuzhiyun typedef struct _ENABLE_DISP_POWER_GATING_PARAMETERS_V2_1 636*4882a593Smuzhiyun { 637*4882a593Smuzhiyun UCHAR ucDispPipeId; // ATOM_CRTC1, ATOM_CRTC2, ... 638*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 639*4882a593Smuzhiyun UCHAR ucPadding[2]; 640*4882a593Smuzhiyun }ENABLE_DISP_POWER_GATING_PARAMETERS_V2_1; 641*4882a593Smuzhiyun 642*4882a593Smuzhiyun /****************************************************************************/ 643*4882a593Smuzhiyun // Structure used by EnableASIC_StaticPwrMgtTable.ctb 644*4882a593Smuzhiyun /****************************************************************************/ 645*4882a593Smuzhiyun typedef struct _ENABLE_ASIC_STATIC_PWR_MGT_PARAMETERS 646*4882a593Smuzhiyun { 647*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 648*4882a593Smuzhiyun UCHAR ucPadding[3]; 649*4882a593Smuzhiyun }ENABLE_ASIC_STATIC_PWR_MGT_PARAMETERS; 650*4882a593Smuzhiyun #define ENABLE_ASIC_STATIC_PWR_MGT_PS_ALLOCATION ENABLE_ASIC_STATIC_PWR_MGT_PARAMETERS 651*4882a593Smuzhiyun 652*4882a593Smuzhiyun /****************************************************************************/ 653*4882a593Smuzhiyun // Structures used by DAC_LoadDetectionTable.ctb 654*4882a593Smuzhiyun /****************************************************************************/ 655*4882a593Smuzhiyun typedef struct _DAC_LOAD_DETECTION_PARAMETERS 656*4882a593Smuzhiyun { 657*4882a593Smuzhiyun USHORT usDeviceID; //{ATOM_DEVICE_CRTx_SUPPORT,ATOM_DEVICE_TVx_SUPPORT,ATOM_DEVICE_CVx_SUPPORT} 658*4882a593Smuzhiyun UCHAR ucDacType; //{ATOM_DAC_A,ATOM_DAC_B, ATOM_EXT_DAC} 659*4882a593Smuzhiyun UCHAR ucMisc; //Valid only when table revision =1.3 and above 660*4882a593Smuzhiyun }DAC_LOAD_DETECTION_PARAMETERS; 661*4882a593Smuzhiyun 662*4882a593Smuzhiyun // DAC_LOAD_DETECTION_PARAMETERS.ucMisc 663*4882a593Smuzhiyun #define DAC_LOAD_MISC_YPrPb 0x01 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun typedef struct _DAC_LOAD_DETECTION_PS_ALLOCATION 666*4882a593Smuzhiyun { 667*4882a593Smuzhiyun DAC_LOAD_DETECTION_PARAMETERS sDacload; 668*4882a593Smuzhiyun ULONG Reserved[2];// Don't set this one, allocation for EXT DAC 669*4882a593Smuzhiyun }DAC_LOAD_DETECTION_PS_ALLOCATION; 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun /****************************************************************************/ 672*4882a593Smuzhiyun // Structures used by DAC1EncoderControlTable.ctb and DAC2EncoderControlTable.ctb 673*4882a593Smuzhiyun /****************************************************************************/ 674*4882a593Smuzhiyun typedef struct _DAC_ENCODER_CONTROL_PARAMETERS 675*4882a593Smuzhiyun { 676*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 677*4882a593Smuzhiyun UCHAR ucDacStandard; // See definition of ATOM_DACx_xxx, For DEC3.0, bit 7 used as internal flag to indicate DAC2 (==1) or DAC1 (==0) 678*4882a593Smuzhiyun UCHAR ucAction; // 0: turn off encoder 679*4882a593Smuzhiyun // 1: setup and turn on encoder 680*4882a593Smuzhiyun // 7: ATOM_ENCODER_INIT Initialize DAC 681*4882a593Smuzhiyun }DAC_ENCODER_CONTROL_PARAMETERS; 682*4882a593Smuzhiyun 683*4882a593Smuzhiyun #define DAC_ENCODER_CONTROL_PS_ALLOCATION DAC_ENCODER_CONTROL_PARAMETERS 684*4882a593Smuzhiyun 685*4882a593Smuzhiyun /****************************************************************************/ 686*4882a593Smuzhiyun // Structures used by DIG1EncoderControlTable 687*4882a593Smuzhiyun // DIG2EncoderControlTable 688*4882a593Smuzhiyun // ExternalEncoderControlTable 689*4882a593Smuzhiyun /****************************************************************************/ 690*4882a593Smuzhiyun typedef struct _DIG_ENCODER_CONTROL_PARAMETERS 691*4882a593Smuzhiyun { 692*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 693*4882a593Smuzhiyun UCHAR ucConfig; 694*4882a593Smuzhiyun // [2] Link Select: 695*4882a593Smuzhiyun // =0: PHY linkA if bfLane<3 696*4882a593Smuzhiyun // =1: PHY linkB if bfLanes<3 697*4882a593Smuzhiyun // =0: PHY linkA+B if bfLanes=3 698*4882a593Smuzhiyun // [3] Transmitter Sel 699*4882a593Smuzhiyun // =0: UNIPHY or PCIEPHY 700*4882a593Smuzhiyun // =1: LVTMA 701*4882a593Smuzhiyun UCHAR ucAction; // =0: turn off encoder 702*4882a593Smuzhiyun // =1: turn on encoder 703*4882a593Smuzhiyun UCHAR ucEncoderMode; 704*4882a593Smuzhiyun // =0: DP encoder 705*4882a593Smuzhiyun // =1: LVDS encoder 706*4882a593Smuzhiyun // =2: DVI encoder 707*4882a593Smuzhiyun // =3: HDMI encoder 708*4882a593Smuzhiyun // =4: SDVO encoder 709*4882a593Smuzhiyun UCHAR ucLaneNum; // how many lanes to enable 710*4882a593Smuzhiyun UCHAR ucReserved[2]; 711*4882a593Smuzhiyun }DIG_ENCODER_CONTROL_PARAMETERS; 712*4882a593Smuzhiyun #define DIG_ENCODER_CONTROL_PS_ALLOCATION DIG_ENCODER_CONTROL_PARAMETERS 713*4882a593Smuzhiyun #define EXTERNAL_ENCODER_CONTROL_PARAMETER DIG_ENCODER_CONTROL_PARAMETERS 714*4882a593Smuzhiyun 715*4882a593Smuzhiyun //ucConfig 716*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_DPLINKRATE_MASK 0x01 717*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_DPLINKRATE_1_62GHZ 0x00 718*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_DPLINKRATE_2_70GHZ 0x01 719*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_DPLINKRATE_5_40GHZ 0x02 720*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_LINK_SEL_MASK 0x04 721*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_LINKA 0x00 722*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_LINKB 0x04 723*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_LINKA_B ATOM_TRANSMITTER_CONFIG_LINKA 724*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_LINKB_A ATOM_ENCODER_CONFIG_LINKB 725*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_TRANSMITTER_SEL_MASK 0x08 726*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_UNIPHY 0x00 727*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_LVTMA 0x08 728*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_TRANSMITTER1 0x00 729*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_TRANSMITTER2 0x08 730*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_DIGB 0x80 // VBIOS Internal use, outside SW should set this bit=0 731*4882a593Smuzhiyun // ucAction 732*4882a593Smuzhiyun // ATOM_ENABLE: Enable Encoder 733*4882a593Smuzhiyun // ATOM_DISABLE: Disable Encoder 734*4882a593Smuzhiyun 735*4882a593Smuzhiyun //ucEncoderMode 736*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_DP 0 737*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_LVDS 1 738*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_DVI 2 739*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_HDMI 3 740*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_SDVO 4 741*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_DP_AUDIO 5 742*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_TV 13 743*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_CV 14 744*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_CRT 15 745*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_DVO 16 746*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_DP_SST ATOM_ENCODER_MODE_DP // For DP1.2 747*4882a593Smuzhiyun #define ATOM_ENCODER_MODE_DP_MST 5 // For DP1.2 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun typedef struct _ATOM_DIG_ENCODER_CONFIG_V2 750*4882a593Smuzhiyun { 751*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 752*4882a593Smuzhiyun UCHAR ucReserved1:2; 753*4882a593Smuzhiyun UCHAR ucTransmitterSel:2; // =0: UniphyAB, =1: UniphyCD =2: UniphyEF 754*4882a593Smuzhiyun UCHAR ucLinkSel:1; // =0: linkA/C/E =1: linkB/D/F 755*4882a593Smuzhiyun UCHAR ucReserved:1; 756*4882a593Smuzhiyun UCHAR ucDPLinkRate:1; // =0: 1.62Ghz, =1: 2.7Ghz 757*4882a593Smuzhiyun #else 758*4882a593Smuzhiyun UCHAR ucDPLinkRate:1; // =0: 1.62Ghz, =1: 2.7Ghz 759*4882a593Smuzhiyun UCHAR ucReserved:1; 760*4882a593Smuzhiyun UCHAR ucLinkSel:1; // =0: linkA/C/E =1: linkB/D/F 761*4882a593Smuzhiyun UCHAR ucTransmitterSel:2; // =0: UniphyAB, =1: UniphyCD =2: UniphyEF 762*4882a593Smuzhiyun UCHAR ucReserved1:2; 763*4882a593Smuzhiyun #endif 764*4882a593Smuzhiyun }ATOM_DIG_ENCODER_CONFIG_V2; 765*4882a593Smuzhiyun 766*4882a593Smuzhiyun 767*4882a593Smuzhiyun typedef struct _DIG_ENCODER_CONTROL_PARAMETERS_V2 768*4882a593Smuzhiyun { 769*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 770*4882a593Smuzhiyun ATOM_DIG_ENCODER_CONFIG_V2 acConfig; 771*4882a593Smuzhiyun UCHAR ucAction; 772*4882a593Smuzhiyun UCHAR ucEncoderMode; 773*4882a593Smuzhiyun // =0: DP encoder 774*4882a593Smuzhiyun // =1: LVDS encoder 775*4882a593Smuzhiyun // =2: DVI encoder 776*4882a593Smuzhiyun // =3: HDMI encoder 777*4882a593Smuzhiyun // =4: SDVO encoder 778*4882a593Smuzhiyun UCHAR ucLaneNum; // how many lanes to enable 779*4882a593Smuzhiyun UCHAR ucStatus; // = DP_LINK_TRAINING_COMPLETE or DP_LINK_TRAINING_INCOMPLETE, only used by VBIOS with command ATOM_ENCODER_CMD_QUERY_DP_LINK_TRAINING_STATUS 780*4882a593Smuzhiyun UCHAR ucReserved; 781*4882a593Smuzhiyun }DIG_ENCODER_CONTROL_PARAMETERS_V2; 782*4882a593Smuzhiyun 783*4882a593Smuzhiyun //ucConfig 784*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_DPLINKRATE_MASK 0x01 785*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_DPLINKRATE_1_62GHZ 0x00 786*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_DPLINKRATE_2_70GHZ 0x01 787*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_LINK_SEL_MASK 0x04 788*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_LINKA 0x00 789*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_LINKB 0x04 790*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_TRANSMITTER_SEL_MASK 0x18 791*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_TRANSMITTER1 0x00 792*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_TRANSMITTER2 0x08 793*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V2_TRANSMITTER3 0x10 794*4882a593Smuzhiyun 795*4882a593Smuzhiyun // ucAction: 796*4882a593Smuzhiyun // ATOM_DISABLE 797*4882a593Smuzhiyun // ATOM_ENABLE 798*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_DP_LINK_TRAINING_START 0x08 799*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1 0x09 800*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2 0x0a 801*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3 0x13 802*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE 0x0b 803*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_DP_VIDEO_OFF 0x0c 804*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_DP_VIDEO_ON 0x0d 805*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_QUERY_DP_LINK_TRAINING_STATUS 0x0e 806*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_SETUP 0x0f 807*4882a593Smuzhiyun #define ATOM_ENCODER_CMD_SETUP_PANEL_MODE 0x10 808*4882a593Smuzhiyun 809*4882a593Smuzhiyun // ucStatus 810*4882a593Smuzhiyun #define ATOM_ENCODER_STATUS_LINK_TRAINING_COMPLETE 0x10 811*4882a593Smuzhiyun #define ATOM_ENCODER_STATUS_LINK_TRAINING_INCOMPLETE 0x00 812*4882a593Smuzhiyun 813*4882a593Smuzhiyun //ucTableFormatRevision=1 814*4882a593Smuzhiyun //ucTableContentRevision=3 815*4882a593Smuzhiyun // Following function ENABLE sub-function will be used by driver when TMDS/HDMI/LVDS is used, disable function will be used by driver 816*4882a593Smuzhiyun typedef struct _ATOM_DIG_ENCODER_CONFIG_V3 817*4882a593Smuzhiyun { 818*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 819*4882a593Smuzhiyun UCHAR ucReserved1:1; 820*4882a593Smuzhiyun UCHAR ucDigSel:3; // =0/1/2/3/4/5: DIG0/1/2/3/4/5 (In register spec also referred as DIGA/B/C/D/E/F) 821*4882a593Smuzhiyun UCHAR ucReserved:3; 822*4882a593Smuzhiyun UCHAR ucDPLinkRate:1; // =0: 1.62Ghz, =1: 2.7Ghz 823*4882a593Smuzhiyun #else 824*4882a593Smuzhiyun UCHAR ucDPLinkRate:1; // =0: 1.62Ghz, =1: 2.7Ghz 825*4882a593Smuzhiyun UCHAR ucReserved:3; 826*4882a593Smuzhiyun UCHAR ucDigSel:3; // =0/1/2/3/4/5: DIG0/1/2/3/4/5 (In register spec also referred as DIGA/B/C/D/E/F) 827*4882a593Smuzhiyun UCHAR ucReserved1:1; 828*4882a593Smuzhiyun #endif 829*4882a593Smuzhiyun }ATOM_DIG_ENCODER_CONFIG_V3; 830*4882a593Smuzhiyun 831*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_DPLINKRATE_MASK 0x03 832*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ 0x00 833*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ 0x01 834*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_ENCODER_SEL 0x70 835*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_DIG0_ENCODER 0x00 836*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_DIG1_ENCODER 0x10 837*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_DIG2_ENCODER 0x20 838*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_DIG3_ENCODER 0x30 839*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_DIG4_ENCODER 0x40 840*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V3_DIG5_ENCODER 0x50 841*4882a593Smuzhiyun 842*4882a593Smuzhiyun typedef struct _DIG_ENCODER_CONTROL_PARAMETERS_V3 843*4882a593Smuzhiyun { 844*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 845*4882a593Smuzhiyun ATOM_DIG_ENCODER_CONFIG_V3 acConfig; 846*4882a593Smuzhiyun UCHAR ucAction; 847*4882a593Smuzhiyun union { 848*4882a593Smuzhiyun UCHAR ucEncoderMode; 849*4882a593Smuzhiyun // =0: DP encoder 850*4882a593Smuzhiyun // =1: LVDS encoder 851*4882a593Smuzhiyun // =2: DVI encoder 852*4882a593Smuzhiyun // =3: HDMI encoder 853*4882a593Smuzhiyun // =4: SDVO encoder 854*4882a593Smuzhiyun // =5: DP audio 855*4882a593Smuzhiyun UCHAR ucPanelMode; // only valid when ucAction == ATOM_ENCODER_CMD_SETUP_PANEL_MODE 856*4882a593Smuzhiyun // =0: external DP 857*4882a593Smuzhiyun // =1: internal DP2 858*4882a593Smuzhiyun // =0x11: internal DP1 for NutMeg/Travis DP translator 859*4882a593Smuzhiyun }; 860*4882a593Smuzhiyun UCHAR ucLaneNum; // how many lanes to enable 861*4882a593Smuzhiyun UCHAR ucBitPerColor; // only valid for DP mode when ucAction = ATOM_ENCODER_CMD_SETUP 862*4882a593Smuzhiyun UCHAR ucReserved; 863*4882a593Smuzhiyun }DIG_ENCODER_CONTROL_PARAMETERS_V3; 864*4882a593Smuzhiyun 865*4882a593Smuzhiyun //ucTableFormatRevision=1 866*4882a593Smuzhiyun //ucTableContentRevision=4 867*4882a593Smuzhiyun // start from NI 868*4882a593Smuzhiyun // Following function ENABLE sub-function will be used by driver when TMDS/HDMI/LVDS is used, disable function will be used by driver 869*4882a593Smuzhiyun typedef struct _ATOM_DIG_ENCODER_CONFIG_V4 870*4882a593Smuzhiyun { 871*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 872*4882a593Smuzhiyun UCHAR ucReserved1:1; 873*4882a593Smuzhiyun UCHAR ucDigSel:3; // =0/1/2/3/4/5: DIG0/1/2/3/4/5 (In register spec also referred as DIGA/B/C/D/E/F) 874*4882a593Smuzhiyun UCHAR ucReserved:2; 875*4882a593Smuzhiyun UCHAR ucDPLinkRate:2; // =0: 1.62Ghz, =1: 2.7Ghz, 2=5.4Ghz <= Changed comparing to previous version 876*4882a593Smuzhiyun #else 877*4882a593Smuzhiyun UCHAR ucDPLinkRate:2; // =0: 1.62Ghz, =1: 2.7Ghz, 2=5.4Ghz <= Changed comparing to previous version 878*4882a593Smuzhiyun UCHAR ucReserved:2; 879*4882a593Smuzhiyun UCHAR ucDigSel:3; // =0/1/2/3/4/5: DIG0/1/2/3/4/5 (In register spec also referred as DIGA/B/C/D/E/F) 880*4882a593Smuzhiyun UCHAR ucReserved1:1; 881*4882a593Smuzhiyun #endif 882*4882a593Smuzhiyun }ATOM_DIG_ENCODER_CONFIG_V4; 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DPLINKRATE_MASK 0x03 885*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DPLINKRATE_1_62GHZ 0x00 886*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DPLINKRATE_2_70GHZ 0x01 887*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DPLINKRATE_5_40GHZ 0x02 888*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DPLINKRATE_3_24GHZ 0x03 889*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_ENCODER_SEL 0x70 890*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DIG0_ENCODER 0x00 891*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DIG1_ENCODER 0x10 892*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DIG2_ENCODER 0x20 893*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DIG3_ENCODER 0x30 894*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DIG4_ENCODER 0x40 895*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DIG5_ENCODER 0x50 896*4882a593Smuzhiyun #define ATOM_ENCODER_CONFIG_V4_DIG6_ENCODER 0x60 897*4882a593Smuzhiyun 898*4882a593Smuzhiyun typedef struct _DIG_ENCODER_CONTROL_PARAMETERS_V4 899*4882a593Smuzhiyun { 900*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 901*4882a593Smuzhiyun union{ 902*4882a593Smuzhiyun ATOM_DIG_ENCODER_CONFIG_V4 acConfig; 903*4882a593Smuzhiyun UCHAR ucConfig; 904*4882a593Smuzhiyun }; 905*4882a593Smuzhiyun UCHAR ucAction; 906*4882a593Smuzhiyun union { 907*4882a593Smuzhiyun UCHAR ucEncoderMode; 908*4882a593Smuzhiyun // =0: DP encoder 909*4882a593Smuzhiyun // =1: LVDS encoder 910*4882a593Smuzhiyun // =2: DVI encoder 911*4882a593Smuzhiyun // =3: HDMI encoder 912*4882a593Smuzhiyun // =4: SDVO encoder 913*4882a593Smuzhiyun // =5: DP audio 914*4882a593Smuzhiyun UCHAR ucPanelMode; // only valid when ucAction == ATOM_ENCODER_CMD_SETUP_PANEL_MODE 915*4882a593Smuzhiyun // =0: external DP 916*4882a593Smuzhiyun // =1: internal DP2 917*4882a593Smuzhiyun // =0x11: internal DP1 for NutMeg/Travis DP translator 918*4882a593Smuzhiyun }; 919*4882a593Smuzhiyun UCHAR ucLaneNum; // how many lanes to enable 920*4882a593Smuzhiyun UCHAR ucBitPerColor; // only valid for DP mode when ucAction = ATOM_ENCODER_CMD_SETUP 921*4882a593Smuzhiyun UCHAR ucHPD_ID; // HPD ID (1-6). =0 means to skip HDP programming. New comparing to previous version 922*4882a593Smuzhiyun }DIG_ENCODER_CONTROL_PARAMETERS_V4; 923*4882a593Smuzhiyun 924*4882a593Smuzhiyun // define ucBitPerColor: 925*4882a593Smuzhiyun #define PANEL_BPC_UNDEFINE 0x00 926*4882a593Smuzhiyun #define PANEL_6BIT_PER_COLOR 0x01 927*4882a593Smuzhiyun #define PANEL_8BIT_PER_COLOR 0x02 928*4882a593Smuzhiyun #define PANEL_10BIT_PER_COLOR 0x03 929*4882a593Smuzhiyun #define PANEL_12BIT_PER_COLOR 0x04 930*4882a593Smuzhiyun #define PANEL_16BIT_PER_COLOR 0x05 931*4882a593Smuzhiyun 932*4882a593Smuzhiyun //define ucPanelMode 933*4882a593Smuzhiyun #define DP_PANEL_MODE_EXTERNAL_DP_MODE 0x00 934*4882a593Smuzhiyun #define DP_PANEL_MODE_INTERNAL_DP2_MODE 0x01 935*4882a593Smuzhiyun #define DP_PANEL_MODE_INTERNAL_DP1_MODE 0x11 936*4882a593Smuzhiyun 937*4882a593Smuzhiyun /****************************************************************************/ 938*4882a593Smuzhiyun // Structures used by UNIPHYTransmitterControlTable 939*4882a593Smuzhiyun // LVTMATransmitterControlTable 940*4882a593Smuzhiyun // DVOOutputControlTable 941*4882a593Smuzhiyun /****************************************************************************/ 942*4882a593Smuzhiyun typedef struct _ATOM_DP_VS_MODE 943*4882a593Smuzhiyun { 944*4882a593Smuzhiyun UCHAR ucLaneSel; 945*4882a593Smuzhiyun UCHAR ucLaneSet; 946*4882a593Smuzhiyun }ATOM_DP_VS_MODE; 947*4882a593Smuzhiyun 948*4882a593Smuzhiyun typedef struct _DIG_TRANSMITTER_CONTROL_PARAMETERS 949*4882a593Smuzhiyun { 950*4882a593Smuzhiyun union 951*4882a593Smuzhiyun { 952*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 953*4882a593Smuzhiyun USHORT usInitInfo; // when init uniphy,lower 8bit is used for connector type defined in objectid.h 954*4882a593Smuzhiyun ATOM_DP_VS_MODE asMode; // DP Voltage swing mode 955*4882a593Smuzhiyun }; 956*4882a593Smuzhiyun UCHAR ucConfig; 957*4882a593Smuzhiyun // [0]=0: 4 lane Link, 958*4882a593Smuzhiyun // =1: 8 lane Link ( Dual Links TMDS ) 959*4882a593Smuzhiyun // [1]=0: InCoherent mode 960*4882a593Smuzhiyun // =1: Coherent Mode 961*4882a593Smuzhiyun // [2] Link Select: 962*4882a593Smuzhiyun // =0: PHY linkA if bfLane<3 963*4882a593Smuzhiyun // =1: PHY linkB if bfLanes<3 964*4882a593Smuzhiyun // =0: PHY linkA+B if bfLanes=3 965*4882a593Smuzhiyun // [5:4]PCIE lane Sel 966*4882a593Smuzhiyun // =0: lane 0~3 or 0~7 967*4882a593Smuzhiyun // =1: lane 4~7 968*4882a593Smuzhiyun // =2: lane 8~11 or 8~15 969*4882a593Smuzhiyun // =3: lane 12~15 970*4882a593Smuzhiyun UCHAR ucAction; // =0: turn off encoder 971*4882a593Smuzhiyun // =1: turn on encoder 972*4882a593Smuzhiyun UCHAR ucReserved[4]; 973*4882a593Smuzhiyun }DIG_TRANSMITTER_CONTROL_PARAMETERS; 974*4882a593Smuzhiyun 975*4882a593Smuzhiyun #define DIG_TRANSMITTER_CONTROL_PS_ALLOCATION DIG_TRANSMITTER_CONTROL_PARAMETERS 976*4882a593Smuzhiyun 977*4882a593Smuzhiyun //ucInitInfo 978*4882a593Smuzhiyun #define ATOM_TRAMITTER_INITINFO_CONNECTOR_MASK 0x00ff 979*4882a593Smuzhiyun 980*4882a593Smuzhiyun //ucConfig 981*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_8LANE_LINK 0x01 982*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_COHERENT 0x02 983*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LINK_SEL_MASK 0x04 984*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LINKA 0x00 985*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LINKB 0x04 986*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LINKA_B 0x00 987*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LINKB_A 0x04 988*4882a593Smuzhiyun 989*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_ENCODER_SEL_MASK 0x08 // only used when ATOM_TRANSMITTER_ACTION_ENABLE 990*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER 0x00 // only used when ATOM_TRANSMITTER_ACTION_ENABLE 991*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER 0x08 // only used when ATOM_TRANSMITTER_ACTION_ENABLE 992*4882a593Smuzhiyun 993*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_CLKSRC_MASK 0x30 994*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL 0x00 995*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_CLKSRC_PCIE 0x20 996*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_CLKSRC_XTALIN 0x30 997*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LANE_SEL_MASK 0xc0 998*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LANE_0_3 0x00 999*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LANE_0_7 0x00 1000*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LANE_4_7 0x40 1001*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LANE_8_11 0x80 1002*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LANE_8_15 0x80 1003*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_LANE_12_15 0xc0 1004*4882a593Smuzhiyun 1005*4882a593Smuzhiyun //ucAction 1006*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_DISABLE 0 1007*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_ENABLE 1 1008*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_LCD_BLOFF 2 1009*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_LCD_BLON 3 1010*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_BL_BRIGHTNESS_CONTROL 4 1011*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_START 5 1012*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_STOP 6 1013*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_INIT 7 1014*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT 8 1015*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT 9 1016*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_SETUP 10 1017*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH 11 1018*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_POWER_ON 12 1019*4882a593Smuzhiyun #define ATOM_TRANSMITTER_ACTION_POWER_OFF 13 1020*4882a593Smuzhiyun 1021*4882a593Smuzhiyun // Following are used for DigTransmitterControlTable ver1.2 1022*4882a593Smuzhiyun typedef struct _ATOM_DIG_TRANSMITTER_CONFIG_V2 1023*4882a593Smuzhiyun { 1024*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 1025*4882a593Smuzhiyun UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB ) 1026*4882a593Smuzhiyun // =1 Dig Transmitter 2 ( Uniphy CD ) 1027*4882a593Smuzhiyun // =2 Dig Transmitter 3 ( Uniphy EF ) 1028*4882a593Smuzhiyun UCHAR ucReserved:1; 1029*4882a593Smuzhiyun UCHAR fDPConnector:1; //bit4=0: DP connector =1: None DP connector 1030*4882a593Smuzhiyun UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA( DIG inst0 ). =1: Data/clk path source from DIGB ( DIG inst1 ) 1031*4882a593Smuzhiyun UCHAR ucLinkSel:1; //bit2=0: Uniphy LINKA or C or E when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is A or C or E 1032*4882a593Smuzhiyun // =1: Uniphy LINKB or D or F when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is B or D or F 1033*4882a593Smuzhiyun 1034*4882a593Smuzhiyun UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode ) 1035*4882a593Smuzhiyun UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector 1036*4882a593Smuzhiyun #else 1037*4882a593Smuzhiyun UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector 1038*4882a593Smuzhiyun UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode ) 1039*4882a593Smuzhiyun UCHAR ucLinkSel:1; //bit2=0: Uniphy LINKA or C or E when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is A or C or E 1040*4882a593Smuzhiyun // =1: Uniphy LINKB or D or F when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is B or D or F 1041*4882a593Smuzhiyun UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA( DIG inst0 ). =1: Data/clk path source from DIGB ( DIG inst1 ) 1042*4882a593Smuzhiyun UCHAR fDPConnector:1; //bit4=0: DP connector =1: None DP connector 1043*4882a593Smuzhiyun UCHAR ucReserved:1; 1044*4882a593Smuzhiyun UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB ) 1045*4882a593Smuzhiyun // =1 Dig Transmitter 2 ( Uniphy CD ) 1046*4882a593Smuzhiyun // =2 Dig Transmitter 3 ( Uniphy EF ) 1047*4882a593Smuzhiyun #endif 1048*4882a593Smuzhiyun }ATOM_DIG_TRANSMITTER_CONFIG_V2; 1049*4882a593Smuzhiyun 1050*4882a593Smuzhiyun //ucConfig 1051*4882a593Smuzhiyun //Bit0 1052*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_DUAL_LINK_CONNECTOR 0x01 1053*4882a593Smuzhiyun 1054*4882a593Smuzhiyun //Bit1 1055*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_COHERENT 0x02 1056*4882a593Smuzhiyun 1057*4882a593Smuzhiyun //Bit2 1058*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_LINK_SEL_MASK 0x04 1059*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_LINKA 0x00 1060*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_LINKB 0x04 1061*4882a593Smuzhiyun 1062*4882a593Smuzhiyun // Bit3 1063*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_ENCODER_SEL_MASK 0x08 1064*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_DIG1_ENCODER 0x00 // only used when ucAction == ATOM_TRANSMITTER_ACTION_ENABLE or ATOM_TRANSMITTER_ACTION_SETUP 1065*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_DIG2_ENCODER 0x08 // only used when ucAction == ATOM_TRANSMITTER_ACTION_ENABLE or ATOM_TRANSMITTER_ACTION_SETUP 1066*4882a593Smuzhiyun 1067*4882a593Smuzhiyun // Bit4 1068*4882a593Smuzhiyun #define ATOM_TRASMITTER_CONFIG_V2_DP_CONNECTOR 0x10 1069*4882a593Smuzhiyun 1070*4882a593Smuzhiyun // Bit7:6 1071*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_TRANSMITTER_SEL_MASK 0xC0 1072*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_TRANSMITTER1 0x00 //AB 1073*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_TRANSMITTER2 0x40 //CD 1074*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V2_TRANSMITTER3 0x80 //EF 1075*4882a593Smuzhiyun 1076*4882a593Smuzhiyun typedef struct _DIG_TRANSMITTER_CONTROL_PARAMETERS_V2 1077*4882a593Smuzhiyun { 1078*4882a593Smuzhiyun union 1079*4882a593Smuzhiyun { 1080*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 1081*4882a593Smuzhiyun USHORT usInitInfo; // when init uniphy,lower 8bit is used for connector type defined in objectid.h 1082*4882a593Smuzhiyun ATOM_DP_VS_MODE asMode; // DP Voltage swing mode 1083*4882a593Smuzhiyun }; 1084*4882a593Smuzhiyun ATOM_DIG_TRANSMITTER_CONFIG_V2 acConfig; 1085*4882a593Smuzhiyun UCHAR ucAction; // define as ATOM_TRANSMITER_ACTION_XXX 1086*4882a593Smuzhiyun UCHAR ucReserved[4]; 1087*4882a593Smuzhiyun }DIG_TRANSMITTER_CONTROL_PARAMETERS_V2; 1088*4882a593Smuzhiyun 1089*4882a593Smuzhiyun typedef struct _ATOM_DIG_TRANSMITTER_CONFIG_V3 1090*4882a593Smuzhiyun { 1091*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 1092*4882a593Smuzhiyun UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB ) 1093*4882a593Smuzhiyun // =1 Dig Transmitter 2 ( Uniphy CD ) 1094*4882a593Smuzhiyun // =2 Dig Transmitter 3 ( Uniphy EF ) 1095*4882a593Smuzhiyun UCHAR ucRefClkSource:2; //bit5:4: PPLL1 =0, PPLL2=1, EXT_CLK=2 1096*4882a593Smuzhiyun UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA/C/E. =1: Data/clk path source from DIGB/D/F 1097*4882a593Smuzhiyun UCHAR ucLinkSel:1; //bit2=0: Uniphy LINKA or C or E when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is A or C or E 1098*4882a593Smuzhiyun // =1: Uniphy LINKB or D or F when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is B or D or F 1099*4882a593Smuzhiyun UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode ) 1100*4882a593Smuzhiyun UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector 1101*4882a593Smuzhiyun #else 1102*4882a593Smuzhiyun UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector 1103*4882a593Smuzhiyun UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode ) 1104*4882a593Smuzhiyun UCHAR ucLinkSel:1; //bit2=0: Uniphy LINKA or C or E when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is A or C or E 1105*4882a593Smuzhiyun // =1: Uniphy LINKB or D or F when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is B or D or F 1106*4882a593Smuzhiyun UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA/C/E. =1: Data/clk path source from DIGB/D/F 1107*4882a593Smuzhiyun UCHAR ucRefClkSource:2; //bit5:4: PPLL1 =0, PPLL2=1, EXT_CLK=2 1108*4882a593Smuzhiyun UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB ) 1109*4882a593Smuzhiyun // =1 Dig Transmitter 2 ( Uniphy CD ) 1110*4882a593Smuzhiyun // =2 Dig Transmitter 3 ( Uniphy EF ) 1111*4882a593Smuzhiyun #endif 1112*4882a593Smuzhiyun }ATOM_DIG_TRANSMITTER_CONFIG_V3; 1113*4882a593Smuzhiyun 1114*4882a593Smuzhiyun 1115*4882a593Smuzhiyun typedef struct _DIG_TRANSMITTER_CONTROL_PARAMETERS_V3 1116*4882a593Smuzhiyun { 1117*4882a593Smuzhiyun union 1118*4882a593Smuzhiyun { 1119*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 1120*4882a593Smuzhiyun USHORT usInitInfo; // when init uniphy,lower 8bit is used for connector type defined in objectid.h 1121*4882a593Smuzhiyun ATOM_DP_VS_MODE asMode; // DP Voltage swing mode 1122*4882a593Smuzhiyun }; 1123*4882a593Smuzhiyun ATOM_DIG_TRANSMITTER_CONFIG_V3 acConfig; 1124*4882a593Smuzhiyun UCHAR ucAction; // define as ATOM_TRANSMITER_ACTION_XXX 1125*4882a593Smuzhiyun UCHAR ucLaneNum; 1126*4882a593Smuzhiyun UCHAR ucReserved[3]; 1127*4882a593Smuzhiyun }DIG_TRANSMITTER_CONTROL_PARAMETERS_V3; 1128*4882a593Smuzhiyun 1129*4882a593Smuzhiyun //ucConfig 1130*4882a593Smuzhiyun //Bit0 1131*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_DUAL_LINK_CONNECTOR 0x01 1132*4882a593Smuzhiyun 1133*4882a593Smuzhiyun //Bit1 1134*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_COHERENT 0x02 1135*4882a593Smuzhiyun 1136*4882a593Smuzhiyun //Bit2 1137*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_LINK_SEL_MASK 0x04 1138*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_LINKA 0x00 1139*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_LINKB 0x04 1140*4882a593Smuzhiyun 1141*4882a593Smuzhiyun // Bit3 1142*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_ENCODER_SEL_MASK 0x08 1143*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_DIG1_ENCODER 0x00 1144*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_DIG2_ENCODER 0x08 1145*4882a593Smuzhiyun 1146*4882a593Smuzhiyun // Bit5:4 1147*4882a593Smuzhiyun #define ATOM_TRASMITTER_CONFIG_V3_REFCLK_SEL_MASK 0x30 1148*4882a593Smuzhiyun #define ATOM_TRASMITTER_CONFIG_V3_P1PLL 0x00 1149*4882a593Smuzhiyun #define ATOM_TRASMITTER_CONFIG_V3_P2PLL 0x10 1150*4882a593Smuzhiyun #define ATOM_TRASMITTER_CONFIG_V3_REFCLK_SRC_EXT 0x20 1151*4882a593Smuzhiyun 1152*4882a593Smuzhiyun // Bit7:6 1153*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_TRANSMITTER_SEL_MASK 0xC0 1154*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_TRANSMITTER1 0x00 //AB 1155*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_TRANSMITTER2 0x40 //CD 1156*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V3_TRANSMITTER3 0x80 //EF 1157*4882a593Smuzhiyun 1158*4882a593Smuzhiyun 1159*4882a593Smuzhiyun /****************************************************************************/ 1160*4882a593Smuzhiyun // Structures used by UNIPHYTransmitterControlTable V1.4 1161*4882a593Smuzhiyun // ASIC Families: NI 1162*4882a593Smuzhiyun // ucTableFormatRevision=1 1163*4882a593Smuzhiyun // ucTableContentRevision=4 1164*4882a593Smuzhiyun /****************************************************************************/ 1165*4882a593Smuzhiyun typedef struct _ATOM_DP_VS_MODE_V4 1166*4882a593Smuzhiyun { 1167*4882a593Smuzhiyun UCHAR ucLaneSel; 1168*4882a593Smuzhiyun union 1169*4882a593Smuzhiyun { 1170*4882a593Smuzhiyun UCHAR ucLaneSet; 1171*4882a593Smuzhiyun struct { 1172*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 1173*4882a593Smuzhiyun UCHAR ucPOST_CURSOR2:2; //Bit[7:6] Post Cursor2 Level <= New in V4 1174*4882a593Smuzhiyun UCHAR ucPRE_EMPHASIS:3; //Bit[5:3] Pre-emphasis Level 1175*4882a593Smuzhiyun UCHAR ucVOLTAGE_SWING:3; //Bit[2:0] Voltage Swing Level 1176*4882a593Smuzhiyun #else 1177*4882a593Smuzhiyun UCHAR ucVOLTAGE_SWING:3; //Bit[2:0] Voltage Swing Level 1178*4882a593Smuzhiyun UCHAR ucPRE_EMPHASIS:3; //Bit[5:3] Pre-emphasis Level 1179*4882a593Smuzhiyun UCHAR ucPOST_CURSOR2:2; //Bit[7:6] Post Cursor2 Level <= New in V4 1180*4882a593Smuzhiyun #endif 1181*4882a593Smuzhiyun }; 1182*4882a593Smuzhiyun }; 1183*4882a593Smuzhiyun }ATOM_DP_VS_MODE_V4; 1184*4882a593Smuzhiyun 1185*4882a593Smuzhiyun typedef struct _ATOM_DIG_TRANSMITTER_CONFIG_V4 1186*4882a593Smuzhiyun { 1187*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 1188*4882a593Smuzhiyun UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB ) 1189*4882a593Smuzhiyun // =1 Dig Transmitter 2 ( Uniphy CD ) 1190*4882a593Smuzhiyun // =2 Dig Transmitter 3 ( Uniphy EF ) 1191*4882a593Smuzhiyun UCHAR ucRefClkSource:2; //bit5:4: PPLL1 =0, PPLL2=1, DCPLL=2, EXT_CLK=3 <= New 1192*4882a593Smuzhiyun UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA/C/E. =1: Data/clk path source from DIGB/D/F 1193*4882a593Smuzhiyun UCHAR ucLinkSel:1; //bit2=0: Uniphy LINKA or C or E when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is A or C or E 1194*4882a593Smuzhiyun // =1: Uniphy LINKB or D or F when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is B or D or F 1195*4882a593Smuzhiyun UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode ) 1196*4882a593Smuzhiyun UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector 1197*4882a593Smuzhiyun #else 1198*4882a593Smuzhiyun UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector 1199*4882a593Smuzhiyun UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode ) 1200*4882a593Smuzhiyun UCHAR ucLinkSel:1; //bit2=0: Uniphy LINKA or C or E when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is A or C or E 1201*4882a593Smuzhiyun // =1: Uniphy LINKB or D or F when fDualLinkConnector=0. when fDualLinkConnector=1, it means master link of dual link is B or D or F 1202*4882a593Smuzhiyun UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA/C/E. =1: Data/clk path source from DIGB/D/F 1203*4882a593Smuzhiyun UCHAR ucRefClkSource:2; //bit5:4: PPLL1 =0, PPLL2=1, DCPLL=2, EXT_CLK=3 <= New 1204*4882a593Smuzhiyun UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB ) 1205*4882a593Smuzhiyun // =1 Dig Transmitter 2 ( Uniphy CD ) 1206*4882a593Smuzhiyun // =2 Dig Transmitter 3 ( Uniphy EF ) 1207*4882a593Smuzhiyun #endif 1208*4882a593Smuzhiyun }ATOM_DIG_TRANSMITTER_CONFIG_V4; 1209*4882a593Smuzhiyun 1210*4882a593Smuzhiyun typedef struct _DIG_TRANSMITTER_CONTROL_PARAMETERS_V4 1211*4882a593Smuzhiyun { 1212*4882a593Smuzhiyun union 1213*4882a593Smuzhiyun { 1214*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 1215*4882a593Smuzhiyun USHORT usInitInfo; // when init uniphy,lower 8bit is used for connector type defined in objectid.h 1216*4882a593Smuzhiyun ATOM_DP_VS_MODE_V4 asMode; // DP Voltage swing mode Redefined comparing to previous version 1217*4882a593Smuzhiyun }; 1218*4882a593Smuzhiyun union 1219*4882a593Smuzhiyun { 1220*4882a593Smuzhiyun ATOM_DIG_TRANSMITTER_CONFIG_V4 acConfig; 1221*4882a593Smuzhiyun UCHAR ucConfig; 1222*4882a593Smuzhiyun }; 1223*4882a593Smuzhiyun UCHAR ucAction; // define as ATOM_TRANSMITER_ACTION_XXX 1224*4882a593Smuzhiyun UCHAR ucLaneNum; 1225*4882a593Smuzhiyun UCHAR ucReserved[3]; 1226*4882a593Smuzhiyun }DIG_TRANSMITTER_CONTROL_PARAMETERS_V4; 1227*4882a593Smuzhiyun 1228*4882a593Smuzhiyun //ucConfig 1229*4882a593Smuzhiyun //Bit0 1230*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_DUAL_LINK_CONNECTOR 0x01 1231*4882a593Smuzhiyun //Bit1 1232*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_COHERENT 0x02 1233*4882a593Smuzhiyun //Bit2 1234*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_LINK_SEL_MASK 0x04 1235*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_LINKA 0x00 1236*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_LINKB 0x04 1237*4882a593Smuzhiyun // Bit3 1238*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_ENCODER_SEL_MASK 0x08 1239*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_DIG1_ENCODER 0x00 1240*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_DIG2_ENCODER 0x08 1241*4882a593Smuzhiyun // Bit5:4 1242*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_REFCLK_SEL_MASK 0x30 1243*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_P1PLL 0x00 1244*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_P2PLL 0x10 1245*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_DCPLL 0x20 // New in _V4 1246*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_REFCLK_SRC_EXT 0x30 // Changed comparing to V3 1247*4882a593Smuzhiyun // Bit7:6 1248*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_TRANSMITTER_SEL_MASK 0xC0 1249*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_TRANSMITTER1 0x00 //AB 1250*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_TRANSMITTER2 0x40 //CD 1251*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V4_TRANSMITTER3 0x80 //EF 1252*4882a593Smuzhiyun 1253*4882a593Smuzhiyun 1254*4882a593Smuzhiyun typedef struct _ATOM_DIG_TRANSMITTER_CONFIG_V5 1255*4882a593Smuzhiyun { 1256*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 1257*4882a593Smuzhiyun UCHAR ucReservd1:1; 1258*4882a593Smuzhiyun UCHAR ucHPDSel:3; 1259*4882a593Smuzhiyun UCHAR ucPhyClkSrcId:2; 1260*4882a593Smuzhiyun UCHAR ucCoherentMode:1; 1261*4882a593Smuzhiyun UCHAR ucReserved:1; 1262*4882a593Smuzhiyun #else 1263*4882a593Smuzhiyun UCHAR ucReserved:1; 1264*4882a593Smuzhiyun UCHAR ucCoherentMode:1; 1265*4882a593Smuzhiyun UCHAR ucPhyClkSrcId:2; 1266*4882a593Smuzhiyun UCHAR ucHPDSel:3; 1267*4882a593Smuzhiyun UCHAR ucReservd1:1; 1268*4882a593Smuzhiyun #endif 1269*4882a593Smuzhiyun }ATOM_DIG_TRANSMITTER_CONFIG_V5; 1270*4882a593Smuzhiyun 1271*4882a593Smuzhiyun typedef struct _DIG_TRANSMITTER_CONTROL_PARAMETERS_V1_5 1272*4882a593Smuzhiyun { 1273*4882a593Smuzhiyun USHORT usSymClock; // Encoder Clock in 10kHz,(DP mode)= linkclock/10, (TMDS/LVDS/HDMI)= pixel clock, (HDMI deep color), =pixel clock * deep_color_ratio 1274*4882a593Smuzhiyun UCHAR ucPhyId; // 0=UNIPHYA, 1=UNIPHYB, 2=UNIPHYC, 3=UNIPHYD, 4= UNIPHYE 5=UNIPHYF 1275*4882a593Smuzhiyun UCHAR ucAction; // define as ATOM_TRANSMITER_ACTION_xxx 1276*4882a593Smuzhiyun UCHAR ucLaneNum; // indicate lane number 1-8 1277*4882a593Smuzhiyun UCHAR ucConnObjId; // Connector Object Id defined in ObjectId.h 1278*4882a593Smuzhiyun UCHAR ucDigMode; // indicate DIG mode 1279*4882a593Smuzhiyun union{ 1280*4882a593Smuzhiyun ATOM_DIG_TRANSMITTER_CONFIG_V5 asConfig; 1281*4882a593Smuzhiyun UCHAR ucConfig; 1282*4882a593Smuzhiyun }; 1283*4882a593Smuzhiyun UCHAR ucDigEncoderSel; // indicate DIG front end encoder 1284*4882a593Smuzhiyun UCHAR ucDPLaneSet; 1285*4882a593Smuzhiyun UCHAR ucReserved; 1286*4882a593Smuzhiyun UCHAR ucReserved1; 1287*4882a593Smuzhiyun }DIG_TRANSMITTER_CONTROL_PARAMETERS_V1_5; 1288*4882a593Smuzhiyun 1289*4882a593Smuzhiyun //ucPhyId 1290*4882a593Smuzhiyun #define ATOM_PHY_ID_UNIPHYA 0 1291*4882a593Smuzhiyun #define ATOM_PHY_ID_UNIPHYB 1 1292*4882a593Smuzhiyun #define ATOM_PHY_ID_UNIPHYC 2 1293*4882a593Smuzhiyun #define ATOM_PHY_ID_UNIPHYD 3 1294*4882a593Smuzhiyun #define ATOM_PHY_ID_UNIPHYE 4 1295*4882a593Smuzhiyun #define ATOM_PHY_ID_UNIPHYF 5 1296*4882a593Smuzhiyun #define ATOM_PHY_ID_UNIPHYG 6 1297*4882a593Smuzhiyun 1298*4882a593Smuzhiyun // ucDigEncoderSel 1299*4882a593Smuzhiyun #define ATOM_TRANMSITTER_V5__DIGA_SEL 0x01 1300*4882a593Smuzhiyun #define ATOM_TRANMSITTER_V5__DIGB_SEL 0x02 1301*4882a593Smuzhiyun #define ATOM_TRANMSITTER_V5__DIGC_SEL 0x04 1302*4882a593Smuzhiyun #define ATOM_TRANMSITTER_V5__DIGD_SEL 0x08 1303*4882a593Smuzhiyun #define ATOM_TRANMSITTER_V5__DIGE_SEL 0x10 1304*4882a593Smuzhiyun #define ATOM_TRANMSITTER_V5__DIGF_SEL 0x20 1305*4882a593Smuzhiyun #define ATOM_TRANMSITTER_V5__DIGG_SEL 0x40 1306*4882a593Smuzhiyun 1307*4882a593Smuzhiyun // ucDigMode 1308*4882a593Smuzhiyun #define ATOM_TRANSMITTER_DIGMODE_V5_DP 0 1309*4882a593Smuzhiyun #define ATOM_TRANSMITTER_DIGMODE_V5_LVDS 1 1310*4882a593Smuzhiyun #define ATOM_TRANSMITTER_DIGMODE_V5_DVI 2 1311*4882a593Smuzhiyun #define ATOM_TRANSMITTER_DIGMODE_V5_HDMI 3 1312*4882a593Smuzhiyun #define ATOM_TRANSMITTER_DIGMODE_V5_SDVO 4 1313*4882a593Smuzhiyun #define ATOM_TRANSMITTER_DIGMODE_V5_DP_MST 5 1314*4882a593Smuzhiyun 1315*4882a593Smuzhiyun // ucDPLaneSet 1316*4882a593Smuzhiyun #define DP_LANE_SET__0DB_0_4V 0x00 1317*4882a593Smuzhiyun #define DP_LANE_SET__0DB_0_6V 0x01 1318*4882a593Smuzhiyun #define DP_LANE_SET__0DB_0_8V 0x02 1319*4882a593Smuzhiyun #define DP_LANE_SET__0DB_1_2V 0x03 1320*4882a593Smuzhiyun #define DP_LANE_SET__3_5DB_0_4V 0x08 1321*4882a593Smuzhiyun #define DP_LANE_SET__3_5DB_0_6V 0x09 1322*4882a593Smuzhiyun #define DP_LANE_SET__3_5DB_0_8V 0x0a 1323*4882a593Smuzhiyun #define DP_LANE_SET__6DB_0_4V 0x10 1324*4882a593Smuzhiyun #define DP_LANE_SET__6DB_0_6V 0x11 1325*4882a593Smuzhiyun #define DP_LANE_SET__9_5DB_0_4V 0x18 1326*4882a593Smuzhiyun 1327*4882a593Smuzhiyun // ATOM_DIG_TRANSMITTER_CONFIG_V5 asConfig; 1328*4882a593Smuzhiyun // Bit1 1329*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_COHERENT 0x02 1330*4882a593Smuzhiyun 1331*4882a593Smuzhiyun // Bit3:2 1332*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_REFCLK_SEL_MASK 0x0c 1333*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_REFCLK_SEL_SHIFT 0x02 1334*4882a593Smuzhiyun 1335*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_P1PLL 0x00 1336*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_P2PLL 0x04 1337*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_P0PLL 0x08 1338*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_REFCLK_SRC_EXT 0x0c 1339*4882a593Smuzhiyun // Bit6:4 1340*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_HPD_SEL_MASK 0x70 1341*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_HPD_SEL_SHIFT 0x04 1342*4882a593Smuzhiyun 1343*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_NO_HPD_SEL 0x00 1344*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_HPD1_SEL 0x10 1345*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_HPD2_SEL 0x20 1346*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_HPD3_SEL 0x30 1347*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_HPD4_SEL 0x40 1348*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_HPD5_SEL 0x50 1349*4882a593Smuzhiyun #define ATOM_TRANSMITTER_CONFIG_V5_HPD6_SEL 0x60 1350*4882a593Smuzhiyun 1351*4882a593Smuzhiyun #define DIG_TRANSMITTER_CONTROL_PS_ALLOCATION_V1_5 DIG_TRANSMITTER_CONTROL_PARAMETERS_V1_5 1352*4882a593Smuzhiyun 1353*4882a593Smuzhiyun 1354*4882a593Smuzhiyun /****************************************************************************/ 1355*4882a593Smuzhiyun // Structures used by ExternalEncoderControlTable V1.3 1356*4882a593Smuzhiyun // ASIC Families: Evergreen, Llano, NI 1357*4882a593Smuzhiyun // ucTableFormatRevision=1 1358*4882a593Smuzhiyun // ucTableContentRevision=3 1359*4882a593Smuzhiyun /****************************************************************************/ 1360*4882a593Smuzhiyun 1361*4882a593Smuzhiyun typedef struct _EXTERNAL_ENCODER_CONTROL_PARAMETERS_V3 1362*4882a593Smuzhiyun { 1363*4882a593Smuzhiyun union{ 1364*4882a593Smuzhiyun USHORT usPixelClock; // pixel clock in 10Khz, valid when ucAction=SETUP/ENABLE_OUTPUT 1365*4882a593Smuzhiyun USHORT usConnectorId; // connector id, valid when ucAction = INIT 1366*4882a593Smuzhiyun }; 1367*4882a593Smuzhiyun UCHAR ucConfig; // indicate which encoder, and DP link rate when ucAction = SETUP/ENABLE_OUTPUT 1368*4882a593Smuzhiyun UCHAR ucAction; // 1369*4882a593Smuzhiyun UCHAR ucEncoderMode; // encoder mode, only used when ucAction = SETUP/ENABLE_OUTPUT 1370*4882a593Smuzhiyun UCHAR ucLaneNum; // lane number, only used when ucAction = SETUP/ENABLE_OUTPUT 1371*4882a593Smuzhiyun UCHAR ucBitPerColor; // output bit per color, only valid when ucAction = SETUP/ENABLE_OUTPUT and ucEncodeMode= DP 1372*4882a593Smuzhiyun UCHAR ucReserved; 1373*4882a593Smuzhiyun }EXTERNAL_ENCODER_CONTROL_PARAMETERS_V3; 1374*4882a593Smuzhiyun 1375*4882a593Smuzhiyun // ucAction 1376*4882a593Smuzhiyun #define EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT 0x00 1377*4882a593Smuzhiyun #define EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT 0x01 1378*4882a593Smuzhiyun #define EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT 0x07 1379*4882a593Smuzhiyun #define EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP 0x0f 1380*4882a593Smuzhiyun #define EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF 0x10 1381*4882a593Smuzhiyun #define EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING 0x11 1382*4882a593Smuzhiyun #define EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION 0x12 1383*4882a593Smuzhiyun #define EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP 0x14 1384*4882a593Smuzhiyun 1385*4882a593Smuzhiyun // ucConfig 1386*4882a593Smuzhiyun #define EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_MASK 0x03 1387*4882a593Smuzhiyun #define EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ 0x00 1388*4882a593Smuzhiyun #define EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ 0x01 1389*4882a593Smuzhiyun #define EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_5_40GHZ 0x02 1390*4882a593Smuzhiyun #define EXTERNAL_ENCODER_CONFIG_V3_ENCODER_SEL_MASK 0x70 1391*4882a593Smuzhiyun #define EXTERNAL_ENCODER_CONFIG_V3_ENCODER1 0x00 1392*4882a593Smuzhiyun #define EXTERNAL_ENCODER_CONFIG_V3_ENCODER2 0x10 1393*4882a593Smuzhiyun #define EXTERNAL_ENCODER_CONFIG_V3_ENCODER3 0x20 1394*4882a593Smuzhiyun 1395*4882a593Smuzhiyun typedef struct _EXTERNAL_ENCODER_CONTROL_PS_ALLOCATION_V3 1396*4882a593Smuzhiyun { 1397*4882a593Smuzhiyun EXTERNAL_ENCODER_CONTROL_PARAMETERS_V3 sExtEncoder; 1398*4882a593Smuzhiyun ULONG ulReserved[2]; 1399*4882a593Smuzhiyun }EXTERNAL_ENCODER_CONTROL_PS_ALLOCATION_V3; 1400*4882a593Smuzhiyun 1401*4882a593Smuzhiyun 1402*4882a593Smuzhiyun /****************************************************************************/ 1403*4882a593Smuzhiyun // Structures used by DAC1OuputControlTable 1404*4882a593Smuzhiyun // DAC2OuputControlTable 1405*4882a593Smuzhiyun // LVTMAOutputControlTable (Before DEC30) 1406*4882a593Smuzhiyun // TMDSAOutputControlTable (Before DEC30) 1407*4882a593Smuzhiyun /****************************************************************************/ 1408*4882a593Smuzhiyun typedef struct _DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1409*4882a593Smuzhiyun { 1410*4882a593Smuzhiyun UCHAR ucAction; // Possible input:ATOM_ENABLE||ATOMDISABLE 1411*4882a593Smuzhiyun // When the display is LCD, in addition to above: 1412*4882a593Smuzhiyun // ATOM_LCD_BLOFF|| ATOM_LCD_BLON ||ATOM_LCD_BL_BRIGHTNESS_CONTROL||ATOM_LCD_SELFTEST_START|| 1413*4882a593Smuzhiyun // ATOM_LCD_SELFTEST_STOP 1414*4882a593Smuzhiyun 1415*4882a593Smuzhiyun UCHAR aucPadding[3]; // padding to DWORD aligned 1416*4882a593Smuzhiyun }DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS; 1417*4882a593Smuzhiyun 1418*4882a593Smuzhiyun #define DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1419*4882a593Smuzhiyun 1420*4882a593Smuzhiyun 1421*4882a593Smuzhiyun #define CRT1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1422*4882a593Smuzhiyun #define CRT1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION 1423*4882a593Smuzhiyun 1424*4882a593Smuzhiyun #define CRT2_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1425*4882a593Smuzhiyun #define CRT2_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION 1426*4882a593Smuzhiyun 1427*4882a593Smuzhiyun #define CV1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1428*4882a593Smuzhiyun #define CV1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION 1429*4882a593Smuzhiyun 1430*4882a593Smuzhiyun #define TV1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1431*4882a593Smuzhiyun #define TV1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION 1432*4882a593Smuzhiyun 1433*4882a593Smuzhiyun #define DFP1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1434*4882a593Smuzhiyun #define DFP1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION 1435*4882a593Smuzhiyun 1436*4882a593Smuzhiyun #define DFP2_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1437*4882a593Smuzhiyun #define DFP2_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION 1438*4882a593Smuzhiyun 1439*4882a593Smuzhiyun #define LCD1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1440*4882a593Smuzhiyun #define LCD1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION 1441*4882a593Smuzhiyun 1442*4882a593Smuzhiyun #define DVO_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS 1443*4882a593Smuzhiyun #define DVO_OUTPUT_CONTROL_PS_ALLOCATION DIG_TRANSMITTER_CONTROL_PS_ALLOCATION 1444*4882a593Smuzhiyun #define DVO_OUTPUT_CONTROL_PARAMETERS_V3 DIG_TRANSMITTER_CONTROL_PARAMETERS 1445*4882a593Smuzhiyun 1446*4882a593Smuzhiyun /****************************************************************************/ 1447*4882a593Smuzhiyun // Structures used by BlankCRTCTable 1448*4882a593Smuzhiyun /****************************************************************************/ 1449*4882a593Smuzhiyun typedef struct _BLANK_CRTC_PARAMETERS 1450*4882a593Smuzhiyun { 1451*4882a593Smuzhiyun UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC2 1452*4882a593Smuzhiyun UCHAR ucBlanking; // ATOM_BLANKING or ATOM_BLANKINGOFF 1453*4882a593Smuzhiyun USHORT usBlackColorRCr; 1454*4882a593Smuzhiyun USHORT usBlackColorGY; 1455*4882a593Smuzhiyun USHORT usBlackColorBCb; 1456*4882a593Smuzhiyun }BLANK_CRTC_PARAMETERS; 1457*4882a593Smuzhiyun #define BLANK_CRTC_PS_ALLOCATION BLANK_CRTC_PARAMETERS 1458*4882a593Smuzhiyun 1459*4882a593Smuzhiyun /****************************************************************************/ 1460*4882a593Smuzhiyun // Structures used by EnableCRTCTable 1461*4882a593Smuzhiyun // EnableCRTCMemReqTable 1462*4882a593Smuzhiyun // UpdateCRTC_DoubleBufferRegistersTable 1463*4882a593Smuzhiyun /****************************************************************************/ 1464*4882a593Smuzhiyun typedef struct _ENABLE_CRTC_PARAMETERS 1465*4882a593Smuzhiyun { 1466*4882a593Smuzhiyun UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC2 1467*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 1468*4882a593Smuzhiyun UCHAR ucPadding[2]; 1469*4882a593Smuzhiyun }ENABLE_CRTC_PARAMETERS; 1470*4882a593Smuzhiyun #define ENABLE_CRTC_PS_ALLOCATION ENABLE_CRTC_PARAMETERS 1471*4882a593Smuzhiyun 1472*4882a593Smuzhiyun /****************************************************************************/ 1473*4882a593Smuzhiyun // Structures used by SetCRTC_OverScanTable 1474*4882a593Smuzhiyun /****************************************************************************/ 1475*4882a593Smuzhiyun typedef struct _SET_CRTC_OVERSCAN_PARAMETERS 1476*4882a593Smuzhiyun { 1477*4882a593Smuzhiyun USHORT usOverscanRight; // right 1478*4882a593Smuzhiyun USHORT usOverscanLeft; // left 1479*4882a593Smuzhiyun USHORT usOverscanBottom; // bottom 1480*4882a593Smuzhiyun USHORT usOverscanTop; // top 1481*4882a593Smuzhiyun UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC2 1482*4882a593Smuzhiyun UCHAR ucPadding[3]; 1483*4882a593Smuzhiyun }SET_CRTC_OVERSCAN_PARAMETERS; 1484*4882a593Smuzhiyun #define SET_CRTC_OVERSCAN_PS_ALLOCATION SET_CRTC_OVERSCAN_PARAMETERS 1485*4882a593Smuzhiyun 1486*4882a593Smuzhiyun /****************************************************************************/ 1487*4882a593Smuzhiyun // Structures used by SetCRTC_ReplicationTable 1488*4882a593Smuzhiyun /****************************************************************************/ 1489*4882a593Smuzhiyun typedef struct _SET_CRTC_REPLICATION_PARAMETERS 1490*4882a593Smuzhiyun { 1491*4882a593Smuzhiyun UCHAR ucH_Replication; // horizontal replication 1492*4882a593Smuzhiyun UCHAR ucV_Replication; // vertical replication 1493*4882a593Smuzhiyun UCHAR usCRTC; // ATOM_CRTC1 or ATOM_CRTC2 1494*4882a593Smuzhiyun UCHAR ucPadding; 1495*4882a593Smuzhiyun }SET_CRTC_REPLICATION_PARAMETERS; 1496*4882a593Smuzhiyun #define SET_CRTC_REPLICATION_PS_ALLOCATION SET_CRTC_REPLICATION_PARAMETERS 1497*4882a593Smuzhiyun 1498*4882a593Smuzhiyun /****************************************************************************/ 1499*4882a593Smuzhiyun // Structures used by SelectCRTC_SourceTable 1500*4882a593Smuzhiyun /****************************************************************************/ 1501*4882a593Smuzhiyun typedef struct _SELECT_CRTC_SOURCE_PARAMETERS 1502*4882a593Smuzhiyun { 1503*4882a593Smuzhiyun UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC2 1504*4882a593Smuzhiyun UCHAR ucDevice; // ATOM_DEVICE_CRT1|ATOM_DEVICE_CRT2|.... 1505*4882a593Smuzhiyun UCHAR ucPadding[2]; 1506*4882a593Smuzhiyun }SELECT_CRTC_SOURCE_PARAMETERS; 1507*4882a593Smuzhiyun #define SELECT_CRTC_SOURCE_PS_ALLOCATION SELECT_CRTC_SOURCE_PARAMETERS 1508*4882a593Smuzhiyun 1509*4882a593Smuzhiyun typedef struct _SELECT_CRTC_SOURCE_PARAMETERS_V2 1510*4882a593Smuzhiyun { 1511*4882a593Smuzhiyun UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC2 1512*4882a593Smuzhiyun UCHAR ucEncoderID; // DAC1/DAC2/TVOUT/DIG1/DIG2/DVO 1513*4882a593Smuzhiyun UCHAR ucEncodeMode; // Encoding mode, only valid when using DIG1/DIG2/DVO 1514*4882a593Smuzhiyun UCHAR ucPadding; 1515*4882a593Smuzhiyun }SELECT_CRTC_SOURCE_PARAMETERS_V2; 1516*4882a593Smuzhiyun 1517*4882a593Smuzhiyun //ucEncoderID 1518*4882a593Smuzhiyun //#define ASIC_INT_DAC1_ENCODER_ID 0x00 1519*4882a593Smuzhiyun //#define ASIC_INT_TV_ENCODER_ID 0x02 1520*4882a593Smuzhiyun //#define ASIC_INT_DIG1_ENCODER_ID 0x03 1521*4882a593Smuzhiyun //#define ASIC_INT_DAC2_ENCODER_ID 0x04 1522*4882a593Smuzhiyun //#define ASIC_EXT_TV_ENCODER_ID 0x06 1523*4882a593Smuzhiyun //#define ASIC_INT_DVO_ENCODER_ID 0x07 1524*4882a593Smuzhiyun //#define ASIC_INT_DIG2_ENCODER_ID 0x09 1525*4882a593Smuzhiyun //#define ASIC_EXT_DIG_ENCODER_ID 0x05 1526*4882a593Smuzhiyun 1527*4882a593Smuzhiyun //ucEncodeMode 1528*4882a593Smuzhiyun //#define ATOM_ENCODER_MODE_DP 0 1529*4882a593Smuzhiyun //#define ATOM_ENCODER_MODE_LVDS 1 1530*4882a593Smuzhiyun //#define ATOM_ENCODER_MODE_DVI 2 1531*4882a593Smuzhiyun //#define ATOM_ENCODER_MODE_HDMI 3 1532*4882a593Smuzhiyun //#define ATOM_ENCODER_MODE_SDVO 4 1533*4882a593Smuzhiyun //#define ATOM_ENCODER_MODE_TV 13 1534*4882a593Smuzhiyun //#define ATOM_ENCODER_MODE_CV 14 1535*4882a593Smuzhiyun //#define ATOM_ENCODER_MODE_CRT 15 1536*4882a593Smuzhiyun 1537*4882a593Smuzhiyun /****************************************************************************/ 1538*4882a593Smuzhiyun // Structures used by SetPixelClockTable 1539*4882a593Smuzhiyun // GetPixelClockTable 1540*4882a593Smuzhiyun /****************************************************************************/ 1541*4882a593Smuzhiyun //Major revision=1., Minor revision=1 1542*4882a593Smuzhiyun typedef struct _PIXEL_CLOCK_PARAMETERS 1543*4882a593Smuzhiyun { 1544*4882a593Smuzhiyun USHORT usPixelClock; // in 10kHz unit; for bios convenient = (RefClk*FB_Div)/(Ref_Div*Post_Div) 1545*4882a593Smuzhiyun // 0 means disable PPLL 1546*4882a593Smuzhiyun USHORT usRefDiv; // Reference divider 1547*4882a593Smuzhiyun USHORT usFbDiv; // feedback divider 1548*4882a593Smuzhiyun UCHAR ucPostDiv; // post divider 1549*4882a593Smuzhiyun UCHAR ucFracFbDiv; // fractional feedback divider 1550*4882a593Smuzhiyun UCHAR ucPpll; // ATOM_PPLL1 or ATOM_PPL2 1551*4882a593Smuzhiyun UCHAR ucRefDivSrc; // ATOM_PJITTER or ATO_NONPJITTER 1552*4882a593Smuzhiyun UCHAR ucCRTC; // Which CRTC uses this Ppll 1553*4882a593Smuzhiyun UCHAR ucPadding; 1554*4882a593Smuzhiyun }PIXEL_CLOCK_PARAMETERS; 1555*4882a593Smuzhiyun 1556*4882a593Smuzhiyun //Major revision=1., Minor revision=2, add ucMiscIfno 1557*4882a593Smuzhiyun //ucMiscInfo: 1558*4882a593Smuzhiyun #define MISC_FORCE_REPROG_PIXEL_CLOCK 0x1 1559*4882a593Smuzhiyun #define MISC_DEVICE_INDEX_MASK 0xF0 1560*4882a593Smuzhiyun #define MISC_DEVICE_INDEX_SHIFT 4 1561*4882a593Smuzhiyun 1562*4882a593Smuzhiyun typedef struct _PIXEL_CLOCK_PARAMETERS_V2 1563*4882a593Smuzhiyun { 1564*4882a593Smuzhiyun USHORT usPixelClock; // in 10kHz unit; for bios convenient = (RefClk*FB_Div)/(Ref_Div*Post_Div) 1565*4882a593Smuzhiyun // 0 means disable PPLL 1566*4882a593Smuzhiyun USHORT usRefDiv; // Reference divider 1567*4882a593Smuzhiyun USHORT usFbDiv; // feedback divider 1568*4882a593Smuzhiyun UCHAR ucPostDiv; // post divider 1569*4882a593Smuzhiyun UCHAR ucFracFbDiv; // fractional feedback divider 1570*4882a593Smuzhiyun UCHAR ucPpll; // ATOM_PPLL1 or ATOM_PPL2 1571*4882a593Smuzhiyun UCHAR ucRefDivSrc; // ATOM_PJITTER or ATO_NONPJITTER 1572*4882a593Smuzhiyun UCHAR ucCRTC; // Which CRTC uses this Ppll 1573*4882a593Smuzhiyun UCHAR ucMiscInfo; // Different bits for different purpose, bit [7:4] as device index, bit[0]=Force prog 1574*4882a593Smuzhiyun }PIXEL_CLOCK_PARAMETERS_V2; 1575*4882a593Smuzhiyun 1576*4882a593Smuzhiyun //Major revision=1., Minor revision=3, structure/definition change 1577*4882a593Smuzhiyun //ucEncoderMode: 1578*4882a593Smuzhiyun //ATOM_ENCODER_MODE_DP 1579*4882a593Smuzhiyun //ATOM_ENOCDER_MODE_LVDS 1580*4882a593Smuzhiyun //ATOM_ENOCDER_MODE_DVI 1581*4882a593Smuzhiyun //ATOM_ENOCDER_MODE_HDMI 1582*4882a593Smuzhiyun //ATOM_ENOCDER_MODE_SDVO 1583*4882a593Smuzhiyun //ATOM_ENCODER_MODE_TV 13 1584*4882a593Smuzhiyun //ATOM_ENCODER_MODE_CV 14 1585*4882a593Smuzhiyun //ATOM_ENCODER_MODE_CRT 15 1586*4882a593Smuzhiyun 1587*4882a593Smuzhiyun //ucDVOConfig 1588*4882a593Smuzhiyun //#define DVO_ENCODER_CONFIG_RATE_SEL 0x01 1589*4882a593Smuzhiyun //#define DVO_ENCODER_CONFIG_DDR_SPEED 0x00 1590*4882a593Smuzhiyun //#define DVO_ENCODER_CONFIG_SDR_SPEED 0x01 1591*4882a593Smuzhiyun //#define DVO_ENCODER_CONFIG_OUTPUT_SEL 0x0c 1592*4882a593Smuzhiyun //#define DVO_ENCODER_CONFIG_LOW12BIT 0x00 1593*4882a593Smuzhiyun //#define DVO_ENCODER_CONFIG_UPPER12BIT 0x04 1594*4882a593Smuzhiyun //#define DVO_ENCODER_CONFIG_24BIT 0x08 1595*4882a593Smuzhiyun 1596*4882a593Smuzhiyun //ucMiscInfo: also changed, see below 1597*4882a593Smuzhiyun #define PIXEL_CLOCK_MISC_FORCE_PROG_PPLL 0x01 1598*4882a593Smuzhiyun #define PIXEL_CLOCK_MISC_VGA_MODE 0x02 1599*4882a593Smuzhiyun #define PIXEL_CLOCK_MISC_CRTC_SEL_MASK 0x04 1600*4882a593Smuzhiyun #define PIXEL_CLOCK_MISC_CRTC_SEL_CRTC1 0x00 1601*4882a593Smuzhiyun #define PIXEL_CLOCK_MISC_CRTC_SEL_CRTC2 0x04 1602*4882a593Smuzhiyun #define PIXEL_CLOCK_MISC_USE_ENGINE_FOR_DISPCLK 0x08 1603*4882a593Smuzhiyun #define PIXEL_CLOCK_MISC_REF_DIV_SRC 0x10 1604*4882a593Smuzhiyun // V1.4 for RoadRunner 1605*4882a593Smuzhiyun #define PIXEL_CLOCK_V4_MISC_SS_ENABLE 0x10 1606*4882a593Smuzhiyun #define PIXEL_CLOCK_V4_MISC_COHERENT_MODE 0x20 1607*4882a593Smuzhiyun 1608*4882a593Smuzhiyun 1609*4882a593Smuzhiyun typedef struct _PIXEL_CLOCK_PARAMETERS_V3 1610*4882a593Smuzhiyun { 1611*4882a593Smuzhiyun USHORT usPixelClock; // in 10kHz unit; for bios convenient = (RefClk*FB_Div)/(Ref_Div*Post_Div) 1612*4882a593Smuzhiyun // 0 means disable PPLL. For VGA PPLL,make sure this value is not 0. 1613*4882a593Smuzhiyun USHORT usRefDiv; // Reference divider 1614*4882a593Smuzhiyun USHORT usFbDiv; // feedback divider 1615*4882a593Smuzhiyun UCHAR ucPostDiv; // post divider 1616*4882a593Smuzhiyun UCHAR ucFracFbDiv; // fractional feedback divider 1617*4882a593Smuzhiyun UCHAR ucPpll; // ATOM_PPLL1 or ATOM_PPL2 1618*4882a593Smuzhiyun UCHAR ucTransmitterId; // graphic encoder id defined in objectId.h 1619*4882a593Smuzhiyun union 1620*4882a593Smuzhiyun { 1621*4882a593Smuzhiyun UCHAR ucEncoderMode; // encoder type defined as ATOM_ENCODER_MODE_DP/DVI/HDMI/ 1622*4882a593Smuzhiyun UCHAR ucDVOConfig; // when use DVO, need to know SDR/DDR, 12bit or 24bit 1623*4882a593Smuzhiyun }; 1624*4882a593Smuzhiyun UCHAR ucMiscInfo; // bit[0]=Force program, bit[1]= set pclk for VGA, b[2]= CRTC sel 1625*4882a593Smuzhiyun // bit[3]=0:use PPLL for dispclk source, =1: use engine clock for dispclock source 1626*4882a593Smuzhiyun // bit[4]=0:use XTALIN as the source of reference divider,=1 use the pre-defined clock as the source of reference divider 1627*4882a593Smuzhiyun }PIXEL_CLOCK_PARAMETERS_V3; 1628*4882a593Smuzhiyun 1629*4882a593Smuzhiyun #define PIXEL_CLOCK_PARAMETERS_LAST PIXEL_CLOCK_PARAMETERS_V2 1630*4882a593Smuzhiyun #define GET_PIXEL_CLOCK_PS_ALLOCATION PIXEL_CLOCK_PARAMETERS_LAST 1631*4882a593Smuzhiyun 1632*4882a593Smuzhiyun typedef struct _PIXEL_CLOCK_PARAMETERS_V5 1633*4882a593Smuzhiyun { 1634*4882a593Smuzhiyun UCHAR ucCRTC; // ATOM_CRTC1~6, indicate the CRTC controller to 1635*4882a593Smuzhiyun // drive the pixel clock. not used for DCPLL case. 1636*4882a593Smuzhiyun union{ 1637*4882a593Smuzhiyun UCHAR ucReserved; 1638*4882a593Smuzhiyun UCHAR ucFracFbDiv; // [gphan] temporary to prevent build problem. remove it after driver code is changed. 1639*4882a593Smuzhiyun }; 1640*4882a593Smuzhiyun USHORT usPixelClock; // target the pixel clock to drive the CRTC timing 1641*4882a593Smuzhiyun // 0 means disable PPLL/DCPLL. 1642*4882a593Smuzhiyun USHORT usFbDiv; // feedback divider integer part. 1643*4882a593Smuzhiyun UCHAR ucPostDiv; // post divider. 1644*4882a593Smuzhiyun UCHAR ucRefDiv; // Reference divider 1645*4882a593Smuzhiyun UCHAR ucPpll; // ATOM_PPLL1/ATOM_PPLL2/ATOM_DCPLL 1646*4882a593Smuzhiyun UCHAR ucTransmitterID; // ASIC encoder id defined in objectId.h, 1647*4882a593Smuzhiyun // indicate which graphic encoder will be used. 1648*4882a593Smuzhiyun UCHAR ucEncoderMode; // Encoder mode: 1649*4882a593Smuzhiyun UCHAR ucMiscInfo; // bit[0]= Force program PPLL 1650*4882a593Smuzhiyun // bit[1]= when VGA timing is used. 1651*4882a593Smuzhiyun // bit[3:2]= HDMI panel bit depth: =0: 24bpp =1:30bpp, =2:32bpp 1652*4882a593Smuzhiyun // bit[4]= RefClock source for PPLL. 1653*4882a593Smuzhiyun // =0: XTLAIN( default mode ) 1654*4882a593Smuzhiyun // =1: other external clock source, which is pre-defined 1655*4882a593Smuzhiyun // by VBIOS depend on the feature required. 1656*4882a593Smuzhiyun // bit[7:5]: reserved. 1657*4882a593Smuzhiyun ULONG ulFbDivDecFrac; // 20 bit feedback divider decimal fraction part, range from 1~999999 ( 0.000001 to 0.999999 ) 1658*4882a593Smuzhiyun 1659*4882a593Smuzhiyun }PIXEL_CLOCK_PARAMETERS_V5; 1660*4882a593Smuzhiyun 1661*4882a593Smuzhiyun #define PIXEL_CLOCK_V5_MISC_FORCE_PROG_PPLL 0x01 1662*4882a593Smuzhiyun #define PIXEL_CLOCK_V5_MISC_VGA_MODE 0x02 1663*4882a593Smuzhiyun #define PIXEL_CLOCK_V5_MISC_HDMI_BPP_MASK 0x0c 1664*4882a593Smuzhiyun #define PIXEL_CLOCK_V5_MISC_HDMI_24BPP 0x00 1665*4882a593Smuzhiyun #define PIXEL_CLOCK_V5_MISC_HDMI_30BPP 0x04 1666*4882a593Smuzhiyun #define PIXEL_CLOCK_V5_MISC_HDMI_32BPP 0x08 1667*4882a593Smuzhiyun #define PIXEL_CLOCK_V5_MISC_REF_DIV_SRC 0x10 1668*4882a593Smuzhiyun 1669*4882a593Smuzhiyun typedef struct _CRTC_PIXEL_CLOCK_FREQ 1670*4882a593Smuzhiyun { 1671*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 1672*4882a593Smuzhiyun ULONG ucCRTC:8; // ATOM_CRTC1~6, indicate the CRTC controller to 1673*4882a593Smuzhiyun // drive the pixel clock. not used for DCPLL case. 1674*4882a593Smuzhiyun ULONG ulPixelClock:24; // target the pixel clock to drive the CRTC timing. 1675*4882a593Smuzhiyun // 0 means disable PPLL/DCPLL. Expanded to 24 bits comparing to previous version. 1676*4882a593Smuzhiyun #else 1677*4882a593Smuzhiyun ULONG ulPixelClock:24; // target the pixel clock to drive the CRTC timing. 1678*4882a593Smuzhiyun // 0 means disable PPLL/DCPLL. Expanded to 24 bits comparing to previous version. 1679*4882a593Smuzhiyun ULONG ucCRTC:8; // ATOM_CRTC1~6, indicate the CRTC controller to 1680*4882a593Smuzhiyun // drive the pixel clock. not used for DCPLL case. 1681*4882a593Smuzhiyun #endif 1682*4882a593Smuzhiyun }CRTC_PIXEL_CLOCK_FREQ; 1683*4882a593Smuzhiyun 1684*4882a593Smuzhiyun typedef struct _PIXEL_CLOCK_PARAMETERS_V6 1685*4882a593Smuzhiyun { 1686*4882a593Smuzhiyun union{ 1687*4882a593Smuzhiyun CRTC_PIXEL_CLOCK_FREQ ulCrtcPclkFreq; // pixel clock and CRTC id frequency 1688*4882a593Smuzhiyun ULONG ulDispEngClkFreq; // dispclk frequency 1689*4882a593Smuzhiyun }; 1690*4882a593Smuzhiyun USHORT usFbDiv; // feedback divider integer part. 1691*4882a593Smuzhiyun UCHAR ucPostDiv; // post divider. 1692*4882a593Smuzhiyun UCHAR ucRefDiv; // Reference divider 1693*4882a593Smuzhiyun UCHAR ucPpll; // ATOM_PPLL1/ATOM_PPLL2/ATOM_DCPLL 1694*4882a593Smuzhiyun UCHAR ucTransmitterID; // ASIC encoder id defined in objectId.h, 1695*4882a593Smuzhiyun // indicate which graphic encoder will be used. 1696*4882a593Smuzhiyun UCHAR ucEncoderMode; // Encoder mode: 1697*4882a593Smuzhiyun UCHAR ucMiscInfo; // bit[0]= Force program PPLL 1698*4882a593Smuzhiyun // bit[1]= when VGA timing is used. 1699*4882a593Smuzhiyun // bit[3:2]= HDMI panel bit depth: =0: 24bpp =1:30bpp, =2:32bpp 1700*4882a593Smuzhiyun // bit[4]= RefClock source for PPLL. 1701*4882a593Smuzhiyun // =0: XTLAIN( default mode ) 1702*4882a593Smuzhiyun // =1: other external clock source, which is pre-defined 1703*4882a593Smuzhiyun // by VBIOS depend on the feature required. 1704*4882a593Smuzhiyun // bit[7:5]: reserved. 1705*4882a593Smuzhiyun ULONG ulFbDivDecFrac; // 20 bit feedback divider decimal fraction part, range from 1~999999 ( 0.000001 to 0.999999 ) 1706*4882a593Smuzhiyun 1707*4882a593Smuzhiyun }PIXEL_CLOCK_PARAMETERS_V6; 1708*4882a593Smuzhiyun 1709*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_FORCE_PROG_PPLL 0x01 1710*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_VGA_MODE 0x02 1711*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_HDMI_BPP_MASK 0x0c 1712*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_HDMI_24BPP 0x00 1713*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_HDMI_36BPP 0x04 1714*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_HDMI_36BPP_V6 0x08 //for V6, the correct defintion for 36bpp should be 2 for 36bpp(2:1) 1715*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_HDMI_30BPP 0x08 1716*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_HDMI_30BPP_V6 0x04 //for V6, the correct defintion for 30bpp should be 1 for 36bpp(5:4) 1717*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_HDMI_48BPP 0x0c 1718*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_REF_DIV_SRC 0x10 1719*4882a593Smuzhiyun #define PIXEL_CLOCK_V6_MISC_GEN_DPREFCLK 0x40 1720*4882a593Smuzhiyun 1721*4882a593Smuzhiyun typedef struct _GET_DISP_PLL_STATUS_INPUT_PARAMETERS_V2 1722*4882a593Smuzhiyun { 1723*4882a593Smuzhiyun PIXEL_CLOCK_PARAMETERS_V3 sDispClkInput; 1724*4882a593Smuzhiyun }GET_DISP_PLL_STATUS_INPUT_PARAMETERS_V2; 1725*4882a593Smuzhiyun 1726*4882a593Smuzhiyun typedef struct _GET_DISP_PLL_STATUS_OUTPUT_PARAMETERS_V2 1727*4882a593Smuzhiyun { 1728*4882a593Smuzhiyun UCHAR ucStatus; 1729*4882a593Smuzhiyun UCHAR ucRefDivSrc; // =1: reference clock source from XTALIN, =0: source from PCIE ref clock 1730*4882a593Smuzhiyun UCHAR ucReserved[2]; 1731*4882a593Smuzhiyun }GET_DISP_PLL_STATUS_OUTPUT_PARAMETERS_V2; 1732*4882a593Smuzhiyun 1733*4882a593Smuzhiyun typedef struct _GET_DISP_PLL_STATUS_INPUT_PARAMETERS_V3 1734*4882a593Smuzhiyun { 1735*4882a593Smuzhiyun PIXEL_CLOCK_PARAMETERS_V5 sDispClkInput; 1736*4882a593Smuzhiyun }GET_DISP_PLL_STATUS_INPUT_PARAMETERS_V3; 1737*4882a593Smuzhiyun 1738*4882a593Smuzhiyun /****************************************************************************/ 1739*4882a593Smuzhiyun // Structures used by AdjustDisplayPllTable 1740*4882a593Smuzhiyun /****************************************************************************/ 1741*4882a593Smuzhiyun typedef struct _ADJUST_DISPLAY_PLL_PARAMETERS 1742*4882a593Smuzhiyun { 1743*4882a593Smuzhiyun USHORT usPixelClock; 1744*4882a593Smuzhiyun UCHAR ucTransmitterID; 1745*4882a593Smuzhiyun UCHAR ucEncodeMode; 1746*4882a593Smuzhiyun union 1747*4882a593Smuzhiyun { 1748*4882a593Smuzhiyun UCHAR ucDVOConfig; //if DVO, need passing link rate and output 12bitlow or 24bit 1749*4882a593Smuzhiyun UCHAR ucConfig; //if none DVO, not defined yet 1750*4882a593Smuzhiyun }; 1751*4882a593Smuzhiyun UCHAR ucReserved[3]; 1752*4882a593Smuzhiyun }ADJUST_DISPLAY_PLL_PARAMETERS; 1753*4882a593Smuzhiyun 1754*4882a593Smuzhiyun #define ADJUST_DISPLAY_CONFIG_SS_ENABLE 0x10 1755*4882a593Smuzhiyun #define ADJUST_DISPLAY_PLL_PS_ALLOCATION ADJUST_DISPLAY_PLL_PARAMETERS 1756*4882a593Smuzhiyun 1757*4882a593Smuzhiyun typedef struct _ADJUST_DISPLAY_PLL_INPUT_PARAMETERS_V3 1758*4882a593Smuzhiyun { 1759*4882a593Smuzhiyun USHORT usPixelClock; // target pixel clock 1760*4882a593Smuzhiyun UCHAR ucTransmitterID; // GPU transmitter id defined in objectid.h 1761*4882a593Smuzhiyun UCHAR ucEncodeMode; // encoder mode: CRT, LVDS, DP, TMDS or HDMI 1762*4882a593Smuzhiyun UCHAR ucDispPllConfig; // display pll configure parameter defined as following DISPPLL_CONFIG_XXXX 1763*4882a593Smuzhiyun UCHAR ucExtTransmitterID; // external encoder id. 1764*4882a593Smuzhiyun UCHAR ucReserved[2]; 1765*4882a593Smuzhiyun }ADJUST_DISPLAY_PLL_INPUT_PARAMETERS_V3; 1766*4882a593Smuzhiyun 1767*4882a593Smuzhiyun // usDispPllConfig v1.2 for RoadRunner 1768*4882a593Smuzhiyun #define DISPPLL_CONFIG_DVO_RATE_SEL 0x0001 // need only when ucTransmitterID = DVO 1769*4882a593Smuzhiyun #define DISPPLL_CONFIG_DVO_DDR_SPEED 0x0000 // need only when ucTransmitterID = DVO 1770*4882a593Smuzhiyun #define DISPPLL_CONFIG_DVO_SDR_SPEED 0x0001 // need only when ucTransmitterID = DVO 1771*4882a593Smuzhiyun #define DISPPLL_CONFIG_DVO_OUTPUT_SEL 0x000c // need only when ucTransmitterID = DVO 1772*4882a593Smuzhiyun #define DISPPLL_CONFIG_DVO_LOW12BIT 0x0000 // need only when ucTransmitterID = DVO 1773*4882a593Smuzhiyun #define DISPPLL_CONFIG_DVO_UPPER12BIT 0x0004 // need only when ucTransmitterID = DVO 1774*4882a593Smuzhiyun #define DISPPLL_CONFIG_DVO_24BIT 0x0008 // need only when ucTransmitterID = DVO 1775*4882a593Smuzhiyun #define DISPPLL_CONFIG_SS_ENABLE 0x0010 // Only used when ucEncoderMode = DP or LVDS 1776*4882a593Smuzhiyun #define DISPPLL_CONFIG_COHERENT_MODE 0x0020 // Only used when ucEncoderMode = TMDS or HDMI 1777*4882a593Smuzhiyun #define DISPPLL_CONFIG_DUAL_LINK 0x0040 // Only used when ucEncoderMode = TMDS or LVDS 1778*4882a593Smuzhiyun 1779*4882a593Smuzhiyun 1780*4882a593Smuzhiyun typedef struct _ADJUST_DISPLAY_PLL_OUTPUT_PARAMETERS_V3 1781*4882a593Smuzhiyun { 1782*4882a593Smuzhiyun ULONG ulDispPllFreq; // return display PPLL freq which is used to generate the pixclock, and related idclk, symclk etc 1783*4882a593Smuzhiyun UCHAR ucRefDiv; // if it is none-zero, it is used to be calculated the other ppll parameter fb_divider and post_div ( if it is not given ) 1784*4882a593Smuzhiyun UCHAR ucPostDiv; // if it is none-zero, it is used to be calculated the other ppll parameter fb_divider 1785*4882a593Smuzhiyun UCHAR ucReserved[2]; 1786*4882a593Smuzhiyun }ADJUST_DISPLAY_PLL_OUTPUT_PARAMETERS_V3; 1787*4882a593Smuzhiyun 1788*4882a593Smuzhiyun typedef struct _ADJUST_DISPLAY_PLL_PS_ALLOCATION_V3 1789*4882a593Smuzhiyun { 1790*4882a593Smuzhiyun union 1791*4882a593Smuzhiyun { 1792*4882a593Smuzhiyun ADJUST_DISPLAY_PLL_INPUT_PARAMETERS_V3 sInput; 1793*4882a593Smuzhiyun ADJUST_DISPLAY_PLL_OUTPUT_PARAMETERS_V3 sOutput; 1794*4882a593Smuzhiyun }; 1795*4882a593Smuzhiyun } ADJUST_DISPLAY_PLL_PS_ALLOCATION_V3; 1796*4882a593Smuzhiyun 1797*4882a593Smuzhiyun /****************************************************************************/ 1798*4882a593Smuzhiyun // Structures used by EnableYUVTable 1799*4882a593Smuzhiyun /****************************************************************************/ 1800*4882a593Smuzhiyun typedef struct _ENABLE_YUV_PARAMETERS 1801*4882a593Smuzhiyun { 1802*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE:Enable YUV or ATOM_DISABLE:Disable YUV (RGB) 1803*4882a593Smuzhiyun UCHAR ucCRTC; // Which CRTC needs this YUV or RGB format 1804*4882a593Smuzhiyun UCHAR ucPadding[2]; 1805*4882a593Smuzhiyun }ENABLE_YUV_PARAMETERS; 1806*4882a593Smuzhiyun #define ENABLE_YUV_PS_ALLOCATION ENABLE_YUV_PARAMETERS 1807*4882a593Smuzhiyun 1808*4882a593Smuzhiyun /****************************************************************************/ 1809*4882a593Smuzhiyun // Structures used by GetMemoryClockTable 1810*4882a593Smuzhiyun /****************************************************************************/ 1811*4882a593Smuzhiyun typedef struct _GET_MEMORY_CLOCK_PARAMETERS 1812*4882a593Smuzhiyun { 1813*4882a593Smuzhiyun ULONG ulReturnMemoryClock; // current memory speed in 10KHz unit 1814*4882a593Smuzhiyun } GET_MEMORY_CLOCK_PARAMETERS; 1815*4882a593Smuzhiyun #define GET_MEMORY_CLOCK_PS_ALLOCATION GET_MEMORY_CLOCK_PARAMETERS 1816*4882a593Smuzhiyun 1817*4882a593Smuzhiyun /****************************************************************************/ 1818*4882a593Smuzhiyun // Structures used by GetEngineClockTable 1819*4882a593Smuzhiyun /****************************************************************************/ 1820*4882a593Smuzhiyun typedef struct _GET_ENGINE_CLOCK_PARAMETERS 1821*4882a593Smuzhiyun { 1822*4882a593Smuzhiyun ULONG ulReturnEngineClock; // current engine speed in 10KHz unit 1823*4882a593Smuzhiyun } GET_ENGINE_CLOCK_PARAMETERS; 1824*4882a593Smuzhiyun #define GET_ENGINE_CLOCK_PS_ALLOCATION GET_ENGINE_CLOCK_PARAMETERS 1825*4882a593Smuzhiyun 1826*4882a593Smuzhiyun /****************************************************************************/ 1827*4882a593Smuzhiyun // Following Structures and constant may be obsolete 1828*4882a593Smuzhiyun /****************************************************************************/ 1829*4882a593Smuzhiyun //Maxium 8 bytes,the data read in will be placed in the parameter space. 1830*4882a593Smuzhiyun //Read operaion successeful when the paramter space is non-zero, otherwise read operation failed 1831*4882a593Smuzhiyun typedef struct _READ_EDID_FROM_HW_I2C_DATA_PARAMETERS 1832*4882a593Smuzhiyun { 1833*4882a593Smuzhiyun USHORT usPrescale; //Ratio between Engine clock and I2C clock 1834*4882a593Smuzhiyun USHORT usVRAMAddress; //Address in Frame Buffer where to pace raw EDID 1835*4882a593Smuzhiyun USHORT usStatus; //When use output: lower byte EDID checksum, high byte hardware status 1836*4882a593Smuzhiyun //WHen use input: lower byte as 'byte to read':currently limited to 128byte or 1byte 1837*4882a593Smuzhiyun UCHAR ucSlaveAddr; //Read from which slave 1838*4882a593Smuzhiyun UCHAR ucLineNumber; //Read from which HW assisted line 1839*4882a593Smuzhiyun }READ_EDID_FROM_HW_I2C_DATA_PARAMETERS; 1840*4882a593Smuzhiyun #define READ_EDID_FROM_HW_I2C_DATA_PS_ALLOCATION READ_EDID_FROM_HW_I2C_DATA_PARAMETERS 1841*4882a593Smuzhiyun 1842*4882a593Smuzhiyun 1843*4882a593Smuzhiyun #define ATOM_WRITE_I2C_FORMAT_PSOFFSET_PSDATABYTE 0 1844*4882a593Smuzhiyun #define ATOM_WRITE_I2C_FORMAT_PSOFFSET_PSTWODATABYTES 1 1845*4882a593Smuzhiyun #define ATOM_WRITE_I2C_FORMAT_PSCOUNTER_PSOFFSET_IDDATABLOCK 2 1846*4882a593Smuzhiyun #define ATOM_WRITE_I2C_FORMAT_PSCOUNTER_IDOFFSET_PLUS_IDDATABLOCK 3 1847*4882a593Smuzhiyun #define ATOM_WRITE_I2C_FORMAT_IDCOUNTER_IDOFFSET_IDDATABLOCK 4 1848*4882a593Smuzhiyun 1849*4882a593Smuzhiyun typedef struct _WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS 1850*4882a593Smuzhiyun { 1851*4882a593Smuzhiyun USHORT usPrescale; //Ratio between Engine clock and I2C clock 1852*4882a593Smuzhiyun USHORT usByteOffset; //Write to which byte 1853*4882a593Smuzhiyun //Upper portion of usByteOffset is Format of data 1854*4882a593Smuzhiyun //1bytePS+offsetPS 1855*4882a593Smuzhiyun //2bytesPS+offsetPS 1856*4882a593Smuzhiyun //blockID+offsetPS 1857*4882a593Smuzhiyun //blockID+offsetID 1858*4882a593Smuzhiyun //blockID+counterID+offsetID 1859*4882a593Smuzhiyun UCHAR ucData; //PS data1 1860*4882a593Smuzhiyun UCHAR ucStatus; //Status byte 1=success, 2=failure, Also is used as PS data2 1861*4882a593Smuzhiyun UCHAR ucSlaveAddr; //Write to which slave 1862*4882a593Smuzhiyun UCHAR ucLineNumber; //Write from which HW assisted line 1863*4882a593Smuzhiyun }WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS; 1864*4882a593Smuzhiyun 1865*4882a593Smuzhiyun #define WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS 1866*4882a593Smuzhiyun 1867*4882a593Smuzhiyun typedef struct _SET_UP_HW_I2C_DATA_PARAMETERS 1868*4882a593Smuzhiyun { 1869*4882a593Smuzhiyun USHORT usPrescale; //Ratio between Engine clock and I2C clock 1870*4882a593Smuzhiyun UCHAR ucSlaveAddr; //Write to which slave 1871*4882a593Smuzhiyun UCHAR ucLineNumber; //Write from which HW assisted line 1872*4882a593Smuzhiyun }SET_UP_HW_I2C_DATA_PARAMETERS; 1873*4882a593Smuzhiyun 1874*4882a593Smuzhiyun 1875*4882a593Smuzhiyun /**************************************************************************/ 1876*4882a593Smuzhiyun #define SPEED_FAN_CONTROL_PS_ALLOCATION WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS 1877*4882a593Smuzhiyun 1878*4882a593Smuzhiyun 1879*4882a593Smuzhiyun /****************************************************************************/ 1880*4882a593Smuzhiyun // Structures used by PowerConnectorDetectionTable 1881*4882a593Smuzhiyun /****************************************************************************/ 1882*4882a593Smuzhiyun typedef struct _POWER_CONNECTOR_DETECTION_PARAMETERS 1883*4882a593Smuzhiyun { 1884*4882a593Smuzhiyun UCHAR ucPowerConnectorStatus; //Used for return value 0: detected, 1:not detected 1885*4882a593Smuzhiyun UCHAR ucPwrBehaviorId; 1886*4882a593Smuzhiyun USHORT usPwrBudget; //how much power currently boot to in unit of watt 1887*4882a593Smuzhiyun }POWER_CONNECTOR_DETECTION_PARAMETERS; 1888*4882a593Smuzhiyun 1889*4882a593Smuzhiyun typedef struct POWER_CONNECTOR_DETECTION_PS_ALLOCATION 1890*4882a593Smuzhiyun { 1891*4882a593Smuzhiyun UCHAR ucPowerConnectorStatus; //Used for return value 0: detected, 1:not detected 1892*4882a593Smuzhiyun UCHAR ucReserved; 1893*4882a593Smuzhiyun USHORT usPwrBudget; //how much power currently boot to in unit of watt 1894*4882a593Smuzhiyun WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; 1895*4882a593Smuzhiyun }POWER_CONNECTOR_DETECTION_PS_ALLOCATION; 1896*4882a593Smuzhiyun 1897*4882a593Smuzhiyun /****************************LVDS SS Command Table Definitions**********************/ 1898*4882a593Smuzhiyun 1899*4882a593Smuzhiyun /****************************************************************************/ 1900*4882a593Smuzhiyun // Structures used by EnableSpreadSpectrumOnPPLLTable 1901*4882a593Smuzhiyun /****************************************************************************/ 1902*4882a593Smuzhiyun typedef struct _ENABLE_LVDS_SS_PARAMETERS 1903*4882a593Smuzhiyun { 1904*4882a593Smuzhiyun USHORT usSpreadSpectrumPercentage; 1905*4882a593Smuzhiyun UCHAR ucSpreadSpectrumType; //Bit1=0 Down Spread,=1 Center Spread. Bit1=1 Ext. =0 Int. Others:TBD 1906*4882a593Smuzhiyun UCHAR ucSpreadSpectrumStepSize_Delay; //bits3:2 SS_STEP_SIZE; bit 6:4 SS_DELAY 1907*4882a593Smuzhiyun UCHAR ucEnable; //ATOM_ENABLE or ATOM_DISABLE 1908*4882a593Smuzhiyun UCHAR ucPadding[3]; 1909*4882a593Smuzhiyun }ENABLE_LVDS_SS_PARAMETERS; 1910*4882a593Smuzhiyun 1911*4882a593Smuzhiyun //ucTableFormatRevision=1,ucTableContentRevision=2 1912*4882a593Smuzhiyun typedef struct _ENABLE_LVDS_SS_PARAMETERS_V2 1913*4882a593Smuzhiyun { 1914*4882a593Smuzhiyun USHORT usSpreadSpectrumPercentage; 1915*4882a593Smuzhiyun UCHAR ucSpreadSpectrumType; //Bit1=0 Down Spread,=1 Center Spread. Bit1=1 Ext. =0 Int. Others:TBD 1916*4882a593Smuzhiyun UCHAR ucSpreadSpectrumStep; // 1917*4882a593Smuzhiyun UCHAR ucEnable; //ATOM_ENABLE or ATOM_DISABLE 1918*4882a593Smuzhiyun UCHAR ucSpreadSpectrumDelay; 1919*4882a593Smuzhiyun UCHAR ucSpreadSpectrumRange; 1920*4882a593Smuzhiyun UCHAR ucPadding; 1921*4882a593Smuzhiyun }ENABLE_LVDS_SS_PARAMETERS_V2; 1922*4882a593Smuzhiyun 1923*4882a593Smuzhiyun //This new structure is based on ENABLE_LVDS_SS_PARAMETERS but expands to SS on PPLL, so other devices can use SS. 1924*4882a593Smuzhiyun typedef struct _ENABLE_SPREAD_SPECTRUM_ON_PPLL 1925*4882a593Smuzhiyun { 1926*4882a593Smuzhiyun USHORT usSpreadSpectrumPercentage; 1927*4882a593Smuzhiyun UCHAR ucSpreadSpectrumType; // Bit1=0 Down Spread,=1 Center Spread. Bit1=1 Ext. =0 Int. Others:TBD 1928*4882a593Smuzhiyun UCHAR ucSpreadSpectrumStep; // 1929*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 1930*4882a593Smuzhiyun UCHAR ucSpreadSpectrumDelay; 1931*4882a593Smuzhiyun UCHAR ucSpreadSpectrumRange; 1932*4882a593Smuzhiyun UCHAR ucPpll; // ATOM_PPLL1/ATOM_PPLL2 1933*4882a593Smuzhiyun }ENABLE_SPREAD_SPECTRUM_ON_PPLL; 1934*4882a593Smuzhiyun 1935*4882a593Smuzhiyun typedef struct _ENABLE_SPREAD_SPECTRUM_ON_PPLL_V2 1936*4882a593Smuzhiyun { 1937*4882a593Smuzhiyun USHORT usSpreadSpectrumPercentage; 1938*4882a593Smuzhiyun UCHAR ucSpreadSpectrumType; // Bit[0]: 0-Down Spread,1-Center Spread. 1939*4882a593Smuzhiyun // Bit[1]: 1-Ext. 0-Int. 1940*4882a593Smuzhiyun // Bit[3:2]: =0 P1PLL =1 P2PLL =2 DCPLL 1941*4882a593Smuzhiyun // Bits[7:4] reserved 1942*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 1943*4882a593Smuzhiyun USHORT usSpreadSpectrumAmount; // Includes SS_AMOUNT_FBDIV[7:0] and SS_AMOUNT_NFRAC_SLIP[11:8] 1944*4882a593Smuzhiyun USHORT usSpreadSpectrumStep; // SS_STEP_SIZE_DSFRAC 1945*4882a593Smuzhiyun }ENABLE_SPREAD_SPECTRUM_ON_PPLL_V2; 1946*4882a593Smuzhiyun 1947*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V2_DOWN_SPREAD 0x00 1948*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V2_CENTRE_SPREAD 0x01 1949*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V2_EXT_SPREAD 0x02 1950*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V2_PPLL_SEL_MASK 0x0c 1951*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V2_P1PLL 0x00 1952*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V2_P2PLL 0x04 1953*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V2_DCPLL 0x08 1954*4882a593Smuzhiyun #define ATOM_PPLL_SS_AMOUNT_V2_FBDIV_MASK 0x00FF 1955*4882a593Smuzhiyun #define ATOM_PPLL_SS_AMOUNT_V2_FBDIV_SHIFT 0 1956*4882a593Smuzhiyun #define ATOM_PPLL_SS_AMOUNT_V2_NFRAC_MASK 0x0F00 1957*4882a593Smuzhiyun #define ATOM_PPLL_SS_AMOUNT_V2_NFRAC_SHIFT 8 1958*4882a593Smuzhiyun 1959*4882a593Smuzhiyun // Used by DCE5.0 1960*4882a593Smuzhiyun typedef struct _ENABLE_SPREAD_SPECTRUM_ON_PPLL_V3 1961*4882a593Smuzhiyun { 1962*4882a593Smuzhiyun USHORT usSpreadSpectrumAmountFrac; // SS_AMOUNT_DSFRAC New in DCE5.0 1963*4882a593Smuzhiyun UCHAR ucSpreadSpectrumType; // Bit[0]: 0-Down Spread,1-Center Spread. 1964*4882a593Smuzhiyun // Bit[1]: 1-Ext. 0-Int. 1965*4882a593Smuzhiyun // Bit[3:2]: =0 P1PLL =1 P2PLL =2 DCPLL 1966*4882a593Smuzhiyun // Bits[7:4] reserved 1967*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 1968*4882a593Smuzhiyun USHORT usSpreadSpectrumAmount; // Includes SS_AMOUNT_FBDIV[7:0] and SS_AMOUNT_NFRAC_SLIP[11:8] 1969*4882a593Smuzhiyun USHORT usSpreadSpectrumStep; // SS_STEP_SIZE_DSFRAC 1970*4882a593Smuzhiyun }ENABLE_SPREAD_SPECTRUM_ON_PPLL_V3; 1971*4882a593Smuzhiyun 1972*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V3_DOWN_SPREAD 0x00 1973*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V3_CENTRE_SPREAD 0x01 1974*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V3_EXT_SPREAD 0x02 1975*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V3_PPLL_SEL_MASK 0x0c 1976*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V3_P1PLL 0x00 1977*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V3_P2PLL 0x04 1978*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V3_DCPLL 0x08 1979*4882a593Smuzhiyun #define ATOM_PPLL_SS_TYPE_V3_P0PLL ATOM_PPLL_SS_TYPE_V3_DCPLL 1980*4882a593Smuzhiyun #define ATOM_PPLL_SS_AMOUNT_V3_FBDIV_MASK 0x00FF 1981*4882a593Smuzhiyun #define ATOM_PPLL_SS_AMOUNT_V3_FBDIV_SHIFT 0 1982*4882a593Smuzhiyun #define ATOM_PPLL_SS_AMOUNT_V3_NFRAC_MASK 0x0F00 1983*4882a593Smuzhiyun #define ATOM_PPLL_SS_AMOUNT_V3_NFRAC_SHIFT 8 1984*4882a593Smuzhiyun 1985*4882a593Smuzhiyun #define ENABLE_SPREAD_SPECTRUM_ON_PPLL_PS_ALLOCATION ENABLE_SPREAD_SPECTRUM_ON_PPLL 1986*4882a593Smuzhiyun 1987*4882a593Smuzhiyun /**************************************************************************/ 1988*4882a593Smuzhiyun 1989*4882a593Smuzhiyun typedef struct _SET_PIXEL_CLOCK_PS_ALLOCATION 1990*4882a593Smuzhiyun { 1991*4882a593Smuzhiyun PIXEL_CLOCK_PARAMETERS sPCLKInput; 1992*4882a593Smuzhiyun ENABLE_SPREAD_SPECTRUM_ON_PPLL sReserved;//Caller doesn't need to init this portion 1993*4882a593Smuzhiyun }SET_PIXEL_CLOCK_PS_ALLOCATION; 1994*4882a593Smuzhiyun 1995*4882a593Smuzhiyun #define ENABLE_VGA_RENDER_PS_ALLOCATION SET_PIXEL_CLOCK_PS_ALLOCATION 1996*4882a593Smuzhiyun 1997*4882a593Smuzhiyun /****************************************************************************/ 1998*4882a593Smuzhiyun // Structures used by ### 1999*4882a593Smuzhiyun /****************************************************************************/ 2000*4882a593Smuzhiyun typedef struct _MEMORY_TRAINING_PARAMETERS 2001*4882a593Smuzhiyun { 2002*4882a593Smuzhiyun ULONG ulTargetMemoryClock; //In 10Khz unit 2003*4882a593Smuzhiyun }MEMORY_TRAINING_PARAMETERS; 2004*4882a593Smuzhiyun #define MEMORY_TRAINING_PS_ALLOCATION MEMORY_TRAINING_PARAMETERS 2005*4882a593Smuzhiyun 2006*4882a593Smuzhiyun 2007*4882a593Smuzhiyun /****************************LVDS and other encoder command table definitions **********************/ 2008*4882a593Smuzhiyun 2009*4882a593Smuzhiyun 2010*4882a593Smuzhiyun /****************************************************************************/ 2011*4882a593Smuzhiyun // Structures used by LVDSEncoderControlTable (Before DCE30) 2012*4882a593Smuzhiyun // LVTMAEncoderControlTable (Before DCE30) 2013*4882a593Smuzhiyun // TMDSAEncoderControlTable (Before DCE30) 2014*4882a593Smuzhiyun /****************************************************************************/ 2015*4882a593Smuzhiyun typedef struct _LVDS_ENCODER_CONTROL_PARAMETERS 2016*4882a593Smuzhiyun { 2017*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 2018*4882a593Smuzhiyun UCHAR ucMisc; // bit0=0: Enable single link 2019*4882a593Smuzhiyun // =1: Enable dual link 2020*4882a593Smuzhiyun // Bit1=0: 666RGB 2021*4882a593Smuzhiyun // =1: 888RGB 2022*4882a593Smuzhiyun UCHAR ucAction; // 0: turn off encoder 2023*4882a593Smuzhiyun // 1: setup and turn on encoder 2024*4882a593Smuzhiyun }LVDS_ENCODER_CONTROL_PARAMETERS; 2025*4882a593Smuzhiyun 2026*4882a593Smuzhiyun #define LVDS_ENCODER_CONTROL_PS_ALLOCATION LVDS_ENCODER_CONTROL_PARAMETERS 2027*4882a593Smuzhiyun 2028*4882a593Smuzhiyun #define TMDS1_ENCODER_CONTROL_PARAMETERS LVDS_ENCODER_CONTROL_PARAMETERS 2029*4882a593Smuzhiyun #define TMDS1_ENCODER_CONTROL_PS_ALLOCATION TMDS1_ENCODER_CONTROL_PARAMETERS 2030*4882a593Smuzhiyun 2031*4882a593Smuzhiyun #define TMDS2_ENCODER_CONTROL_PARAMETERS TMDS1_ENCODER_CONTROL_PARAMETERS 2032*4882a593Smuzhiyun #define TMDS2_ENCODER_CONTROL_PS_ALLOCATION TMDS2_ENCODER_CONTROL_PARAMETERS 2033*4882a593Smuzhiyun 2034*4882a593Smuzhiyun 2035*4882a593Smuzhiyun //ucTableFormatRevision=1,ucTableContentRevision=2 2036*4882a593Smuzhiyun typedef struct _LVDS_ENCODER_CONTROL_PARAMETERS_V2 2037*4882a593Smuzhiyun { 2038*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 2039*4882a593Smuzhiyun UCHAR ucMisc; // see PANEL_ENCODER_MISC_xx defintions below 2040*4882a593Smuzhiyun UCHAR ucAction; // 0: turn off encoder 2041*4882a593Smuzhiyun // 1: setup and turn on encoder 2042*4882a593Smuzhiyun UCHAR ucTruncate; // bit0=0: Disable truncate 2043*4882a593Smuzhiyun // =1: Enable truncate 2044*4882a593Smuzhiyun // bit4=0: 666RGB 2045*4882a593Smuzhiyun // =1: 888RGB 2046*4882a593Smuzhiyun UCHAR ucSpatial; // bit0=0: Disable spatial dithering 2047*4882a593Smuzhiyun // =1: Enable spatial dithering 2048*4882a593Smuzhiyun // bit4=0: 666RGB 2049*4882a593Smuzhiyun // =1: 888RGB 2050*4882a593Smuzhiyun UCHAR ucTemporal; // bit0=0: Disable temporal dithering 2051*4882a593Smuzhiyun // =1: Enable temporal dithering 2052*4882a593Smuzhiyun // bit4=0: 666RGB 2053*4882a593Smuzhiyun // =1: 888RGB 2054*4882a593Smuzhiyun // bit5=0: Gray level 2 2055*4882a593Smuzhiyun // =1: Gray level 4 2056*4882a593Smuzhiyun UCHAR ucFRC; // bit4=0: 25FRC_SEL pattern E 2057*4882a593Smuzhiyun // =1: 25FRC_SEL pattern F 2058*4882a593Smuzhiyun // bit6:5=0: 50FRC_SEL pattern A 2059*4882a593Smuzhiyun // =1: 50FRC_SEL pattern B 2060*4882a593Smuzhiyun // =2: 50FRC_SEL pattern C 2061*4882a593Smuzhiyun // =3: 50FRC_SEL pattern D 2062*4882a593Smuzhiyun // bit7=0: 75FRC_SEL pattern E 2063*4882a593Smuzhiyun // =1: 75FRC_SEL pattern F 2064*4882a593Smuzhiyun }LVDS_ENCODER_CONTROL_PARAMETERS_V2; 2065*4882a593Smuzhiyun 2066*4882a593Smuzhiyun #define LVDS_ENCODER_CONTROL_PS_ALLOCATION_V2 LVDS_ENCODER_CONTROL_PARAMETERS_V2 2067*4882a593Smuzhiyun 2068*4882a593Smuzhiyun #define TMDS1_ENCODER_CONTROL_PARAMETERS_V2 LVDS_ENCODER_CONTROL_PARAMETERS_V2 2069*4882a593Smuzhiyun #define TMDS1_ENCODER_CONTROL_PS_ALLOCATION_V2 TMDS1_ENCODER_CONTROL_PARAMETERS_V2 2070*4882a593Smuzhiyun 2071*4882a593Smuzhiyun #define TMDS2_ENCODER_CONTROL_PARAMETERS_V2 TMDS1_ENCODER_CONTROL_PARAMETERS_V2 2072*4882a593Smuzhiyun #define TMDS2_ENCODER_CONTROL_PS_ALLOCATION_V2 TMDS2_ENCODER_CONTROL_PARAMETERS_V2 2073*4882a593Smuzhiyun 2074*4882a593Smuzhiyun #define LVDS_ENCODER_CONTROL_PARAMETERS_V3 LVDS_ENCODER_CONTROL_PARAMETERS_V2 2075*4882a593Smuzhiyun #define LVDS_ENCODER_CONTROL_PS_ALLOCATION_V3 LVDS_ENCODER_CONTROL_PARAMETERS_V3 2076*4882a593Smuzhiyun 2077*4882a593Smuzhiyun #define TMDS1_ENCODER_CONTROL_PARAMETERS_V3 LVDS_ENCODER_CONTROL_PARAMETERS_V3 2078*4882a593Smuzhiyun #define TMDS1_ENCODER_CONTROL_PS_ALLOCATION_V3 TMDS1_ENCODER_CONTROL_PARAMETERS_V3 2079*4882a593Smuzhiyun 2080*4882a593Smuzhiyun #define TMDS2_ENCODER_CONTROL_PARAMETERS_V3 LVDS_ENCODER_CONTROL_PARAMETERS_V3 2081*4882a593Smuzhiyun #define TMDS2_ENCODER_CONTROL_PS_ALLOCATION_V3 TMDS2_ENCODER_CONTROL_PARAMETERS_V3 2082*4882a593Smuzhiyun 2083*4882a593Smuzhiyun /****************************************************************************/ 2084*4882a593Smuzhiyun // Structures used by ### 2085*4882a593Smuzhiyun /****************************************************************************/ 2086*4882a593Smuzhiyun typedef struct _ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS 2087*4882a593Smuzhiyun { 2088*4882a593Smuzhiyun UCHAR ucEnable; // Enable or Disable External TMDS encoder 2089*4882a593Smuzhiyun UCHAR ucMisc; // Bit0=0:Enable Single link;=1:Enable Dual link;Bit1 {=0:666RGB, =1:888RGB} 2090*4882a593Smuzhiyun UCHAR ucPadding[2]; 2091*4882a593Smuzhiyun }ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS; 2092*4882a593Smuzhiyun 2093*4882a593Smuzhiyun typedef struct _ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION 2094*4882a593Smuzhiyun { 2095*4882a593Smuzhiyun ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS sXTmdsEncoder; 2096*4882a593Smuzhiyun WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; //Caller doesn't need to init this portion 2097*4882a593Smuzhiyun }ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION; 2098*4882a593Smuzhiyun 2099*4882a593Smuzhiyun #define ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS_V2 LVDS_ENCODER_CONTROL_PARAMETERS_V2 2100*4882a593Smuzhiyun 2101*4882a593Smuzhiyun typedef struct _ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION_V2 2102*4882a593Smuzhiyun { 2103*4882a593Smuzhiyun ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS_V2 sXTmdsEncoder; 2104*4882a593Smuzhiyun WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; //Caller doesn't need to init this portion 2105*4882a593Smuzhiyun }ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION_V2; 2106*4882a593Smuzhiyun 2107*4882a593Smuzhiyun typedef struct _EXTERNAL_ENCODER_CONTROL_PS_ALLOCATION 2108*4882a593Smuzhiyun { 2109*4882a593Smuzhiyun DIG_ENCODER_CONTROL_PARAMETERS sDigEncoder; 2110*4882a593Smuzhiyun WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; 2111*4882a593Smuzhiyun }EXTERNAL_ENCODER_CONTROL_PS_ALLOCATION; 2112*4882a593Smuzhiyun 2113*4882a593Smuzhiyun /****************************************************************************/ 2114*4882a593Smuzhiyun // Structures used by DVOEncoderControlTable 2115*4882a593Smuzhiyun /****************************************************************************/ 2116*4882a593Smuzhiyun //ucTableFormatRevision=1,ucTableContentRevision=3 2117*4882a593Smuzhiyun 2118*4882a593Smuzhiyun //ucDVOConfig: 2119*4882a593Smuzhiyun #define DVO_ENCODER_CONFIG_RATE_SEL 0x01 2120*4882a593Smuzhiyun #define DVO_ENCODER_CONFIG_DDR_SPEED 0x00 2121*4882a593Smuzhiyun #define DVO_ENCODER_CONFIG_SDR_SPEED 0x01 2122*4882a593Smuzhiyun #define DVO_ENCODER_CONFIG_OUTPUT_SEL 0x0c 2123*4882a593Smuzhiyun #define DVO_ENCODER_CONFIG_LOW12BIT 0x00 2124*4882a593Smuzhiyun #define DVO_ENCODER_CONFIG_UPPER12BIT 0x04 2125*4882a593Smuzhiyun #define DVO_ENCODER_CONFIG_24BIT 0x08 2126*4882a593Smuzhiyun 2127*4882a593Smuzhiyun typedef struct _DVO_ENCODER_CONTROL_PARAMETERS_V3 2128*4882a593Smuzhiyun { 2129*4882a593Smuzhiyun USHORT usPixelClock; 2130*4882a593Smuzhiyun UCHAR ucDVOConfig; 2131*4882a593Smuzhiyun UCHAR ucAction; //ATOM_ENABLE/ATOM_DISABLE/ATOM_HPD_INIT 2132*4882a593Smuzhiyun UCHAR ucReseved[4]; 2133*4882a593Smuzhiyun }DVO_ENCODER_CONTROL_PARAMETERS_V3; 2134*4882a593Smuzhiyun #define DVO_ENCODER_CONTROL_PS_ALLOCATION_V3 DVO_ENCODER_CONTROL_PARAMETERS_V3 2135*4882a593Smuzhiyun 2136*4882a593Smuzhiyun typedef struct _DVO_ENCODER_CONTROL_PARAMETERS_V1_4 2137*4882a593Smuzhiyun { 2138*4882a593Smuzhiyun USHORT usPixelClock; 2139*4882a593Smuzhiyun UCHAR ucDVOConfig; 2140*4882a593Smuzhiyun UCHAR ucAction; //ATOM_ENABLE/ATOM_DISABLE/ATOM_HPD_INIT 2141*4882a593Smuzhiyun UCHAR ucBitPerColor; //please refer to definition of PANEL_xBIT_PER_COLOR 2142*4882a593Smuzhiyun UCHAR ucReseved[3]; 2143*4882a593Smuzhiyun }DVO_ENCODER_CONTROL_PARAMETERS_V1_4; 2144*4882a593Smuzhiyun #define DVO_ENCODER_CONTROL_PS_ALLOCATION_V1_4 DVO_ENCODER_CONTROL_PARAMETERS_V1_4 2145*4882a593Smuzhiyun 2146*4882a593Smuzhiyun 2147*4882a593Smuzhiyun //ucTableFormatRevision=1 2148*4882a593Smuzhiyun //ucTableContentRevision=3 structure is not changed but usMisc add bit 1 as another input for 2149*4882a593Smuzhiyun // bit1=0: non-coherent mode 2150*4882a593Smuzhiyun // =1: coherent mode 2151*4882a593Smuzhiyun 2152*4882a593Smuzhiyun //========================================================================================== 2153*4882a593Smuzhiyun //Only change is here next time when changing encoder parameter definitions again! 2154*4882a593Smuzhiyun #define LVDS_ENCODER_CONTROL_PARAMETERS_LAST LVDS_ENCODER_CONTROL_PARAMETERS_V3 2155*4882a593Smuzhiyun #define LVDS_ENCODER_CONTROL_PS_ALLOCATION_LAST LVDS_ENCODER_CONTROL_PARAMETERS_LAST 2156*4882a593Smuzhiyun 2157*4882a593Smuzhiyun #define TMDS1_ENCODER_CONTROL_PARAMETERS_LAST LVDS_ENCODER_CONTROL_PARAMETERS_V3 2158*4882a593Smuzhiyun #define TMDS1_ENCODER_CONTROL_PS_ALLOCATION_LAST TMDS1_ENCODER_CONTROL_PARAMETERS_LAST 2159*4882a593Smuzhiyun 2160*4882a593Smuzhiyun #define TMDS2_ENCODER_CONTROL_PARAMETERS_LAST LVDS_ENCODER_CONTROL_PARAMETERS_V3 2161*4882a593Smuzhiyun #define TMDS2_ENCODER_CONTROL_PS_ALLOCATION_LAST TMDS2_ENCODER_CONTROL_PARAMETERS_LAST 2162*4882a593Smuzhiyun 2163*4882a593Smuzhiyun #define DVO_ENCODER_CONTROL_PARAMETERS_LAST DVO_ENCODER_CONTROL_PARAMETERS 2164*4882a593Smuzhiyun #define DVO_ENCODER_CONTROL_PS_ALLOCATION_LAST DVO_ENCODER_CONTROL_PS_ALLOCATION 2165*4882a593Smuzhiyun 2166*4882a593Smuzhiyun //========================================================================================== 2167*4882a593Smuzhiyun #define PANEL_ENCODER_MISC_DUAL 0x01 2168*4882a593Smuzhiyun #define PANEL_ENCODER_MISC_COHERENT 0x02 2169*4882a593Smuzhiyun #define PANEL_ENCODER_MISC_TMDS_LINKB 0x04 2170*4882a593Smuzhiyun #define PANEL_ENCODER_MISC_HDMI_TYPE 0x08 2171*4882a593Smuzhiyun 2172*4882a593Smuzhiyun #define PANEL_ENCODER_ACTION_DISABLE ATOM_DISABLE 2173*4882a593Smuzhiyun #define PANEL_ENCODER_ACTION_ENABLE ATOM_ENABLE 2174*4882a593Smuzhiyun #define PANEL_ENCODER_ACTION_COHERENTSEQ (ATOM_ENABLE+1) 2175*4882a593Smuzhiyun 2176*4882a593Smuzhiyun #define PANEL_ENCODER_TRUNCATE_EN 0x01 2177*4882a593Smuzhiyun #define PANEL_ENCODER_TRUNCATE_DEPTH 0x10 2178*4882a593Smuzhiyun #define PANEL_ENCODER_SPATIAL_DITHER_EN 0x01 2179*4882a593Smuzhiyun #define PANEL_ENCODER_SPATIAL_DITHER_DEPTH 0x10 2180*4882a593Smuzhiyun #define PANEL_ENCODER_TEMPORAL_DITHER_EN 0x01 2181*4882a593Smuzhiyun #define PANEL_ENCODER_TEMPORAL_DITHER_DEPTH 0x10 2182*4882a593Smuzhiyun #define PANEL_ENCODER_TEMPORAL_LEVEL_4 0x20 2183*4882a593Smuzhiyun #define PANEL_ENCODER_25FRC_MASK 0x10 2184*4882a593Smuzhiyun #define PANEL_ENCODER_25FRC_E 0x00 2185*4882a593Smuzhiyun #define PANEL_ENCODER_25FRC_F 0x10 2186*4882a593Smuzhiyun #define PANEL_ENCODER_50FRC_MASK 0x60 2187*4882a593Smuzhiyun #define PANEL_ENCODER_50FRC_A 0x00 2188*4882a593Smuzhiyun #define PANEL_ENCODER_50FRC_B 0x20 2189*4882a593Smuzhiyun #define PANEL_ENCODER_50FRC_C 0x40 2190*4882a593Smuzhiyun #define PANEL_ENCODER_50FRC_D 0x60 2191*4882a593Smuzhiyun #define PANEL_ENCODER_75FRC_MASK 0x80 2192*4882a593Smuzhiyun #define PANEL_ENCODER_75FRC_E 0x00 2193*4882a593Smuzhiyun #define PANEL_ENCODER_75FRC_F 0x80 2194*4882a593Smuzhiyun 2195*4882a593Smuzhiyun /****************************************************************************/ 2196*4882a593Smuzhiyun // Structures used by SetVoltageTable 2197*4882a593Smuzhiyun /****************************************************************************/ 2198*4882a593Smuzhiyun #define SET_VOLTAGE_TYPE_ASIC_VDDC 1 2199*4882a593Smuzhiyun #define SET_VOLTAGE_TYPE_ASIC_MVDDC 2 2200*4882a593Smuzhiyun #define SET_VOLTAGE_TYPE_ASIC_MVDDQ 3 2201*4882a593Smuzhiyun #define SET_VOLTAGE_TYPE_ASIC_VDDCI 4 2202*4882a593Smuzhiyun #define SET_VOLTAGE_INIT_MODE 5 2203*4882a593Smuzhiyun #define SET_VOLTAGE_GET_MAX_VOLTAGE 6 //Gets the Max. voltage for the soldered Asic 2204*4882a593Smuzhiyun 2205*4882a593Smuzhiyun #define SET_ASIC_VOLTAGE_MODE_ALL_SOURCE 0x1 2206*4882a593Smuzhiyun #define SET_ASIC_VOLTAGE_MODE_SOURCE_A 0x2 2207*4882a593Smuzhiyun #define SET_ASIC_VOLTAGE_MODE_SOURCE_B 0x4 2208*4882a593Smuzhiyun 2209*4882a593Smuzhiyun #define SET_ASIC_VOLTAGE_MODE_SET_VOLTAGE 0x0 2210*4882a593Smuzhiyun #define SET_ASIC_VOLTAGE_MODE_GET_GPIOVAL 0x1 2211*4882a593Smuzhiyun #define SET_ASIC_VOLTAGE_MODE_GET_GPIOMASK 0x2 2212*4882a593Smuzhiyun 2213*4882a593Smuzhiyun typedef struct _SET_VOLTAGE_PARAMETERS 2214*4882a593Smuzhiyun { 2215*4882a593Smuzhiyun UCHAR ucVoltageType; // To tell which voltage to set up, VDDC/MVDDC/MVDDQ 2216*4882a593Smuzhiyun UCHAR ucVoltageMode; // To set all, to set source A or source B or ... 2217*4882a593Smuzhiyun UCHAR ucVoltageIndex; // An index to tell which voltage level 2218*4882a593Smuzhiyun UCHAR ucReserved; 2219*4882a593Smuzhiyun }SET_VOLTAGE_PARAMETERS; 2220*4882a593Smuzhiyun 2221*4882a593Smuzhiyun typedef struct _SET_VOLTAGE_PARAMETERS_V2 2222*4882a593Smuzhiyun { 2223*4882a593Smuzhiyun UCHAR ucVoltageType; // To tell which voltage to set up, VDDC/MVDDC/MVDDQ 2224*4882a593Smuzhiyun UCHAR ucVoltageMode; // Not used, maybe use for state machine for differen power mode 2225*4882a593Smuzhiyun USHORT usVoltageLevel; // real voltage level 2226*4882a593Smuzhiyun }SET_VOLTAGE_PARAMETERS_V2; 2227*4882a593Smuzhiyun 2228*4882a593Smuzhiyun // used by both SetVoltageTable v1.3 and v1.4 2229*4882a593Smuzhiyun typedef struct _SET_VOLTAGE_PARAMETERS_V1_3 2230*4882a593Smuzhiyun { 2231*4882a593Smuzhiyun UCHAR ucVoltageType; // To tell which voltage to set up, VDDC/MVDDC/MVDDQ/VDDCI 2232*4882a593Smuzhiyun UCHAR ucVoltageMode; // Indicate action: Set voltage level 2233*4882a593Smuzhiyun USHORT usVoltageLevel; // real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) 2234*4882a593Smuzhiyun }SET_VOLTAGE_PARAMETERS_V1_3; 2235*4882a593Smuzhiyun 2236*4882a593Smuzhiyun //ucVoltageType 2237*4882a593Smuzhiyun #define VOLTAGE_TYPE_VDDC 1 2238*4882a593Smuzhiyun #define VOLTAGE_TYPE_MVDDC 2 2239*4882a593Smuzhiyun #define VOLTAGE_TYPE_MVDDQ 3 2240*4882a593Smuzhiyun #define VOLTAGE_TYPE_VDDCI 4 2241*4882a593Smuzhiyun 2242*4882a593Smuzhiyun //SET_VOLTAGE_PARAMETERS_V3.ucVoltageMode 2243*4882a593Smuzhiyun #define ATOM_SET_VOLTAGE 0 //Set voltage Level 2244*4882a593Smuzhiyun #define ATOM_INIT_VOLTAGE_REGULATOR 3 //Init Regulator 2245*4882a593Smuzhiyun #define ATOM_SET_VOLTAGE_PHASE 4 //Set Vregulator Phase, only for SVID/PVID regulator 2246*4882a593Smuzhiyun #define ATOM_GET_MAX_VOLTAGE 6 //Get Max Voltage, not used from SetVoltageTable v1.3 2247*4882a593Smuzhiyun #define ATOM_GET_VOLTAGE_LEVEL 6 //Get Voltage level from vitual voltage ID, not used for SetVoltage v1.4 2248*4882a593Smuzhiyun #define ATOM_GET_LEAKAGE_ID 8 //Get Leakage Voltage Id ( starting from SMU7x IP ), SetVoltage v1.4 2249*4882a593Smuzhiyun 2250*4882a593Smuzhiyun // define vitual voltage id in usVoltageLevel 2251*4882a593Smuzhiyun #define ATOM_VIRTUAL_VOLTAGE_ID0 0xff01 2252*4882a593Smuzhiyun #define ATOM_VIRTUAL_VOLTAGE_ID1 0xff02 2253*4882a593Smuzhiyun #define ATOM_VIRTUAL_VOLTAGE_ID2 0xff03 2254*4882a593Smuzhiyun #define ATOM_VIRTUAL_VOLTAGE_ID3 0xff04 2255*4882a593Smuzhiyun #define ATOM_VIRTUAL_VOLTAGE_ID4 0xff05 2256*4882a593Smuzhiyun #define ATOM_VIRTUAL_VOLTAGE_ID5 0xff06 2257*4882a593Smuzhiyun #define ATOM_VIRTUAL_VOLTAGE_ID6 0xff07 2258*4882a593Smuzhiyun #define ATOM_VIRTUAL_VOLTAGE_ID7 0xff08 2259*4882a593Smuzhiyun 2260*4882a593Smuzhiyun typedef struct _SET_VOLTAGE_PS_ALLOCATION 2261*4882a593Smuzhiyun { 2262*4882a593Smuzhiyun SET_VOLTAGE_PARAMETERS sASICSetVoltage; 2263*4882a593Smuzhiyun WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; 2264*4882a593Smuzhiyun }SET_VOLTAGE_PS_ALLOCATION; 2265*4882a593Smuzhiyun 2266*4882a593Smuzhiyun // New Added from SI for GetVoltageInfoTable, input parameter structure 2267*4882a593Smuzhiyun typedef struct _GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_1 2268*4882a593Smuzhiyun { 2269*4882a593Smuzhiyun UCHAR ucVoltageType; // Input: To tell which voltage to set up, VDDC/MVDDC/MVDDQ/VDDCI 2270*4882a593Smuzhiyun UCHAR ucVoltageMode; // Input: Indicate action: Get voltage info 2271*4882a593Smuzhiyun USHORT usVoltageLevel; // Input: real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) or Leakage Id 2272*4882a593Smuzhiyun ULONG ulReserved; 2273*4882a593Smuzhiyun }GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_1; 2274*4882a593Smuzhiyun 2275*4882a593Smuzhiyun // New Added from SI for GetVoltageInfoTable, output parameter structure when ucVotlageMode == ATOM_GET_VOLTAGE_VID 2276*4882a593Smuzhiyun typedef struct _GET_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_1 2277*4882a593Smuzhiyun { 2278*4882a593Smuzhiyun ULONG ulVotlageGpioState; 2279*4882a593Smuzhiyun ULONG ulVoltageGPioMask; 2280*4882a593Smuzhiyun }GET_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_1; 2281*4882a593Smuzhiyun 2282*4882a593Smuzhiyun // New Added from SI for GetVoltageInfoTable, output parameter structure when ucVotlageMode == ATOM_GET_VOLTAGE_STATEx_LEAKAGE_VID 2283*4882a593Smuzhiyun typedef struct _GET_LEAKAGE_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_1 2284*4882a593Smuzhiyun { 2285*4882a593Smuzhiyun USHORT usVoltageLevel; 2286*4882a593Smuzhiyun USHORT usVoltageId; // Voltage Id programmed in Voltage Regulator 2287*4882a593Smuzhiyun ULONG ulReseved; 2288*4882a593Smuzhiyun }GET_LEAKAGE_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_1; 2289*4882a593Smuzhiyun 2290*4882a593Smuzhiyun 2291*4882a593Smuzhiyun // GetVoltageInfo v1.1 ucVoltageMode 2292*4882a593Smuzhiyun #define ATOM_GET_VOLTAGE_VID 0x00 2293*4882a593Smuzhiyun #define ATOM_GET_VOTLAGE_INIT_SEQ 0x03 2294*4882a593Smuzhiyun #define ATOM_GET_VOLTTAGE_PHASE_PHASE_VID 0x04 2295*4882a593Smuzhiyun #define ATOM_GET_VOLTAGE_SVID2 0x07 //Get SVI2 Regulator Info 2296*4882a593Smuzhiyun 2297*4882a593Smuzhiyun // for SI, this state map to 0xff02 voltage state in Power Play table, which is power boost state 2298*4882a593Smuzhiyun #define ATOM_GET_VOLTAGE_STATE0_LEAKAGE_VID 0x10 2299*4882a593Smuzhiyun // for SI, this state map to 0xff01 voltage state in Power Play table, which is performance state 2300*4882a593Smuzhiyun #define ATOM_GET_VOLTAGE_STATE1_LEAKAGE_VID 0x11 2301*4882a593Smuzhiyun 2302*4882a593Smuzhiyun #define ATOM_GET_VOLTAGE_STATE2_LEAKAGE_VID 0x12 2303*4882a593Smuzhiyun #define ATOM_GET_VOLTAGE_STATE3_LEAKAGE_VID 0x13 2304*4882a593Smuzhiyun 2305*4882a593Smuzhiyun // New Added from CI Hawaii for GetVoltageInfoTable, input parameter structure 2306*4882a593Smuzhiyun typedef struct _GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2 2307*4882a593Smuzhiyun { 2308*4882a593Smuzhiyun UCHAR ucVoltageType; // Input: To tell which voltage to set up, VDDC/MVDDC/MVDDQ/VDDCI 2309*4882a593Smuzhiyun UCHAR ucVoltageMode; // Input: Indicate action: Get voltage info 2310*4882a593Smuzhiyun USHORT usVoltageLevel; // Input: real voltage level in unit of mv or Voltage Phase (0, 1, 2, .. ) or Leakage Id 2311*4882a593Smuzhiyun ULONG ulSCLKFreq; // Input: when ucVoltageMode= ATOM_GET_VOLTAGE_EVV_VOLTAGE, DPM state SCLK frequency, Define in PPTable SCLK/Voltage dependence table 2312*4882a593Smuzhiyun }GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2; 2313*4882a593Smuzhiyun 2314*4882a593Smuzhiyun // New in GetVoltageInfo v1.2 ucVoltageMode 2315*4882a593Smuzhiyun #define ATOM_GET_VOLTAGE_EVV_VOLTAGE 0x09 2316*4882a593Smuzhiyun 2317*4882a593Smuzhiyun // New Added from CI Hawaii for EVV feature 2318*4882a593Smuzhiyun typedef struct _GET_EVV_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_2 2319*4882a593Smuzhiyun { 2320*4882a593Smuzhiyun USHORT usVoltageLevel; // real voltage level in unit of mv 2321*4882a593Smuzhiyun USHORT usVoltageId; // Voltage Id programmed in Voltage Regulator 2322*4882a593Smuzhiyun ULONG ulReseved; 2323*4882a593Smuzhiyun }GET_EVV_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_2; 2324*4882a593Smuzhiyun 2325*4882a593Smuzhiyun /****************************************************************************/ 2326*4882a593Smuzhiyun // Structures used by TVEncoderControlTable 2327*4882a593Smuzhiyun /****************************************************************************/ 2328*4882a593Smuzhiyun typedef struct _TV_ENCODER_CONTROL_PARAMETERS 2329*4882a593Smuzhiyun { 2330*4882a593Smuzhiyun USHORT usPixelClock; // in 10KHz; for bios convenient 2331*4882a593Smuzhiyun UCHAR ucTvStandard; // See definition "ATOM_TV_NTSC ..." 2332*4882a593Smuzhiyun UCHAR ucAction; // 0: turn off encoder 2333*4882a593Smuzhiyun // 1: setup and turn on encoder 2334*4882a593Smuzhiyun }TV_ENCODER_CONTROL_PARAMETERS; 2335*4882a593Smuzhiyun 2336*4882a593Smuzhiyun typedef struct _TV_ENCODER_CONTROL_PS_ALLOCATION 2337*4882a593Smuzhiyun { 2338*4882a593Smuzhiyun TV_ENCODER_CONTROL_PARAMETERS sTVEncoder; 2339*4882a593Smuzhiyun WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; // Don't set this one 2340*4882a593Smuzhiyun }TV_ENCODER_CONTROL_PS_ALLOCATION; 2341*4882a593Smuzhiyun 2342*4882a593Smuzhiyun //==============================Data Table Portion==================================== 2343*4882a593Smuzhiyun 2344*4882a593Smuzhiyun /****************************************************************************/ 2345*4882a593Smuzhiyun // Structure used in Data.mtb 2346*4882a593Smuzhiyun /****************************************************************************/ 2347*4882a593Smuzhiyun typedef struct _ATOM_MASTER_LIST_OF_DATA_TABLES 2348*4882a593Smuzhiyun { 2349*4882a593Smuzhiyun USHORT UtilityPipeLine; // Offest for the utility to get parser info,Don't change this position! 2350*4882a593Smuzhiyun USHORT MultimediaCapabilityInfo; // Only used by MM Lib,latest version 1.1, not configuable from Bios, need to include the table to build Bios 2351*4882a593Smuzhiyun USHORT MultimediaConfigInfo; // Only used by MM Lib,latest version 2.1, not configuable from Bios, need to include the table to build Bios 2352*4882a593Smuzhiyun USHORT StandardVESA_Timing; // Only used by Bios 2353*4882a593Smuzhiyun USHORT FirmwareInfo; // Shared by various SW components,latest version 1.4 2354*4882a593Smuzhiyun USHORT PaletteData; // Only used by BIOS 2355*4882a593Smuzhiyun USHORT LCD_Info; // Shared by various SW components,latest version 1.3, was called LVDS_Info 2356*4882a593Smuzhiyun USHORT DIGTransmitterInfo; // Internal used by VBIOS only version 3.1 2357*4882a593Smuzhiyun USHORT AnalogTV_Info; // Shared by various SW components,latest version 1.1 2358*4882a593Smuzhiyun USHORT SupportedDevicesInfo; // Will be obsolete from R600 2359*4882a593Smuzhiyun USHORT GPIO_I2C_Info; // Shared by various SW components,latest version 1.2 will be used from R600 2360*4882a593Smuzhiyun USHORT VRAM_UsageByFirmware; // Shared by various SW components,latest version 1.3 will be used from R600 2361*4882a593Smuzhiyun USHORT GPIO_Pin_LUT; // Shared by various SW components,latest version 1.1 2362*4882a593Smuzhiyun USHORT VESA_ToInternalModeLUT; // Only used by Bios 2363*4882a593Smuzhiyun USHORT ComponentVideoInfo; // Shared by various SW components,latest version 2.1 will be used from R600 2364*4882a593Smuzhiyun USHORT PowerPlayInfo; // Shared by various SW components,latest version 2.1,new design from R600 2365*4882a593Smuzhiyun USHORT CompassionateData; // Will be obsolete from R600 2366*4882a593Smuzhiyun USHORT SaveRestoreInfo; // Only used by Bios 2367*4882a593Smuzhiyun USHORT PPLL_SS_Info; // Shared by various SW components,latest version 1.2, used to call SS_Info, change to new name because of int ASIC SS info 2368*4882a593Smuzhiyun USHORT OemInfo; // Defined and used by external SW, should be obsolete soon 2369*4882a593Smuzhiyun USHORT XTMDS_Info; // Will be obsolete from R600 2370*4882a593Smuzhiyun USHORT MclkSS_Info; // Shared by various SW components,latest version 1.1, only enabled when ext SS chip is used 2371*4882a593Smuzhiyun USHORT Object_Header; // Shared by various SW components,latest version 1.1 2372*4882a593Smuzhiyun USHORT IndirectIOAccess; // Only used by Bios,this table position can't change at all!! 2373*4882a593Smuzhiyun USHORT MC_InitParameter; // Only used by command table 2374*4882a593Smuzhiyun USHORT ASIC_VDDC_Info; // Will be obsolete from R600 2375*4882a593Smuzhiyun USHORT ASIC_InternalSS_Info; // New tabel name from R600, used to be called "ASIC_MVDDC_Info" 2376*4882a593Smuzhiyun USHORT TV_VideoMode; // Only used by command table 2377*4882a593Smuzhiyun USHORT VRAM_Info; // Only used by command table, latest version 1.3 2378*4882a593Smuzhiyun USHORT MemoryTrainingInfo; // Used for VBIOS and Diag utility for memory training purpose since R600. the new table rev start from 2.1 2379*4882a593Smuzhiyun USHORT IntegratedSystemInfo; // Shared by various SW components 2380*4882a593Smuzhiyun USHORT ASIC_ProfilingInfo; // New table name from R600, used to be called "ASIC_VDDCI_Info" for pre-R600 2381*4882a593Smuzhiyun USHORT VoltageObjectInfo; // Shared by various SW components, latest version 1.1 2382*4882a593Smuzhiyun USHORT PowerSourceInfo; // Shared by various SW components, latest versoin 1.1 2383*4882a593Smuzhiyun }ATOM_MASTER_LIST_OF_DATA_TABLES; 2384*4882a593Smuzhiyun 2385*4882a593Smuzhiyun typedef struct _ATOM_MASTER_DATA_TABLE 2386*4882a593Smuzhiyun { 2387*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2388*4882a593Smuzhiyun ATOM_MASTER_LIST_OF_DATA_TABLES ListOfDataTables; 2389*4882a593Smuzhiyun }ATOM_MASTER_DATA_TABLE; 2390*4882a593Smuzhiyun 2391*4882a593Smuzhiyun // For backward compatible 2392*4882a593Smuzhiyun #define LVDS_Info LCD_Info 2393*4882a593Smuzhiyun #define DAC_Info PaletteData 2394*4882a593Smuzhiyun #define TMDS_Info DIGTransmitterInfo 2395*4882a593Smuzhiyun 2396*4882a593Smuzhiyun /****************************************************************************/ 2397*4882a593Smuzhiyun // Structure used in MultimediaCapabilityInfoTable 2398*4882a593Smuzhiyun /****************************************************************************/ 2399*4882a593Smuzhiyun typedef struct _ATOM_MULTIMEDIA_CAPABILITY_INFO 2400*4882a593Smuzhiyun { 2401*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2402*4882a593Smuzhiyun ULONG ulSignature; // HW info table signature string "$ATI" 2403*4882a593Smuzhiyun UCHAR ucI2C_Type; // I2C type (normal GP_IO, ImpactTV GP_IO, Dedicated I2C pin, etc) 2404*4882a593Smuzhiyun UCHAR ucTV_OutInfo; // Type of TV out supported (3:0) and video out crystal frequency (6:4) and TV data port (7) 2405*4882a593Smuzhiyun UCHAR ucVideoPortInfo; // Provides the video port capabilities 2406*4882a593Smuzhiyun UCHAR ucHostPortInfo; // Provides host port configuration information 2407*4882a593Smuzhiyun }ATOM_MULTIMEDIA_CAPABILITY_INFO; 2408*4882a593Smuzhiyun 2409*4882a593Smuzhiyun /****************************************************************************/ 2410*4882a593Smuzhiyun // Structure used in MultimediaConfigInfoTable 2411*4882a593Smuzhiyun /****************************************************************************/ 2412*4882a593Smuzhiyun typedef struct _ATOM_MULTIMEDIA_CONFIG_INFO 2413*4882a593Smuzhiyun { 2414*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2415*4882a593Smuzhiyun ULONG ulSignature; // MM info table signature sting "$MMT" 2416*4882a593Smuzhiyun UCHAR ucTunerInfo; // Type of tuner installed on the adapter (4:0) and video input for tuner (7:5) 2417*4882a593Smuzhiyun UCHAR ucAudioChipInfo; // List the audio chip type (3:0) product type (4) and OEM revision (7:5) 2418*4882a593Smuzhiyun UCHAR ucProductID; // Defines as OEM ID or ATI board ID dependent on product type setting 2419*4882a593Smuzhiyun UCHAR ucMiscInfo1; // Tuner voltage (1:0) HW teletext support (3:2) FM audio decoder (5:4) reserved (6) audio scrambling (7) 2420*4882a593Smuzhiyun UCHAR ucMiscInfo2; // I2S input config (0) I2S output config (1) I2S Audio Chip (4:2) SPDIF Output Config (5) reserved (7:6) 2421*4882a593Smuzhiyun UCHAR ucMiscInfo3; // Video Decoder Type (3:0) Video In Standard/Crystal (7:4) 2422*4882a593Smuzhiyun UCHAR ucMiscInfo4; // Video Decoder Host Config (2:0) reserved (7:3) 2423*4882a593Smuzhiyun UCHAR ucVideoInput0Info;// Video Input 0 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6) 2424*4882a593Smuzhiyun UCHAR ucVideoInput1Info;// Video Input 1 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6) 2425*4882a593Smuzhiyun UCHAR ucVideoInput2Info;// Video Input 2 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6) 2426*4882a593Smuzhiyun UCHAR ucVideoInput3Info;// Video Input 3 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6) 2427*4882a593Smuzhiyun UCHAR ucVideoInput4Info;// Video Input 4 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6) 2428*4882a593Smuzhiyun }ATOM_MULTIMEDIA_CONFIG_INFO; 2429*4882a593Smuzhiyun 2430*4882a593Smuzhiyun 2431*4882a593Smuzhiyun /****************************************************************************/ 2432*4882a593Smuzhiyun // Structures used in FirmwareInfoTable 2433*4882a593Smuzhiyun /****************************************************************************/ 2434*4882a593Smuzhiyun 2435*4882a593Smuzhiyun // usBIOSCapability Definition: 2436*4882a593Smuzhiyun // Bit 0 = 0: Bios image is not Posted, =1:Bios image is Posted; 2437*4882a593Smuzhiyun // Bit 1 = 0: Dual CRTC is not supported, =1: Dual CRTC is supported; 2438*4882a593Smuzhiyun // Bit 2 = 0: Extended Desktop is not supported, =1: Extended Desktop is supported; 2439*4882a593Smuzhiyun // Others: Reserved 2440*4882a593Smuzhiyun #define ATOM_BIOS_INFO_ATOM_FIRMWARE_POSTED 0x0001 2441*4882a593Smuzhiyun #define ATOM_BIOS_INFO_DUAL_CRTC_SUPPORT 0x0002 2442*4882a593Smuzhiyun #define ATOM_BIOS_INFO_EXTENDED_DESKTOP_SUPPORT 0x0004 2443*4882a593Smuzhiyun #define ATOM_BIOS_INFO_MEMORY_CLOCK_SS_SUPPORT 0x0008 // (valid from v1.1 ~v1.4):=1: memclk SS enable, =0 memclk SS disable. 2444*4882a593Smuzhiyun #define ATOM_BIOS_INFO_ENGINE_CLOCK_SS_SUPPORT 0x0010 // (valid from v1.1 ~v1.4):=1: engclk SS enable, =0 engclk SS disable. 2445*4882a593Smuzhiyun #define ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU 0x0020 2446*4882a593Smuzhiyun #define ATOM_BIOS_INFO_WMI_SUPPORT 0x0040 2447*4882a593Smuzhiyun #define ATOM_BIOS_INFO_PPMODE_ASSIGNGED_BY_SYSTEM 0x0080 2448*4882a593Smuzhiyun #define ATOM_BIOS_INFO_HYPERMEMORY_SUPPORT 0x0100 2449*4882a593Smuzhiyun #define ATOM_BIOS_INFO_HYPERMEMORY_SIZE_MASK 0x1E00 2450*4882a593Smuzhiyun #define ATOM_BIOS_INFO_VPOST_WITHOUT_FIRST_MODE_SET 0x2000 2451*4882a593Smuzhiyun #define ATOM_BIOS_INFO_BIOS_SCRATCH6_SCL2_REDEFINE 0x4000 2452*4882a593Smuzhiyun #define ATOM_BIOS_INFO_MEMORY_CLOCK_EXT_SS_SUPPORT 0x0008 // (valid from v2.1 ): =1: memclk ss enable with external ss chip 2453*4882a593Smuzhiyun #define ATOM_BIOS_INFO_ENGINE_CLOCK_EXT_SS_SUPPORT 0x0010 // (valid from v2.1 ): =1: engclk ss enable with external ss chip 2454*4882a593Smuzhiyun 2455*4882a593Smuzhiyun #ifndef _H2INC 2456*4882a593Smuzhiyun 2457*4882a593Smuzhiyun //Please don't add or expand this bitfield structure below, this one will retire soon.! 2458*4882a593Smuzhiyun typedef struct _ATOM_FIRMWARE_CAPABILITY 2459*4882a593Smuzhiyun { 2460*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 2461*4882a593Smuzhiyun USHORT Reserved:1; 2462*4882a593Smuzhiyun USHORT SCL2Redefined:1; 2463*4882a593Smuzhiyun USHORT PostWithoutModeSet:1; 2464*4882a593Smuzhiyun USHORT HyperMemory_Size:4; 2465*4882a593Smuzhiyun USHORT HyperMemory_Support:1; 2466*4882a593Smuzhiyun USHORT PPMode_Assigned:1; 2467*4882a593Smuzhiyun USHORT WMI_SUPPORT:1; 2468*4882a593Smuzhiyun USHORT GPUControlsBL:1; 2469*4882a593Smuzhiyun USHORT EngineClockSS_Support:1; 2470*4882a593Smuzhiyun USHORT MemoryClockSS_Support:1; 2471*4882a593Smuzhiyun USHORT ExtendedDesktopSupport:1; 2472*4882a593Smuzhiyun USHORT DualCRTC_Support:1; 2473*4882a593Smuzhiyun USHORT FirmwarePosted:1; 2474*4882a593Smuzhiyun #else 2475*4882a593Smuzhiyun USHORT FirmwarePosted:1; 2476*4882a593Smuzhiyun USHORT DualCRTC_Support:1; 2477*4882a593Smuzhiyun USHORT ExtendedDesktopSupport:1; 2478*4882a593Smuzhiyun USHORT MemoryClockSS_Support:1; 2479*4882a593Smuzhiyun USHORT EngineClockSS_Support:1; 2480*4882a593Smuzhiyun USHORT GPUControlsBL:1; 2481*4882a593Smuzhiyun USHORT WMI_SUPPORT:1; 2482*4882a593Smuzhiyun USHORT PPMode_Assigned:1; 2483*4882a593Smuzhiyun USHORT HyperMemory_Support:1; 2484*4882a593Smuzhiyun USHORT HyperMemory_Size:4; 2485*4882a593Smuzhiyun USHORT PostWithoutModeSet:1; 2486*4882a593Smuzhiyun USHORT SCL2Redefined:1; 2487*4882a593Smuzhiyun USHORT Reserved:1; 2488*4882a593Smuzhiyun #endif 2489*4882a593Smuzhiyun }ATOM_FIRMWARE_CAPABILITY; 2490*4882a593Smuzhiyun 2491*4882a593Smuzhiyun typedef union _ATOM_FIRMWARE_CAPABILITY_ACCESS 2492*4882a593Smuzhiyun { 2493*4882a593Smuzhiyun ATOM_FIRMWARE_CAPABILITY sbfAccess; 2494*4882a593Smuzhiyun USHORT susAccess; 2495*4882a593Smuzhiyun }ATOM_FIRMWARE_CAPABILITY_ACCESS; 2496*4882a593Smuzhiyun 2497*4882a593Smuzhiyun #else 2498*4882a593Smuzhiyun 2499*4882a593Smuzhiyun typedef union _ATOM_FIRMWARE_CAPABILITY_ACCESS 2500*4882a593Smuzhiyun { 2501*4882a593Smuzhiyun USHORT susAccess; 2502*4882a593Smuzhiyun }ATOM_FIRMWARE_CAPABILITY_ACCESS; 2503*4882a593Smuzhiyun 2504*4882a593Smuzhiyun #endif 2505*4882a593Smuzhiyun 2506*4882a593Smuzhiyun typedef struct _ATOM_FIRMWARE_INFO 2507*4882a593Smuzhiyun { 2508*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2509*4882a593Smuzhiyun ULONG ulFirmwareRevision; 2510*4882a593Smuzhiyun ULONG ulDefaultEngineClock; //In 10Khz unit 2511*4882a593Smuzhiyun ULONG ulDefaultMemoryClock; //In 10Khz unit 2512*4882a593Smuzhiyun ULONG ulDriverTargetEngineClock; //In 10Khz unit 2513*4882a593Smuzhiyun ULONG ulDriverTargetMemoryClock; //In 10Khz unit 2514*4882a593Smuzhiyun ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit 2515*4882a593Smuzhiyun ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit 2516*4882a593Smuzhiyun ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit 2517*4882a593Smuzhiyun ULONG ulASICMaxEngineClock; //In 10Khz unit 2518*4882a593Smuzhiyun ULONG ulASICMaxMemoryClock; //In 10Khz unit 2519*4882a593Smuzhiyun UCHAR ucASICMaxTemperature; 2520*4882a593Smuzhiyun UCHAR ucPadding[3]; //Don't use them 2521*4882a593Smuzhiyun ULONG aulReservedForBIOS[3]; //Don't use them 2522*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Input; //In 10Khz unit 2523*4882a593Smuzhiyun USHORT usMaxEngineClockPLL_Input; //In 10Khz unit 2524*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Output; //In 10Khz unit 2525*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Input; //In 10Khz unit 2526*4882a593Smuzhiyun USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit 2527*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Output; //In 10Khz unit 2528*4882a593Smuzhiyun USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk 2529*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Input; //In 10Khz unit 2530*4882a593Smuzhiyun USHORT usMaxPixelClockPLL_Input; //In 10Khz unit 2531*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Output; //In 10Khz unit, the definitions above can't change!!! 2532*4882a593Smuzhiyun ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability; 2533*4882a593Smuzhiyun USHORT usReferenceClock; //In 10Khz unit 2534*4882a593Smuzhiyun USHORT usPM_RTS_Location; //RTS PM4 starting location in ROM in 1Kb unit 2535*4882a593Smuzhiyun UCHAR ucPM_RTS_StreamSize; //RTS PM4 packets in Kb unit 2536*4882a593Smuzhiyun UCHAR ucDesign_ID; //Indicate what is the board design 2537*4882a593Smuzhiyun UCHAR ucMemoryModule_ID; //Indicate what is the board design 2538*4882a593Smuzhiyun }ATOM_FIRMWARE_INFO; 2539*4882a593Smuzhiyun 2540*4882a593Smuzhiyun typedef struct _ATOM_FIRMWARE_INFO_V1_2 2541*4882a593Smuzhiyun { 2542*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2543*4882a593Smuzhiyun ULONG ulFirmwareRevision; 2544*4882a593Smuzhiyun ULONG ulDefaultEngineClock; //In 10Khz unit 2545*4882a593Smuzhiyun ULONG ulDefaultMemoryClock; //In 10Khz unit 2546*4882a593Smuzhiyun ULONG ulDriverTargetEngineClock; //In 10Khz unit 2547*4882a593Smuzhiyun ULONG ulDriverTargetMemoryClock; //In 10Khz unit 2548*4882a593Smuzhiyun ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit 2549*4882a593Smuzhiyun ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit 2550*4882a593Smuzhiyun ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit 2551*4882a593Smuzhiyun ULONG ulASICMaxEngineClock; //In 10Khz unit 2552*4882a593Smuzhiyun ULONG ulASICMaxMemoryClock; //In 10Khz unit 2553*4882a593Smuzhiyun UCHAR ucASICMaxTemperature; 2554*4882a593Smuzhiyun UCHAR ucMinAllowedBL_Level; 2555*4882a593Smuzhiyun UCHAR ucPadding[2]; //Don't use them 2556*4882a593Smuzhiyun ULONG aulReservedForBIOS[2]; //Don't use them 2557*4882a593Smuzhiyun ULONG ulMinPixelClockPLL_Output; //In 10Khz unit 2558*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Input; //In 10Khz unit 2559*4882a593Smuzhiyun USHORT usMaxEngineClockPLL_Input; //In 10Khz unit 2560*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Output; //In 10Khz unit 2561*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Input; //In 10Khz unit 2562*4882a593Smuzhiyun USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit 2563*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Output; //In 10Khz unit 2564*4882a593Smuzhiyun USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk 2565*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Input; //In 10Khz unit 2566*4882a593Smuzhiyun USHORT usMaxPixelClockPLL_Input; //In 10Khz unit 2567*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Output; //In 10Khz unit - lower 16bit of ulMinPixelClockPLL_Output 2568*4882a593Smuzhiyun ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability; 2569*4882a593Smuzhiyun USHORT usReferenceClock; //In 10Khz unit 2570*4882a593Smuzhiyun USHORT usPM_RTS_Location; //RTS PM4 starting location in ROM in 1Kb unit 2571*4882a593Smuzhiyun UCHAR ucPM_RTS_StreamSize; //RTS PM4 packets in Kb unit 2572*4882a593Smuzhiyun UCHAR ucDesign_ID; //Indicate what is the board design 2573*4882a593Smuzhiyun UCHAR ucMemoryModule_ID; //Indicate what is the board design 2574*4882a593Smuzhiyun }ATOM_FIRMWARE_INFO_V1_2; 2575*4882a593Smuzhiyun 2576*4882a593Smuzhiyun typedef struct _ATOM_FIRMWARE_INFO_V1_3 2577*4882a593Smuzhiyun { 2578*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2579*4882a593Smuzhiyun ULONG ulFirmwareRevision; 2580*4882a593Smuzhiyun ULONG ulDefaultEngineClock; //In 10Khz unit 2581*4882a593Smuzhiyun ULONG ulDefaultMemoryClock; //In 10Khz unit 2582*4882a593Smuzhiyun ULONG ulDriverTargetEngineClock; //In 10Khz unit 2583*4882a593Smuzhiyun ULONG ulDriverTargetMemoryClock; //In 10Khz unit 2584*4882a593Smuzhiyun ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit 2585*4882a593Smuzhiyun ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit 2586*4882a593Smuzhiyun ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit 2587*4882a593Smuzhiyun ULONG ulASICMaxEngineClock; //In 10Khz unit 2588*4882a593Smuzhiyun ULONG ulASICMaxMemoryClock; //In 10Khz unit 2589*4882a593Smuzhiyun UCHAR ucASICMaxTemperature; 2590*4882a593Smuzhiyun UCHAR ucMinAllowedBL_Level; 2591*4882a593Smuzhiyun UCHAR ucPadding[2]; //Don't use them 2592*4882a593Smuzhiyun ULONG aulReservedForBIOS; //Don't use them 2593*4882a593Smuzhiyun ULONG ul3DAccelerationEngineClock;//In 10Khz unit 2594*4882a593Smuzhiyun ULONG ulMinPixelClockPLL_Output; //In 10Khz unit 2595*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Input; //In 10Khz unit 2596*4882a593Smuzhiyun USHORT usMaxEngineClockPLL_Input; //In 10Khz unit 2597*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Output; //In 10Khz unit 2598*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Input; //In 10Khz unit 2599*4882a593Smuzhiyun USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit 2600*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Output; //In 10Khz unit 2601*4882a593Smuzhiyun USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk 2602*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Input; //In 10Khz unit 2603*4882a593Smuzhiyun USHORT usMaxPixelClockPLL_Input; //In 10Khz unit 2604*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Output; //In 10Khz unit - lower 16bit of ulMinPixelClockPLL_Output 2605*4882a593Smuzhiyun ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability; 2606*4882a593Smuzhiyun USHORT usReferenceClock; //In 10Khz unit 2607*4882a593Smuzhiyun USHORT usPM_RTS_Location; //RTS PM4 starting location in ROM in 1Kb unit 2608*4882a593Smuzhiyun UCHAR ucPM_RTS_StreamSize; //RTS PM4 packets in Kb unit 2609*4882a593Smuzhiyun UCHAR ucDesign_ID; //Indicate what is the board design 2610*4882a593Smuzhiyun UCHAR ucMemoryModule_ID; //Indicate what is the board design 2611*4882a593Smuzhiyun }ATOM_FIRMWARE_INFO_V1_3; 2612*4882a593Smuzhiyun 2613*4882a593Smuzhiyun typedef struct _ATOM_FIRMWARE_INFO_V1_4 2614*4882a593Smuzhiyun { 2615*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2616*4882a593Smuzhiyun ULONG ulFirmwareRevision; 2617*4882a593Smuzhiyun ULONG ulDefaultEngineClock; //In 10Khz unit 2618*4882a593Smuzhiyun ULONG ulDefaultMemoryClock; //In 10Khz unit 2619*4882a593Smuzhiyun ULONG ulDriverTargetEngineClock; //In 10Khz unit 2620*4882a593Smuzhiyun ULONG ulDriverTargetMemoryClock; //In 10Khz unit 2621*4882a593Smuzhiyun ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit 2622*4882a593Smuzhiyun ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit 2623*4882a593Smuzhiyun ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit 2624*4882a593Smuzhiyun ULONG ulASICMaxEngineClock; //In 10Khz unit 2625*4882a593Smuzhiyun ULONG ulASICMaxMemoryClock; //In 10Khz unit 2626*4882a593Smuzhiyun UCHAR ucASICMaxTemperature; 2627*4882a593Smuzhiyun UCHAR ucMinAllowedBL_Level; 2628*4882a593Smuzhiyun USHORT usBootUpVDDCVoltage; //In MV unit 2629*4882a593Smuzhiyun USHORT usLcdMinPixelClockPLL_Output; // In MHz unit 2630*4882a593Smuzhiyun USHORT usLcdMaxPixelClockPLL_Output; // In MHz unit 2631*4882a593Smuzhiyun ULONG ul3DAccelerationEngineClock;//In 10Khz unit 2632*4882a593Smuzhiyun ULONG ulMinPixelClockPLL_Output; //In 10Khz unit 2633*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Input; //In 10Khz unit 2634*4882a593Smuzhiyun USHORT usMaxEngineClockPLL_Input; //In 10Khz unit 2635*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Output; //In 10Khz unit 2636*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Input; //In 10Khz unit 2637*4882a593Smuzhiyun USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit 2638*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Output; //In 10Khz unit 2639*4882a593Smuzhiyun USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk 2640*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Input; //In 10Khz unit 2641*4882a593Smuzhiyun USHORT usMaxPixelClockPLL_Input; //In 10Khz unit 2642*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Output; //In 10Khz unit - lower 16bit of ulMinPixelClockPLL_Output 2643*4882a593Smuzhiyun ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability; 2644*4882a593Smuzhiyun USHORT usReferenceClock; //In 10Khz unit 2645*4882a593Smuzhiyun USHORT usPM_RTS_Location; //RTS PM4 starting location in ROM in 1Kb unit 2646*4882a593Smuzhiyun UCHAR ucPM_RTS_StreamSize; //RTS PM4 packets in Kb unit 2647*4882a593Smuzhiyun UCHAR ucDesign_ID; //Indicate what is the board design 2648*4882a593Smuzhiyun UCHAR ucMemoryModule_ID; //Indicate what is the board design 2649*4882a593Smuzhiyun }ATOM_FIRMWARE_INFO_V1_4; 2650*4882a593Smuzhiyun 2651*4882a593Smuzhiyun //the structure below to be used from Cypress 2652*4882a593Smuzhiyun typedef struct _ATOM_FIRMWARE_INFO_V2_1 2653*4882a593Smuzhiyun { 2654*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2655*4882a593Smuzhiyun ULONG ulFirmwareRevision; 2656*4882a593Smuzhiyun ULONG ulDefaultEngineClock; //In 10Khz unit 2657*4882a593Smuzhiyun ULONG ulDefaultMemoryClock; //In 10Khz unit 2658*4882a593Smuzhiyun ULONG ulReserved1; 2659*4882a593Smuzhiyun ULONG ulReserved2; 2660*4882a593Smuzhiyun ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit 2661*4882a593Smuzhiyun ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit 2662*4882a593Smuzhiyun ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit 2663*4882a593Smuzhiyun ULONG ulBinaryAlteredInfo; //Was ulASICMaxEngineClock 2664*4882a593Smuzhiyun ULONG ulDefaultDispEngineClkFreq; //In 10Khz unit 2665*4882a593Smuzhiyun UCHAR ucReserved1; //Was ucASICMaxTemperature; 2666*4882a593Smuzhiyun UCHAR ucMinAllowedBL_Level; 2667*4882a593Smuzhiyun USHORT usBootUpVDDCVoltage; //In MV unit 2668*4882a593Smuzhiyun USHORT usLcdMinPixelClockPLL_Output; // In MHz unit 2669*4882a593Smuzhiyun USHORT usLcdMaxPixelClockPLL_Output; // In MHz unit 2670*4882a593Smuzhiyun ULONG ulReserved4; //Was ulAsicMaximumVoltage 2671*4882a593Smuzhiyun ULONG ulMinPixelClockPLL_Output; //In 10Khz unit 2672*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Input; //In 10Khz unit 2673*4882a593Smuzhiyun USHORT usMaxEngineClockPLL_Input; //In 10Khz unit 2674*4882a593Smuzhiyun USHORT usMinEngineClockPLL_Output; //In 10Khz unit 2675*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Input; //In 10Khz unit 2676*4882a593Smuzhiyun USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit 2677*4882a593Smuzhiyun USHORT usMinMemoryClockPLL_Output; //In 10Khz unit 2678*4882a593Smuzhiyun USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk 2679*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Input; //In 10Khz unit 2680*4882a593Smuzhiyun USHORT usMaxPixelClockPLL_Input; //In 10Khz unit 2681*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Output; //In 10Khz unit - lower 16bit of ulMinPixelClockPLL_Output 2682*4882a593Smuzhiyun ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability; 2683*4882a593Smuzhiyun USHORT usCoreReferenceClock; //In 10Khz unit 2684*4882a593Smuzhiyun USHORT usMemoryReferenceClock; //In 10Khz unit 2685*4882a593Smuzhiyun USHORT usUniphyDPModeExtClkFreq; //In 10Khz unit, if it is 0, In DP Mode Uniphy Input clock from internal PPLL, otherwise Input clock from external Spread clock 2686*4882a593Smuzhiyun UCHAR ucMemoryModule_ID; //Indicate what is the board design 2687*4882a593Smuzhiyun UCHAR ucReserved4[3]; 2688*4882a593Smuzhiyun }ATOM_FIRMWARE_INFO_V2_1; 2689*4882a593Smuzhiyun 2690*4882a593Smuzhiyun //the structure below to be used from NI 2691*4882a593Smuzhiyun //ucTableFormatRevision=2 2692*4882a593Smuzhiyun //ucTableContentRevision=2 2693*4882a593Smuzhiyun typedef struct _ATOM_FIRMWARE_INFO_V2_2 2694*4882a593Smuzhiyun { 2695*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2696*4882a593Smuzhiyun ULONG ulFirmwareRevision; 2697*4882a593Smuzhiyun ULONG ulDefaultEngineClock; //In 10Khz unit 2698*4882a593Smuzhiyun ULONG ulDefaultMemoryClock; //In 10Khz unit 2699*4882a593Smuzhiyun ULONG ulSPLL_OutputFreq; //In 10Khz unit 2700*4882a593Smuzhiyun ULONG ulGPUPLL_OutputFreq; //In 10Khz unit 2701*4882a593Smuzhiyun ULONG ulReserved1; //Was ulMaxEngineClockPLL_Output; //In 10Khz unit* 2702*4882a593Smuzhiyun ULONG ulReserved2; //Was ulMaxMemoryClockPLL_Output; //In 10Khz unit* 2703*4882a593Smuzhiyun ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit 2704*4882a593Smuzhiyun ULONG ulBinaryAlteredInfo; //Was ulASICMaxEngineClock ? 2705*4882a593Smuzhiyun ULONG ulDefaultDispEngineClkFreq; //In 10Khz unit. This is the frequency before DCDTO, corresponding to usBootUpVDDCVoltage. 2706*4882a593Smuzhiyun UCHAR ucReserved3; //Was ucASICMaxTemperature; 2707*4882a593Smuzhiyun UCHAR ucMinAllowedBL_Level; 2708*4882a593Smuzhiyun USHORT usBootUpVDDCVoltage; //In MV unit 2709*4882a593Smuzhiyun USHORT usLcdMinPixelClockPLL_Output; // In MHz unit 2710*4882a593Smuzhiyun USHORT usLcdMaxPixelClockPLL_Output; // In MHz unit 2711*4882a593Smuzhiyun ULONG ulReserved4; //Was ulAsicMaximumVoltage 2712*4882a593Smuzhiyun ULONG ulMinPixelClockPLL_Output; //In 10Khz unit 2713*4882a593Smuzhiyun UCHAR ucRemoteDisplayConfig; 2714*4882a593Smuzhiyun UCHAR ucReserved5[3]; //Was usMinEngineClockPLL_Input and usMaxEngineClockPLL_Input 2715*4882a593Smuzhiyun ULONG ulReserved6; //Was usMinEngineClockPLL_Output and usMinMemoryClockPLL_Input 2716*4882a593Smuzhiyun ULONG ulReserved7; //Was usMaxMemoryClockPLL_Input and usMinMemoryClockPLL_Output 2717*4882a593Smuzhiyun USHORT usReserved11; //Was usMaxPixelClock; //In 10Khz unit, Max. Pclk used only for DAC 2718*4882a593Smuzhiyun USHORT usMinPixelClockPLL_Input; //In 10Khz unit 2719*4882a593Smuzhiyun USHORT usMaxPixelClockPLL_Input; //In 10Khz unit 2720*4882a593Smuzhiyun USHORT usBootUpVDDCIVoltage; //In unit of mv; Was usMinPixelClockPLL_Output; 2721*4882a593Smuzhiyun ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability; 2722*4882a593Smuzhiyun USHORT usCoreReferenceClock; //In 10Khz unit 2723*4882a593Smuzhiyun USHORT usMemoryReferenceClock; //In 10Khz unit 2724*4882a593Smuzhiyun USHORT usUniphyDPModeExtClkFreq; //In 10Khz unit, if it is 0, In DP Mode Uniphy Input clock from internal PPLL, otherwise Input clock from external Spread clock 2725*4882a593Smuzhiyun UCHAR ucMemoryModule_ID; //Indicate what is the board design 2726*4882a593Smuzhiyun UCHAR ucReserved9[3]; 2727*4882a593Smuzhiyun USHORT usBootUpMVDDCVoltage; //In unit of mv; Was usMinPixelClockPLL_Output; 2728*4882a593Smuzhiyun USHORT usReserved12; 2729*4882a593Smuzhiyun ULONG ulReserved10[3]; // New added comparing to previous version 2730*4882a593Smuzhiyun }ATOM_FIRMWARE_INFO_V2_2; 2731*4882a593Smuzhiyun 2732*4882a593Smuzhiyun #define ATOM_FIRMWARE_INFO_LAST ATOM_FIRMWARE_INFO_V2_2 2733*4882a593Smuzhiyun 2734*4882a593Smuzhiyun 2735*4882a593Smuzhiyun // definition of ucRemoteDisplayConfig 2736*4882a593Smuzhiyun #define REMOTE_DISPLAY_DISABLE 0x00 2737*4882a593Smuzhiyun #define REMOTE_DISPLAY_ENABLE 0x01 2738*4882a593Smuzhiyun 2739*4882a593Smuzhiyun /****************************************************************************/ 2740*4882a593Smuzhiyun // Structures used in IntegratedSystemInfoTable 2741*4882a593Smuzhiyun /****************************************************************************/ 2742*4882a593Smuzhiyun #define IGP_CAP_FLAG_DYNAMIC_CLOCK_EN 0x2 2743*4882a593Smuzhiyun #define IGP_CAP_FLAG_AC_CARD 0x4 2744*4882a593Smuzhiyun #define IGP_CAP_FLAG_SDVO_CARD 0x8 2745*4882a593Smuzhiyun #define IGP_CAP_FLAG_POSTDIV_BY_2_MODE 0x10 2746*4882a593Smuzhiyun 2747*4882a593Smuzhiyun typedef struct _ATOM_INTEGRATED_SYSTEM_INFO 2748*4882a593Smuzhiyun { 2749*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2750*4882a593Smuzhiyun ULONG ulBootUpEngineClock; //in 10kHz unit 2751*4882a593Smuzhiyun ULONG ulBootUpMemoryClock; //in 10kHz unit 2752*4882a593Smuzhiyun ULONG ulMaxSystemMemoryClock; //in 10kHz unit 2753*4882a593Smuzhiyun ULONG ulMinSystemMemoryClock; //in 10kHz unit 2754*4882a593Smuzhiyun UCHAR ucNumberOfCyclesInPeriodHi; 2755*4882a593Smuzhiyun UCHAR ucLCDTimingSel; //=0:not valid.!=0 sel this timing descriptor from LCD EDID. 2756*4882a593Smuzhiyun USHORT usReserved1; 2757*4882a593Smuzhiyun USHORT usInterNBVoltageLow; //An intermidiate PMW value to set the voltage 2758*4882a593Smuzhiyun USHORT usInterNBVoltageHigh; //Another intermidiate PMW value to set the voltage 2759*4882a593Smuzhiyun ULONG ulReserved[2]; 2760*4882a593Smuzhiyun 2761*4882a593Smuzhiyun USHORT usFSBClock; //In MHz unit 2762*4882a593Smuzhiyun USHORT usCapabilityFlag; //Bit0=1 indicates the fake HDMI support,Bit1=0/1 for Dynamic clocking dis/enable 2763*4882a593Smuzhiyun //Bit[3:2]== 0:No PCIE card, 1:AC card, 2:SDVO card 2764*4882a593Smuzhiyun //Bit[4]==1: P/2 mode, ==0: P/1 mode 2765*4882a593Smuzhiyun USHORT usPCIENBCfgReg7; //bit[7:0]=MUX_Sel, bit[9:8]=MUX_SEL_LEVEL2, bit[10]=Lane_Reversal 2766*4882a593Smuzhiyun USHORT usK8MemoryClock; //in MHz unit 2767*4882a593Smuzhiyun USHORT usK8SyncStartDelay; //in 0.01 us unit 2768*4882a593Smuzhiyun USHORT usK8DataReturnTime; //in 0.01 us unit 2769*4882a593Smuzhiyun UCHAR ucMaxNBVoltage; 2770*4882a593Smuzhiyun UCHAR ucMinNBVoltage; 2771*4882a593Smuzhiyun UCHAR ucMemoryType; //[7:4]=1:DDR1;=2:DDR2;=3:DDR3.[3:0] is reserved 2772*4882a593Smuzhiyun UCHAR ucNumberOfCyclesInPeriod; //CG.FVTHROT_PWM_CTRL_REG0.NumberOfCyclesInPeriod 2773*4882a593Smuzhiyun UCHAR ucStartingPWM_HighTime; //CG.FVTHROT_PWM_CTRL_REG0.StartingPWM_HighTime 2774*4882a593Smuzhiyun UCHAR ucHTLinkWidth; //16 bit vs. 8 bit 2775*4882a593Smuzhiyun UCHAR ucMaxNBVoltageHigh; 2776*4882a593Smuzhiyun UCHAR ucMinNBVoltageHigh; 2777*4882a593Smuzhiyun }ATOM_INTEGRATED_SYSTEM_INFO; 2778*4882a593Smuzhiyun 2779*4882a593Smuzhiyun /* Explanation on entries in ATOM_INTEGRATED_SYSTEM_INFO 2780*4882a593Smuzhiyun ulBootUpMemoryClock: For Intel IGP,it's the UMA system memory clock 2781*4882a593Smuzhiyun For AMD IGP,it's 0 if no SidePort memory installed or it's the boot-up SidePort memory clock 2782*4882a593Smuzhiyun ulMaxSystemMemoryClock: For Intel IGP,it's the Max freq from memory SPD if memory runs in ASYNC mode or otherwise (SYNC mode) it's 0 2783*4882a593Smuzhiyun For AMD IGP,for now this can be 0 2784*4882a593Smuzhiyun ulMinSystemMemoryClock: For Intel IGP,it's 133MHz if memory runs in ASYNC mode or otherwise (SYNC mode) it's 0 2785*4882a593Smuzhiyun For AMD IGP,for now this can be 0 2786*4882a593Smuzhiyun 2787*4882a593Smuzhiyun usFSBClock: For Intel IGP,it's FSB Freq 2788*4882a593Smuzhiyun For AMD IGP,it's HT Link Speed 2789*4882a593Smuzhiyun 2790*4882a593Smuzhiyun usK8MemoryClock: For AMD IGP only. For RevF CPU, set it to 200 2791*4882a593Smuzhiyun usK8SyncStartDelay: For AMD IGP only. Memory access latency in K8, required for watermark calculation 2792*4882a593Smuzhiyun usK8DataReturnTime: For AMD IGP only. Memory access latency in K8, required for watermark calculation 2793*4882a593Smuzhiyun 2794*4882a593Smuzhiyun VC:Voltage Control 2795*4882a593Smuzhiyun ucMaxNBVoltage: Voltage regulator dependent PWM value. Low 8 bits of the value for the max voltage.Set this one to 0xFF if VC without PWM. Set this to 0x0 if no VC at all. 2796*4882a593Smuzhiyun ucMinNBVoltage: Voltage regulator dependent PWM value. Low 8 bits of the value for the min voltage.Set this one to 0x00 if VC without PWM or no VC at all. 2797*4882a593Smuzhiyun 2798*4882a593Smuzhiyun ucNumberOfCyclesInPeriod: Indicate how many cycles when PWM duty is 100%. low 8 bits of the value. 2799*4882a593Smuzhiyun ucNumberOfCyclesInPeriodHi: Indicate how many cycles when PWM duty is 100%. high 8 bits of the value.If the PWM has an inverter,set bit [7]==1,otherwise set it 0 2800*4882a593Smuzhiyun 2801*4882a593Smuzhiyun ucMaxNBVoltageHigh: Voltage regulator dependent PWM value. High 8 bits of the value for the max voltage.Set this one to 0xFF if VC without PWM. Set this to 0x0 if no VC at all. 2802*4882a593Smuzhiyun ucMinNBVoltageHigh: Voltage regulator dependent PWM value. High 8 bits of the value for the min voltage.Set this one to 0x00 if VC without PWM or no VC at all. 2803*4882a593Smuzhiyun 2804*4882a593Smuzhiyun 2805*4882a593Smuzhiyun usInterNBVoltageLow: Voltage regulator dependent PWM value. The value makes the the voltage >=Min NB voltage but <=InterNBVoltageHigh. Set this to 0x0000 if VC without PWM or no VC at all. 2806*4882a593Smuzhiyun usInterNBVoltageHigh: Voltage regulator dependent PWM value. The value makes the the voltage >=InterNBVoltageLow but <=Max NB voltage.Set this to 0x0000 if VC without PWM or no VC at all. 2807*4882a593Smuzhiyun */ 2808*4882a593Smuzhiyun 2809*4882a593Smuzhiyun 2810*4882a593Smuzhiyun /* 2811*4882a593Smuzhiyun The following IGP table is introduced from RS780, which is supposed to be put by SBIOS in FB before IGP VBIOS starts VPOST; 2812*4882a593Smuzhiyun Then VBIOS will copy the whole structure to its image so all GPU SW components can access this data structure to get whatever they need. 2813*4882a593Smuzhiyun The enough reservation should allow us to never change table revisions. Whenever needed, a GPU SW component can use reserved portion for new data entries. 2814*4882a593Smuzhiyun 2815*4882a593Smuzhiyun SW components can access the IGP system infor structure in the same way as before 2816*4882a593Smuzhiyun */ 2817*4882a593Smuzhiyun 2818*4882a593Smuzhiyun 2819*4882a593Smuzhiyun typedef struct _ATOM_INTEGRATED_SYSTEM_INFO_V2 2820*4882a593Smuzhiyun { 2821*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2822*4882a593Smuzhiyun ULONG ulBootUpEngineClock; //in 10kHz unit 2823*4882a593Smuzhiyun ULONG ulReserved1[2]; //must be 0x0 for the reserved 2824*4882a593Smuzhiyun ULONG ulBootUpUMAClock; //in 10kHz unit 2825*4882a593Smuzhiyun ULONG ulBootUpSidePortClock; //in 10kHz unit 2826*4882a593Smuzhiyun ULONG ulMinSidePortClock; //in 10kHz unit 2827*4882a593Smuzhiyun ULONG ulReserved2[6]; //must be 0x0 for the reserved 2828*4882a593Smuzhiyun ULONG ulSystemConfig; //see explanation below 2829*4882a593Smuzhiyun ULONG ulBootUpReqDisplayVector; 2830*4882a593Smuzhiyun ULONG ulOtherDisplayMisc; 2831*4882a593Smuzhiyun ULONG ulDDISlot1Config; 2832*4882a593Smuzhiyun ULONG ulDDISlot2Config; 2833*4882a593Smuzhiyun UCHAR ucMemoryType; //[3:0]=1:DDR1;=2:DDR2;=3:DDR3.[7:4] is reserved 2834*4882a593Smuzhiyun UCHAR ucUMAChannelNumber; 2835*4882a593Smuzhiyun UCHAR ucDockingPinBit; 2836*4882a593Smuzhiyun UCHAR ucDockingPinPolarity; 2837*4882a593Smuzhiyun ULONG ulDockingPinCFGInfo; 2838*4882a593Smuzhiyun ULONG ulCPUCapInfo; 2839*4882a593Smuzhiyun USHORT usNumberOfCyclesInPeriod; 2840*4882a593Smuzhiyun USHORT usMaxNBVoltage; 2841*4882a593Smuzhiyun USHORT usMinNBVoltage; 2842*4882a593Smuzhiyun USHORT usBootUpNBVoltage; 2843*4882a593Smuzhiyun ULONG ulHTLinkFreq; //in 10Khz 2844*4882a593Smuzhiyun USHORT usMinHTLinkWidth; 2845*4882a593Smuzhiyun USHORT usMaxHTLinkWidth; 2846*4882a593Smuzhiyun USHORT usUMASyncStartDelay; 2847*4882a593Smuzhiyun USHORT usUMADataReturnTime; 2848*4882a593Smuzhiyun USHORT usLinkStatusZeroTime; 2849*4882a593Smuzhiyun USHORT usDACEfuse; //for storing badgap value (for RS880 only) 2850*4882a593Smuzhiyun ULONG ulHighVoltageHTLinkFreq; // in 10Khz 2851*4882a593Smuzhiyun ULONG ulLowVoltageHTLinkFreq; // in 10Khz 2852*4882a593Smuzhiyun USHORT usMaxUpStreamHTLinkWidth; 2853*4882a593Smuzhiyun USHORT usMaxDownStreamHTLinkWidth; 2854*4882a593Smuzhiyun USHORT usMinUpStreamHTLinkWidth; 2855*4882a593Smuzhiyun USHORT usMinDownStreamHTLinkWidth; 2856*4882a593Smuzhiyun USHORT usFirmwareVersion; //0 means FW is not supported. Otherwise it's the FW version loaded by SBIOS and driver should enable FW. 2857*4882a593Smuzhiyun USHORT usFullT0Time; // Input to calculate minimum HT link change time required by NB P-State. Unit is 0.01us. 2858*4882a593Smuzhiyun ULONG ulReserved3[96]; //must be 0x0 2859*4882a593Smuzhiyun }ATOM_INTEGRATED_SYSTEM_INFO_V2; 2860*4882a593Smuzhiyun 2861*4882a593Smuzhiyun /* 2862*4882a593Smuzhiyun ulBootUpEngineClock: Boot-up Engine Clock in 10Khz; 2863*4882a593Smuzhiyun ulBootUpUMAClock: Boot-up UMA Clock in 10Khz; it must be 0x0 when UMA is not present 2864*4882a593Smuzhiyun ulBootUpSidePortClock: Boot-up SidePort Clock in 10Khz; it must be 0x0 when SidePort Memory is not present,this could be equal to or less than maximum supported Sideport memory clock 2865*4882a593Smuzhiyun 2866*4882a593Smuzhiyun ulSystemConfig: 2867*4882a593Smuzhiyun Bit[0]=1: PowerExpress mode =0 Non-PowerExpress mode; 2868*4882a593Smuzhiyun Bit[1]=1: system boots up at AMD overdrived state or user customized mode. In this case, driver will just stick to this boot-up mode. No other PowerPlay state 2869*4882a593Smuzhiyun =0: system boots up at driver control state. Power state depends on PowerPlay table. 2870*4882a593Smuzhiyun Bit[2]=1: PWM method is used on NB voltage control. =0: GPIO method is used. 2871*4882a593Smuzhiyun Bit[3]=1: Only one power state(Performance) will be supported. 2872*4882a593Smuzhiyun =0: Multiple power states supported from PowerPlay table. 2873*4882a593Smuzhiyun Bit[4]=1: CLMC is supported and enabled on current system. 2874*4882a593Smuzhiyun =0: CLMC is not supported or enabled on current system. SBIOS need to support HT link/freq change through ATIF interface. 2875*4882a593Smuzhiyun Bit[5]=1: Enable CDLW for all driver control power states. Max HT width is from SBIOS, while Min HT width is determined by display requirement. 2876*4882a593Smuzhiyun =0: CDLW is disabled. If CLMC is enabled case, Min HT width will be set equal to Max HT width. If CLMC disabled case, Max HT width will be applied. 2877*4882a593Smuzhiyun Bit[6]=1: High Voltage requested for all power states. In this case, voltage will be forced at 1.1v and powerplay table voltage drop/throttling request will be ignored. 2878*4882a593Smuzhiyun =0: Voltage settings is determined by powerplay table. 2879*4882a593Smuzhiyun Bit[7]=1: Enable CLMC as hybrid Mode. CDLD and CILR will be disabled in this case and we're using legacy C1E. This is workaround for CPU(Griffin) performance issue. 2880*4882a593Smuzhiyun =0: Enable CLMC as regular mode, CDLD and CILR will be enabled. 2881*4882a593Smuzhiyun Bit[8]=1: CDLF is supported and enabled on current system. 2882*4882a593Smuzhiyun =0: CDLF is not supported or enabled on current system. 2883*4882a593Smuzhiyun Bit[9]=1: DLL Shut Down feature is enabled on current system. 2884*4882a593Smuzhiyun =0: DLL Shut Down feature is not enabled or supported on current system. 2885*4882a593Smuzhiyun 2886*4882a593Smuzhiyun ulBootUpReqDisplayVector: This dword is a bit vector indicates what display devices are requested during boot-up. Refer to ATOM_DEVICE_xxx_SUPPORT for the bit vector definitions. 2887*4882a593Smuzhiyun 2888*4882a593Smuzhiyun ulOtherDisplayMisc: [15:8]- Bootup LCD Expansion selection; 0-center, 1-full panel size expansion; 2889*4882a593Smuzhiyun [7:0] - BootupTV standard selection; This is a bit vector to indicate what TV standards are supported by the system. Refer to ucTVSupportedStd definition; 2890*4882a593Smuzhiyun 2891*4882a593Smuzhiyun ulDDISlot1Config: Describes the PCIE lane configuration on this DDI PCIE slot (ADD2 card) or connector (Mobile design). 2892*4882a593Smuzhiyun [3:0] - Bit vector to indicate PCIE lane config of the DDI slot/connector on chassis (bit 0=1 lane 3:0; bit 1=1 lane 7:4; bit 2=1 lane 11:8; bit 3=1 lane 15:12) 2893*4882a593Smuzhiyun [7:4] - Bit vector to indicate PCIE lane config of the same DDI slot/connector on docking station (bit 4=1 lane 3:0; bit 5=1 lane 7:4; bit 6=1 lane 11:8; bit 7=1 lane 15:12) 2894*4882a593Smuzhiyun When a DDI connector is not "paired" (meaming two connections mutualexclusive on chassis or docking, only one of them can be connected at one time. 2895*4882a593Smuzhiyun in both chassis and docking, SBIOS has to duplicate the same PCIE lane info from chassis to docking or vice versa. For example: 2896*4882a593Smuzhiyun one DDI connector is only populated in docking with PCIE lane 8-11, but there is no paired connection on chassis, SBIOS has to copy bit 6 to bit 2. 2897*4882a593Smuzhiyun 2898*4882a593Smuzhiyun [15:8] - Lane configuration attribute; 2899*4882a593Smuzhiyun [23:16]- Connector type, possible value: 2900*4882a593Smuzhiyun CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D 2901*4882a593Smuzhiyun CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D 2902*4882a593Smuzhiyun CONNECTOR_OBJECT_ID_HDMI_TYPE_A 2903*4882a593Smuzhiyun CONNECTOR_OBJECT_ID_DISPLAYPORT 2904*4882a593Smuzhiyun CONNECTOR_OBJECT_ID_eDP 2905*4882a593Smuzhiyun [31:24]- Reserved 2906*4882a593Smuzhiyun 2907*4882a593Smuzhiyun ulDDISlot2Config: Same as Slot1. 2908*4882a593Smuzhiyun ucMemoryType: SidePort memory type, set it to 0x0 when Sideport memory is not installed. Driver needs this info to change sideport memory clock. Not for display in CCC. 2909*4882a593Smuzhiyun For IGP, Hypermemory is the only memory type showed in CCC. 2910*4882a593Smuzhiyun 2911*4882a593Smuzhiyun ucUMAChannelNumber: how many channels for the UMA; 2912*4882a593Smuzhiyun 2913*4882a593Smuzhiyun ulDockingPinCFGInfo: [15:0]-Bus/Device/Function # to CFG to read this Docking Pin; [31:16]-reg offset in CFG to read this pin 2914*4882a593Smuzhiyun ucDockingPinBit: which bit in this register to read the pin status; 2915*4882a593Smuzhiyun ucDockingPinPolarity:Polarity of the pin when docked; 2916*4882a593Smuzhiyun 2917*4882a593Smuzhiyun ulCPUCapInfo: [7:0]=1:Griffin;[7:0]=2:Greyhound;[7:0]=3:K8, [7:0]=4:Pharaoh, other bits reserved for now and must be 0x0 2918*4882a593Smuzhiyun 2919*4882a593Smuzhiyun usNumberOfCyclesInPeriod:Indicate how many cycles when PWM duty is 100%. 2920*4882a593Smuzhiyun 2921*4882a593Smuzhiyun usMaxNBVoltage:Max. voltage control value in either PWM or GPIO mode. 2922*4882a593Smuzhiyun usMinNBVoltage:Min. voltage control value in either PWM or GPIO mode. 2923*4882a593Smuzhiyun GPIO mode: both usMaxNBVoltage & usMinNBVoltage have a valid value ulSystemConfig.SYSTEM_CONFIG_USE_PWM_ON_VOLTAGE=0 2924*4882a593Smuzhiyun PWM mode: both usMaxNBVoltage & usMinNBVoltage have a valid value ulSystemConfig.SYSTEM_CONFIG_USE_PWM_ON_VOLTAGE=1 2925*4882a593Smuzhiyun GPU SW don't control mode: usMaxNBVoltage & usMinNBVoltage=0 and no care about ulSystemConfig.SYSTEM_CONFIG_USE_PWM_ON_VOLTAGE 2926*4882a593Smuzhiyun 2927*4882a593Smuzhiyun usBootUpNBVoltage:Boot-up voltage regulator dependent PWM value. 2928*4882a593Smuzhiyun 2929*4882a593Smuzhiyun ulHTLinkFreq: Bootup HT link Frequency in 10Khz. 2930*4882a593Smuzhiyun usMinHTLinkWidth: Bootup minimum HT link width. If CDLW disabled, this is equal to usMaxHTLinkWidth. 2931*4882a593Smuzhiyun If CDLW enabled, both upstream and downstream width should be the same during bootup. 2932*4882a593Smuzhiyun usMaxHTLinkWidth: Bootup maximum HT link width. If CDLW disabled, this is equal to usMinHTLinkWidth. 2933*4882a593Smuzhiyun If CDLW enabled, both upstream and downstream width should be the same during bootup. 2934*4882a593Smuzhiyun 2935*4882a593Smuzhiyun usUMASyncStartDelay: Memory access latency, required for watermark calculation 2936*4882a593Smuzhiyun usUMADataReturnTime: Memory access latency, required for watermark calculation 2937*4882a593Smuzhiyun usLinkStatusZeroTime:Memory access latency required for watermark calculation, set this to 0x0 for K8 CPU, set a proper value in 0.01 the unit of us 2938*4882a593Smuzhiyun for Griffin or Greyhound. SBIOS needs to convert to actual time by: 2939*4882a593Smuzhiyun if T0Ttime [5:4]=00b, then usLinkStatusZeroTime=T0Ttime [3:0]*0.1us (0.0 to 1.5us) 2940*4882a593Smuzhiyun if T0Ttime [5:4]=01b, then usLinkStatusZeroTime=T0Ttime [3:0]*0.5us (0.0 to 7.5us) 2941*4882a593Smuzhiyun if T0Ttime [5:4]=10b, then usLinkStatusZeroTime=T0Ttime [3:0]*2.0us (0.0 to 30us) 2942*4882a593Smuzhiyun if T0Ttime [5:4]=11b, and T0Ttime [3:0]=0x0 to 0xa, then usLinkStatusZeroTime=T0Ttime [3:0]*20us (0.0 to 200us) 2943*4882a593Smuzhiyun 2944*4882a593Smuzhiyun ulHighVoltageHTLinkFreq: HT link frequency for power state with low voltage. If boot up runs in HT1, this must be 0. 2945*4882a593Smuzhiyun This must be less than or equal to ulHTLinkFreq(bootup frequency). 2946*4882a593Smuzhiyun ulLowVoltageHTLinkFreq: HT link frequency for power state with low voltage or voltage scaling 1.0v~1.1v. If boot up runs in HT1, this must be 0. 2947*4882a593Smuzhiyun This must be less than or equal to ulHighVoltageHTLinkFreq. 2948*4882a593Smuzhiyun 2949*4882a593Smuzhiyun usMaxUpStreamHTLinkWidth: Asymmetric link width support in the future, to replace usMaxHTLinkWidth. Not used for now. 2950*4882a593Smuzhiyun usMaxDownStreamHTLinkWidth: same as above. 2951*4882a593Smuzhiyun usMinUpStreamHTLinkWidth: Asymmetric link width support in the future, to replace usMinHTLinkWidth. Not used for now. 2952*4882a593Smuzhiyun usMinDownStreamHTLinkWidth: same as above. 2953*4882a593Smuzhiyun */ 2954*4882a593Smuzhiyun 2955*4882a593Smuzhiyun // ATOM_INTEGRATED_SYSTEM_INFO::ulCPUCapInfo - CPU type definition 2956*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__UNKNOWN_CPU 0 2957*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__AMD_CPU__GRIFFIN 1 2958*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__AMD_CPU__GREYHOUND 2 2959*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__AMD_CPU__K8 3 2960*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__AMD_CPU__PHARAOH 4 2961*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__AMD_CPU__OROCHI 5 2962*4882a593Smuzhiyun 2963*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__AMD_CPU__MAX_CODE INTEGRATED_SYSTEM_INFO__AMD_CPU__OROCHI // this deff reflects max defined CPU code 2964*4882a593Smuzhiyun 2965*4882a593Smuzhiyun #define SYSTEM_CONFIG_POWEREXPRESS_ENABLE 0x00000001 2966*4882a593Smuzhiyun #define SYSTEM_CONFIG_RUN_AT_OVERDRIVE_ENGINE 0x00000002 2967*4882a593Smuzhiyun #define SYSTEM_CONFIG_USE_PWM_ON_VOLTAGE 0x00000004 2968*4882a593Smuzhiyun #define SYSTEM_CONFIG_PERFORMANCE_POWERSTATE_ONLY 0x00000008 2969*4882a593Smuzhiyun #define SYSTEM_CONFIG_CLMC_ENABLED 0x00000010 2970*4882a593Smuzhiyun #define SYSTEM_CONFIG_CDLW_ENABLED 0x00000020 2971*4882a593Smuzhiyun #define SYSTEM_CONFIG_HIGH_VOLTAGE_REQUESTED 0x00000040 2972*4882a593Smuzhiyun #define SYSTEM_CONFIG_CLMC_HYBRID_MODE_ENABLED 0x00000080 2973*4882a593Smuzhiyun #define SYSTEM_CONFIG_CDLF_ENABLED 0x00000100 2974*4882a593Smuzhiyun #define SYSTEM_CONFIG_DLL_SHUTDOWN_ENABLED 0x00000200 2975*4882a593Smuzhiyun 2976*4882a593Smuzhiyun #define IGP_DDI_SLOT_LANE_CONFIG_MASK 0x000000FF 2977*4882a593Smuzhiyun 2978*4882a593Smuzhiyun #define b0IGP_DDI_SLOT_LANE_MAP_MASK 0x0F 2979*4882a593Smuzhiyun #define b0IGP_DDI_SLOT_DOCKING_LANE_MAP_MASK 0xF0 2980*4882a593Smuzhiyun #define b0IGP_DDI_SLOT_CONFIG_LANE_0_3 0x01 2981*4882a593Smuzhiyun #define b0IGP_DDI_SLOT_CONFIG_LANE_4_7 0x02 2982*4882a593Smuzhiyun #define b0IGP_DDI_SLOT_CONFIG_LANE_8_11 0x04 2983*4882a593Smuzhiyun #define b0IGP_DDI_SLOT_CONFIG_LANE_12_15 0x08 2984*4882a593Smuzhiyun 2985*4882a593Smuzhiyun #define IGP_DDI_SLOT_ATTRIBUTE_MASK 0x0000FF00 2986*4882a593Smuzhiyun #define IGP_DDI_SLOT_CONFIG_REVERSED 0x00000100 2987*4882a593Smuzhiyun #define b1IGP_DDI_SLOT_CONFIG_REVERSED 0x01 2988*4882a593Smuzhiyun 2989*4882a593Smuzhiyun #define IGP_DDI_SLOT_CONNECTOR_TYPE_MASK 0x00FF0000 2990*4882a593Smuzhiyun 2991*4882a593Smuzhiyun // IntegratedSystemInfoTable new Rev is V5 after V2, because of the real rev of V2 is v1.4. This rev is used for RR 2992*4882a593Smuzhiyun typedef struct _ATOM_INTEGRATED_SYSTEM_INFO_V5 2993*4882a593Smuzhiyun { 2994*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 2995*4882a593Smuzhiyun ULONG ulBootUpEngineClock; //in 10kHz unit 2996*4882a593Smuzhiyun ULONG ulDentistVCOFreq; //Dentist VCO clock in 10kHz unit, the source of GPU SCLK, LCLK, UCLK and VCLK. 2997*4882a593Smuzhiyun ULONG ulLClockFreq; //GPU Lclk freq in 10kHz unit, have relationship with NCLK in NorthBridge 2998*4882a593Smuzhiyun ULONG ulBootUpUMAClock; //in 10kHz unit 2999*4882a593Smuzhiyun ULONG ulReserved1[8]; //must be 0x0 for the reserved 3000*4882a593Smuzhiyun ULONG ulBootUpReqDisplayVector; 3001*4882a593Smuzhiyun ULONG ulOtherDisplayMisc; 3002*4882a593Smuzhiyun ULONG ulReserved2[4]; //must be 0x0 for the reserved 3003*4882a593Smuzhiyun ULONG ulSystemConfig; //TBD 3004*4882a593Smuzhiyun ULONG ulCPUCapInfo; //TBD 3005*4882a593Smuzhiyun USHORT usMaxNBVoltage; //high NB voltage, calculated using current VDDNB (D24F2xDC) and VDDNB offset fuse; 3006*4882a593Smuzhiyun USHORT usMinNBVoltage; //low NB voltage, calculated using current VDDNB (D24F2xDC) and VDDNB offset fuse; 3007*4882a593Smuzhiyun USHORT usBootUpNBVoltage; //boot up NB voltage 3008*4882a593Smuzhiyun UCHAR ucHtcTmpLmt; //bit [22:16] of D24F3x64 Hardware Thermal Control (HTC) Register, may not be needed, TBD 3009*4882a593Smuzhiyun UCHAR ucTjOffset; //bit [28:22] of D24F3xE4 Thermtrip Status Register,may not be needed, TBD 3010*4882a593Smuzhiyun ULONG ulReserved3[4]; //must be 0x0 for the reserved 3011*4882a593Smuzhiyun ULONG ulDDISlot1Config; //see above ulDDISlot1Config definition 3012*4882a593Smuzhiyun ULONG ulDDISlot2Config; 3013*4882a593Smuzhiyun ULONG ulDDISlot3Config; 3014*4882a593Smuzhiyun ULONG ulDDISlot4Config; 3015*4882a593Smuzhiyun ULONG ulReserved4[4]; //must be 0x0 for the reserved 3016*4882a593Smuzhiyun UCHAR ucMemoryType; //[3:0]=1:DDR1;=2:DDR2;=3:DDR3.[7:4] is reserved 3017*4882a593Smuzhiyun UCHAR ucUMAChannelNumber; 3018*4882a593Smuzhiyun USHORT usReserved; 3019*4882a593Smuzhiyun ULONG ulReserved5[4]; //must be 0x0 for the reserved 3020*4882a593Smuzhiyun ULONG ulCSR_M3_ARB_CNTL_DEFAULT[10];//arrays with values for CSR M3 arbiter for default 3021*4882a593Smuzhiyun ULONG ulCSR_M3_ARB_CNTL_UVD[10]; //arrays with values for CSR M3 arbiter for UVD playback 3022*4882a593Smuzhiyun ULONG ulCSR_M3_ARB_CNTL_FS3D[10];//arrays with values for CSR M3 arbiter for Full Screen 3D applications 3023*4882a593Smuzhiyun ULONG ulReserved6[61]; //must be 0x0 3024*4882a593Smuzhiyun }ATOM_INTEGRATED_SYSTEM_INFO_V5; 3025*4882a593Smuzhiyun 3026*4882a593Smuzhiyun #define ATOM_CRT_INT_ENCODER1_INDEX 0x00000000 3027*4882a593Smuzhiyun #define ATOM_LCD_INT_ENCODER1_INDEX 0x00000001 3028*4882a593Smuzhiyun #define ATOM_TV_INT_ENCODER1_INDEX 0x00000002 3029*4882a593Smuzhiyun #define ATOM_DFP_INT_ENCODER1_INDEX 0x00000003 3030*4882a593Smuzhiyun #define ATOM_CRT_INT_ENCODER2_INDEX 0x00000004 3031*4882a593Smuzhiyun #define ATOM_LCD_EXT_ENCODER1_INDEX 0x00000005 3032*4882a593Smuzhiyun #define ATOM_TV_EXT_ENCODER1_INDEX 0x00000006 3033*4882a593Smuzhiyun #define ATOM_DFP_EXT_ENCODER1_INDEX 0x00000007 3034*4882a593Smuzhiyun #define ATOM_CV_INT_ENCODER1_INDEX 0x00000008 3035*4882a593Smuzhiyun #define ATOM_DFP_INT_ENCODER2_INDEX 0x00000009 3036*4882a593Smuzhiyun #define ATOM_CRT_EXT_ENCODER1_INDEX 0x0000000A 3037*4882a593Smuzhiyun #define ATOM_CV_EXT_ENCODER1_INDEX 0x0000000B 3038*4882a593Smuzhiyun #define ATOM_DFP_INT_ENCODER3_INDEX 0x0000000C 3039*4882a593Smuzhiyun #define ATOM_DFP_INT_ENCODER4_INDEX 0x0000000D 3040*4882a593Smuzhiyun 3041*4882a593Smuzhiyun // define ASIC internal encoder id ( bit vector ), used for CRTC_SourceSelTable 3042*4882a593Smuzhiyun #define ASIC_INT_DAC1_ENCODER_ID 0x00 3043*4882a593Smuzhiyun #define ASIC_INT_TV_ENCODER_ID 0x02 3044*4882a593Smuzhiyun #define ASIC_INT_DIG1_ENCODER_ID 0x03 3045*4882a593Smuzhiyun #define ASIC_INT_DAC2_ENCODER_ID 0x04 3046*4882a593Smuzhiyun #define ASIC_EXT_TV_ENCODER_ID 0x06 3047*4882a593Smuzhiyun #define ASIC_INT_DVO_ENCODER_ID 0x07 3048*4882a593Smuzhiyun #define ASIC_INT_DIG2_ENCODER_ID 0x09 3049*4882a593Smuzhiyun #define ASIC_EXT_DIG_ENCODER_ID 0x05 3050*4882a593Smuzhiyun #define ASIC_EXT_DIG2_ENCODER_ID 0x08 3051*4882a593Smuzhiyun #define ASIC_INT_DIG3_ENCODER_ID 0x0a 3052*4882a593Smuzhiyun #define ASIC_INT_DIG4_ENCODER_ID 0x0b 3053*4882a593Smuzhiyun #define ASIC_INT_DIG5_ENCODER_ID 0x0c 3054*4882a593Smuzhiyun #define ASIC_INT_DIG6_ENCODER_ID 0x0d 3055*4882a593Smuzhiyun #define ASIC_INT_DIG7_ENCODER_ID 0x0e 3056*4882a593Smuzhiyun 3057*4882a593Smuzhiyun //define Encoder attribute 3058*4882a593Smuzhiyun #define ATOM_ANALOG_ENCODER 0 3059*4882a593Smuzhiyun #define ATOM_DIGITAL_ENCODER 1 3060*4882a593Smuzhiyun #define ATOM_DP_ENCODER 2 3061*4882a593Smuzhiyun 3062*4882a593Smuzhiyun #define ATOM_ENCODER_ENUM_MASK 0x70 3063*4882a593Smuzhiyun #define ATOM_ENCODER_ENUM_ID1 0x00 3064*4882a593Smuzhiyun #define ATOM_ENCODER_ENUM_ID2 0x10 3065*4882a593Smuzhiyun #define ATOM_ENCODER_ENUM_ID3 0x20 3066*4882a593Smuzhiyun #define ATOM_ENCODER_ENUM_ID4 0x30 3067*4882a593Smuzhiyun #define ATOM_ENCODER_ENUM_ID5 0x40 3068*4882a593Smuzhiyun #define ATOM_ENCODER_ENUM_ID6 0x50 3069*4882a593Smuzhiyun 3070*4882a593Smuzhiyun #define ATOM_DEVICE_CRT1_INDEX 0x00000000 3071*4882a593Smuzhiyun #define ATOM_DEVICE_LCD1_INDEX 0x00000001 3072*4882a593Smuzhiyun #define ATOM_DEVICE_TV1_INDEX 0x00000002 3073*4882a593Smuzhiyun #define ATOM_DEVICE_DFP1_INDEX 0x00000003 3074*4882a593Smuzhiyun #define ATOM_DEVICE_CRT2_INDEX 0x00000004 3075*4882a593Smuzhiyun #define ATOM_DEVICE_LCD2_INDEX 0x00000005 3076*4882a593Smuzhiyun #define ATOM_DEVICE_DFP6_INDEX 0x00000006 3077*4882a593Smuzhiyun #define ATOM_DEVICE_DFP2_INDEX 0x00000007 3078*4882a593Smuzhiyun #define ATOM_DEVICE_CV_INDEX 0x00000008 3079*4882a593Smuzhiyun #define ATOM_DEVICE_DFP3_INDEX 0x00000009 3080*4882a593Smuzhiyun #define ATOM_DEVICE_DFP4_INDEX 0x0000000A 3081*4882a593Smuzhiyun #define ATOM_DEVICE_DFP5_INDEX 0x0000000B 3082*4882a593Smuzhiyun 3083*4882a593Smuzhiyun #define ATOM_DEVICE_RESERVEDC_INDEX 0x0000000C 3084*4882a593Smuzhiyun #define ATOM_DEVICE_RESERVEDD_INDEX 0x0000000D 3085*4882a593Smuzhiyun #define ATOM_DEVICE_RESERVEDE_INDEX 0x0000000E 3086*4882a593Smuzhiyun #define ATOM_DEVICE_RESERVEDF_INDEX 0x0000000F 3087*4882a593Smuzhiyun #define ATOM_MAX_SUPPORTED_DEVICE_INFO (ATOM_DEVICE_DFP3_INDEX+1) 3088*4882a593Smuzhiyun #define ATOM_MAX_SUPPORTED_DEVICE_INFO_2 ATOM_MAX_SUPPORTED_DEVICE_INFO 3089*4882a593Smuzhiyun #define ATOM_MAX_SUPPORTED_DEVICE_INFO_3 (ATOM_DEVICE_DFP5_INDEX + 1 ) 3090*4882a593Smuzhiyun 3091*4882a593Smuzhiyun #define ATOM_MAX_SUPPORTED_DEVICE (ATOM_DEVICE_RESERVEDF_INDEX+1) 3092*4882a593Smuzhiyun 3093*4882a593Smuzhiyun #define ATOM_DEVICE_CRT1_SUPPORT (0x1L << ATOM_DEVICE_CRT1_INDEX ) 3094*4882a593Smuzhiyun #define ATOM_DEVICE_LCD1_SUPPORT (0x1L << ATOM_DEVICE_LCD1_INDEX ) 3095*4882a593Smuzhiyun #define ATOM_DEVICE_TV1_SUPPORT (0x1L << ATOM_DEVICE_TV1_INDEX ) 3096*4882a593Smuzhiyun #define ATOM_DEVICE_DFP1_SUPPORT (0x1L << ATOM_DEVICE_DFP1_INDEX ) 3097*4882a593Smuzhiyun #define ATOM_DEVICE_CRT2_SUPPORT (0x1L << ATOM_DEVICE_CRT2_INDEX ) 3098*4882a593Smuzhiyun #define ATOM_DEVICE_LCD2_SUPPORT (0x1L << ATOM_DEVICE_LCD2_INDEX ) 3099*4882a593Smuzhiyun #define ATOM_DEVICE_DFP6_SUPPORT (0x1L << ATOM_DEVICE_DFP6_INDEX ) 3100*4882a593Smuzhiyun #define ATOM_DEVICE_DFP2_SUPPORT (0x1L << ATOM_DEVICE_DFP2_INDEX ) 3101*4882a593Smuzhiyun #define ATOM_DEVICE_CV_SUPPORT (0x1L << ATOM_DEVICE_CV_INDEX ) 3102*4882a593Smuzhiyun #define ATOM_DEVICE_DFP3_SUPPORT (0x1L << ATOM_DEVICE_DFP3_INDEX ) 3103*4882a593Smuzhiyun #define ATOM_DEVICE_DFP4_SUPPORT (0x1L << ATOM_DEVICE_DFP4_INDEX ) 3104*4882a593Smuzhiyun #define ATOM_DEVICE_DFP5_SUPPORT (0x1L << ATOM_DEVICE_DFP5_INDEX ) 3105*4882a593Smuzhiyun 3106*4882a593Smuzhiyun #define ATOM_DEVICE_CRT_SUPPORT (ATOM_DEVICE_CRT1_SUPPORT | ATOM_DEVICE_CRT2_SUPPORT) 3107*4882a593Smuzhiyun #define ATOM_DEVICE_DFP_SUPPORT (ATOM_DEVICE_DFP1_SUPPORT | ATOM_DEVICE_DFP2_SUPPORT | ATOM_DEVICE_DFP3_SUPPORT | ATOM_DEVICE_DFP4_SUPPORT | ATOM_DEVICE_DFP5_SUPPORT | ATOM_DEVICE_DFP6_SUPPORT) 3108*4882a593Smuzhiyun #define ATOM_DEVICE_TV_SUPPORT (ATOM_DEVICE_TV1_SUPPORT) 3109*4882a593Smuzhiyun #define ATOM_DEVICE_LCD_SUPPORT (ATOM_DEVICE_LCD1_SUPPORT | ATOM_DEVICE_LCD2_SUPPORT) 3110*4882a593Smuzhiyun 3111*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_TYPE_MASK 0x000000F0 3112*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_TYPE_SHIFT 0x00000004 3113*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_VGA 0x00000001 3114*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_DVI_I 0x00000002 3115*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_DVI_D 0x00000003 3116*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_DVI_A 0x00000004 3117*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_SVIDEO 0x00000005 3118*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_COMPOSITE 0x00000006 3119*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_LVDS 0x00000007 3120*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_DIGI_LINK 0x00000008 3121*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_SCART 0x00000009 3122*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_HDMI_TYPE_A 0x0000000A 3123*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_HDMI_TYPE_B 0x0000000B 3124*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_CASE_1 0x0000000E 3125*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECTOR_DISPLAYPORT 0x0000000F 3126*4882a593Smuzhiyun 3127*4882a593Smuzhiyun 3128*4882a593Smuzhiyun #define ATOM_DEVICE_DAC_INFO_MASK 0x0000000F 3129*4882a593Smuzhiyun #define ATOM_DEVICE_DAC_INFO_SHIFT 0x00000000 3130*4882a593Smuzhiyun #define ATOM_DEVICE_DAC_INFO_NODAC 0x00000000 3131*4882a593Smuzhiyun #define ATOM_DEVICE_DAC_INFO_DACA 0x00000001 3132*4882a593Smuzhiyun #define ATOM_DEVICE_DAC_INFO_DACB 0x00000002 3133*4882a593Smuzhiyun #define ATOM_DEVICE_DAC_INFO_EXDAC 0x00000003 3134*4882a593Smuzhiyun 3135*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_ID_NOI2C 0x00000000 3136*4882a593Smuzhiyun 3137*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_LINEMUX_MASK 0x0000000F 3138*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_LINEMUX_SHIFT 0x00000000 3139*4882a593Smuzhiyun 3140*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_ID_MASK 0x00000070 3141*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_ID_SHIFT 0x00000004 3142*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_ID_IS_FOR_NON_MM_USE 0x00000001 3143*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_ID_IS_FOR_MM_USE 0x00000002 3144*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_ID_IS_FOR_SDVO_USE 0x00000003 //For IGP RS600 3145*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_ID_IS_FOR_DAC_SCL 0x00000004 //For IGP RS690 3146*4882a593Smuzhiyun 3147*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_HARDWARE_CAP_MASK 0x00000080 3148*4882a593Smuzhiyun #define ATOM_DEVICE_I2C_HARDWARE_CAP_SHIFT 0x00000007 3149*4882a593Smuzhiyun #define ATOM_DEVICE_USES_SOFTWARE_ASSISTED_I2C 0x00000000 3150*4882a593Smuzhiyun #define ATOM_DEVICE_USES_HARDWARE_ASSISTED_I2C 0x00000001 3151*4882a593Smuzhiyun 3152*4882a593Smuzhiyun // usDeviceSupport: 3153*4882a593Smuzhiyun // Bits0 = 0 - no CRT1 support= 1- CRT1 is supported 3154*4882a593Smuzhiyun // Bit 1 = 0 - no LCD1 support= 1- LCD1 is supported 3155*4882a593Smuzhiyun // Bit 2 = 0 - no TV1 support= 1- TV1 is supported 3156*4882a593Smuzhiyun // Bit 3 = 0 - no DFP1 support= 1- DFP1 is supported 3157*4882a593Smuzhiyun // Bit 4 = 0 - no CRT2 support= 1- CRT2 is supported 3158*4882a593Smuzhiyun // Bit 5 = 0 - no LCD2 support= 1- LCD2 is supported 3159*4882a593Smuzhiyun // Bit 6 = 0 - no DFP6 support= 1- DFP6 is supported 3160*4882a593Smuzhiyun // Bit 7 = 0 - no DFP2 support= 1- DFP2 is supported 3161*4882a593Smuzhiyun // Bit 8 = 0 - no CV support= 1- CV is supported 3162*4882a593Smuzhiyun // Bit 9 = 0 - no DFP3 support= 1- DFP3 is supported 3163*4882a593Smuzhiyun // Bit 10 = 0 - no DFP4 support= 1- DFP4 is supported 3164*4882a593Smuzhiyun // Bit 11 = 0 - no DFP5 support= 1- DFP5 is supported 3165*4882a593Smuzhiyun // 3166*4882a593Smuzhiyun // 3167*4882a593Smuzhiyun 3168*4882a593Smuzhiyun /****************************************************************************/ 3169*4882a593Smuzhiyun /* Structure used in MclkSS_InfoTable */ 3170*4882a593Smuzhiyun /****************************************************************************/ 3171*4882a593Smuzhiyun // ucI2C_ConfigID 3172*4882a593Smuzhiyun // [7:0] - I2C LINE Associate ID 3173*4882a593Smuzhiyun // = 0 - no I2C 3174*4882a593Smuzhiyun // [7] - HW_Cap = 1, [6:0]=HW assisted I2C ID(HW line selection) 3175*4882a593Smuzhiyun // = 0, [6:0]=SW assisted I2C ID 3176*4882a593Smuzhiyun // [6-4] - HW_ENGINE_ID = 1, HW engine for NON multimedia use 3177*4882a593Smuzhiyun // = 2, HW engine for Multimedia use 3178*4882a593Smuzhiyun // = 3-7 Reserved for future I2C engines 3179*4882a593Smuzhiyun // [3-0] - I2C_LINE_MUX = A Mux number when it's HW assisted I2C or GPIO ID when it's SW I2C 3180*4882a593Smuzhiyun 3181*4882a593Smuzhiyun typedef struct _ATOM_I2C_ID_CONFIG 3182*4882a593Smuzhiyun { 3183*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 3184*4882a593Smuzhiyun UCHAR bfHW_Capable:1; 3185*4882a593Smuzhiyun UCHAR bfHW_EngineID:3; 3186*4882a593Smuzhiyun UCHAR bfI2C_LineMux:4; 3187*4882a593Smuzhiyun #else 3188*4882a593Smuzhiyun UCHAR bfI2C_LineMux:4; 3189*4882a593Smuzhiyun UCHAR bfHW_EngineID:3; 3190*4882a593Smuzhiyun UCHAR bfHW_Capable:1; 3191*4882a593Smuzhiyun #endif 3192*4882a593Smuzhiyun }ATOM_I2C_ID_CONFIG; 3193*4882a593Smuzhiyun 3194*4882a593Smuzhiyun typedef union _ATOM_I2C_ID_CONFIG_ACCESS 3195*4882a593Smuzhiyun { 3196*4882a593Smuzhiyun ATOM_I2C_ID_CONFIG sbfAccess; 3197*4882a593Smuzhiyun UCHAR ucAccess; 3198*4882a593Smuzhiyun }ATOM_I2C_ID_CONFIG_ACCESS; 3199*4882a593Smuzhiyun 3200*4882a593Smuzhiyun 3201*4882a593Smuzhiyun /****************************************************************************/ 3202*4882a593Smuzhiyun // Structure used in GPIO_I2C_InfoTable 3203*4882a593Smuzhiyun /****************************************************************************/ 3204*4882a593Smuzhiyun typedef struct _ATOM_GPIO_I2C_ASSIGMENT 3205*4882a593Smuzhiyun { 3206*4882a593Smuzhiyun USHORT usClkMaskRegisterIndex; 3207*4882a593Smuzhiyun USHORT usClkEnRegisterIndex; 3208*4882a593Smuzhiyun USHORT usClkY_RegisterIndex; 3209*4882a593Smuzhiyun USHORT usClkA_RegisterIndex; 3210*4882a593Smuzhiyun USHORT usDataMaskRegisterIndex; 3211*4882a593Smuzhiyun USHORT usDataEnRegisterIndex; 3212*4882a593Smuzhiyun USHORT usDataY_RegisterIndex; 3213*4882a593Smuzhiyun USHORT usDataA_RegisterIndex; 3214*4882a593Smuzhiyun ATOM_I2C_ID_CONFIG_ACCESS sucI2cId; 3215*4882a593Smuzhiyun UCHAR ucClkMaskShift; 3216*4882a593Smuzhiyun UCHAR ucClkEnShift; 3217*4882a593Smuzhiyun UCHAR ucClkY_Shift; 3218*4882a593Smuzhiyun UCHAR ucClkA_Shift; 3219*4882a593Smuzhiyun UCHAR ucDataMaskShift; 3220*4882a593Smuzhiyun UCHAR ucDataEnShift; 3221*4882a593Smuzhiyun UCHAR ucDataY_Shift; 3222*4882a593Smuzhiyun UCHAR ucDataA_Shift; 3223*4882a593Smuzhiyun UCHAR ucReserved1; 3224*4882a593Smuzhiyun UCHAR ucReserved2; 3225*4882a593Smuzhiyun }ATOM_GPIO_I2C_ASSIGMENT; 3226*4882a593Smuzhiyun 3227*4882a593Smuzhiyun typedef struct _ATOM_GPIO_I2C_INFO 3228*4882a593Smuzhiyun { 3229*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3230*4882a593Smuzhiyun ATOM_GPIO_I2C_ASSIGMENT asGPIO_Info[ATOM_MAX_SUPPORTED_DEVICE]; 3231*4882a593Smuzhiyun }ATOM_GPIO_I2C_INFO; 3232*4882a593Smuzhiyun 3233*4882a593Smuzhiyun /****************************************************************************/ 3234*4882a593Smuzhiyun // Common Structure used in other structures 3235*4882a593Smuzhiyun /****************************************************************************/ 3236*4882a593Smuzhiyun 3237*4882a593Smuzhiyun #ifndef _H2INC 3238*4882a593Smuzhiyun 3239*4882a593Smuzhiyun //Please don't add or expand this bitfield structure below, this one will retire soon.! 3240*4882a593Smuzhiyun typedef struct _ATOM_MODE_MISC_INFO 3241*4882a593Smuzhiyun { 3242*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 3243*4882a593Smuzhiyun USHORT Reserved:6; 3244*4882a593Smuzhiyun USHORT RGB888:1; 3245*4882a593Smuzhiyun USHORT DoubleClock:1; 3246*4882a593Smuzhiyun USHORT Interlace:1; 3247*4882a593Smuzhiyun USHORT CompositeSync:1; 3248*4882a593Smuzhiyun USHORT V_ReplicationBy2:1; 3249*4882a593Smuzhiyun USHORT H_ReplicationBy2:1; 3250*4882a593Smuzhiyun USHORT VerticalCutOff:1; 3251*4882a593Smuzhiyun USHORT VSyncPolarity:1; //0=Active High, 1=Active Low 3252*4882a593Smuzhiyun USHORT HSyncPolarity:1; //0=Active High, 1=Active Low 3253*4882a593Smuzhiyun USHORT HorizontalCutOff:1; 3254*4882a593Smuzhiyun #else 3255*4882a593Smuzhiyun USHORT HorizontalCutOff:1; 3256*4882a593Smuzhiyun USHORT HSyncPolarity:1; //0=Active High, 1=Active Low 3257*4882a593Smuzhiyun USHORT VSyncPolarity:1; //0=Active High, 1=Active Low 3258*4882a593Smuzhiyun USHORT VerticalCutOff:1; 3259*4882a593Smuzhiyun USHORT H_ReplicationBy2:1; 3260*4882a593Smuzhiyun USHORT V_ReplicationBy2:1; 3261*4882a593Smuzhiyun USHORT CompositeSync:1; 3262*4882a593Smuzhiyun USHORT Interlace:1; 3263*4882a593Smuzhiyun USHORT DoubleClock:1; 3264*4882a593Smuzhiyun USHORT RGB888:1; 3265*4882a593Smuzhiyun USHORT Reserved:6; 3266*4882a593Smuzhiyun #endif 3267*4882a593Smuzhiyun }ATOM_MODE_MISC_INFO; 3268*4882a593Smuzhiyun 3269*4882a593Smuzhiyun typedef union _ATOM_MODE_MISC_INFO_ACCESS 3270*4882a593Smuzhiyun { 3271*4882a593Smuzhiyun ATOM_MODE_MISC_INFO sbfAccess; 3272*4882a593Smuzhiyun USHORT usAccess; 3273*4882a593Smuzhiyun }ATOM_MODE_MISC_INFO_ACCESS; 3274*4882a593Smuzhiyun 3275*4882a593Smuzhiyun #else 3276*4882a593Smuzhiyun 3277*4882a593Smuzhiyun typedef union _ATOM_MODE_MISC_INFO_ACCESS 3278*4882a593Smuzhiyun { 3279*4882a593Smuzhiyun USHORT usAccess; 3280*4882a593Smuzhiyun }ATOM_MODE_MISC_INFO_ACCESS; 3281*4882a593Smuzhiyun 3282*4882a593Smuzhiyun #endif 3283*4882a593Smuzhiyun 3284*4882a593Smuzhiyun // usModeMiscInfo- 3285*4882a593Smuzhiyun #define ATOM_H_CUTOFF 0x01 3286*4882a593Smuzhiyun #define ATOM_HSYNC_POLARITY 0x02 //0=Active High, 1=Active Low 3287*4882a593Smuzhiyun #define ATOM_VSYNC_POLARITY 0x04 //0=Active High, 1=Active Low 3288*4882a593Smuzhiyun #define ATOM_V_CUTOFF 0x08 3289*4882a593Smuzhiyun #define ATOM_H_REPLICATIONBY2 0x10 3290*4882a593Smuzhiyun #define ATOM_V_REPLICATIONBY2 0x20 3291*4882a593Smuzhiyun #define ATOM_COMPOSITESYNC 0x40 3292*4882a593Smuzhiyun #define ATOM_INTERLACE 0x80 3293*4882a593Smuzhiyun #define ATOM_DOUBLE_CLOCK_MODE 0x100 3294*4882a593Smuzhiyun #define ATOM_RGB888_MODE 0x200 3295*4882a593Smuzhiyun 3296*4882a593Smuzhiyun //usRefreshRate- 3297*4882a593Smuzhiyun #define ATOM_REFRESH_43 43 3298*4882a593Smuzhiyun #define ATOM_REFRESH_47 47 3299*4882a593Smuzhiyun #define ATOM_REFRESH_56 56 3300*4882a593Smuzhiyun #define ATOM_REFRESH_60 60 3301*4882a593Smuzhiyun #define ATOM_REFRESH_65 65 3302*4882a593Smuzhiyun #define ATOM_REFRESH_70 70 3303*4882a593Smuzhiyun #define ATOM_REFRESH_72 72 3304*4882a593Smuzhiyun #define ATOM_REFRESH_75 75 3305*4882a593Smuzhiyun #define ATOM_REFRESH_85 85 3306*4882a593Smuzhiyun 3307*4882a593Smuzhiyun // ATOM_MODE_TIMING data are exactly the same as VESA timing data. 3308*4882a593Smuzhiyun // Translation from EDID to ATOM_MODE_TIMING, use the following formula. 3309*4882a593Smuzhiyun // 3310*4882a593Smuzhiyun // VESA_HTOTAL = VESA_ACTIVE + 2* VESA_BORDER + VESA_BLANK 3311*4882a593Smuzhiyun // = EDID_HA + EDID_HBL 3312*4882a593Smuzhiyun // VESA_HDISP = VESA_ACTIVE = EDID_HA 3313*4882a593Smuzhiyun // VESA_HSYNC_START = VESA_ACTIVE + VESA_BORDER + VESA_FRONT_PORCH 3314*4882a593Smuzhiyun // = EDID_HA + EDID_HSO 3315*4882a593Smuzhiyun // VESA_HSYNC_WIDTH = VESA_HSYNC_TIME = EDID_HSPW 3316*4882a593Smuzhiyun // VESA_BORDER = EDID_BORDER 3317*4882a593Smuzhiyun 3318*4882a593Smuzhiyun /****************************************************************************/ 3319*4882a593Smuzhiyun // Structure used in SetCRTC_UsingDTDTimingTable 3320*4882a593Smuzhiyun /****************************************************************************/ 3321*4882a593Smuzhiyun typedef struct _SET_CRTC_USING_DTD_TIMING_PARAMETERS 3322*4882a593Smuzhiyun { 3323*4882a593Smuzhiyun USHORT usH_Size; 3324*4882a593Smuzhiyun USHORT usH_Blanking_Time; 3325*4882a593Smuzhiyun USHORT usV_Size; 3326*4882a593Smuzhiyun USHORT usV_Blanking_Time; 3327*4882a593Smuzhiyun USHORT usH_SyncOffset; 3328*4882a593Smuzhiyun USHORT usH_SyncWidth; 3329*4882a593Smuzhiyun USHORT usV_SyncOffset; 3330*4882a593Smuzhiyun USHORT usV_SyncWidth; 3331*4882a593Smuzhiyun ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo; 3332*4882a593Smuzhiyun UCHAR ucH_Border; // From DFP EDID 3333*4882a593Smuzhiyun UCHAR ucV_Border; 3334*4882a593Smuzhiyun UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC2 3335*4882a593Smuzhiyun UCHAR ucPadding[3]; 3336*4882a593Smuzhiyun }SET_CRTC_USING_DTD_TIMING_PARAMETERS; 3337*4882a593Smuzhiyun 3338*4882a593Smuzhiyun /****************************************************************************/ 3339*4882a593Smuzhiyun // Structure used in SetCRTC_TimingTable 3340*4882a593Smuzhiyun /****************************************************************************/ 3341*4882a593Smuzhiyun typedef struct _SET_CRTC_TIMING_PARAMETERS 3342*4882a593Smuzhiyun { 3343*4882a593Smuzhiyun USHORT usH_Total; // horizontal total 3344*4882a593Smuzhiyun USHORT usH_Disp; // horizontal display 3345*4882a593Smuzhiyun USHORT usH_SyncStart; // horozontal Sync start 3346*4882a593Smuzhiyun USHORT usH_SyncWidth; // horizontal Sync width 3347*4882a593Smuzhiyun USHORT usV_Total; // vertical total 3348*4882a593Smuzhiyun USHORT usV_Disp; // vertical display 3349*4882a593Smuzhiyun USHORT usV_SyncStart; // vertical Sync start 3350*4882a593Smuzhiyun USHORT usV_SyncWidth; // vertical Sync width 3351*4882a593Smuzhiyun ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo; 3352*4882a593Smuzhiyun UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC2 3353*4882a593Smuzhiyun UCHAR ucOverscanRight; // right 3354*4882a593Smuzhiyun UCHAR ucOverscanLeft; // left 3355*4882a593Smuzhiyun UCHAR ucOverscanBottom; // bottom 3356*4882a593Smuzhiyun UCHAR ucOverscanTop; // top 3357*4882a593Smuzhiyun UCHAR ucReserved; 3358*4882a593Smuzhiyun }SET_CRTC_TIMING_PARAMETERS; 3359*4882a593Smuzhiyun #define SET_CRTC_TIMING_PARAMETERS_PS_ALLOCATION SET_CRTC_TIMING_PARAMETERS 3360*4882a593Smuzhiyun 3361*4882a593Smuzhiyun /****************************************************************************/ 3362*4882a593Smuzhiyun // Structure used in StandardVESA_TimingTable 3363*4882a593Smuzhiyun // AnalogTV_InfoTable 3364*4882a593Smuzhiyun // ComponentVideoInfoTable 3365*4882a593Smuzhiyun /****************************************************************************/ 3366*4882a593Smuzhiyun typedef struct _ATOM_MODE_TIMING 3367*4882a593Smuzhiyun { 3368*4882a593Smuzhiyun USHORT usCRTC_H_Total; 3369*4882a593Smuzhiyun USHORT usCRTC_H_Disp; 3370*4882a593Smuzhiyun USHORT usCRTC_H_SyncStart; 3371*4882a593Smuzhiyun USHORT usCRTC_H_SyncWidth; 3372*4882a593Smuzhiyun USHORT usCRTC_V_Total; 3373*4882a593Smuzhiyun USHORT usCRTC_V_Disp; 3374*4882a593Smuzhiyun USHORT usCRTC_V_SyncStart; 3375*4882a593Smuzhiyun USHORT usCRTC_V_SyncWidth; 3376*4882a593Smuzhiyun USHORT usPixelClock; //in 10Khz unit 3377*4882a593Smuzhiyun ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo; 3378*4882a593Smuzhiyun USHORT usCRTC_OverscanRight; 3379*4882a593Smuzhiyun USHORT usCRTC_OverscanLeft; 3380*4882a593Smuzhiyun USHORT usCRTC_OverscanBottom; 3381*4882a593Smuzhiyun USHORT usCRTC_OverscanTop; 3382*4882a593Smuzhiyun USHORT usReserve; 3383*4882a593Smuzhiyun UCHAR ucInternalModeNumber; 3384*4882a593Smuzhiyun UCHAR ucRefreshRate; 3385*4882a593Smuzhiyun }ATOM_MODE_TIMING; 3386*4882a593Smuzhiyun 3387*4882a593Smuzhiyun typedef struct _ATOM_DTD_FORMAT 3388*4882a593Smuzhiyun { 3389*4882a593Smuzhiyun USHORT usPixClk; 3390*4882a593Smuzhiyun USHORT usHActive; 3391*4882a593Smuzhiyun USHORT usHBlanking_Time; 3392*4882a593Smuzhiyun USHORT usVActive; 3393*4882a593Smuzhiyun USHORT usVBlanking_Time; 3394*4882a593Smuzhiyun USHORT usHSyncOffset; 3395*4882a593Smuzhiyun USHORT usHSyncWidth; 3396*4882a593Smuzhiyun USHORT usVSyncOffset; 3397*4882a593Smuzhiyun USHORT usVSyncWidth; 3398*4882a593Smuzhiyun USHORT usImageHSize; 3399*4882a593Smuzhiyun USHORT usImageVSize; 3400*4882a593Smuzhiyun UCHAR ucHBorder; 3401*4882a593Smuzhiyun UCHAR ucVBorder; 3402*4882a593Smuzhiyun ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo; 3403*4882a593Smuzhiyun UCHAR ucInternalModeNumber; 3404*4882a593Smuzhiyun UCHAR ucRefreshRate; 3405*4882a593Smuzhiyun }ATOM_DTD_FORMAT; 3406*4882a593Smuzhiyun 3407*4882a593Smuzhiyun /****************************************************************************/ 3408*4882a593Smuzhiyun // Structure used in LVDS_InfoTable 3409*4882a593Smuzhiyun // * Need a document to describe this table 3410*4882a593Smuzhiyun /****************************************************************************/ 3411*4882a593Smuzhiyun #define SUPPORTED_LCD_REFRESHRATE_30Hz 0x0004 3412*4882a593Smuzhiyun #define SUPPORTED_LCD_REFRESHRATE_40Hz 0x0008 3413*4882a593Smuzhiyun #define SUPPORTED_LCD_REFRESHRATE_50Hz 0x0010 3414*4882a593Smuzhiyun #define SUPPORTED_LCD_REFRESHRATE_60Hz 0x0020 3415*4882a593Smuzhiyun 3416*4882a593Smuzhiyun //ucTableFormatRevision=1 3417*4882a593Smuzhiyun //ucTableContentRevision=1 3418*4882a593Smuzhiyun typedef struct _ATOM_LVDS_INFO 3419*4882a593Smuzhiyun { 3420*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3421*4882a593Smuzhiyun ATOM_DTD_FORMAT sLCDTiming; 3422*4882a593Smuzhiyun USHORT usModePatchTableOffset; 3423*4882a593Smuzhiyun USHORT usSupportedRefreshRate; //Refer to panel info table in ATOMBIOS extension Spec. 3424*4882a593Smuzhiyun USHORT usOffDelayInMs; 3425*4882a593Smuzhiyun UCHAR ucPowerSequenceDigOntoDEin10Ms; 3426*4882a593Smuzhiyun UCHAR ucPowerSequenceDEtoBLOnin10Ms; 3427*4882a593Smuzhiyun UCHAR ucLVDS_Misc; // Bit0:{=0:single, =1:dual},Bit1 {=0:666RGB, =1:888RGB},Bit2:3:{Grey level} 3428*4882a593Smuzhiyun // Bit4:{=0:LDI format for RGB888, =1 FPDI format for RGB888} 3429*4882a593Smuzhiyun // Bit5:{=0:Spatial Dithering disabled;1 Spatial Dithering enabled} 3430*4882a593Smuzhiyun // Bit6:{=0:Temporal Dithering disabled;1 Temporal Dithering enabled} 3431*4882a593Smuzhiyun UCHAR ucPanelDefaultRefreshRate; 3432*4882a593Smuzhiyun UCHAR ucPanelIdentification; 3433*4882a593Smuzhiyun UCHAR ucSS_Id; 3434*4882a593Smuzhiyun }ATOM_LVDS_INFO; 3435*4882a593Smuzhiyun 3436*4882a593Smuzhiyun //ucTableFormatRevision=1 3437*4882a593Smuzhiyun //ucTableContentRevision=2 3438*4882a593Smuzhiyun typedef struct _ATOM_LVDS_INFO_V12 3439*4882a593Smuzhiyun { 3440*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3441*4882a593Smuzhiyun ATOM_DTD_FORMAT sLCDTiming; 3442*4882a593Smuzhiyun USHORT usExtInfoTableOffset; 3443*4882a593Smuzhiyun USHORT usSupportedRefreshRate; //Refer to panel info table in ATOMBIOS extension Spec. 3444*4882a593Smuzhiyun USHORT usOffDelayInMs; 3445*4882a593Smuzhiyun UCHAR ucPowerSequenceDigOntoDEin10Ms; 3446*4882a593Smuzhiyun UCHAR ucPowerSequenceDEtoBLOnin10Ms; 3447*4882a593Smuzhiyun UCHAR ucLVDS_Misc; // Bit0:{=0:single, =1:dual},Bit1 {=0:666RGB, =1:888RGB},Bit2:3:{Grey level} 3448*4882a593Smuzhiyun // Bit4:{=0:LDI format for RGB888, =1 FPDI format for RGB888} 3449*4882a593Smuzhiyun // Bit5:{=0:Spatial Dithering disabled;1 Spatial Dithering enabled} 3450*4882a593Smuzhiyun // Bit6:{=0:Temporal Dithering disabled;1 Temporal Dithering enabled} 3451*4882a593Smuzhiyun UCHAR ucPanelDefaultRefreshRate; 3452*4882a593Smuzhiyun UCHAR ucPanelIdentification; 3453*4882a593Smuzhiyun UCHAR ucSS_Id; 3454*4882a593Smuzhiyun USHORT usLCDVenderID; 3455*4882a593Smuzhiyun USHORT usLCDProductID; 3456*4882a593Smuzhiyun UCHAR ucLCDPanel_SpecialHandlingCap; 3457*4882a593Smuzhiyun UCHAR ucPanelInfoSize; // start from ATOM_DTD_FORMAT to end of panel info, include ExtInfoTable 3458*4882a593Smuzhiyun UCHAR ucReserved[2]; 3459*4882a593Smuzhiyun }ATOM_LVDS_INFO_V12; 3460*4882a593Smuzhiyun 3461*4882a593Smuzhiyun //Definitions for ucLCDPanel_SpecialHandlingCap: 3462*4882a593Smuzhiyun 3463*4882a593Smuzhiyun //Once DAL sees this CAP is set, it will read EDID from LCD on its own instead of using sLCDTiming in ATOM_LVDS_INFO_V12. 3464*4882a593Smuzhiyun //Other entries in ATOM_LVDS_INFO_V12 are still valid/useful to DAL 3465*4882a593Smuzhiyun #define LCDPANEL_CAP_READ_EDID 0x1 3466*4882a593Smuzhiyun 3467*4882a593Smuzhiyun //If a design supports DRR (dynamic refresh rate) on internal panels (LVDS or EDP), this cap is set in ucLCDPanel_SpecialHandlingCap together 3468*4882a593Smuzhiyun //with multiple supported refresh rates@usSupportedRefreshRate. This cap should not be set when only slow refresh rate is supported (static 3469*4882a593Smuzhiyun //refresh rate switch by SW. This is only valid from ATOM_LVDS_INFO_V12 3470*4882a593Smuzhiyun #define LCDPANEL_CAP_DRR_SUPPORTED 0x2 3471*4882a593Smuzhiyun 3472*4882a593Smuzhiyun //Use this cap bit for a quick reference whether an embadded panel (LCD1 ) is LVDS or eDP. 3473*4882a593Smuzhiyun #define LCDPANEL_CAP_eDP 0x4 3474*4882a593Smuzhiyun 3475*4882a593Smuzhiyun 3476*4882a593Smuzhiyun //Color Bit Depth definition in EDID V1.4 @BYTE 14h 3477*4882a593Smuzhiyun //Bit 6 5 4 3478*4882a593Smuzhiyun // 0 0 0 - Color bit depth is undefined 3479*4882a593Smuzhiyun // 0 0 1 - 6 Bits per Primary Color 3480*4882a593Smuzhiyun // 0 1 0 - 8 Bits per Primary Color 3481*4882a593Smuzhiyun // 0 1 1 - 10 Bits per Primary Color 3482*4882a593Smuzhiyun // 1 0 0 - 12 Bits per Primary Color 3483*4882a593Smuzhiyun // 1 0 1 - 14 Bits per Primary Color 3484*4882a593Smuzhiyun // 1 1 0 - 16 Bits per Primary Color 3485*4882a593Smuzhiyun // 1 1 1 - Reserved 3486*4882a593Smuzhiyun 3487*4882a593Smuzhiyun #define PANEL_COLOR_BIT_DEPTH_MASK 0x70 3488*4882a593Smuzhiyun 3489*4882a593Smuzhiyun // Bit7:{=0:Random Dithering disabled;1 Random Dithering enabled} 3490*4882a593Smuzhiyun #define PANEL_RANDOM_DITHER 0x80 3491*4882a593Smuzhiyun #define PANEL_RANDOM_DITHER_MASK 0x80 3492*4882a593Smuzhiyun 3493*4882a593Smuzhiyun #define ATOM_LVDS_INFO_LAST ATOM_LVDS_INFO_V12 // no need to change this 3494*4882a593Smuzhiyun 3495*4882a593Smuzhiyun /****************************************************************************/ 3496*4882a593Smuzhiyun // Structures used by LCD_InfoTable V1.3 Note: previous version was called ATOM_LVDS_INFO_V12 3497*4882a593Smuzhiyun // ASIC Families: NI 3498*4882a593Smuzhiyun // ucTableFormatRevision=1 3499*4882a593Smuzhiyun // ucTableContentRevision=3 3500*4882a593Smuzhiyun /****************************************************************************/ 3501*4882a593Smuzhiyun typedef struct _ATOM_LCD_INFO_V13 3502*4882a593Smuzhiyun { 3503*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3504*4882a593Smuzhiyun ATOM_DTD_FORMAT sLCDTiming; 3505*4882a593Smuzhiyun USHORT usExtInfoTableOffset; 3506*4882a593Smuzhiyun USHORT usSupportedRefreshRate; //Refer to panel info table in ATOMBIOS extension Spec. 3507*4882a593Smuzhiyun ULONG ulReserved0; 3508*4882a593Smuzhiyun UCHAR ucLCD_Misc; // Reorganized in V13 3509*4882a593Smuzhiyun // Bit0: {=0:single, =1:dual}, 3510*4882a593Smuzhiyun // Bit1: {=0:LDI format for RGB888, =1 FPDI format for RGB888} // was {=0:666RGB, =1:888RGB}, 3511*4882a593Smuzhiyun // Bit3:2: {Grey level} 3512*4882a593Smuzhiyun // Bit6:4 Color Bit Depth definition (see below definition in EDID V1.4 @BYTE 14h) 3513*4882a593Smuzhiyun // Bit7 Reserved. was for ATOM_PANEL_MISC_API_ENABLED, still need it? 3514*4882a593Smuzhiyun UCHAR ucPanelDefaultRefreshRate; 3515*4882a593Smuzhiyun UCHAR ucPanelIdentification; 3516*4882a593Smuzhiyun UCHAR ucSS_Id; 3517*4882a593Smuzhiyun USHORT usLCDVenderID; 3518*4882a593Smuzhiyun USHORT usLCDProductID; 3519*4882a593Smuzhiyun UCHAR ucLCDPanel_SpecialHandlingCap; // Reorganized in V13 3520*4882a593Smuzhiyun // Bit0: Once DAL sees this CAP is set, it will read EDID from LCD on its own 3521*4882a593Smuzhiyun // Bit1: See LCDPANEL_CAP_DRR_SUPPORTED 3522*4882a593Smuzhiyun // Bit2: a quick reference whether an embadded panel (LCD1 ) is LVDS (0) or eDP (1) 3523*4882a593Smuzhiyun // Bit7-3: Reserved 3524*4882a593Smuzhiyun UCHAR ucPanelInfoSize; // start from ATOM_DTD_FORMAT to end of panel info, include ExtInfoTable 3525*4882a593Smuzhiyun USHORT usBacklightPWM; // Backlight PWM in Hz. New in _V13 3526*4882a593Smuzhiyun 3527*4882a593Smuzhiyun UCHAR ucPowerSequenceDIGONtoDE_in4Ms; 3528*4882a593Smuzhiyun UCHAR ucPowerSequenceDEtoVARY_BL_in4Ms; 3529*4882a593Smuzhiyun UCHAR ucPowerSequenceVARY_BLtoDE_in4Ms; 3530*4882a593Smuzhiyun UCHAR ucPowerSequenceDEtoDIGON_in4Ms; 3531*4882a593Smuzhiyun 3532*4882a593Smuzhiyun UCHAR ucOffDelay_in4Ms; 3533*4882a593Smuzhiyun UCHAR ucPowerSequenceVARY_BLtoBLON_in4Ms; 3534*4882a593Smuzhiyun UCHAR ucPowerSequenceBLONtoVARY_BL_in4Ms; 3535*4882a593Smuzhiyun UCHAR ucReserved1; 3536*4882a593Smuzhiyun 3537*4882a593Smuzhiyun UCHAR ucDPCD_eDP_CONFIGURATION_CAP; // dpcd 0dh 3538*4882a593Smuzhiyun UCHAR ucDPCD_MAX_LINK_RATE; // dpcd 01h 3539*4882a593Smuzhiyun UCHAR ucDPCD_MAX_LANE_COUNT; // dpcd 02h 3540*4882a593Smuzhiyun UCHAR ucDPCD_MAX_DOWNSPREAD; // dpcd 03h 3541*4882a593Smuzhiyun 3542*4882a593Smuzhiyun USHORT usMaxPclkFreqInSingleLink; // Max PixelClock frequency in single link mode. 3543*4882a593Smuzhiyun UCHAR uceDPToLVDSRxId; 3544*4882a593Smuzhiyun UCHAR ucLcdReservd; 3545*4882a593Smuzhiyun ULONG ulReserved[2]; 3546*4882a593Smuzhiyun }ATOM_LCD_INFO_V13; 3547*4882a593Smuzhiyun 3548*4882a593Smuzhiyun #define ATOM_LCD_INFO_LAST ATOM_LCD_INFO_V13 3549*4882a593Smuzhiyun 3550*4882a593Smuzhiyun //Definitions for ucLCD_Misc 3551*4882a593Smuzhiyun #define ATOM_PANEL_MISC_V13_DUAL 0x00000001 3552*4882a593Smuzhiyun #define ATOM_PANEL_MISC_V13_FPDI 0x00000002 3553*4882a593Smuzhiyun #define ATOM_PANEL_MISC_V13_GREY_LEVEL 0x0000000C 3554*4882a593Smuzhiyun #define ATOM_PANEL_MISC_V13_GREY_LEVEL_SHIFT 2 3555*4882a593Smuzhiyun #define ATOM_PANEL_MISC_V13_COLOR_BIT_DEPTH_MASK 0x70 3556*4882a593Smuzhiyun #define ATOM_PANEL_MISC_V13_6BIT_PER_COLOR 0x10 3557*4882a593Smuzhiyun #define ATOM_PANEL_MISC_V13_8BIT_PER_COLOR 0x20 3558*4882a593Smuzhiyun 3559*4882a593Smuzhiyun //Color Bit Depth definition in EDID V1.4 @BYTE 14h 3560*4882a593Smuzhiyun //Bit 6 5 4 3561*4882a593Smuzhiyun // 0 0 0 - Color bit depth is undefined 3562*4882a593Smuzhiyun // 0 0 1 - 6 Bits per Primary Color 3563*4882a593Smuzhiyun // 0 1 0 - 8 Bits per Primary Color 3564*4882a593Smuzhiyun // 0 1 1 - 10 Bits per Primary Color 3565*4882a593Smuzhiyun // 1 0 0 - 12 Bits per Primary Color 3566*4882a593Smuzhiyun // 1 0 1 - 14 Bits per Primary Color 3567*4882a593Smuzhiyun // 1 1 0 - 16 Bits per Primary Color 3568*4882a593Smuzhiyun // 1 1 1 - Reserved 3569*4882a593Smuzhiyun 3570*4882a593Smuzhiyun //Definitions for ucLCDPanel_SpecialHandlingCap: 3571*4882a593Smuzhiyun 3572*4882a593Smuzhiyun //Once DAL sees this CAP is set, it will read EDID from LCD on its own instead of using sLCDTiming in ATOM_LVDS_INFO_V12. 3573*4882a593Smuzhiyun //Other entries in ATOM_LVDS_INFO_V12 are still valid/useful to DAL 3574*4882a593Smuzhiyun #define LCDPANEL_CAP_V13_READ_EDID 0x1 // = LCDPANEL_CAP_READ_EDID no change comparing to previous version 3575*4882a593Smuzhiyun 3576*4882a593Smuzhiyun //If a design supports DRR (dynamic refresh rate) on internal panels (LVDS or EDP), this cap is set in ucLCDPanel_SpecialHandlingCap together 3577*4882a593Smuzhiyun //with multiple supported refresh rates@usSupportedRefreshRate. This cap should not be set when only slow refresh rate is supported (static 3578*4882a593Smuzhiyun //refresh rate switch by SW. This is only valid from ATOM_LVDS_INFO_V12 3579*4882a593Smuzhiyun #define LCDPANEL_CAP_V13_DRR_SUPPORTED 0x2 // = LCDPANEL_CAP_DRR_SUPPORTED no change comparing to previous version 3580*4882a593Smuzhiyun 3581*4882a593Smuzhiyun //Use this cap bit for a quick reference whether an embadded panel (LCD1 ) is LVDS or eDP. 3582*4882a593Smuzhiyun #define LCDPANEL_CAP_V13_eDP 0x4 // = LCDPANEL_CAP_eDP no change comparing to previous version 3583*4882a593Smuzhiyun 3584*4882a593Smuzhiyun //uceDPToLVDSRxId 3585*4882a593Smuzhiyun #define eDP_TO_LVDS_RX_DISABLE 0x00 // no eDP->LVDS translator chip 3586*4882a593Smuzhiyun #define eDP_TO_LVDS_COMMON_ID 0x01 // common eDP->LVDS translator chip without AMD SW init 3587*4882a593Smuzhiyun #define eDP_TO_LVDS_RT_ID 0x02 // RT tanslator which require AMD SW init 3588*4882a593Smuzhiyun 3589*4882a593Smuzhiyun typedef struct _ATOM_PATCH_RECORD_MODE 3590*4882a593Smuzhiyun { 3591*4882a593Smuzhiyun UCHAR ucRecordType; 3592*4882a593Smuzhiyun USHORT usHDisp; 3593*4882a593Smuzhiyun USHORT usVDisp; 3594*4882a593Smuzhiyun }ATOM_PATCH_RECORD_MODE; 3595*4882a593Smuzhiyun 3596*4882a593Smuzhiyun typedef struct _ATOM_LCD_RTS_RECORD 3597*4882a593Smuzhiyun { 3598*4882a593Smuzhiyun UCHAR ucRecordType; 3599*4882a593Smuzhiyun UCHAR ucRTSValue; 3600*4882a593Smuzhiyun }ATOM_LCD_RTS_RECORD; 3601*4882a593Smuzhiyun 3602*4882a593Smuzhiyun //!! If the record below exits, it shoud always be the first record for easy use in command table!!! 3603*4882a593Smuzhiyun // The record below is only used when LVDS_Info is present. From ATOM_LVDS_INFO_V12, use ucLCDPanel_SpecialHandlingCap instead. 3604*4882a593Smuzhiyun typedef struct _ATOM_LCD_MODE_CONTROL_CAP 3605*4882a593Smuzhiyun { 3606*4882a593Smuzhiyun UCHAR ucRecordType; 3607*4882a593Smuzhiyun USHORT usLCDCap; 3608*4882a593Smuzhiyun }ATOM_LCD_MODE_CONTROL_CAP; 3609*4882a593Smuzhiyun 3610*4882a593Smuzhiyun #define LCD_MODE_CAP_BL_OFF 1 3611*4882a593Smuzhiyun #define LCD_MODE_CAP_CRTC_OFF 2 3612*4882a593Smuzhiyun #define LCD_MODE_CAP_PANEL_OFF 4 3613*4882a593Smuzhiyun 3614*4882a593Smuzhiyun typedef struct _ATOM_FAKE_EDID_PATCH_RECORD 3615*4882a593Smuzhiyun { 3616*4882a593Smuzhiyun UCHAR ucRecordType; 3617*4882a593Smuzhiyun UCHAR ucFakeEDIDLength; 3618*4882a593Smuzhiyun UCHAR ucFakeEDIDString[1]; // This actually has ucFakeEdidLength elements. 3619*4882a593Smuzhiyun } ATOM_FAKE_EDID_PATCH_RECORD; 3620*4882a593Smuzhiyun 3621*4882a593Smuzhiyun typedef struct _ATOM_PANEL_RESOLUTION_PATCH_RECORD 3622*4882a593Smuzhiyun { 3623*4882a593Smuzhiyun UCHAR ucRecordType; 3624*4882a593Smuzhiyun USHORT usHSize; 3625*4882a593Smuzhiyun USHORT usVSize; 3626*4882a593Smuzhiyun }ATOM_PANEL_RESOLUTION_PATCH_RECORD; 3627*4882a593Smuzhiyun 3628*4882a593Smuzhiyun #define LCD_MODE_PATCH_RECORD_MODE_TYPE 1 3629*4882a593Smuzhiyun #define LCD_RTS_RECORD_TYPE 2 3630*4882a593Smuzhiyun #define LCD_CAP_RECORD_TYPE 3 3631*4882a593Smuzhiyun #define LCD_FAKE_EDID_PATCH_RECORD_TYPE 4 3632*4882a593Smuzhiyun #define LCD_PANEL_RESOLUTION_RECORD_TYPE 5 3633*4882a593Smuzhiyun #define LCD_EDID_OFFSET_PATCH_RECORD_TYPE 6 3634*4882a593Smuzhiyun #define ATOM_RECORD_END_TYPE 0xFF 3635*4882a593Smuzhiyun 3636*4882a593Smuzhiyun /****************************Spread Spectrum Info Table Definitions **********************/ 3637*4882a593Smuzhiyun 3638*4882a593Smuzhiyun //ucTableFormatRevision=1 3639*4882a593Smuzhiyun //ucTableContentRevision=2 3640*4882a593Smuzhiyun typedef struct _ATOM_SPREAD_SPECTRUM_ASSIGNMENT 3641*4882a593Smuzhiyun { 3642*4882a593Smuzhiyun USHORT usSpreadSpectrumPercentage; 3643*4882a593Smuzhiyun UCHAR ucSpreadSpectrumType; //Bit1=0 Down Spread,=1 Center Spread. Bit1=1 Ext. =0 Int. Bit2=1: PCIE REFCLK SS =0 iternal PPLL SS Others:TBD 3644*4882a593Smuzhiyun UCHAR ucSS_Step; 3645*4882a593Smuzhiyun UCHAR ucSS_Delay; 3646*4882a593Smuzhiyun UCHAR ucSS_Id; 3647*4882a593Smuzhiyun UCHAR ucRecommendedRef_Div; 3648*4882a593Smuzhiyun UCHAR ucSS_Range; //it was reserved for V11 3649*4882a593Smuzhiyun }ATOM_SPREAD_SPECTRUM_ASSIGNMENT; 3650*4882a593Smuzhiyun 3651*4882a593Smuzhiyun #define ATOM_MAX_SS_ENTRY 16 3652*4882a593Smuzhiyun #define ATOM_DP_SS_ID1 0x0f1 // SS ID for internal DP stream at 2.7Ghz. if ATOM_DP_SS_ID2 does not exist in SS_InfoTable, it is used for internal DP stream at 1.62Ghz as well. 3653*4882a593Smuzhiyun #define ATOM_DP_SS_ID2 0x0f2 // SS ID for internal DP stream at 1.62Ghz, if it exists in SS_InfoTable. 3654*4882a593Smuzhiyun #define ATOM_LVLINK_2700MHz_SS_ID 0x0f3 // SS ID for LV link translator chip at 2.7Ghz 3655*4882a593Smuzhiyun #define ATOM_LVLINK_1620MHz_SS_ID 0x0f4 // SS ID for LV link translator chip at 1.62Ghz 3656*4882a593Smuzhiyun 3657*4882a593Smuzhiyun 3658*4882a593Smuzhiyun #define ATOM_SS_DOWN_SPREAD_MODE_MASK 0x00000000 3659*4882a593Smuzhiyun #define ATOM_SS_DOWN_SPREAD_MODE 0x00000000 3660*4882a593Smuzhiyun #define ATOM_SS_CENTRE_SPREAD_MODE_MASK 0x00000001 3661*4882a593Smuzhiyun #define ATOM_SS_CENTRE_SPREAD_MODE 0x00000001 3662*4882a593Smuzhiyun #define ATOM_INTERNAL_SS_MASK 0x00000000 3663*4882a593Smuzhiyun #define ATOM_EXTERNAL_SS_MASK 0x00000002 3664*4882a593Smuzhiyun #define EXEC_SS_STEP_SIZE_SHIFT 2 3665*4882a593Smuzhiyun #define EXEC_SS_DELAY_SHIFT 4 3666*4882a593Smuzhiyun #define ACTIVEDATA_TO_BLON_DELAY_SHIFT 4 3667*4882a593Smuzhiyun 3668*4882a593Smuzhiyun typedef struct _ATOM_SPREAD_SPECTRUM_INFO 3669*4882a593Smuzhiyun { 3670*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3671*4882a593Smuzhiyun ATOM_SPREAD_SPECTRUM_ASSIGNMENT asSS_Info[ATOM_MAX_SS_ENTRY]; 3672*4882a593Smuzhiyun }ATOM_SPREAD_SPECTRUM_INFO; 3673*4882a593Smuzhiyun 3674*4882a593Smuzhiyun /****************************************************************************/ 3675*4882a593Smuzhiyun // Structure used in AnalogTV_InfoTable (Top level) 3676*4882a593Smuzhiyun /****************************************************************************/ 3677*4882a593Smuzhiyun //ucTVBootUpDefaultStd definition: 3678*4882a593Smuzhiyun 3679*4882a593Smuzhiyun //ATOM_TV_NTSC 1 3680*4882a593Smuzhiyun //ATOM_TV_NTSCJ 2 3681*4882a593Smuzhiyun //ATOM_TV_PAL 3 3682*4882a593Smuzhiyun //ATOM_TV_PALM 4 3683*4882a593Smuzhiyun //ATOM_TV_PALCN 5 3684*4882a593Smuzhiyun //ATOM_TV_PALN 6 3685*4882a593Smuzhiyun //ATOM_TV_PAL60 7 3686*4882a593Smuzhiyun //ATOM_TV_SECAM 8 3687*4882a593Smuzhiyun 3688*4882a593Smuzhiyun //ucTVSupportedStd definition: 3689*4882a593Smuzhiyun #define NTSC_SUPPORT 0x1 3690*4882a593Smuzhiyun #define NTSCJ_SUPPORT 0x2 3691*4882a593Smuzhiyun 3692*4882a593Smuzhiyun #define PAL_SUPPORT 0x4 3693*4882a593Smuzhiyun #define PALM_SUPPORT 0x8 3694*4882a593Smuzhiyun #define PALCN_SUPPORT 0x10 3695*4882a593Smuzhiyun #define PALN_SUPPORT 0x20 3696*4882a593Smuzhiyun #define PAL60_SUPPORT 0x40 3697*4882a593Smuzhiyun #define SECAM_SUPPORT 0x80 3698*4882a593Smuzhiyun 3699*4882a593Smuzhiyun #define MAX_SUPPORTED_TV_TIMING 2 3700*4882a593Smuzhiyun 3701*4882a593Smuzhiyun typedef struct _ATOM_ANALOG_TV_INFO 3702*4882a593Smuzhiyun { 3703*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3704*4882a593Smuzhiyun UCHAR ucTV_SupportedStandard; 3705*4882a593Smuzhiyun UCHAR ucTV_BootUpDefaultStandard; 3706*4882a593Smuzhiyun UCHAR ucExt_TV_ASIC_ID; 3707*4882a593Smuzhiyun UCHAR ucExt_TV_ASIC_SlaveAddr; 3708*4882a593Smuzhiyun /*ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_TV_TIMING];*/ 3709*4882a593Smuzhiyun ATOM_MODE_TIMING aModeTimings[MAX_SUPPORTED_TV_TIMING]; 3710*4882a593Smuzhiyun }ATOM_ANALOG_TV_INFO; 3711*4882a593Smuzhiyun 3712*4882a593Smuzhiyun #define MAX_SUPPORTED_TV_TIMING_V1_2 3 3713*4882a593Smuzhiyun 3714*4882a593Smuzhiyun typedef struct _ATOM_ANALOG_TV_INFO_V1_2 3715*4882a593Smuzhiyun { 3716*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3717*4882a593Smuzhiyun UCHAR ucTV_SupportedStandard; 3718*4882a593Smuzhiyun UCHAR ucTV_BootUpDefaultStandard; 3719*4882a593Smuzhiyun UCHAR ucExt_TV_ASIC_ID; 3720*4882a593Smuzhiyun UCHAR ucExt_TV_ASIC_SlaveAddr; 3721*4882a593Smuzhiyun ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_TV_TIMING_V1_2]; 3722*4882a593Smuzhiyun }ATOM_ANALOG_TV_INFO_V1_2; 3723*4882a593Smuzhiyun 3724*4882a593Smuzhiyun typedef struct _ATOM_DPCD_INFO 3725*4882a593Smuzhiyun { 3726*4882a593Smuzhiyun UCHAR ucRevisionNumber; //10h : Revision 1.0; 11h : Revision 1.1 3727*4882a593Smuzhiyun UCHAR ucMaxLinkRate; //06h : 1.62Gbps per lane; 0Ah = 2.7Gbps per lane 3728*4882a593Smuzhiyun UCHAR ucMaxLane; //Bits 4:0 = MAX_LANE_COUNT (1/2/4). Bit 7 = ENHANCED_FRAME_CAP 3729*4882a593Smuzhiyun UCHAR ucMaxDownSpread; //Bit0 = 0: No Down spread; Bit0 = 1: 0.5% (Subject to change according to DP spec) 3730*4882a593Smuzhiyun }ATOM_DPCD_INFO; 3731*4882a593Smuzhiyun 3732*4882a593Smuzhiyun #define ATOM_DPCD_MAX_LANE_MASK 0x1F 3733*4882a593Smuzhiyun 3734*4882a593Smuzhiyun /**************************************************************************/ 3735*4882a593Smuzhiyun // VRAM usage and their defintions 3736*4882a593Smuzhiyun 3737*4882a593Smuzhiyun // One chunk of VRAM used by Bios are for HWICON surfaces,EDID data. 3738*4882a593Smuzhiyun // Current Mode timing and Dail Timing and/or STD timing data EACH device. They can be broken down as below. 3739*4882a593Smuzhiyun // All the addresses below are the offsets from the frame buffer start.They all MUST be Dword aligned! 3740*4882a593Smuzhiyun // To driver: The physical address of this memory portion=mmFB_START(4K aligned)+ATOMBIOS_VRAM_USAGE_START_ADDR+ATOM_x_ADDR 3741*4882a593Smuzhiyun // To Bios: ATOMBIOS_VRAM_USAGE_START_ADDR+ATOM_x_ADDR->MM_INDEX 3742*4882a593Smuzhiyun 3743*4882a593Smuzhiyun #ifndef VESA_MEMORY_IN_64K_BLOCK 3744*4882a593Smuzhiyun #define VESA_MEMORY_IN_64K_BLOCK 0x100 //256*64K=16Mb (Max. VESA memory is 16Mb!) 3745*4882a593Smuzhiyun #endif 3746*4882a593Smuzhiyun 3747*4882a593Smuzhiyun #define ATOM_EDID_RAW_DATASIZE 256 //In Bytes 3748*4882a593Smuzhiyun #define ATOM_HWICON_SURFACE_SIZE 4096 //In Bytes 3749*4882a593Smuzhiyun #define ATOM_HWICON_INFOTABLE_SIZE 32 3750*4882a593Smuzhiyun #define MAX_DTD_MODE_IN_VRAM 6 3751*4882a593Smuzhiyun #define ATOM_DTD_MODE_SUPPORT_TBL_SIZE (MAX_DTD_MODE_IN_VRAM*28) //28= (SIZEOF ATOM_DTD_FORMAT) 3752*4882a593Smuzhiyun #define ATOM_STD_MODE_SUPPORT_TBL_SIZE 32*8 //32 is a predefined number,8= (SIZEOF ATOM_STD_FORMAT) 3753*4882a593Smuzhiyun //20 bytes for Encoder Type and DPCD in STD EDID area 3754*4882a593Smuzhiyun #define DFP_ENCODER_TYPE_OFFSET (ATOM_EDID_RAW_DATASIZE + ATOM_DTD_MODE_SUPPORT_TBL_SIZE + ATOM_STD_MODE_SUPPORT_TBL_SIZE - 20) 3755*4882a593Smuzhiyun #define ATOM_DP_DPCD_OFFSET (DFP_ENCODER_TYPE_OFFSET + 4 ) 3756*4882a593Smuzhiyun 3757*4882a593Smuzhiyun #define ATOM_HWICON1_SURFACE_ADDR 0 3758*4882a593Smuzhiyun #define ATOM_HWICON2_SURFACE_ADDR (ATOM_HWICON1_SURFACE_ADDR + ATOM_HWICON_SURFACE_SIZE) 3759*4882a593Smuzhiyun #define ATOM_HWICON_INFOTABLE_ADDR (ATOM_HWICON2_SURFACE_ADDR + ATOM_HWICON_SURFACE_SIZE) 3760*4882a593Smuzhiyun #define ATOM_CRT1_EDID_ADDR (ATOM_HWICON_INFOTABLE_ADDR + ATOM_HWICON_INFOTABLE_SIZE) 3761*4882a593Smuzhiyun #define ATOM_CRT1_DTD_MODE_TBL_ADDR (ATOM_CRT1_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3762*4882a593Smuzhiyun #define ATOM_CRT1_STD_MODE_TBL_ADDR (ATOM_CRT1_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3763*4882a593Smuzhiyun 3764*4882a593Smuzhiyun #define ATOM_LCD1_EDID_ADDR (ATOM_CRT1_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3765*4882a593Smuzhiyun #define ATOM_LCD1_DTD_MODE_TBL_ADDR (ATOM_LCD1_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3766*4882a593Smuzhiyun #define ATOM_LCD1_STD_MODE_TBL_ADDR (ATOM_LCD1_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3767*4882a593Smuzhiyun 3768*4882a593Smuzhiyun #define ATOM_TV1_DTD_MODE_TBL_ADDR (ATOM_LCD1_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3769*4882a593Smuzhiyun 3770*4882a593Smuzhiyun #define ATOM_DFP1_EDID_ADDR (ATOM_TV1_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3771*4882a593Smuzhiyun #define ATOM_DFP1_DTD_MODE_TBL_ADDR (ATOM_DFP1_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3772*4882a593Smuzhiyun #define ATOM_DFP1_STD_MODE_TBL_ADDR (ATOM_DFP1_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3773*4882a593Smuzhiyun 3774*4882a593Smuzhiyun #define ATOM_CRT2_EDID_ADDR (ATOM_DFP1_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3775*4882a593Smuzhiyun #define ATOM_CRT2_DTD_MODE_TBL_ADDR (ATOM_CRT2_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3776*4882a593Smuzhiyun #define ATOM_CRT2_STD_MODE_TBL_ADDR (ATOM_CRT2_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3777*4882a593Smuzhiyun 3778*4882a593Smuzhiyun #define ATOM_LCD2_EDID_ADDR (ATOM_CRT2_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3779*4882a593Smuzhiyun #define ATOM_LCD2_DTD_MODE_TBL_ADDR (ATOM_LCD2_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3780*4882a593Smuzhiyun #define ATOM_LCD2_STD_MODE_TBL_ADDR (ATOM_LCD2_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3781*4882a593Smuzhiyun 3782*4882a593Smuzhiyun #define ATOM_DFP6_EDID_ADDR (ATOM_LCD2_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3783*4882a593Smuzhiyun #define ATOM_DFP6_DTD_MODE_TBL_ADDR (ATOM_DFP6_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3784*4882a593Smuzhiyun #define ATOM_DFP6_STD_MODE_TBL_ADDR (ATOM_DFP6_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3785*4882a593Smuzhiyun 3786*4882a593Smuzhiyun #define ATOM_DFP2_EDID_ADDR (ATOM_DFP6_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3787*4882a593Smuzhiyun #define ATOM_DFP2_DTD_MODE_TBL_ADDR (ATOM_DFP2_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3788*4882a593Smuzhiyun #define ATOM_DFP2_STD_MODE_TBL_ADDR (ATOM_DFP2_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3789*4882a593Smuzhiyun 3790*4882a593Smuzhiyun #define ATOM_CV_EDID_ADDR (ATOM_DFP2_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3791*4882a593Smuzhiyun #define ATOM_CV_DTD_MODE_TBL_ADDR (ATOM_CV_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3792*4882a593Smuzhiyun #define ATOM_CV_STD_MODE_TBL_ADDR (ATOM_CV_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3793*4882a593Smuzhiyun 3794*4882a593Smuzhiyun #define ATOM_DFP3_EDID_ADDR (ATOM_CV_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3795*4882a593Smuzhiyun #define ATOM_DFP3_DTD_MODE_TBL_ADDR (ATOM_DFP3_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3796*4882a593Smuzhiyun #define ATOM_DFP3_STD_MODE_TBL_ADDR (ATOM_DFP3_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3797*4882a593Smuzhiyun 3798*4882a593Smuzhiyun #define ATOM_DFP4_EDID_ADDR (ATOM_DFP3_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3799*4882a593Smuzhiyun #define ATOM_DFP4_DTD_MODE_TBL_ADDR (ATOM_DFP4_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3800*4882a593Smuzhiyun #define ATOM_DFP4_STD_MODE_TBL_ADDR (ATOM_DFP4_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3801*4882a593Smuzhiyun 3802*4882a593Smuzhiyun #define ATOM_DFP5_EDID_ADDR (ATOM_DFP4_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3803*4882a593Smuzhiyun #define ATOM_DFP5_DTD_MODE_TBL_ADDR (ATOM_DFP5_EDID_ADDR + ATOM_EDID_RAW_DATASIZE) 3804*4882a593Smuzhiyun #define ATOM_DFP5_STD_MODE_TBL_ADDR (ATOM_DFP5_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE) 3805*4882a593Smuzhiyun 3806*4882a593Smuzhiyun #define ATOM_DP_TRAINING_TBL_ADDR (ATOM_DFP5_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE) 3807*4882a593Smuzhiyun 3808*4882a593Smuzhiyun #define ATOM_STACK_STORAGE_START (ATOM_DP_TRAINING_TBL_ADDR + 1024) 3809*4882a593Smuzhiyun #define ATOM_STACK_STORAGE_END ATOM_STACK_STORAGE_START + 512 3810*4882a593Smuzhiyun 3811*4882a593Smuzhiyun //The size below is in Kb! 3812*4882a593Smuzhiyun #define ATOM_VRAM_RESERVE_SIZE ((((ATOM_STACK_STORAGE_END - ATOM_HWICON1_SURFACE_ADDR)>>10)+4)&0xFFFC) 3813*4882a593Smuzhiyun 3814*4882a593Smuzhiyun #define ATOM_VRAM_RESERVE_V2_SIZE 32 3815*4882a593Smuzhiyun 3816*4882a593Smuzhiyun #define ATOM_VRAM_OPERATION_FLAGS_MASK 0xC0000000L 3817*4882a593Smuzhiyun #define ATOM_VRAM_OPERATION_FLAGS_SHIFT 30 3818*4882a593Smuzhiyun #define ATOM_VRAM_BLOCK_NEEDS_NO_RESERVATION 0x1 3819*4882a593Smuzhiyun #define ATOM_VRAM_BLOCK_NEEDS_RESERVATION 0x0 3820*4882a593Smuzhiyun 3821*4882a593Smuzhiyun /***********************************************************************************/ 3822*4882a593Smuzhiyun // Structure used in VRAM_UsageByFirmwareTable 3823*4882a593Smuzhiyun // Note1: This table is filled by SetBiosReservationStartInFB in CoreCommSubs.asm 3824*4882a593Smuzhiyun // at running time. 3825*4882a593Smuzhiyun // note2: From RV770, the memory is more than 32bit addressable, so we will change 3826*4882a593Smuzhiyun // ucTableFormatRevision=1,ucTableContentRevision=4, the strcuture remains 3827*4882a593Smuzhiyun // exactly same as 1.1 and 1.2 (1.3 is never in use), but ulStartAddrUsedByFirmware 3828*4882a593Smuzhiyun // (in offset to start of memory address) is KB aligned instead of byte aligend. 3829*4882a593Smuzhiyun /***********************************************************************************/ 3830*4882a593Smuzhiyun // Note3: 3831*4882a593Smuzhiyun /* If we change usReserved to "usFBUsedbyDrvInKB", then to VBIOS this usFBUsedbyDrvInKB is a predefined, unchanged constant across VGA or non VGA adapter, 3832*4882a593Smuzhiyun for CAIL, The size of FB access area is known, only thing missing is the Offset of FB Access area, so we can have: 3833*4882a593Smuzhiyun 3834*4882a593Smuzhiyun If (ulStartAddrUsedByFirmware!=0) 3835*4882a593Smuzhiyun FBAccessAreaOffset= ulStartAddrUsedByFirmware - usFBUsedbyDrvInKB; 3836*4882a593Smuzhiyun Reserved area has been claimed by VBIOS including this FB access area; CAIL doesn't need to reserve any extra area for this purpose 3837*4882a593Smuzhiyun else //Non VGA case 3838*4882a593Smuzhiyun if (FB_Size<=2Gb) 3839*4882a593Smuzhiyun FBAccessAreaOffset= FB_Size - usFBUsedbyDrvInKB; 3840*4882a593Smuzhiyun else 3841*4882a593Smuzhiyun FBAccessAreaOffset= Aper_Size - usFBUsedbyDrvInKB 3842*4882a593Smuzhiyun 3843*4882a593Smuzhiyun CAIL needs to claim an reserved area defined by FBAccessAreaOffset and usFBUsedbyDrvInKB in non VGA case.*/ 3844*4882a593Smuzhiyun 3845*4882a593Smuzhiyun /***********************************************************************************/ 3846*4882a593Smuzhiyun #define ATOM_MAX_FIRMWARE_VRAM_USAGE_INFO 1 3847*4882a593Smuzhiyun 3848*4882a593Smuzhiyun typedef struct _ATOM_FIRMWARE_VRAM_RESERVE_INFO 3849*4882a593Smuzhiyun { 3850*4882a593Smuzhiyun ULONG ulStartAddrUsedByFirmware; 3851*4882a593Smuzhiyun USHORT usFirmwareUseInKb; 3852*4882a593Smuzhiyun USHORT usReserved; 3853*4882a593Smuzhiyun }ATOM_FIRMWARE_VRAM_RESERVE_INFO; 3854*4882a593Smuzhiyun 3855*4882a593Smuzhiyun typedef struct _ATOM_VRAM_USAGE_BY_FIRMWARE 3856*4882a593Smuzhiyun { 3857*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3858*4882a593Smuzhiyun ATOM_FIRMWARE_VRAM_RESERVE_INFO asFirmwareVramReserveInfo[ATOM_MAX_FIRMWARE_VRAM_USAGE_INFO]; 3859*4882a593Smuzhiyun }ATOM_VRAM_USAGE_BY_FIRMWARE; 3860*4882a593Smuzhiyun 3861*4882a593Smuzhiyun // change verion to 1.5, when allow driver to allocate the vram area for command table access. 3862*4882a593Smuzhiyun typedef struct _ATOM_FIRMWARE_VRAM_RESERVE_INFO_V1_5 3863*4882a593Smuzhiyun { 3864*4882a593Smuzhiyun ULONG ulStartAddrUsedByFirmware; 3865*4882a593Smuzhiyun USHORT usFirmwareUseInKb; 3866*4882a593Smuzhiyun USHORT usFBUsedByDrvInKb; 3867*4882a593Smuzhiyun }ATOM_FIRMWARE_VRAM_RESERVE_INFO_V1_5; 3868*4882a593Smuzhiyun 3869*4882a593Smuzhiyun typedef struct _ATOM_VRAM_USAGE_BY_FIRMWARE_V1_5 3870*4882a593Smuzhiyun { 3871*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3872*4882a593Smuzhiyun ATOM_FIRMWARE_VRAM_RESERVE_INFO_V1_5 asFirmwareVramReserveInfo[ATOM_MAX_FIRMWARE_VRAM_USAGE_INFO]; 3873*4882a593Smuzhiyun }ATOM_VRAM_USAGE_BY_FIRMWARE_V1_5; 3874*4882a593Smuzhiyun 3875*4882a593Smuzhiyun /****************************************************************************/ 3876*4882a593Smuzhiyun // Structure used in GPIO_Pin_LUTTable 3877*4882a593Smuzhiyun /****************************************************************************/ 3878*4882a593Smuzhiyun typedef struct _ATOM_GPIO_PIN_ASSIGNMENT 3879*4882a593Smuzhiyun { 3880*4882a593Smuzhiyun USHORT usGpioPin_AIndex; 3881*4882a593Smuzhiyun UCHAR ucGpioPinBitShift; 3882*4882a593Smuzhiyun UCHAR ucGPIO_ID; 3883*4882a593Smuzhiyun }ATOM_GPIO_PIN_ASSIGNMENT; 3884*4882a593Smuzhiyun 3885*4882a593Smuzhiyun //ucGPIO_ID pre-define id for multiple usage 3886*4882a593Smuzhiyun //from SMU7.x, if ucGPIO_ID=PP_AC_DC_SWITCH_GPIO_PINID in GPIO_LUTTable, AC/DC switching feature is enable 3887*4882a593Smuzhiyun #define PP_AC_DC_SWITCH_GPIO_PINID 60 3888*4882a593Smuzhiyun //from SMU7.x, if ucGPIO_ID=VDDC_REGULATOR_VRHOT_GPIO_PINID in GPIO_LUTable, VRHot feature is enable 3889*4882a593Smuzhiyun #define VDDC_VRHOT_GPIO_PINID 61 3890*4882a593Smuzhiyun //if ucGPIO_ID=VDDC_PCC_GPIO_PINID in GPIO_LUTable, Peak Current Control feature is enabled 3891*4882a593Smuzhiyun #define VDDC_PCC_GPIO_PINID 62 3892*4882a593Smuzhiyun 3893*4882a593Smuzhiyun typedef struct _ATOM_GPIO_PIN_LUT 3894*4882a593Smuzhiyun { 3895*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3896*4882a593Smuzhiyun ATOM_GPIO_PIN_ASSIGNMENT asGPIO_Pin[1]; 3897*4882a593Smuzhiyun }ATOM_GPIO_PIN_LUT; 3898*4882a593Smuzhiyun 3899*4882a593Smuzhiyun /****************************************************************************/ 3900*4882a593Smuzhiyun // Structure used in ComponentVideoInfoTable 3901*4882a593Smuzhiyun /****************************************************************************/ 3902*4882a593Smuzhiyun #define GPIO_PIN_ACTIVE_HIGH 0x1 3903*4882a593Smuzhiyun 3904*4882a593Smuzhiyun #define MAX_SUPPORTED_CV_STANDARDS 5 3905*4882a593Smuzhiyun 3906*4882a593Smuzhiyun // definitions for ATOM_D_INFO.ucSettings 3907*4882a593Smuzhiyun #define ATOM_GPIO_SETTINGS_BITSHIFT_MASK 0x1F // [4:0] 3908*4882a593Smuzhiyun #define ATOM_GPIO_SETTINGS_RESERVED_MASK 0x60 // [6:5] = must be zeroed out 3909*4882a593Smuzhiyun #define ATOM_GPIO_SETTINGS_ACTIVE_MASK 0x80 // [7] 3910*4882a593Smuzhiyun 3911*4882a593Smuzhiyun typedef struct _ATOM_GPIO_INFO 3912*4882a593Smuzhiyun { 3913*4882a593Smuzhiyun USHORT usAOffset; 3914*4882a593Smuzhiyun UCHAR ucSettings; 3915*4882a593Smuzhiyun UCHAR ucReserved; 3916*4882a593Smuzhiyun }ATOM_GPIO_INFO; 3917*4882a593Smuzhiyun 3918*4882a593Smuzhiyun // definitions for ATOM_COMPONENT_VIDEO_INFO.ucMiscInfo (bit vector) 3919*4882a593Smuzhiyun #define ATOM_CV_RESTRICT_FORMAT_SELECTION 0x2 3920*4882a593Smuzhiyun 3921*4882a593Smuzhiyun // definitions for ATOM_COMPONENT_VIDEO_INFO.uc480i/uc480p/uc720p/uc1080i 3922*4882a593Smuzhiyun #define ATOM_GPIO_DEFAULT_MODE_EN 0x80 //[7]; 3923*4882a593Smuzhiyun #define ATOM_GPIO_SETTING_PERMODE_MASK 0x7F //[6:0] 3924*4882a593Smuzhiyun 3925*4882a593Smuzhiyun // definitions for ATOM_COMPONENT_VIDEO_INFO.ucLetterBoxMode 3926*4882a593Smuzhiyun //Line 3 out put 5V. 3927*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_16_9_GPIO_A 0x01 //represent gpio 3 state for 16:9 3928*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_16_9_GPIO_B 0x02 //represent gpio 4 state for 16:9 3929*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_16_9_GPIO_SHIFT 0x0 3930*4882a593Smuzhiyun 3931*4882a593Smuzhiyun //Line 3 out put 2.2V 3932*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_4_3_LETBOX_GPIO_A 0x04 //represent gpio 3 state for 4:3 Letter box 3933*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_4_3_LETBOX_GPIO_B 0x08 //represent gpio 4 state for 4:3 Letter box 3934*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_4_3_LETBOX_GPIO_SHIFT 0x2 3935*4882a593Smuzhiyun 3936*4882a593Smuzhiyun //Line 3 out put 0V 3937*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_4_3_GPIO_A 0x10 //represent gpio 3 state for 4:3 3938*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_4_3_GPIO_B 0x20 //represent gpio 4 state for 4:3 3939*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_4_3_GPIO_SHIFT 0x4 3940*4882a593Smuzhiyun 3941*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_MASK 0x3F // bit [5:0] 3942*4882a593Smuzhiyun 3943*4882a593Smuzhiyun #define ATOM_CV_LINE3_ASPECTRATIO_EXIST 0x80 //bit 7 3944*4882a593Smuzhiyun 3945*4882a593Smuzhiyun //GPIO bit index in gpio setting per mode value, also represend the block no. in gpio blocks. 3946*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_LINE3_ASPECRATIO_GPIO_A 3 //bit 3 in uc480i/uc480p/uc720p/uc1080i, which represend the default gpio bit setting for the mode. 3947*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_LINE3_ASPECRATIO_GPIO_B 4 //bit 4 in uc480i/uc480p/uc720p/uc1080i, which represend the default gpio bit setting for the mode. 3948*4882a593Smuzhiyun 3949*4882a593Smuzhiyun 3950*4882a593Smuzhiyun typedef struct _ATOM_COMPONENT_VIDEO_INFO 3951*4882a593Smuzhiyun { 3952*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3953*4882a593Smuzhiyun USHORT usMask_PinRegisterIndex; 3954*4882a593Smuzhiyun USHORT usEN_PinRegisterIndex; 3955*4882a593Smuzhiyun USHORT usY_PinRegisterIndex; 3956*4882a593Smuzhiyun USHORT usA_PinRegisterIndex; 3957*4882a593Smuzhiyun UCHAR ucBitShift; 3958*4882a593Smuzhiyun UCHAR ucPinActiveState; //ucPinActiveState: Bit0=1 active high, =0 active low 3959*4882a593Smuzhiyun ATOM_DTD_FORMAT sReserved; // must be zeroed out 3960*4882a593Smuzhiyun UCHAR ucMiscInfo; 3961*4882a593Smuzhiyun UCHAR uc480i; 3962*4882a593Smuzhiyun UCHAR uc480p; 3963*4882a593Smuzhiyun UCHAR uc720p; 3964*4882a593Smuzhiyun UCHAR uc1080i; 3965*4882a593Smuzhiyun UCHAR ucLetterBoxMode; 3966*4882a593Smuzhiyun UCHAR ucReserved[3]; 3967*4882a593Smuzhiyun UCHAR ucNumOfWbGpioBlocks; //For Component video D-Connector support. If zere, NTSC type connector 3968*4882a593Smuzhiyun ATOM_GPIO_INFO aWbGpioStateBlock[MAX_SUPPORTED_CV_STANDARDS]; 3969*4882a593Smuzhiyun ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_CV_STANDARDS]; 3970*4882a593Smuzhiyun }ATOM_COMPONENT_VIDEO_INFO; 3971*4882a593Smuzhiyun 3972*4882a593Smuzhiyun //ucTableFormatRevision=2 3973*4882a593Smuzhiyun //ucTableContentRevision=1 3974*4882a593Smuzhiyun typedef struct _ATOM_COMPONENT_VIDEO_INFO_V21 3975*4882a593Smuzhiyun { 3976*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3977*4882a593Smuzhiyun UCHAR ucMiscInfo; 3978*4882a593Smuzhiyun UCHAR uc480i; 3979*4882a593Smuzhiyun UCHAR uc480p; 3980*4882a593Smuzhiyun UCHAR uc720p; 3981*4882a593Smuzhiyun UCHAR uc1080i; 3982*4882a593Smuzhiyun UCHAR ucReserved; 3983*4882a593Smuzhiyun UCHAR ucLetterBoxMode; 3984*4882a593Smuzhiyun UCHAR ucNumOfWbGpioBlocks; //For Component video D-Connector support. If zere, NTSC type connector 3985*4882a593Smuzhiyun ATOM_GPIO_INFO aWbGpioStateBlock[MAX_SUPPORTED_CV_STANDARDS]; 3986*4882a593Smuzhiyun ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_CV_STANDARDS]; 3987*4882a593Smuzhiyun }ATOM_COMPONENT_VIDEO_INFO_V21; 3988*4882a593Smuzhiyun 3989*4882a593Smuzhiyun #define ATOM_COMPONENT_VIDEO_INFO_LAST ATOM_COMPONENT_VIDEO_INFO_V21 3990*4882a593Smuzhiyun 3991*4882a593Smuzhiyun /****************************************************************************/ 3992*4882a593Smuzhiyun // Structure used in object_InfoTable 3993*4882a593Smuzhiyun /****************************************************************************/ 3994*4882a593Smuzhiyun typedef struct _ATOM_OBJECT_HEADER 3995*4882a593Smuzhiyun { 3996*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 3997*4882a593Smuzhiyun USHORT usDeviceSupport; 3998*4882a593Smuzhiyun USHORT usConnectorObjectTableOffset; 3999*4882a593Smuzhiyun USHORT usRouterObjectTableOffset; 4000*4882a593Smuzhiyun USHORT usEncoderObjectTableOffset; 4001*4882a593Smuzhiyun USHORT usProtectionObjectTableOffset; //only available when Protection block is independent. 4002*4882a593Smuzhiyun USHORT usDisplayPathTableOffset; 4003*4882a593Smuzhiyun }ATOM_OBJECT_HEADER; 4004*4882a593Smuzhiyun 4005*4882a593Smuzhiyun typedef struct _ATOM_OBJECT_HEADER_V3 4006*4882a593Smuzhiyun { 4007*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 4008*4882a593Smuzhiyun USHORT usDeviceSupport; 4009*4882a593Smuzhiyun USHORT usConnectorObjectTableOffset; 4010*4882a593Smuzhiyun USHORT usRouterObjectTableOffset; 4011*4882a593Smuzhiyun USHORT usEncoderObjectTableOffset; 4012*4882a593Smuzhiyun USHORT usProtectionObjectTableOffset; //only available when Protection block is independent. 4013*4882a593Smuzhiyun USHORT usDisplayPathTableOffset; 4014*4882a593Smuzhiyun USHORT usMiscObjectTableOffset; 4015*4882a593Smuzhiyun }ATOM_OBJECT_HEADER_V3; 4016*4882a593Smuzhiyun 4017*4882a593Smuzhiyun typedef struct _ATOM_DISPLAY_OBJECT_PATH 4018*4882a593Smuzhiyun { 4019*4882a593Smuzhiyun USHORT usDeviceTag; //supported device 4020*4882a593Smuzhiyun USHORT usSize; //the size of ATOM_DISPLAY_OBJECT_PATH 4021*4882a593Smuzhiyun USHORT usConnObjectId; //Connector Object ID 4022*4882a593Smuzhiyun USHORT usGPUObjectId; //GPU ID 4023*4882a593Smuzhiyun USHORT usGraphicObjIds[1]; //1st Encoder Obj source from GPU to last Graphic Obj destinate to connector. 4024*4882a593Smuzhiyun }ATOM_DISPLAY_OBJECT_PATH; 4025*4882a593Smuzhiyun 4026*4882a593Smuzhiyun typedef struct _ATOM_DISPLAY_EXTERNAL_OBJECT_PATH 4027*4882a593Smuzhiyun { 4028*4882a593Smuzhiyun USHORT usDeviceTag; //supported device 4029*4882a593Smuzhiyun USHORT usSize; //the size of ATOM_DISPLAY_OBJECT_PATH 4030*4882a593Smuzhiyun USHORT usConnObjectId; //Connector Object ID 4031*4882a593Smuzhiyun USHORT usGPUObjectId; //GPU ID 4032*4882a593Smuzhiyun USHORT usGraphicObjIds[2]; //usGraphicObjIds[0]= GPU internal encoder, usGraphicObjIds[1]= external encoder 4033*4882a593Smuzhiyun }ATOM_DISPLAY_EXTERNAL_OBJECT_PATH; 4034*4882a593Smuzhiyun 4035*4882a593Smuzhiyun typedef struct _ATOM_DISPLAY_OBJECT_PATH_TABLE 4036*4882a593Smuzhiyun { 4037*4882a593Smuzhiyun UCHAR ucNumOfDispPath; 4038*4882a593Smuzhiyun UCHAR ucVersion; 4039*4882a593Smuzhiyun UCHAR ucPadding[2]; 4040*4882a593Smuzhiyun ATOM_DISPLAY_OBJECT_PATH asDispPath[1]; 4041*4882a593Smuzhiyun }ATOM_DISPLAY_OBJECT_PATH_TABLE; 4042*4882a593Smuzhiyun 4043*4882a593Smuzhiyun 4044*4882a593Smuzhiyun typedef struct _ATOM_OBJECT //each object has this structure 4045*4882a593Smuzhiyun { 4046*4882a593Smuzhiyun USHORT usObjectID; 4047*4882a593Smuzhiyun USHORT usSrcDstTableOffset; 4048*4882a593Smuzhiyun USHORT usRecordOffset; //this pointing to a bunch of records defined below 4049*4882a593Smuzhiyun USHORT usReserved; 4050*4882a593Smuzhiyun }ATOM_OBJECT; 4051*4882a593Smuzhiyun 4052*4882a593Smuzhiyun typedef struct _ATOM_OBJECT_TABLE //Above 4 object table offset pointing to a bunch of objects all have this structure 4053*4882a593Smuzhiyun { 4054*4882a593Smuzhiyun UCHAR ucNumberOfObjects; 4055*4882a593Smuzhiyun UCHAR ucPadding[3]; 4056*4882a593Smuzhiyun ATOM_OBJECT asObjects[1]; 4057*4882a593Smuzhiyun }ATOM_OBJECT_TABLE; 4058*4882a593Smuzhiyun 4059*4882a593Smuzhiyun typedef struct _ATOM_SRC_DST_TABLE_FOR_ONE_OBJECT //usSrcDstTableOffset pointing to this structure 4060*4882a593Smuzhiyun { 4061*4882a593Smuzhiyun UCHAR ucNumberOfSrc; 4062*4882a593Smuzhiyun USHORT usSrcObjectID[1]; 4063*4882a593Smuzhiyun UCHAR ucNumberOfDst; 4064*4882a593Smuzhiyun USHORT usDstObjectID[1]; 4065*4882a593Smuzhiyun }ATOM_SRC_DST_TABLE_FOR_ONE_OBJECT; 4066*4882a593Smuzhiyun 4067*4882a593Smuzhiyun 4068*4882a593Smuzhiyun //Two definitions below are for OPM on MXM module designs 4069*4882a593Smuzhiyun 4070*4882a593Smuzhiyun #define EXT_HPDPIN_LUTINDEX_0 0 4071*4882a593Smuzhiyun #define EXT_HPDPIN_LUTINDEX_1 1 4072*4882a593Smuzhiyun #define EXT_HPDPIN_LUTINDEX_2 2 4073*4882a593Smuzhiyun #define EXT_HPDPIN_LUTINDEX_3 3 4074*4882a593Smuzhiyun #define EXT_HPDPIN_LUTINDEX_4 4 4075*4882a593Smuzhiyun #define EXT_HPDPIN_LUTINDEX_5 5 4076*4882a593Smuzhiyun #define EXT_HPDPIN_LUTINDEX_6 6 4077*4882a593Smuzhiyun #define EXT_HPDPIN_LUTINDEX_7 7 4078*4882a593Smuzhiyun #define MAX_NUMBER_OF_EXT_HPDPIN_LUT_ENTRIES (EXT_HPDPIN_LUTINDEX_7+1) 4079*4882a593Smuzhiyun 4080*4882a593Smuzhiyun #define EXT_AUXDDC_LUTINDEX_0 0 4081*4882a593Smuzhiyun #define EXT_AUXDDC_LUTINDEX_1 1 4082*4882a593Smuzhiyun #define EXT_AUXDDC_LUTINDEX_2 2 4083*4882a593Smuzhiyun #define EXT_AUXDDC_LUTINDEX_3 3 4084*4882a593Smuzhiyun #define EXT_AUXDDC_LUTINDEX_4 4 4085*4882a593Smuzhiyun #define EXT_AUXDDC_LUTINDEX_5 5 4086*4882a593Smuzhiyun #define EXT_AUXDDC_LUTINDEX_6 6 4087*4882a593Smuzhiyun #define EXT_AUXDDC_LUTINDEX_7 7 4088*4882a593Smuzhiyun #define MAX_NUMBER_OF_EXT_AUXDDC_LUT_ENTRIES (EXT_AUXDDC_LUTINDEX_7+1) 4089*4882a593Smuzhiyun 4090*4882a593Smuzhiyun //ucChannelMapping are defined as following 4091*4882a593Smuzhiyun //for DP connector, eDP, DP to VGA/LVDS 4092*4882a593Smuzhiyun //Bit[1:0]: Define which pin connect to DP connector DP_Lane0, =0: source from GPU pin TX0, =1: from GPU pin TX1, =2: from GPU pin TX2, =3 from GPU pin TX3 4093*4882a593Smuzhiyun //Bit[3:2]: Define which pin connect to DP connector DP_Lane1, =0: source from GPU pin TX0, =1: from GPU pin TX1, =2: from GPU pin TX2, =3 from GPU pin TX3 4094*4882a593Smuzhiyun //Bit[5:4]: Define which pin connect to DP connector DP_Lane2, =0: source from GPU pin TX0, =1: from GPU pin TX1, =2: from GPU pin TX2, =3 from GPU pin TX3 4095*4882a593Smuzhiyun //Bit[7:6]: Define which pin connect to DP connector DP_Lane3, =0: source from GPU pin TX0, =1: from GPU pin TX1, =2: from GPU pin TX2, =3 from GPU pin TX3 4096*4882a593Smuzhiyun typedef struct _ATOM_DP_CONN_CHANNEL_MAPPING 4097*4882a593Smuzhiyun { 4098*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 4099*4882a593Smuzhiyun UCHAR ucDP_Lane3_Source:2; 4100*4882a593Smuzhiyun UCHAR ucDP_Lane2_Source:2; 4101*4882a593Smuzhiyun UCHAR ucDP_Lane1_Source:2; 4102*4882a593Smuzhiyun UCHAR ucDP_Lane0_Source:2; 4103*4882a593Smuzhiyun #else 4104*4882a593Smuzhiyun UCHAR ucDP_Lane0_Source:2; 4105*4882a593Smuzhiyun UCHAR ucDP_Lane1_Source:2; 4106*4882a593Smuzhiyun UCHAR ucDP_Lane2_Source:2; 4107*4882a593Smuzhiyun UCHAR ucDP_Lane3_Source:2; 4108*4882a593Smuzhiyun #endif 4109*4882a593Smuzhiyun }ATOM_DP_CONN_CHANNEL_MAPPING; 4110*4882a593Smuzhiyun 4111*4882a593Smuzhiyun //for DVI/HDMI, in dual link case, both links have to have same mapping. 4112*4882a593Smuzhiyun //Bit[1:0]: Define which pin connect to DVI connector data Lane2, =0: source from GPU pin TX0, =1: from GPU pin TX1, =2: from GPU pin TX2, =3 from GPU pin TX3 4113*4882a593Smuzhiyun //Bit[3:2]: Define which pin connect to DVI connector data Lane1, =0: source from GPU pin TX0, =1: from GPU pin TX1, =2: from GPU pin TX2, =3 from GPU pin TX3 4114*4882a593Smuzhiyun //Bit[5:4]: Define which pin connect to DVI connector data Lane0, =0: source from GPU pin TX0, =1: from GPU pin TX1, =2: from GPU pin TX2, =3 from GPU pin TX3 4115*4882a593Smuzhiyun //Bit[7:6]: Define which pin connect to DVI connector clock lane, =0: source from GPU pin TX0, =1: from GPU pin TX1, =2: from GPU pin TX2, =3 from GPU pin TX3 4116*4882a593Smuzhiyun typedef struct _ATOM_DVI_CONN_CHANNEL_MAPPING 4117*4882a593Smuzhiyun { 4118*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 4119*4882a593Smuzhiyun UCHAR ucDVI_CLK_Source:2; 4120*4882a593Smuzhiyun UCHAR ucDVI_DATA0_Source:2; 4121*4882a593Smuzhiyun UCHAR ucDVI_DATA1_Source:2; 4122*4882a593Smuzhiyun UCHAR ucDVI_DATA2_Source:2; 4123*4882a593Smuzhiyun #else 4124*4882a593Smuzhiyun UCHAR ucDVI_DATA2_Source:2; 4125*4882a593Smuzhiyun UCHAR ucDVI_DATA1_Source:2; 4126*4882a593Smuzhiyun UCHAR ucDVI_DATA0_Source:2; 4127*4882a593Smuzhiyun UCHAR ucDVI_CLK_Source:2; 4128*4882a593Smuzhiyun #endif 4129*4882a593Smuzhiyun }ATOM_DVI_CONN_CHANNEL_MAPPING; 4130*4882a593Smuzhiyun 4131*4882a593Smuzhiyun typedef struct _EXT_DISPLAY_PATH 4132*4882a593Smuzhiyun { 4133*4882a593Smuzhiyun USHORT usDeviceTag; //A bit vector to show what devices are supported 4134*4882a593Smuzhiyun USHORT usDeviceACPIEnum; //16bit device ACPI id. 4135*4882a593Smuzhiyun USHORT usDeviceConnector; //A physical connector for displays to plug in, using object connector definitions 4136*4882a593Smuzhiyun UCHAR ucExtAUXDDCLutIndex; //An index into external AUX/DDC channel LUT 4137*4882a593Smuzhiyun UCHAR ucExtHPDPINLutIndex; //An index into external HPD pin LUT 4138*4882a593Smuzhiyun USHORT usExtEncoderObjId; //external encoder object id 4139*4882a593Smuzhiyun union{ 4140*4882a593Smuzhiyun UCHAR ucChannelMapping; // if ucChannelMapping=0, using default one to one mapping 4141*4882a593Smuzhiyun ATOM_DP_CONN_CHANNEL_MAPPING asDPMapping; 4142*4882a593Smuzhiyun ATOM_DVI_CONN_CHANNEL_MAPPING asDVIMapping; 4143*4882a593Smuzhiyun }; 4144*4882a593Smuzhiyun UCHAR ucChPNInvert; // bit vector for up to 8 lanes, =0: P and N is not invert, =1 P and N is inverted 4145*4882a593Smuzhiyun USHORT usCaps; 4146*4882a593Smuzhiyun USHORT usReserved; 4147*4882a593Smuzhiyun }EXT_DISPLAY_PATH; 4148*4882a593Smuzhiyun 4149*4882a593Smuzhiyun #define NUMBER_OF_UCHAR_FOR_GUID 16 4150*4882a593Smuzhiyun #define MAX_NUMBER_OF_EXT_DISPLAY_PATH 7 4151*4882a593Smuzhiyun 4152*4882a593Smuzhiyun //usCaps 4153*4882a593Smuzhiyun #define EXT_DISPLAY_PATH_CAPS__HBR2_DISABLE 0x01 4154*4882a593Smuzhiyun #define EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN 0x02 4155*4882a593Smuzhiyun 4156*4882a593Smuzhiyun typedef struct _ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO 4157*4882a593Smuzhiyun { 4158*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 4159*4882a593Smuzhiyun UCHAR ucGuid [NUMBER_OF_UCHAR_FOR_GUID]; // a GUID is a 16 byte long string 4160*4882a593Smuzhiyun EXT_DISPLAY_PATH sPath[MAX_NUMBER_OF_EXT_DISPLAY_PATH]; // total of fixed 7 entries. 4161*4882a593Smuzhiyun UCHAR ucChecksum; // a simple Checksum of the sum of whole structure equal to 0x0. 4162*4882a593Smuzhiyun UCHAR uc3DStereoPinId; // use for eDP panel 4163*4882a593Smuzhiyun UCHAR ucRemoteDisplayConfig; 4164*4882a593Smuzhiyun UCHAR uceDPToLVDSRxId; 4165*4882a593Smuzhiyun UCHAR ucFixDPVoltageSwing; // usCaps[1]=1, this indicate DP_LANE_SET value 4166*4882a593Smuzhiyun UCHAR Reserved[3]; // for potential expansion 4167*4882a593Smuzhiyun }ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO; 4168*4882a593Smuzhiyun 4169*4882a593Smuzhiyun //Related definitions, all records are different but they have a commond header 4170*4882a593Smuzhiyun typedef struct _ATOM_COMMON_RECORD_HEADER 4171*4882a593Smuzhiyun { 4172*4882a593Smuzhiyun UCHAR ucRecordType; //An emun to indicate the record type 4173*4882a593Smuzhiyun UCHAR ucRecordSize; //The size of the whole record in byte 4174*4882a593Smuzhiyun }ATOM_COMMON_RECORD_HEADER; 4175*4882a593Smuzhiyun 4176*4882a593Smuzhiyun 4177*4882a593Smuzhiyun #define ATOM_I2C_RECORD_TYPE 1 4178*4882a593Smuzhiyun #define ATOM_HPD_INT_RECORD_TYPE 2 4179*4882a593Smuzhiyun #define ATOM_OUTPUT_PROTECTION_RECORD_TYPE 3 4180*4882a593Smuzhiyun #define ATOM_CONNECTOR_DEVICE_TAG_RECORD_TYPE 4 4181*4882a593Smuzhiyun #define ATOM_CONNECTOR_DVI_EXT_INPUT_RECORD_TYPE 5 //Obsolete, switch to use GPIO_CNTL_RECORD_TYPE 4182*4882a593Smuzhiyun #define ATOM_ENCODER_FPGA_CONTROL_RECORD_TYPE 6 //Obsolete, switch to use GPIO_CNTL_RECORD_TYPE 4183*4882a593Smuzhiyun #define ATOM_CONNECTOR_CVTV_SHARE_DIN_RECORD_TYPE 7 4184*4882a593Smuzhiyun #define ATOM_JTAG_RECORD_TYPE 8 //Obsolete, switch to use GPIO_CNTL_RECORD_TYPE 4185*4882a593Smuzhiyun #define ATOM_OBJECT_GPIO_CNTL_RECORD_TYPE 9 4186*4882a593Smuzhiyun #define ATOM_ENCODER_DVO_CF_RECORD_TYPE 10 4187*4882a593Smuzhiyun #define ATOM_CONNECTOR_CF_RECORD_TYPE 11 4188*4882a593Smuzhiyun #define ATOM_CONNECTOR_HARDCODE_DTD_RECORD_TYPE 12 4189*4882a593Smuzhiyun #define ATOM_CONNECTOR_PCIE_SUBCONNECTOR_RECORD_TYPE 13 4190*4882a593Smuzhiyun #define ATOM_ROUTER_DDC_PATH_SELECT_RECORD_TYPE 14 4191*4882a593Smuzhiyun #define ATOM_ROUTER_DATA_CLOCK_PATH_SELECT_RECORD_TYPE 15 4192*4882a593Smuzhiyun #define ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE 16 //This is for the case when connectors are not known to object table 4193*4882a593Smuzhiyun #define ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE 17 //This is for the case when connectors are not known to object table 4194*4882a593Smuzhiyun #define ATOM_OBJECT_LINK_RECORD_TYPE 18 //Once this record is present under one object, it indicats the oobject is linked to another obj described by the record 4195*4882a593Smuzhiyun #define ATOM_CONNECTOR_REMOTE_CAP_RECORD_TYPE 19 4196*4882a593Smuzhiyun #define ATOM_ENCODER_CAP_RECORD_TYPE 20 4197*4882a593Smuzhiyun #define ATOM_BRACKET_LAYOUT_RECORD_TYPE 21 4198*4882a593Smuzhiyun 4199*4882a593Smuzhiyun //Must be updated when new record type is added,equal to that record definition! 4200*4882a593Smuzhiyun #define ATOM_MAX_OBJECT_RECORD_NUMBER ATOM_BRACKET_LAYOUT_RECORD_TYPE 4201*4882a593Smuzhiyun 4202*4882a593Smuzhiyun typedef struct _ATOM_I2C_RECORD 4203*4882a593Smuzhiyun { 4204*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4205*4882a593Smuzhiyun ATOM_I2C_ID_CONFIG sucI2cId; 4206*4882a593Smuzhiyun UCHAR ucI2CAddr; //The slave address, it's 0 when the record is attached to connector for DDC 4207*4882a593Smuzhiyun }ATOM_I2C_RECORD; 4208*4882a593Smuzhiyun 4209*4882a593Smuzhiyun typedef struct _ATOM_HPD_INT_RECORD 4210*4882a593Smuzhiyun { 4211*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4212*4882a593Smuzhiyun UCHAR ucHPDIntGPIOID; //Corresponding block in GPIO_PIN_INFO table gives the pin info 4213*4882a593Smuzhiyun UCHAR ucPlugged_PinState; 4214*4882a593Smuzhiyun }ATOM_HPD_INT_RECORD; 4215*4882a593Smuzhiyun 4216*4882a593Smuzhiyun 4217*4882a593Smuzhiyun typedef struct _ATOM_OUTPUT_PROTECTION_RECORD 4218*4882a593Smuzhiyun { 4219*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4220*4882a593Smuzhiyun UCHAR ucProtectionFlag; 4221*4882a593Smuzhiyun UCHAR ucReserved; 4222*4882a593Smuzhiyun }ATOM_OUTPUT_PROTECTION_RECORD; 4223*4882a593Smuzhiyun 4224*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_DEVICE_TAG 4225*4882a593Smuzhiyun { 4226*4882a593Smuzhiyun ULONG ulACPIDeviceEnum; //Reserved for now 4227*4882a593Smuzhiyun USHORT usDeviceID; //This Id is same as "ATOM_DEVICE_XXX_SUPPORT" 4228*4882a593Smuzhiyun USHORT usPadding; 4229*4882a593Smuzhiyun }ATOM_CONNECTOR_DEVICE_TAG; 4230*4882a593Smuzhiyun 4231*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_DEVICE_TAG_RECORD 4232*4882a593Smuzhiyun { 4233*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4234*4882a593Smuzhiyun UCHAR ucNumberOfDevice; 4235*4882a593Smuzhiyun UCHAR ucReserved; 4236*4882a593Smuzhiyun ATOM_CONNECTOR_DEVICE_TAG asDeviceTag[1]; //This Id is same as "ATOM_DEVICE_XXX_SUPPORT", 1 is only for allocation 4237*4882a593Smuzhiyun }ATOM_CONNECTOR_DEVICE_TAG_RECORD; 4238*4882a593Smuzhiyun 4239*4882a593Smuzhiyun 4240*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_DVI_EXT_INPUT_RECORD 4241*4882a593Smuzhiyun { 4242*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4243*4882a593Smuzhiyun UCHAR ucConfigGPIOID; 4244*4882a593Smuzhiyun UCHAR ucConfigGPIOState; //Set to 1 when it's active high to enable external flow in 4245*4882a593Smuzhiyun UCHAR ucFlowinGPIPID; 4246*4882a593Smuzhiyun UCHAR ucExtInGPIPID; 4247*4882a593Smuzhiyun }ATOM_CONNECTOR_DVI_EXT_INPUT_RECORD; 4248*4882a593Smuzhiyun 4249*4882a593Smuzhiyun typedef struct _ATOM_ENCODER_FPGA_CONTROL_RECORD 4250*4882a593Smuzhiyun { 4251*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4252*4882a593Smuzhiyun UCHAR ucCTL1GPIO_ID; 4253*4882a593Smuzhiyun UCHAR ucCTL1GPIOState; //Set to 1 when it's active high 4254*4882a593Smuzhiyun UCHAR ucCTL2GPIO_ID; 4255*4882a593Smuzhiyun UCHAR ucCTL2GPIOState; //Set to 1 when it's active high 4256*4882a593Smuzhiyun UCHAR ucCTL3GPIO_ID; 4257*4882a593Smuzhiyun UCHAR ucCTL3GPIOState; //Set to 1 when it's active high 4258*4882a593Smuzhiyun UCHAR ucCTLFPGA_IN_ID; 4259*4882a593Smuzhiyun UCHAR ucPadding[3]; 4260*4882a593Smuzhiyun }ATOM_ENCODER_FPGA_CONTROL_RECORD; 4261*4882a593Smuzhiyun 4262*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_CVTV_SHARE_DIN_RECORD 4263*4882a593Smuzhiyun { 4264*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4265*4882a593Smuzhiyun UCHAR ucGPIOID; //Corresponding block in GPIO_PIN_INFO table gives the pin info 4266*4882a593Smuzhiyun UCHAR ucTVActiveState; //Indicating when the pin==0 or 1 when TV is connected 4267*4882a593Smuzhiyun }ATOM_CONNECTOR_CVTV_SHARE_DIN_RECORD; 4268*4882a593Smuzhiyun 4269*4882a593Smuzhiyun typedef struct _ATOM_JTAG_RECORD 4270*4882a593Smuzhiyun { 4271*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4272*4882a593Smuzhiyun UCHAR ucTMSGPIO_ID; 4273*4882a593Smuzhiyun UCHAR ucTMSGPIOState; //Set to 1 when it's active high 4274*4882a593Smuzhiyun UCHAR ucTCKGPIO_ID; 4275*4882a593Smuzhiyun UCHAR ucTCKGPIOState; //Set to 1 when it's active high 4276*4882a593Smuzhiyun UCHAR ucTDOGPIO_ID; 4277*4882a593Smuzhiyun UCHAR ucTDOGPIOState; //Set to 1 when it's active high 4278*4882a593Smuzhiyun UCHAR ucTDIGPIO_ID; 4279*4882a593Smuzhiyun UCHAR ucTDIGPIOState; //Set to 1 when it's active high 4280*4882a593Smuzhiyun UCHAR ucPadding[2]; 4281*4882a593Smuzhiyun }ATOM_JTAG_RECORD; 4282*4882a593Smuzhiyun 4283*4882a593Smuzhiyun 4284*4882a593Smuzhiyun //The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually 4285*4882a593Smuzhiyun typedef struct _ATOM_GPIO_PIN_CONTROL_PAIR 4286*4882a593Smuzhiyun { 4287*4882a593Smuzhiyun UCHAR ucGPIOID; // GPIO_ID, find the corresponding ID in GPIO_LUT table 4288*4882a593Smuzhiyun UCHAR ucGPIO_PinState; // Pin state showing how to set-up the pin 4289*4882a593Smuzhiyun }ATOM_GPIO_PIN_CONTROL_PAIR; 4290*4882a593Smuzhiyun 4291*4882a593Smuzhiyun typedef struct _ATOM_OBJECT_GPIO_CNTL_RECORD 4292*4882a593Smuzhiyun { 4293*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4294*4882a593Smuzhiyun UCHAR ucFlags; // Future expnadibility 4295*4882a593Smuzhiyun UCHAR ucNumberOfPins; // Number of GPIO pins used to control the object 4296*4882a593Smuzhiyun ATOM_GPIO_PIN_CONTROL_PAIR asGpio[1]; // the real gpio pin pair determined by number of pins ucNumberOfPins 4297*4882a593Smuzhiyun }ATOM_OBJECT_GPIO_CNTL_RECORD; 4298*4882a593Smuzhiyun 4299*4882a593Smuzhiyun //Definitions for GPIO pin state 4300*4882a593Smuzhiyun #define GPIO_PIN_TYPE_INPUT 0x00 4301*4882a593Smuzhiyun #define GPIO_PIN_TYPE_OUTPUT 0x10 4302*4882a593Smuzhiyun #define GPIO_PIN_TYPE_HW_CONTROL 0x20 4303*4882a593Smuzhiyun 4304*4882a593Smuzhiyun //For GPIO_PIN_TYPE_OUTPUT the following is defined 4305*4882a593Smuzhiyun #define GPIO_PIN_OUTPUT_STATE_MASK 0x01 4306*4882a593Smuzhiyun #define GPIO_PIN_OUTPUT_STATE_SHIFT 0 4307*4882a593Smuzhiyun #define GPIO_PIN_STATE_ACTIVE_LOW 0x0 4308*4882a593Smuzhiyun #define GPIO_PIN_STATE_ACTIVE_HIGH 0x1 4309*4882a593Smuzhiyun 4310*4882a593Smuzhiyun // Indexes to GPIO array in GLSync record 4311*4882a593Smuzhiyun // GLSync record is for Frame Lock/Gen Lock feature. 4312*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_REFCLK 0 4313*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_HSYNC 1 4314*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_VSYNC 2 4315*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ 3 4316*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT 4 4317*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_INTERRUPT 5 4318*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_V_RESET 6 4319*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_SWAP_CNTL 7 4320*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_SWAP_SEL 8 4321*4882a593Smuzhiyun #define ATOM_GPIO_INDEX_GLSYNC_MAX 9 4322*4882a593Smuzhiyun 4323*4882a593Smuzhiyun typedef struct _ATOM_ENCODER_DVO_CF_RECORD 4324*4882a593Smuzhiyun { 4325*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4326*4882a593Smuzhiyun ULONG ulStrengthControl; // DVOA strength control for CF 4327*4882a593Smuzhiyun UCHAR ucPadding[2]; 4328*4882a593Smuzhiyun }ATOM_ENCODER_DVO_CF_RECORD; 4329*4882a593Smuzhiyun 4330*4882a593Smuzhiyun // Bit maps for ATOM_ENCODER_CAP_RECORD.ucEncoderCap 4331*4882a593Smuzhiyun #define ATOM_ENCODER_CAP_RECORD_HBR2 0x01 // DP1.2 HBR2 is supported by HW encoder 4332*4882a593Smuzhiyun #define ATOM_ENCODER_CAP_RECORD_HBR2_EN 0x02 // DP1.2 HBR2 setting is qualified and HBR2 can be enabled 4333*4882a593Smuzhiyun 4334*4882a593Smuzhiyun typedef struct _ATOM_ENCODER_CAP_RECORD 4335*4882a593Smuzhiyun { 4336*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4337*4882a593Smuzhiyun union { 4338*4882a593Smuzhiyun USHORT usEncoderCap; 4339*4882a593Smuzhiyun struct { 4340*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 4341*4882a593Smuzhiyun USHORT usReserved:14; // Bit1-15 may be defined for other capability in future 4342*4882a593Smuzhiyun USHORT usHBR2En:1; // Bit1 is for DP1.2 HBR2 enable 4343*4882a593Smuzhiyun USHORT usHBR2Cap:1; // Bit0 is for DP1.2 HBR2 capability. 4344*4882a593Smuzhiyun #else 4345*4882a593Smuzhiyun USHORT usHBR2Cap:1; // Bit0 is for DP1.2 HBR2 capability. 4346*4882a593Smuzhiyun USHORT usHBR2En:1; // Bit1 is for DP1.2 HBR2 enable 4347*4882a593Smuzhiyun USHORT usReserved:14; // Bit1-15 may be defined for other capability in future 4348*4882a593Smuzhiyun #endif 4349*4882a593Smuzhiyun }; 4350*4882a593Smuzhiyun }; 4351*4882a593Smuzhiyun }ATOM_ENCODER_CAP_RECORD; 4352*4882a593Smuzhiyun 4353*4882a593Smuzhiyun // value for ATOM_CONNECTOR_CF_RECORD.ucConnectedDvoBundle 4354*4882a593Smuzhiyun #define ATOM_CONNECTOR_CF_RECORD_CONNECTED_UPPER12BITBUNDLEA 1 4355*4882a593Smuzhiyun #define ATOM_CONNECTOR_CF_RECORD_CONNECTED_LOWER12BITBUNDLEB 2 4356*4882a593Smuzhiyun 4357*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_CF_RECORD 4358*4882a593Smuzhiyun { 4359*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4360*4882a593Smuzhiyun USHORT usMaxPixClk; 4361*4882a593Smuzhiyun UCHAR ucFlowCntlGpioId; 4362*4882a593Smuzhiyun UCHAR ucSwapCntlGpioId; 4363*4882a593Smuzhiyun UCHAR ucConnectedDvoBundle; 4364*4882a593Smuzhiyun UCHAR ucPadding; 4365*4882a593Smuzhiyun }ATOM_CONNECTOR_CF_RECORD; 4366*4882a593Smuzhiyun 4367*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_HARDCODE_DTD_RECORD 4368*4882a593Smuzhiyun { 4369*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4370*4882a593Smuzhiyun ATOM_DTD_FORMAT asTiming; 4371*4882a593Smuzhiyun }ATOM_CONNECTOR_HARDCODE_DTD_RECORD; 4372*4882a593Smuzhiyun 4373*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_PCIE_SUBCONNECTOR_RECORD 4374*4882a593Smuzhiyun { 4375*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; //ATOM_CONNECTOR_PCIE_SUBCONNECTOR_RECORD_TYPE 4376*4882a593Smuzhiyun UCHAR ucSubConnectorType; //CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D|X_ID_DUAL_LINK_DVI_D|HDMI_TYPE_A 4377*4882a593Smuzhiyun UCHAR ucReserved; 4378*4882a593Smuzhiyun }ATOM_CONNECTOR_PCIE_SUBCONNECTOR_RECORD; 4379*4882a593Smuzhiyun 4380*4882a593Smuzhiyun 4381*4882a593Smuzhiyun typedef struct _ATOM_ROUTER_DDC_PATH_SELECT_RECORD 4382*4882a593Smuzhiyun { 4383*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4384*4882a593Smuzhiyun UCHAR ucMuxType; //decide the number of ucMuxState, =0, no pin state, =1: single state with complement, >1: multiple state 4385*4882a593Smuzhiyun UCHAR ucMuxControlPin; 4386*4882a593Smuzhiyun UCHAR ucMuxState[2]; //for alligment purpose 4387*4882a593Smuzhiyun }ATOM_ROUTER_DDC_PATH_SELECT_RECORD; 4388*4882a593Smuzhiyun 4389*4882a593Smuzhiyun typedef struct _ATOM_ROUTER_DATA_CLOCK_PATH_SELECT_RECORD 4390*4882a593Smuzhiyun { 4391*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4392*4882a593Smuzhiyun UCHAR ucMuxType; 4393*4882a593Smuzhiyun UCHAR ucMuxControlPin; 4394*4882a593Smuzhiyun UCHAR ucMuxState[2]; //for alligment purpose 4395*4882a593Smuzhiyun }ATOM_ROUTER_DATA_CLOCK_PATH_SELECT_RECORD; 4396*4882a593Smuzhiyun 4397*4882a593Smuzhiyun // define ucMuxType 4398*4882a593Smuzhiyun #define ATOM_ROUTER_MUX_PIN_STATE_MASK 0x0f 4399*4882a593Smuzhiyun #define ATOM_ROUTER_MUX_PIN_SINGLE_STATE_COMPLEMENT 0x01 4400*4882a593Smuzhiyun 4401*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_HPDPIN_LUT_RECORD //record for ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE 4402*4882a593Smuzhiyun { 4403*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4404*4882a593Smuzhiyun UCHAR ucHPDPINMap[MAX_NUMBER_OF_EXT_HPDPIN_LUT_ENTRIES]; //An fixed size array which maps external pins to internal GPIO_PIN_INFO table 4405*4882a593Smuzhiyun }ATOM_CONNECTOR_HPDPIN_LUT_RECORD; 4406*4882a593Smuzhiyun 4407*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_AUXDDC_LUT_RECORD //record for ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE 4408*4882a593Smuzhiyun { 4409*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4410*4882a593Smuzhiyun ATOM_I2C_ID_CONFIG ucAUXDDCMap[MAX_NUMBER_OF_EXT_AUXDDC_LUT_ENTRIES]; //An fixed size array which maps external pins to internal DDC ID 4411*4882a593Smuzhiyun }ATOM_CONNECTOR_AUXDDC_LUT_RECORD; 4412*4882a593Smuzhiyun 4413*4882a593Smuzhiyun typedef struct _ATOM_OBJECT_LINK_RECORD 4414*4882a593Smuzhiyun { 4415*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4416*4882a593Smuzhiyun USHORT usObjectID; //could be connector, encorder or other object in object.h 4417*4882a593Smuzhiyun }ATOM_OBJECT_LINK_RECORD; 4418*4882a593Smuzhiyun 4419*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_REMOTE_CAP_RECORD 4420*4882a593Smuzhiyun { 4421*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4422*4882a593Smuzhiyun USHORT usReserved; 4423*4882a593Smuzhiyun }ATOM_CONNECTOR_REMOTE_CAP_RECORD; 4424*4882a593Smuzhiyun 4425*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_LAYOUT_INFO 4426*4882a593Smuzhiyun { 4427*4882a593Smuzhiyun USHORT usConnectorObjectId; 4428*4882a593Smuzhiyun UCHAR ucConnectorType; 4429*4882a593Smuzhiyun UCHAR ucPosition; 4430*4882a593Smuzhiyun }ATOM_CONNECTOR_LAYOUT_INFO; 4431*4882a593Smuzhiyun 4432*4882a593Smuzhiyun // define ATOM_CONNECTOR_LAYOUT_INFO.ucConnectorType to describe the display connector size 4433*4882a593Smuzhiyun #define CONNECTOR_TYPE_DVI_D 1 4434*4882a593Smuzhiyun #define CONNECTOR_TYPE_DVI_I 2 4435*4882a593Smuzhiyun #define CONNECTOR_TYPE_VGA 3 4436*4882a593Smuzhiyun #define CONNECTOR_TYPE_HDMI 4 4437*4882a593Smuzhiyun #define CONNECTOR_TYPE_DISPLAY_PORT 5 4438*4882a593Smuzhiyun #define CONNECTOR_TYPE_MINI_DISPLAY_PORT 6 4439*4882a593Smuzhiyun 4440*4882a593Smuzhiyun typedef struct _ATOM_BRACKET_LAYOUT_RECORD 4441*4882a593Smuzhiyun { 4442*4882a593Smuzhiyun ATOM_COMMON_RECORD_HEADER sheader; 4443*4882a593Smuzhiyun UCHAR ucLength; 4444*4882a593Smuzhiyun UCHAR ucWidth; 4445*4882a593Smuzhiyun UCHAR ucConnNum; 4446*4882a593Smuzhiyun UCHAR ucReserved; 4447*4882a593Smuzhiyun ATOM_CONNECTOR_LAYOUT_INFO asConnInfo[1]; 4448*4882a593Smuzhiyun }ATOM_BRACKET_LAYOUT_RECORD; 4449*4882a593Smuzhiyun 4450*4882a593Smuzhiyun /****************************************************************************/ 4451*4882a593Smuzhiyun // ASIC voltage data table 4452*4882a593Smuzhiyun /****************************************************************************/ 4453*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_INFO_HEADER 4454*4882a593Smuzhiyun { 4455*4882a593Smuzhiyun USHORT usVDDCBaseLevel; //In number of 50mv unit 4456*4882a593Smuzhiyun USHORT usReserved; //For possible extension table offset 4457*4882a593Smuzhiyun UCHAR ucNumOfVoltageEntries; 4458*4882a593Smuzhiyun UCHAR ucBytesPerVoltageEntry; 4459*4882a593Smuzhiyun UCHAR ucVoltageStep; //Indicating in how many mv increament is one step, 0.5mv unit 4460*4882a593Smuzhiyun UCHAR ucDefaultVoltageEntry; 4461*4882a593Smuzhiyun UCHAR ucVoltageControlI2cLine; 4462*4882a593Smuzhiyun UCHAR ucVoltageControlAddress; 4463*4882a593Smuzhiyun UCHAR ucVoltageControlOffset; 4464*4882a593Smuzhiyun }ATOM_VOLTAGE_INFO_HEADER; 4465*4882a593Smuzhiyun 4466*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_INFO 4467*4882a593Smuzhiyun { 4468*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 4469*4882a593Smuzhiyun ATOM_VOLTAGE_INFO_HEADER viHeader; 4470*4882a593Smuzhiyun UCHAR ucVoltageEntries[64]; //64 is for allocation, the actual number of entry is present at ucNumOfVoltageEntries*ucBytesPerVoltageEntry 4471*4882a593Smuzhiyun }ATOM_VOLTAGE_INFO; 4472*4882a593Smuzhiyun 4473*4882a593Smuzhiyun 4474*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_FORMULA 4475*4882a593Smuzhiyun { 4476*4882a593Smuzhiyun USHORT usVoltageBaseLevel; // In number of 1mv unit 4477*4882a593Smuzhiyun USHORT usVoltageStep; // Indicating in how many mv increament is one step, 1mv unit 4478*4882a593Smuzhiyun UCHAR ucNumOfVoltageEntries; // Number of Voltage Entry, which indicate max Voltage 4479*4882a593Smuzhiyun UCHAR ucFlag; // bit0=0 :step is 1mv =1 0.5mv 4480*4882a593Smuzhiyun UCHAR ucBaseVID; // if there is no lookup table, VID= BaseVID + ( Vol - BaseLevle ) /VoltageStep 4481*4882a593Smuzhiyun UCHAR ucReserved; 4482*4882a593Smuzhiyun UCHAR ucVIDAdjustEntries[32]; // 32 is for allocation, the actual number of entry is present at ucNumOfVoltageEntries 4483*4882a593Smuzhiyun }ATOM_VOLTAGE_FORMULA; 4484*4882a593Smuzhiyun 4485*4882a593Smuzhiyun typedef struct _VOLTAGE_LUT_ENTRY 4486*4882a593Smuzhiyun { 4487*4882a593Smuzhiyun USHORT usVoltageCode; // The Voltage ID, either GPIO or I2C code 4488*4882a593Smuzhiyun USHORT usVoltageValue; // The corresponding Voltage Value, in mV 4489*4882a593Smuzhiyun }VOLTAGE_LUT_ENTRY; 4490*4882a593Smuzhiyun 4491*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_FORMULA_V2 4492*4882a593Smuzhiyun { 4493*4882a593Smuzhiyun UCHAR ucNumOfVoltageEntries; // Number of Voltage Entry, which indicate max Voltage 4494*4882a593Smuzhiyun UCHAR ucReserved[3]; 4495*4882a593Smuzhiyun VOLTAGE_LUT_ENTRY asVIDAdjustEntries[32];// 32 is for allocation, the actual number of entries is in ucNumOfVoltageEntries 4496*4882a593Smuzhiyun }ATOM_VOLTAGE_FORMULA_V2; 4497*4882a593Smuzhiyun 4498*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_CONTROL 4499*4882a593Smuzhiyun { 4500*4882a593Smuzhiyun UCHAR ucVoltageControlId; //Indicate it is controlled by I2C or GPIO or HW state machine 4501*4882a593Smuzhiyun UCHAR ucVoltageControlI2cLine; 4502*4882a593Smuzhiyun UCHAR ucVoltageControlAddress; 4503*4882a593Smuzhiyun UCHAR ucVoltageControlOffset; 4504*4882a593Smuzhiyun USHORT usGpioPin_AIndex; //GPIO_PAD register index 4505*4882a593Smuzhiyun UCHAR ucGpioPinBitShift[9]; //at most 8 pin support 255 VIDs, termintate with 0xff 4506*4882a593Smuzhiyun UCHAR ucReserved; 4507*4882a593Smuzhiyun }ATOM_VOLTAGE_CONTROL; 4508*4882a593Smuzhiyun 4509*4882a593Smuzhiyun // Define ucVoltageControlId 4510*4882a593Smuzhiyun #define VOLTAGE_CONTROLLED_BY_HW 0x00 4511*4882a593Smuzhiyun #define VOLTAGE_CONTROLLED_BY_I2C_MASK 0x7F 4512*4882a593Smuzhiyun #define VOLTAGE_CONTROLLED_BY_GPIO 0x80 4513*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_LM64 0x01 //I2C control, used for R5xx Core Voltage 4514*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_DAC 0x02 //I2C control, used for R5xx/R6xx MVDDC,MVDDQ or VDDCI 4515*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_VT116xM 0x03 //I2C control, used for R6xx Core Voltage 4516*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_DS4402 0x04 4517*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_UP6266 0x05 4518*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_SCORPIO 0x06 4519*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_VT1556M 0x07 4520*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_CHL822x 0x08 4521*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_VT1586M 0x09 4522*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_UP1637 0x0A 4523*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_CHL8214 0x0B 4524*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_UP1801 0x0C 4525*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_ST6788A 0x0D 4526*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_CHLIR3564SVI2 0x0E 4527*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_AD527x 0x0F 4528*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_NCP81022 0x10 4529*4882a593Smuzhiyun #define VOLTAGE_CONTROL_ID_LTC2635 0x11 4530*4882a593Smuzhiyun 4531*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_OBJECT 4532*4882a593Smuzhiyun { 4533*4882a593Smuzhiyun UCHAR ucVoltageType; //Indicate Voltage Source: VDDC, MVDDC, MVDDQ or MVDDCI 4534*4882a593Smuzhiyun UCHAR ucSize; //Size of Object 4535*4882a593Smuzhiyun ATOM_VOLTAGE_CONTROL asControl; //describ how to control 4536*4882a593Smuzhiyun ATOM_VOLTAGE_FORMULA asFormula; //Indicate How to convert real Voltage to VID 4537*4882a593Smuzhiyun }ATOM_VOLTAGE_OBJECT; 4538*4882a593Smuzhiyun 4539*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_OBJECT_V2 4540*4882a593Smuzhiyun { 4541*4882a593Smuzhiyun UCHAR ucVoltageType; //Indicate Voltage Source: VDDC, MVDDC, MVDDQ or MVDDCI 4542*4882a593Smuzhiyun UCHAR ucSize; //Size of Object 4543*4882a593Smuzhiyun ATOM_VOLTAGE_CONTROL asControl; //describ how to control 4544*4882a593Smuzhiyun ATOM_VOLTAGE_FORMULA_V2 asFormula; //Indicate How to convert real Voltage to VID 4545*4882a593Smuzhiyun }ATOM_VOLTAGE_OBJECT_V2; 4546*4882a593Smuzhiyun 4547*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_OBJECT_INFO 4548*4882a593Smuzhiyun { 4549*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 4550*4882a593Smuzhiyun ATOM_VOLTAGE_OBJECT asVoltageObj[3]; //Info for Voltage control 4551*4882a593Smuzhiyun }ATOM_VOLTAGE_OBJECT_INFO; 4552*4882a593Smuzhiyun 4553*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_OBJECT_INFO_V2 4554*4882a593Smuzhiyun { 4555*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 4556*4882a593Smuzhiyun ATOM_VOLTAGE_OBJECT_V2 asVoltageObj[3]; //Info for Voltage control 4557*4882a593Smuzhiyun }ATOM_VOLTAGE_OBJECT_INFO_V2; 4558*4882a593Smuzhiyun 4559*4882a593Smuzhiyun typedef struct _ATOM_LEAKID_VOLTAGE 4560*4882a593Smuzhiyun { 4561*4882a593Smuzhiyun UCHAR ucLeakageId; 4562*4882a593Smuzhiyun UCHAR ucReserved; 4563*4882a593Smuzhiyun USHORT usVoltage; 4564*4882a593Smuzhiyun }ATOM_LEAKID_VOLTAGE; 4565*4882a593Smuzhiyun 4566*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_OBJECT_HEADER_V3{ 4567*4882a593Smuzhiyun UCHAR ucVoltageType; //Indicate Voltage Source: VDDC, MVDDC, MVDDQ or MVDDCI 4568*4882a593Smuzhiyun UCHAR ucVoltageMode; //Indicate voltage control mode: Init/Set/Leakage/Set phase 4569*4882a593Smuzhiyun USHORT usSize; //Size of Object 4570*4882a593Smuzhiyun }ATOM_VOLTAGE_OBJECT_HEADER_V3; 4571*4882a593Smuzhiyun 4572*4882a593Smuzhiyun // ATOM_VOLTAGE_OBJECT_HEADER_V3.ucVoltageMode 4573*4882a593Smuzhiyun #define VOLTAGE_OBJ_GPIO_LUT 0 //VOLTAGE and GPIO Lookup table ->ATOM_GPIO_VOLTAGE_OBJECT_V3 4574*4882a593Smuzhiyun #define VOLTAGE_OBJ_VR_I2C_INIT_SEQ 3 //VOLTAGE REGULATOR INIT sequece through I2C -> ATOM_I2C_VOLTAGE_OBJECT_V3 4575*4882a593Smuzhiyun #define VOLTAGE_OBJ_PHASE_LUT 4 //Set Vregulator Phase lookup table ->ATOM_GPIO_VOLTAGE_OBJECT_V3 4576*4882a593Smuzhiyun #define VOLTAGE_OBJ_SVID2 7 //Indicate voltage control by SVID2 ->ATOM_SVID2_VOLTAGE_OBJECT_V3 4577*4882a593Smuzhiyun #define VOLTAGE_OBJ_EVV 8 4578*4882a593Smuzhiyun #define VOLTAGE_OBJ_PWRBOOST_LEAKAGE_LUT 0x10 //Powerboost Voltage and LeakageId lookup table->ATOM_LEAKAGE_VOLTAGE_OBJECT_V3 4579*4882a593Smuzhiyun #define VOLTAGE_OBJ_HIGH_STATE_LEAKAGE_LUT 0x11 //High voltage state Voltage and LeakageId lookup table->ATOM_LEAKAGE_VOLTAGE_OBJECT_V3 4580*4882a593Smuzhiyun #define VOLTAGE_OBJ_HIGH1_STATE_LEAKAGE_LUT 0x12 //High1 voltage state Voltage and LeakageId lookup table->ATOM_LEAKAGE_VOLTAGE_OBJECT_V3 4581*4882a593Smuzhiyun 4582*4882a593Smuzhiyun typedef struct _VOLTAGE_LUT_ENTRY_V2 4583*4882a593Smuzhiyun { 4584*4882a593Smuzhiyun ULONG ulVoltageId; // The Voltage ID which is used to program GPIO register 4585*4882a593Smuzhiyun USHORT usVoltageValue; // The corresponding Voltage Value, in mV 4586*4882a593Smuzhiyun }VOLTAGE_LUT_ENTRY_V2; 4587*4882a593Smuzhiyun 4588*4882a593Smuzhiyun typedef struct _LEAKAGE_VOLTAGE_LUT_ENTRY_V2 4589*4882a593Smuzhiyun { 4590*4882a593Smuzhiyun USHORT usVoltageLevel; // The Voltage ID which is used to program GPIO register 4591*4882a593Smuzhiyun USHORT usVoltageId; 4592*4882a593Smuzhiyun USHORT usLeakageId; // The corresponding Voltage Value, in mV 4593*4882a593Smuzhiyun }LEAKAGE_VOLTAGE_LUT_ENTRY_V2; 4594*4882a593Smuzhiyun 4595*4882a593Smuzhiyun typedef struct _ATOM_I2C_VOLTAGE_OBJECT_V3 4596*4882a593Smuzhiyun { 4597*4882a593Smuzhiyun ATOM_VOLTAGE_OBJECT_HEADER_V3 sHeader; // voltage mode = VOLTAGE_OBJ_VR_I2C_INIT_SEQ 4598*4882a593Smuzhiyun UCHAR ucVoltageRegulatorId; //Indicate Voltage Regulator Id 4599*4882a593Smuzhiyun UCHAR ucVoltageControlI2cLine; 4600*4882a593Smuzhiyun UCHAR ucVoltageControlAddress; 4601*4882a593Smuzhiyun UCHAR ucVoltageControlOffset; 4602*4882a593Smuzhiyun ULONG ulReserved; 4603*4882a593Smuzhiyun VOLTAGE_LUT_ENTRY asVolI2cLut[1]; // end with 0xff 4604*4882a593Smuzhiyun }ATOM_I2C_VOLTAGE_OBJECT_V3; 4605*4882a593Smuzhiyun 4606*4882a593Smuzhiyun // ATOM_I2C_VOLTAGE_OBJECT_V3.ucVoltageControlFlag 4607*4882a593Smuzhiyun #define VOLTAGE_DATA_ONE_BYTE 0 4608*4882a593Smuzhiyun #define VOLTAGE_DATA_TWO_BYTE 1 4609*4882a593Smuzhiyun 4610*4882a593Smuzhiyun typedef struct _ATOM_GPIO_VOLTAGE_OBJECT_V3 4611*4882a593Smuzhiyun { 4612*4882a593Smuzhiyun ATOM_VOLTAGE_OBJECT_HEADER_V3 sHeader; // voltage mode = VOLTAGE_OBJ_GPIO_LUT or VOLTAGE_OBJ_PHASE_LUT 4613*4882a593Smuzhiyun UCHAR ucVoltageGpioCntlId; // default is 0 which indicate control through CG VID mode 4614*4882a593Smuzhiyun UCHAR ucGpioEntryNum; // indiate the entry numbers of Votlage/Gpio value Look up table 4615*4882a593Smuzhiyun UCHAR ucPhaseDelay; // phase delay in unit of micro second 4616*4882a593Smuzhiyun UCHAR ucReserved; 4617*4882a593Smuzhiyun ULONG ulGpioMaskVal; // GPIO Mask value 4618*4882a593Smuzhiyun VOLTAGE_LUT_ENTRY_V2 asVolGpioLut[1]; 4619*4882a593Smuzhiyun }ATOM_GPIO_VOLTAGE_OBJECT_V3; 4620*4882a593Smuzhiyun 4621*4882a593Smuzhiyun typedef struct _ATOM_LEAKAGE_VOLTAGE_OBJECT_V3 4622*4882a593Smuzhiyun { 4623*4882a593Smuzhiyun ATOM_VOLTAGE_OBJECT_HEADER_V3 sHeader; // voltage mode = 0x10/0x11/0x12 4624*4882a593Smuzhiyun UCHAR ucLeakageCntlId; // default is 0 4625*4882a593Smuzhiyun UCHAR ucLeakageEntryNum; // indicate the entry number of LeakageId/Voltage Lut table 4626*4882a593Smuzhiyun UCHAR ucReserved[2]; 4627*4882a593Smuzhiyun ULONG ulMaxVoltageLevel; 4628*4882a593Smuzhiyun LEAKAGE_VOLTAGE_LUT_ENTRY_V2 asLeakageIdLut[1]; 4629*4882a593Smuzhiyun }ATOM_LEAKAGE_VOLTAGE_OBJECT_V3; 4630*4882a593Smuzhiyun 4631*4882a593Smuzhiyun 4632*4882a593Smuzhiyun typedef struct _ATOM_SVID2_VOLTAGE_OBJECT_V3 4633*4882a593Smuzhiyun { 4634*4882a593Smuzhiyun ATOM_VOLTAGE_OBJECT_HEADER_V3 sHeader; // voltage mode = VOLTAGE_OBJ_SVID2 4635*4882a593Smuzhiyun // 14:7 PSI0_VID 4636*4882a593Smuzhiyun // 6 PSI0_EN 4637*4882a593Smuzhiyun // 5 PSI1 4638*4882a593Smuzhiyun // 4:2 load line slope trim. 4639*4882a593Smuzhiyun // 1:0 offset trim, 4640*4882a593Smuzhiyun USHORT usLoadLine_PSI; 4641*4882a593Smuzhiyun // GPU GPIO pin Id to SVID2 regulator VRHot pin. possible value 0~31. 0 means GPIO0, 31 means GPIO31 4642*4882a593Smuzhiyun UCHAR ucSVDGpioId; //0~31 indicate GPIO0~31 4643*4882a593Smuzhiyun UCHAR ucSVCGpioId; //0~31 indicate GPIO0~31 4644*4882a593Smuzhiyun ULONG ulReserved; 4645*4882a593Smuzhiyun }ATOM_SVID2_VOLTAGE_OBJECT_V3; 4646*4882a593Smuzhiyun 4647*4882a593Smuzhiyun typedef union _ATOM_VOLTAGE_OBJECT_V3{ 4648*4882a593Smuzhiyun ATOM_GPIO_VOLTAGE_OBJECT_V3 asGpioVoltageObj; 4649*4882a593Smuzhiyun ATOM_I2C_VOLTAGE_OBJECT_V3 asI2cVoltageObj; 4650*4882a593Smuzhiyun ATOM_LEAKAGE_VOLTAGE_OBJECT_V3 asLeakageObj; 4651*4882a593Smuzhiyun ATOM_SVID2_VOLTAGE_OBJECT_V3 asSVID2Obj; 4652*4882a593Smuzhiyun }ATOM_VOLTAGE_OBJECT_V3; 4653*4882a593Smuzhiyun 4654*4882a593Smuzhiyun typedef struct _ATOM_VOLTAGE_OBJECT_INFO_V3_1 4655*4882a593Smuzhiyun { 4656*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 4657*4882a593Smuzhiyun ATOM_VOLTAGE_OBJECT_V3 asVoltageObj[3]; //Info for Voltage control 4658*4882a593Smuzhiyun }ATOM_VOLTAGE_OBJECT_INFO_V3_1; 4659*4882a593Smuzhiyun 4660*4882a593Smuzhiyun typedef struct _ATOM_ASIC_PROFILE_VOLTAGE 4661*4882a593Smuzhiyun { 4662*4882a593Smuzhiyun UCHAR ucProfileId; 4663*4882a593Smuzhiyun UCHAR ucReserved; 4664*4882a593Smuzhiyun USHORT usSize; 4665*4882a593Smuzhiyun USHORT usEfuseSpareStartAddr; 4666*4882a593Smuzhiyun USHORT usFuseIndex[8]; //from LSB to MSB, Max 8bit,end of 0xffff if less than 8 efuse id, 4667*4882a593Smuzhiyun ATOM_LEAKID_VOLTAGE asLeakVol[2]; //Leakid and relatd voltage 4668*4882a593Smuzhiyun }ATOM_ASIC_PROFILE_VOLTAGE; 4669*4882a593Smuzhiyun 4670*4882a593Smuzhiyun //ucProfileId 4671*4882a593Smuzhiyun #define ATOM_ASIC_PROFILE_ID_EFUSE_VOLTAGE 1 4672*4882a593Smuzhiyun #define ATOM_ASIC_PROFILE_ID_EFUSE_PERFORMANCE_VOLTAGE 1 4673*4882a593Smuzhiyun #define ATOM_ASIC_PROFILE_ID_EFUSE_THERMAL_VOLTAGE 2 4674*4882a593Smuzhiyun 4675*4882a593Smuzhiyun typedef struct _ATOM_ASIC_PROFILING_INFO 4676*4882a593Smuzhiyun { 4677*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER asHeader; 4678*4882a593Smuzhiyun ATOM_ASIC_PROFILE_VOLTAGE asVoltage; 4679*4882a593Smuzhiyun }ATOM_ASIC_PROFILING_INFO; 4680*4882a593Smuzhiyun 4681*4882a593Smuzhiyun typedef struct _ATOM_ASIC_PROFILING_INFO_V2_1 4682*4882a593Smuzhiyun { 4683*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER asHeader; 4684*4882a593Smuzhiyun UCHAR ucLeakageBinNum; // indicate the entry number of LeakageId/Voltage Lut table 4685*4882a593Smuzhiyun USHORT usLeakageBinArrayOffset; // offset of USHORT Leakage Bin list array ( from lower LeakageId to higher) 4686*4882a593Smuzhiyun 4687*4882a593Smuzhiyun UCHAR ucElbVDDC_Num; 4688*4882a593Smuzhiyun USHORT usElbVDDC_IdArrayOffset; // offset of USHORT virtual VDDC voltage id ( 0xff01~0xff08 ) 4689*4882a593Smuzhiyun USHORT usElbVDDC_LevelArrayOffset; // offset of 2 dimension voltage level USHORT array 4690*4882a593Smuzhiyun 4691*4882a593Smuzhiyun UCHAR ucElbVDDCI_Num; 4692*4882a593Smuzhiyun USHORT usElbVDDCI_IdArrayOffset; // offset of USHORT virtual VDDCI voltage id ( 0xff01~0xff08 ) 4693*4882a593Smuzhiyun USHORT usElbVDDCI_LevelArrayOffset; // offset of 2 dimension voltage level USHORT array 4694*4882a593Smuzhiyun }ATOM_ASIC_PROFILING_INFO_V2_1; 4695*4882a593Smuzhiyun 4696*4882a593Smuzhiyun typedef struct _ATOM_ASIC_PROFILING_INFO_V3_1 4697*4882a593Smuzhiyun { 4698*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER asHeader; 4699*4882a593Smuzhiyun ULONG ulEvvDerateTdp; 4700*4882a593Smuzhiyun ULONG ulEvvDerateTdc; 4701*4882a593Smuzhiyun ULONG ulBoardCoreTemp; 4702*4882a593Smuzhiyun ULONG ulMaxVddc; 4703*4882a593Smuzhiyun ULONG ulMinVddc; 4704*4882a593Smuzhiyun ULONG ulLoadLineSlop; 4705*4882a593Smuzhiyun ULONG ulLeakageTemp; 4706*4882a593Smuzhiyun ULONG ulLeakageVoltage; 4707*4882a593Smuzhiyun ULONG ulCACmEncodeRange; 4708*4882a593Smuzhiyun ULONG ulCACmEncodeAverage; 4709*4882a593Smuzhiyun ULONG ulCACbEncodeRange; 4710*4882a593Smuzhiyun ULONG ulCACbEncodeAverage; 4711*4882a593Smuzhiyun ULONG ulKt_bEncodeRange; 4712*4882a593Smuzhiyun ULONG ulKt_bEncodeAverage; 4713*4882a593Smuzhiyun ULONG ulKv_mEncodeRange; 4714*4882a593Smuzhiyun ULONG ulKv_mEncodeAverage; 4715*4882a593Smuzhiyun ULONG ulKv_bEncodeRange; 4716*4882a593Smuzhiyun ULONG ulKv_bEncodeAverage; 4717*4882a593Smuzhiyun ULONG ulLkgEncodeLn_MaxDivMin; 4718*4882a593Smuzhiyun ULONG ulLkgEncodeMin; 4719*4882a593Smuzhiyun ULONG ulEfuseLogisticAlpha; 4720*4882a593Smuzhiyun USHORT usPowerDpm0; 4721*4882a593Smuzhiyun USHORT usCurrentDpm0; 4722*4882a593Smuzhiyun USHORT usPowerDpm1; 4723*4882a593Smuzhiyun USHORT usCurrentDpm1; 4724*4882a593Smuzhiyun USHORT usPowerDpm2; 4725*4882a593Smuzhiyun USHORT usCurrentDpm2; 4726*4882a593Smuzhiyun USHORT usPowerDpm3; 4727*4882a593Smuzhiyun USHORT usCurrentDpm3; 4728*4882a593Smuzhiyun USHORT usPowerDpm4; 4729*4882a593Smuzhiyun USHORT usCurrentDpm4; 4730*4882a593Smuzhiyun USHORT usPowerDpm5; 4731*4882a593Smuzhiyun USHORT usCurrentDpm5; 4732*4882a593Smuzhiyun USHORT usPowerDpm6; 4733*4882a593Smuzhiyun USHORT usCurrentDpm6; 4734*4882a593Smuzhiyun USHORT usPowerDpm7; 4735*4882a593Smuzhiyun USHORT usCurrentDpm7; 4736*4882a593Smuzhiyun }ATOM_ASIC_PROFILING_INFO_V3_1; 4737*4882a593Smuzhiyun 4738*4882a593Smuzhiyun 4739*4882a593Smuzhiyun typedef struct _ATOM_POWER_SOURCE_OBJECT 4740*4882a593Smuzhiyun { 4741*4882a593Smuzhiyun UCHAR ucPwrSrcId; // Power source 4742*4882a593Smuzhiyun UCHAR ucPwrSensorType; // GPIO, I2C or none 4743*4882a593Smuzhiyun UCHAR ucPwrSensId; // if GPIO detect, it is GPIO id, if I2C detect, it is I2C id 4744*4882a593Smuzhiyun UCHAR ucPwrSensSlaveAddr; // Slave address if I2C detect 4745*4882a593Smuzhiyun UCHAR ucPwrSensRegIndex; // I2C register Index if I2C detect 4746*4882a593Smuzhiyun UCHAR ucPwrSensRegBitMask; // detect which bit is used if I2C detect 4747*4882a593Smuzhiyun UCHAR ucPwrSensActiveState; // high active or low active 4748*4882a593Smuzhiyun UCHAR ucReserve[3]; // reserve 4749*4882a593Smuzhiyun USHORT usSensPwr; // in unit of watt 4750*4882a593Smuzhiyun }ATOM_POWER_SOURCE_OBJECT; 4751*4882a593Smuzhiyun 4752*4882a593Smuzhiyun typedef struct _ATOM_POWER_SOURCE_INFO 4753*4882a593Smuzhiyun { 4754*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER asHeader; 4755*4882a593Smuzhiyun UCHAR asPwrbehave[16]; 4756*4882a593Smuzhiyun ATOM_POWER_SOURCE_OBJECT asPwrObj[1]; 4757*4882a593Smuzhiyun }ATOM_POWER_SOURCE_INFO; 4758*4882a593Smuzhiyun 4759*4882a593Smuzhiyun 4760*4882a593Smuzhiyun //Define ucPwrSrcId 4761*4882a593Smuzhiyun #define POWERSOURCE_PCIE_ID1 0x00 4762*4882a593Smuzhiyun #define POWERSOURCE_6PIN_CONNECTOR_ID1 0x01 4763*4882a593Smuzhiyun #define POWERSOURCE_8PIN_CONNECTOR_ID1 0x02 4764*4882a593Smuzhiyun #define POWERSOURCE_6PIN_CONNECTOR_ID2 0x04 4765*4882a593Smuzhiyun #define POWERSOURCE_8PIN_CONNECTOR_ID2 0x08 4766*4882a593Smuzhiyun 4767*4882a593Smuzhiyun //define ucPwrSensorId 4768*4882a593Smuzhiyun #define POWER_SENSOR_ALWAYS 0x00 4769*4882a593Smuzhiyun #define POWER_SENSOR_GPIO 0x01 4770*4882a593Smuzhiyun #define POWER_SENSOR_I2C 0x02 4771*4882a593Smuzhiyun 4772*4882a593Smuzhiyun typedef struct _ATOM_CLK_VOLT_CAPABILITY 4773*4882a593Smuzhiyun { 4774*4882a593Smuzhiyun ULONG ulVoltageIndex; // The Voltage Index indicated by FUSE, same voltage index shared with SCLK DPM fuse table 4775*4882a593Smuzhiyun ULONG ulMaximumSupportedCLK; // Maximum clock supported with specified voltage index, unit in 10kHz 4776*4882a593Smuzhiyun }ATOM_CLK_VOLT_CAPABILITY; 4777*4882a593Smuzhiyun 4778*4882a593Smuzhiyun typedef struct _ATOM_AVAILABLE_SCLK_LIST 4779*4882a593Smuzhiyun { 4780*4882a593Smuzhiyun ULONG ulSupportedSCLK; // Maximum clock supported with specified voltage index, unit in 10kHz 4781*4882a593Smuzhiyun USHORT usVoltageIndex; // The Voltage Index indicated by FUSE for specified SCLK 4782*4882a593Smuzhiyun USHORT usVoltageID; // The Voltage ID indicated by FUSE for specified SCLK 4783*4882a593Smuzhiyun }ATOM_AVAILABLE_SCLK_LIST; 4784*4882a593Smuzhiyun 4785*4882a593Smuzhiyun // ATOM_INTEGRATED_SYSTEM_INFO_V6 ulSystemConfig cap definition 4786*4882a593Smuzhiyun #define ATOM_IGP_INFO_V6_SYSTEM_CONFIG__PCIE_POWER_GATING_ENABLE 1 // refer to ulSystemConfig bit[0] 4787*4882a593Smuzhiyun 4788*4882a593Smuzhiyun // this IntegrateSystemInfoTable is used for Liano/Ontario APU 4789*4882a593Smuzhiyun typedef struct _ATOM_INTEGRATED_SYSTEM_INFO_V6 4790*4882a593Smuzhiyun { 4791*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 4792*4882a593Smuzhiyun ULONG ulBootUpEngineClock; 4793*4882a593Smuzhiyun ULONG ulDentistVCOFreq; 4794*4882a593Smuzhiyun ULONG ulBootUpUMAClock; 4795*4882a593Smuzhiyun ATOM_CLK_VOLT_CAPABILITY sDISPCLK_Voltage[4]; 4796*4882a593Smuzhiyun ULONG ulBootUpReqDisplayVector; 4797*4882a593Smuzhiyun ULONG ulOtherDisplayMisc; 4798*4882a593Smuzhiyun ULONG ulGPUCapInfo; 4799*4882a593Smuzhiyun ULONG ulSB_MMIO_Base_Addr; 4800*4882a593Smuzhiyun USHORT usRequestedPWMFreqInHz; 4801*4882a593Smuzhiyun UCHAR ucHtcTmpLmt; 4802*4882a593Smuzhiyun UCHAR ucHtcHystLmt; 4803*4882a593Smuzhiyun ULONG ulMinEngineClock; 4804*4882a593Smuzhiyun ULONG ulSystemConfig; 4805*4882a593Smuzhiyun ULONG ulCPUCapInfo; 4806*4882a593Smuzhiyun USHORT usNBP0Voltage; 4807*4882a593Smuzhiyun USHORT usNBP1Voltage; 4808*4882a593Smuzhiyun USHORT usBootUpNBVoltage; 4809*4882a593Smuzhiyun USHORT usExtDispConnInfoOffset; 4810*4882a593Smuzhiyun USHORT usPanelRefreshRateRange; 4811*4882a593Smuzhiyun UCHAR ucMemoryType; 4812*4882a593Smuzhiyun UCHAR ucUMAChannelNumber; 4813*4882a593Smuzhiyun ULONG ulCSR_M3_ARB_CNTL_DEFAULT[10]; 4814*4882a593Smuzhiyun ULONG ulCSR_M3_ARB_CNTL_UVD[10]; 4815*4882a593Smuzhiyun ULONG ulCSR_M3_ARB_CNTL_FS3D[10]; 4816*4882a593Smuzhiyun ATOM_AVAILABLE_SCLK_LIST sAvail_SCLK[5]; 4817*4882a593Smuzhiyun ULONG ulGMCRestoreResetTime; 4818*4882a593Smuzhiyun ULONG ulMinimumNClk; 4819*4882a593Smuzhiyun ULONG ulIdleNClk; 4820*4882a593Smuzhiyun ULONG ulDDR_DLL_PowerUpTime; 4821*4882a593Smuzhiyun ULONG ulDDR_PLL_PowerUpTime; 4822*4882a593Smuzhiyun USHORT usPCIEClkSSPercentage; 4823*4882a593Smuzhiyun USHORT usPCIEClkSSType; 4824*4882a593Smuzhiyun USHORT usLvdsSSPercentage; 4825*4882a593Smuzhiyun USHORT usLvdsSSpreadRateIn10Hz; 4826*4882a593Smuzhiyun USHORT usHDMISSPercentage; 4827*4882a593Smuzhiyun USHORT usHDMISSpreadRateIn10Hz; 4828*4882a593Smuzhiyun USHORT usDVISSPercentage; 4829*4882a593Smuzhiyun USHORT usDVISSpreadRateIn10Hz; 4830*4882a593Smuzhiyun ULONG SclkDpmBoostMargin; 4831*4882a593Smuzhiyun ULONG SclkDpmThrottleMargin; 4832*4882a593Smuzhiyun USHORT SclkDpmTdpLimitPG; 4833*4882a593Smuzhiyun USHORT SclkDpmTdpLimitBoost; 4834*4882a593Smuzhiyun ULONG ulBoostEngineCLock; 4835*4882a593Smuzhiyun UCHAR ulBoostVid_2bit; 4836*4882a593Smuzhiyun UCHAR EnableBoost; 4837*4882a593Smuzhiyun USHORT GnbTdpLimit; 4838*4882a593Smuzhiyun USHORT usMaxLVDSPclkFreqInSingleLink; 4839*4882a593Smuzhiyun UCHAR ucLvdsMisc; 4840*4882a593Smuzhiyun UCHAR ucLVDSReserved; 4841*4882a593Smuzhiyun ULONG ulReserved3[15]; 4842*4882a593Smuzhiyun ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO sExtDispConnInfo; 4843*4882a593Smuzhiyun }ATOM_INTEGRATED_SYSTEM_INFO_V6; 4844*4882a593Smuzhiyun 4845*4882a593Smuzhiyun // ulGPUCapInfo 4846*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO_V6_GPUCAPINFO__TMDSHDMI_COHERENT_SINGLEPLL_MODE 0x01 4847*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO_V6_GPUCAPINFO__DISABLE_AUX_HW_MODE_DETECTION 0x08 4848*4882a593Smuzhiyun 4849*4882a593Smuzhiyun //ucLVDSMisc: 4850*4882a593Smuzhiyun #define SYS_INFO_LVDSMISC__888_FPDI_MODE 0x01 4851*4882a593Smuzhiyun #define SYS_INFO_LVDSMISC__DL_CH_SWAP 0x02 4852*4882a593Smuzhiyun #define SYS_INFO_LVDSMISC__888_BPC 0x04 4853*4882a593Smuzhiyun #define SYS_INFO_LVDSMISC__OVERRIDE_EN 0x08 4854*4882a593Smuzhiyun #define SYS_INFO_LVDSMISC__BLON_ACTIVE_LOW 0x10 4855*4882a593Smuzhiyun // new since Trinity 4856*4882a593Smuzhiyun #define SYS_INFO_LVDSMISC__TRAVIS_LVDS_VOL_OVERRIDE_EN 0x20 4857*4882a593Smuzhiyun 4858*4882a593Smuzhiyun // not used any more 4859*4882a593Smuzhiyun #define SYS_INFO_LVDSMISC__VSYNC_ACTIVE_LOW 0x04 4860*4882a593Smuzhiyun #define SYS_INFO_LVDSMISC__HSYNC_ACTIVE_LOW 0x08 4861*4882a593Smuzhiyun 4862*4882a593Smuzhiyun /********************************************************************************************************************** 4863*4882a593Smuzhiyun ATOM_INTEGRATED_SYSTEM_INFO_V6 Description 4864*4882a593Smuzhiyun ulBootUpEngineClock: VBIOS bootup Engine clock frequency, in 10kHz unit. if it is equal 0, then VBIOS use pre-defined bootup engine clock 4865*4882a593Smuzhiyun ulDentistVCOFreq: Dentist VCO clock in 10kHz unit. 4866*4882a593Smuzhiyun ulBootUpUMAClock: System memory boot up clock frequency in 10Khz unit. 4867*4882a593Smuzhiyun sDISPCLK_Voltage: Report Display clock voltage requirement. 4868*4882a593Smuzhiyun 4869*4882a593Smuzhiyun ulBootUpReqDisplayVector: VBIOS boot up display IDs, following are supported devices in Liano/Ontaio projects: 4870*4882a593Smuzhiyun ATOM_DEVICE_CRT1_SUPPORT 0x0001 4871*4882a593Smuzhiyun ATOM_DEVICE_CRT2_SUPPORT 0x0010 4872*4882a593Smuzhiyun ATOM_DEVICE_DFP1_SUPPORT 0x0008 4873*4882a593Smuzhiyun ATOM_DEVICE_DFP6_SUPPORT 0x0040 4874*4882a593Smuzhiyun ATOM_DEVICE_DFP2_SUPPORT 0x0080 4875*4882a593Smuzhiyun ATOM_DEVICE_DFP3_SUPPORT 0x0200 4876*4882a593Smuzhiyun ATOM_DEVICE_DFP4_SUPPORT 0x0400 4877*4882a593Smuzhiyun ATOM_DEVICE_DFP5_SUPPORT 0x0800 4878*4882a593Smuzhiyun ATOM_DEVICE_LCD1_SUPPORT 0x0002 4879*4882a593Smuzhiyun ulOtherDisplayMisc: Other display related flags, not defined yet. 4880*4882a593Smuzhiyun ulGPUCapInfo: bit[0]=0: TMDS/HDMI Coherent Mode use cascade PLL mode. 4881*4882a593Smuzhiyun =1: TMDS/HDMI Coherent Mode use signel PLL mode. 4882*4882a593Smuzhiyun bit[3]=0: Enable HW AUX mode detection logic 4883*4882a593Smuzhiyun =1: Disable HW AUX mode dettion logic 4884*4882a593Smuzhiyun ulSB_MMIO_Base_Addr: Physical Base address to SB MMIO space. Driver needs to initialize it for SMU usage. 4885*4882a593Smuzhiyun 4886*4882a593Smuzhiyun usRequestedPWMFreqInHz: When it's set to 0x0 by SBIOS: the LCD BackLight is not controlled by GPU(SW). 4887*4882a593Smuzhiyun Any attempt to change BL using VBIOS function or enable VariBri from PP table is not effective since ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==0; 4888*4882a593Smuzhiyun 4889*4882a593Smuzhiyun When it's set to a non-zero frequency, the BackLight is controlled by GPU (SW) in one of two ways below: 4890*4882a593Smuzhiyun 1. SW uses the GPU BL PWM output to control the BL, in chis case, this non-zero frequency determines what freq GPU should use; 4891*4882a593Smuzhiyun VBIOS will set up proper PWM frequency and ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==1,as the result, 4892*4882a593Smuzhiyun Changing BL using VBIOS function is functional in both driver and non-driver present environment; 4893*4882a593Smuzhiyun and enabling VariBri under the driver environment from PP table is optional. 4894*4882a593Smuzhiyun 4895*4882a593Smuzhiyun 2. SW uses other means to control BL (like DPCD),this non-zero frequency serves as a flag only indicating 4896*4882a593Smuzhiyun that BL control from GPU is expected. 4897*4882a593Smuzhiyun VBIOS will NOT set up PWM frequency but make ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==1 4898*4882a593Smuzhiyun Changing BL using VBIOS function could be functional in both driver and non-driver present environment,but 4899*4882a593Smuzhiyun it's per platform 4900*4882a593Smuzhiyun and enabling VariBri under the driver environment from PP table is optional. 4901*4882a593Smuzhiyun 4902*4882a593Smuzhiyun ucHtcTmpLmt: Refer to D18F3x64 bit[22:16], HtcTmpLmt. 4903*4882a593Smuzhiyun Threshold on value to enter HTC_active state. 4904*4882a593Smuzhiyun ucHtcHystLmt: Refer to D18F3x64 bit[27:24], HtcHystLmt. 4905*4882a593Smuzhiyun To calculate threshold off value to exit HTC_active state, which is Threshold on vlaue minus ucHtcHystLmt. 4906*4882a593Smuzhiyun ulMinEngineClock: Minimum SCLK allowed in 10kHz unit. This is calculated based on WRCK Fuse settings. 4907*4882a593Smuzhiyun ulSystemConfig: Bit[0]=0: PCIE Power Gating Disabled 4908*4882a593Smuzhiyun =1: PCIE Power Gating Enabled 4909*4882a593Smuzhiyun Bit[1]=0: DDR-DLL shut-down feature disabled. 4910*4882a593Smuzhiyun 1: DDR-DLL shut-down feature enabled. 4911*4882a593Smuzhiyun Bit[2]=0: DDR-PLL Power down feature disabled. 4912*4882a593Smuzhiyun 1: DDR-PLL Power down feature enabled. 4913*4882a593Smuzhiyun ulCPUCapInfo: TBD 4914*4882a593Smuzhiyun usNBP0Voltage: VID for voltage on NB P0 State 4915*4882a593Smuzhiyun usNBP1Voltage: VID for voltage on NB P1 State 4916*4882a593Smuzhiyun usBootUpNBVoltage: Voltage Index of GNB voltage configured by SBIOS, which is suffcient to support VBIOS DISPCLK requirement. 4917*4882a593Smuzhiyun usExtDispConnInfoOffset: Offset to sExtDispConnInfo inside the structure 4918*4882a593Smuzhiyun usPanelRefreshRateRange: Bit vector for LCD supported refresh rate range. If DRR is requestd by the platform, at least two bits need to be set 4919*4882a593Smuzhiyun to indicate a range. 4920*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_30Hz 0x0004 4921*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_40Hz 0x0008 4922*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_50Hz 0x0010 4923*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_60Hz 0x0020 4924*4882a593Smuzhiyun ucMemoryType: [3:0]=1:DDR1;=2:DDR2;=3:DDR3.[7:4] is reserved. 4925*4882a593Smuzhiyun ucUMAChannelNumber: System memory channel numbers. 4926*4882a593Smuzhiyun ulCSR_M3_ARB_CNTL_DEFAULT[10]: Arrays with values for CSR M3 arbiter for default 4927*4882a593Smuzhiyun ulCSR_M3_ARB_CNTL_UVD[10]: Arrays with values for CSR M3 arbiter for UVD playback. 4928*4882a593Smuzhiyun ulCSR_M3_ARB_CNTL_FS3D[10]: Arrays with values for CSR M3 arbiter for Full Screen 3D applications. 4929*4882a593Smuzhiyun sAvail_SCLK[5]: Arrays to provide availabe list of SLCK and corresponding voltage, order from low to high 4930*4882a593Smuzhiyun ulGMCRestoreResetTime: GMC power restore and GMC reset time to calculate data reconnection latency. Unit in ns. 4931*4882a593Smuzhiyun ulMinimumNClk: Minimum NCLK speed among all NB-Pstates to calcualte data reconnection latency. Unit in 10kHz. 4932*4882a593Smuzhiyun ulIdleNClk: NCLK speed while memory runs in self-refresh state. Unit in 10kHz. 4933*4882a593Smuzhiyun ulDDR_DLL_PowerUpTime: DDR PHY DLL power up time. Unit in ns. 4934*4882a593Smuzhiyun ulDDR_PLL_PowerUpTime: DDR PHY PLL power up time. Unit in ns. 4935*4882a593Smuzhiyun usPCIEClkSSPercentage: PCIE Clock Spred Spectrum Percentage in unit 0.01%; 100 mean 1%. 4936*4882a593Smuzhiyun usPCIEClkSSType: PCIE Clock Spred Spectrum Type. 0 for Down spread(default); 1 for Center spread. 4937*4882a593Smuzhiyun usLvdsSSPercentage: LVDS panel ( not include eDP ) Spread Spectrum Percentage in unit of 0.01%, =0, use VBIOS default setting. 4938*4882a593Smuzhiyun usLvdsSSpreadRateIn10Hz: LVDS panel ( not include eDP ) Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting. 4939*4882a593Smuzhiyun usHDMISSPercentage: HDMI Spread Spectrum Percentage in unit 0.01%; 100 mean 1%, =0, use VBIOS default setting. 4940*4882a593Smuzhiyun usHDMISSpreadRateIn10Hz: HDMI Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting. 4941*4882a593Smuzhiyun usDVISSPercentage: DVI Spread Spectrum Percentage in unit 0.01%; 100 mean 1%, =0, use VBIOS default setting. 4942*4882a593Smuzhiyun usDVISSpreadRateIn10Hz: DVI Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting. 4943*4882a593Smuzhiyun usMaxLVDSPclkFreqInSingleLink: Max pixel clock LVDS panel single link, if=0 means VBIOS use default threhold, right now it is 85Mhz 4944*4882a593Smuzhiyun ucLVDSMisc: [bit0] LVDS 888bit panel mode =0: LVDS 888 panel in LDI mode, =1: LVDS 888 panel in FPDI mode 4945*4882a593Smuzhiyun [bit1] LVDS panel lower and upper link mapping =0: lower link and upper link not swap, =1: lower link and upper link are swapped 4946*4882a593Smuzhiyun [bit2] LVDS 888bit per color mode =0: 666 bit per color =1:888 bit per color 4947*4882a593Smuzhiyun [bit3] LVDS parameter override enable =0: ucLvdsMisc parameter are not used =1: ucLvdsMisc parameter should be used 4948*4882a593Smuzhiyun [bit4] Polarity of signal sent to digital BLON output pin. =0: not inverted(active high) =1: inverted ( active low ) 4949*4882a593Smuzhiyun **********************************************************************************************************************/ 4950*4882a593Smuzhiyun 4951*4882a593Smuzhiyun // this Table is used for Liano/Ontario APU 4952*4882a593Smuzhiyun typedef struct _ATOM_FUSION_SYSTEM_INFO_V1 4953*4882a593Smuzhiyun { 4954*4882a593Smuzhiyun ATOM_INTEGRATED_SYSTEM_INFO_V6 sIntegratedSysInfo; 4955*4882a593Smuzhiyun ULONG ulPowerplayTable[128]; 4956*4882a593Smuzhiyun }ATOM_FUSION_SYSTEM_INFO_V1; 4957*4882a593Smuzhiyun 4958*4882a593Smuzhiyun 4959*4882a593Smuzhiyun typedef struct _ATOM_TDP_CONFIG_BITS 4960*4882a593Smuzhiyun { 4961*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 4962*4882a593Smuzhiyun ULONG uReserved:2; 4963*4882a593Smuzhiyun ULONG uTDP_Value:14; // Original TDP value in tens of milli watts 4964*4882a593Smuzhiyun ULONG uCTDP_Value:14; // Override value in tens of milli watts 4965*4882a593Smuzhiyun ULONG uCTDP_Enable:2; // = (uCTDP_Value > uTDP_Value? 2: (uCTDP_Value < uTDP_Value)) 4966*4882a593Smuzhiyun #else 4967*4882a593Smuzhiyun ULONG uCTDP_Enable:2; // = (uCTDP_Value > uTDP_Value? 2: (uCTDP_Value < uTDP_Value)) 4968*4882a593Smuzhiyun ULONG uCTDP_Value:14; // Override value in tens of milli watts 4969*4882a593Smuzhiyun ULONG uTDP_Value:14; // Original TDP value in tens of milli watts 4970*4882a593Smuzhiyun ULONG uReserved:2; 4971*4882a593Smuzhiyun #endif 4972*4882a593Smuzhiyun }ATOM_TDP_CONFIG_BITS; 4973*4882a593Smuzhiyun 4974*4882a593Smuzhiyun typedef union _ATOM_TDP_CONFIG 4975*4882a593Smuzhiyun { 4976*4882a593Smuzhiyun ATOM_TDP_CONFIG_BITS TDP_config; 4977*4882a593Smuzhiyun ULONG TDP_config_all; 4978*4882a593Smuzhiyun }ATOM_TDP_CONFIG; 4979*4882a593Smuzhiyun 4980*4882a593Smuzhiyun /********************************************************************************************************************** 4981*4882a593Smuzhiyun ATOM_FUSION_SYSTEM_INFO_V1 Description 4982*4882a593Smuzhiyun sIntegratedSysInfo: refer to ATOM_INTEGRATED_SYSTEM_INFO_V6 definition. 4983*4882a593Smuzhiyun ulPowerplayTable[128]: This 512 bytes memory is used to save ATOM_PPLIB_POWERPLAYTABLE3, starting form ulPowerplayTable[0] 4984*4882a593Smuzhiyun **********************************************************************************************************************/ 4985*4882a593Smuzhiyun 4986*4882a593Smuzhiyun // this IntegrateSystemInfoTable is used for Trinity APU 4987*4882a593Smuzhiyun typedef struct _ATOM_INTEGRATED_SYSTEM_INFO_V1_7 4988*4882a593Smuzhiyun { 4989*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 4990*4882a593Smuzhiyun ULONG ulBootUpEngineClock; 4991*4882a593Smuzhiyun ULONG ulDentistVCOFreq; 4992*4882a593Smuzhiyun ULONG ulBootUpUMAClock; 4993*4882a593Smuzhiyun ATOM_CLK_VOLT_CAPABILITY sDISPCLK_Voltage[4]; 4994*4882a593Smuzhiyun ULONG ulBootUpReqDisplayVector; 4995*4882a593Smuzhiyun ULONG ulOtherDisplayMisc; 4996*4882a593Smuzhiyun ULONG ulGPUCapInfo; 4997*4882a593Smuzhiyun ULONG ulSB_MMIO_Base_Addr; 4998*4882a593Smuzhiyun USHORT usRequestedPWMFreqInHz; 4999*4882a593Smuzhiyun UCHAR ucHtcTmpLmt; 5000*4882a593Smuzhiyun UCHAR ucHtcHystLmt; 5001*4882a593Smuzhiyun ULONG ulMinEngineClock; 5002*4882a593Smuzhiyun ULONG ulSystemConfig; 5003*4882a593Smuzhiyun ULONG ulCPUCapInfo; 5004*4882a593Smuzhiyun USHORT usNBP0Voltage; 5005*4882a593Smuzhiyun USHORT usNBP1Voltage; 5006*4882a593Smuzhiyun USHORT usBootUpNBVoltage; 5007*4882a593Smuzhiyun USHORT usExtDispConnInfoOffset; 5008*4882a593Smuzhiyun USHORT usPanelRefreshRateRange; 5009*4882a593Smuzhiyun UCHAR ucMemoryType; 5010*4882a593Smuzhiyun UCHAR ucUMAChannelNumber; 5011*4882a593Smuzhiyun UCHAR strVBIOSMsg[40]; 5012*4882a593Smuzhiyun ATOM_TDP_CONFIG asTdpConfig; 5013*4882a593Smuzhiyun ULONG ulReserved[19]; 5014*4882a593Smuzhiyun ATOM_AVAILABLE_SCLK_LIST sAvail_SCLK[5]; 5015*4882a593Smuzhiyun ULONG ulGMCRestoreResetTime; 5016*4882a593Smuzhiyun ULONG ulMinimumNClk; 5017*4882a593Smuzhiyun ULONG ulIdleNClk; 5018*4882a593Smuzhiyun ULONG ulDDR_DLL_PowerUpTime; 5019*4882a593Smuzhiyun ULONG ulDDR_PLL_PowerUpTime; 5020*4882a593Smuzhiyun USHORT usPCIEClkSSPercentage; 5021*4882a593Smuzhiyun USHORT usPCIEClkSSType; 5022*4882a593Smuzhiyun USHORT usLvdsSSPercentage; 5023*4882a593Smuzhiyun USHORT usLvdsSSpreadRateIn10Hz; 5024*4882a593Smuzhiyun USHORT usHDMISSPercentage; 5025*4882a593Smuzhiyun USHORT usHDMISSpreadRateIn10Hz; 5026*4882a593Smuzhiyun USHORT usDVISSPercentage; 5027*4882a593Smuzhiyun USHORT usDVISSpreadRateIn10Hz; 5028*4882a593Smuzhiyun ULONG SclkDpmBoostMargin; 5029*4882a593Smuzhiyun ULONG SclkDpmThrottleMargin; 5030*4882a593Smuzhiyun USHORT SclkDpmTdpLimitPG; 5031*4882a593Smuzhiyun USHORT SclkDpmTdpLimitBoost; 5032*4882a593Smuzhiyun ULONG ulBoostEngineCLock; 5033*4882a593Smuzhiyun UCHAR ulBoostVid_2bit; 5034*4882a593Smuzhiyun UCHAR EnableBoost; 5035*4882a593Smuzhiyun USHORT GnbTdpLimit; 5036*4882a593Smuzhiyun USHORT usMaxLVDSPclkFreqInSingleLink; 5037*4882a593Smuzhiyun UCHAR ucLvdsMisc; 5038*4882a593Smuzhiyun UCHAR ucTravisLVDSVolAdjust; 5039*4882a593Smuzhiyun UCHAR ucLVDSPwrOnSeqDIGONtoDE_in4Ms; 5040*4882a593Smuzhiyun UCHAR ucLVDSPwrOnSeqDEtoVARY_BL_in4Ms; 5041*4882a593Smuzhiyun UCHAR ucLVDSPwrOffSeqVARY_BLtoDE_in4Ms; 5042*4882a593Smuzhiyun UCHAR ucLVDSPwrOffSeqDEtoDIGON_in4Ms; 5043*4882a593Smuzhiyun UCHAR ucLVDSOffToOnDelay_in4Ms; 5044*4882a593Smuzhiyun UCHAR ucLVDSPwrOnSeqVARY_BLtoBLON_in4Ms; 5045*4882a593Smuzhiyun UCHAR ucLVDSPwrOffSeqBLONtoVARY_BL_in4Ms; 5046*4882a593Smuzhiyun UCHAR ucMinAllowedBL_Level; 5047*4882a593Smuzhiyun ULONG ulLCDBitDepthControlVal; 5048*4882a593Smuzhiyun ULONG ulNbpStateMemclkFreq[4]; 5049*4882a593Smuzhiyun USHORT usNBP2Voltage; 5050*4882a593Smuzhiyun USHORT usNBP3Voltage; 5051*4882a593Smuzhiyun ULONG ulNbpStateNClkFreq[4]; 5052*4882a593Smuzhiyun UCHAR ucNBDPMEnable; 5053*4882a593Smuzhiyun UCHAR ucReserved[3]; 5054*4882a593Smuzhiyun UCHAR ucDPMState0VclkFid; 5055*4882a593Smuzhiyun UCHAR ucDPMState0DclkFid; 5056*4882a593Smuzhiyun UCHAR ucDPMState1VclkFid; 5057*4882a593Smuzhiyun UCHAR ucDPMState1DclkFid; 5058*4882a593Smuzhiyun UCHAR ucDPMState2VclkFid; 5059*4882a593Smuzhiyun UCHAR ucDPMState2DclkFid; 5060*4882a593Smuzhiyun UCHAR ucDPMState3VclkFid; 5061*4882a593Smuzhiyun UCHAR ucDPMState3DclkFid; 5062*4882a593Smuzhiyun ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO sExtDispConnInfo; 5063*4882a593Smuzhiyun }ATOM_INTEGRATED_SYSTEM_INFO_V1_7; 5064*4882a593Smuzhiyun 5065*4882a593Smuzhiyun // ulOtherDisplayMisc 5066*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__GET_EDID_CALLBACK_FUNC_SUPPORT 0x01 5067*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__GET_BOOTUP_DISPLAY_CALLBACK_FUNC_SUPPORT 0x02 5068*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__GET_EXPANSION_CALLBACK_FUNC_SUPPORT 0x04 5069*4882a593Smuzhiyun #define INTEGRATED_SYSTEM_INFO__FAST_BOOT_SUPPORT 0x08 5070*4882a593Smuzhiyun 5071*4882a593Smuzhiyun // ulGPUCapInfo 5072*4882a593Smuzhiyun #define SYS_INFO_GPUCAPS__TMDSHDMI_COHERENT_SINGLEPLL_MODE 0x01 5073*4882a593Smuzhiyun #define SYS_INFO_GPUCAPS__DP_SINGLEPLL_MODE 0x02 5074*4882a593Smuzhiyun #define SYS_INFO_GPUCAPS__DISABLE_AUX_MODE_DETECT 0x08 5075*4882a593Smuzhiyun #define SYS_INFO_GPUCAPS__ENABEL_DFS_BYPASS 0x10 5076*4882a593Smuzhiyun 5077*4882a593Smuzhiyun /********************************************************************************************************************** 5078*4882a593Smuzhiyun ATOM_INTEGRATED_SYSTEM_INFO_V1_7 Description 5079*4882a593Smuzhiyun ulBootUpEngineClock: VBIOS bootup Engine clock frequency, in 10kHz unit. if it is equal 0, then VBIOS use pre-defined bootup engine clock 5080*4882a593Smuzhiyun ulDentistVCOFreq: Dentist VCO clock in 10kHz unit. 5081*4882a593Smuzhiyun ulBootUpUMAClock: System memory boot up clock frequency in 10Khz unit. 5082*4882a593Smuzhiyun sDISPCLK_Voltage: Report Display clock voltage requirement. 5083*4882a593Smuzhiyun 5084*4882a593Smuzhiyun ulBootUpReqDisplayVector: VBIOS boot up display IDs, following are supported devices in Trinity projects: 5085*4882a593Smuzhiyun ATOM_DEVICE_CRT1_SUPPORT 0x0001 5086*4882a593Smuzhiyun ATOM_DEVICE_DFP1_SUPPORT 0x0008 5087*4882a593Smuzhiyun ATOM_DEVICE_DFP6_SUPPORT 0x0040 5088*4882a593Smuzhiyun ATOM_DEVICE_DFP2_SUPPORT 0x0080 5089*4882a593Smuzhiyun ATOM_DEVICE_DFP3_SUPPORT 0x0200 5090*4882a593Smuzhiyun ATOM_DEVICE_DFP4_SUPPORT 0x0400 5091*4882a593Smuzhiyun ATOM_DEVICE_DFP5_SUPPORT 0x0800 5092*4882a593Smuzhiyun ATOM_DEVICE_LCD1_SUPPORT 0x0002 5093*4882a593Smuzhiyun ulOtherDisplayMisc: bit[0]=0: INT15 callback function Get LCD EDID ( ax=4e08, bl=1b ) is not supported by SBIOS. 5094*4882a593Smuzhiyun =1: INT15 callback function Get LCD EDID ( ax=4e08, bl=1b ) is supported by SBIOS. 5095*4882a593Smuzhiyun bit[1]=0: INT15 callback function Get boot display( ax=4e08, bl=01h) is not supported by SBIOS 5096*4882a593Smuzhiyun =1: INT15 callback function Get boot display( ax=4e08, bl=01h) is supported by SBIOS 5097*4882a593Smuzhiyun bit[2]=0: INT15 callback function Get panel Expansion ( ax=4e08, bl=02h) is not supported by SBIOS 5098*4882a593Smuzhiyun =1: INT15 callback function Get panel Expansion ( ax=4e08, bl=02h) is supported by SBIOS 5099*4882a593Smuzhiyun bit[3]=0: VBIOS fast boot is disable 5100*4882a593Smuzhiyun =1: VBIOS fast boot is enable. ( VBIOS skip display device detection in every set mode if LCD panel is connect and LID is open) 5101*4882a593Smuzhiyun ulGPUCapInfo: bit[0]=0: TMDS/HDMI Coherent Mode use cascade PLL mode. 5102*4882a593Smuzhiyun =1: TMDS/HDMI Coherent Mode use signel PLL mode. 5103*4882a593Smuzhiyun bit[1]=0: DP mode use cascade PLL mode ( New for Trinity ) 5104*4882a593Smuzhiyun =1: DP mode use single PLL mode 5105*4882a593Smuzhiyun bit[3]=0: Enable AUX HW mode detection logic 5106*4882a593Smuzhiyun =1: Disable AUX HW mode detection logic 5107*4882a593Smuzhiyun 5108*4882a593Smuzhiyun ulSB_MMIO_Base_Addr: Physical Base address to SB MMIO space. Driver needs to initialize it for SMU usage. 5109*4882a593Smuzhiyun 5110*4882a593Smuzhiyun usRequestedPWMFreqInHz: When it's set to 0x0 by SBIOS: the LCD BackLight is not controlled by GPU(SW). 5111*4882a593Smuzhiyun Any attempt to change BL using VBIOS function or enable VariBri from PP table is not effective since ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==0; 5112*4882a593Smuzhiyun 5113*4882a593Smuzhiyun When it's set to a non-zero frequency, the BackLight is controlled by GPU (SW) in one of two ways below: 5114*4882a593Smuzhiyun 1. SW uses the GPU BL PWM output to control the BL, in chis case, this non-zero frequency determines what freq GPU should use; 5115*4882a593Smuzhiyun VBIOS will set up proper PWM frequency and ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==1,as the result, 5116*4882a593Smuzhiyun Changing BL using VBIOS function is functional in both driver and non-driver present environment; 5117*4882a593Smuzhiyun and enabling VariBri under the driver environment from PP table is optional. 5118*4882a593Smuzhiyun 5119*4882a593Smuzhiyun 2. SW uses other means to control BL (like DPCD),this non-zero frequency serves as a flag only indicating 5120*4882a593Smuzhiyun that BL control from GPU is expected. 5121*4882a593Smuzhiyun VBIOS will NOT set up PWM frequency but make ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==1 5122*4882a593Smuzhiyun Changing BL using VBIOS function could be functional in both driver and non-driver present environment,but 5123*4882a593Smuzhiyun it's per platform 5124*4882a593Smuzhiyun and enabling VariBri under the driver environment from PP table is optional. 5125*4882a593Smuzhiyun 5126*4882a593Smuzhiyun ucHtcTmpLmt: Refer to D18F3x64 bit[22:16], HtcTmpLmt. 5127*4882a593Smuzhiyun Threshold on value to enter HTC_active state. 5128*4882a593Smuzhiyun ucHtcHystLmt: Refer to D18F3x64 bit[27:24], HtcHystLmt. 5129*4882a593Smuzhiyun To calculate threshold off value to exit HTC_active state, which is Threshold on vlaue minus ucHtcHystLmt. 5130*4882a593Smuzhiyun ulMinEngineClock: Minimum SCLK allowed in 10kHz unit. This is calculated based on WRCK Fuse settings. 5131*4882a593Smuzhiyun ulSystemConfig: Bit[0]=0: PCIE Power Gating Disabled 5132*4882a593Smuzhiyun =1: PCIE Power Gating Enabled 5133*4882a593Smuzhiyun Bit[1]=0: DDR-DLL shut-down feature disabled. 5134*4882a593Smuzhiyun 1: DDR-DLL shut-down feature enabled. 5135*4882a593Smuzhiyun Bit[2]=0: DDR-PLL Power down feature disabled. 5136*4882a593Smuzhiyun 1: DDR-PLL Power down feature enabled. 5137*4882a593Smuzhiyun ulCPUCapInfo: TBD 5138*4882a593Smuzhiyun usNBP0Voltage: VID for voltage on NB P0 State 5139*4882a593Smuzhiyun usNBP1Voltage: VID for voltage on NB P1 State 5140*4882a593Smuzhiyun usNBP2Voltage: VID for voltage on NB P2 State 5141*4882a593Smuzhiyun usNBP3Voltage: VID for voltage on NB P3 State 5142*4882a593Smuzhiyun usBootUpNBVoltage: Voltage Index of GNB voltage configured by SBIOS, which is suffcient to support VBIOS DISPCLK requirement. 5143*4882a593Smuzhiyun usExtDispConnInfoOffset: Offset to sExtDispConnInfo inside the structure 5144*4882a593Smuzhiyun usPanelRefreshRateRange: Bit vector for LCD supported refresh rate range. If DRR is requestd by the platform, at least two bits need to be set 5145*4882a593Smuzhiyun to indicate a range. 5146*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_30Hz 0x0004 5147*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_40Hz 0x0008 5148*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_50Hz 0x0010 5149*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_60Hz 0x0020 5150*4882a593Smuzhiyun ucMemoryType: [3:0]=1:DDR1;=2:DDR2;=3:DDR3.[7:4] is reserved. 5151*4882a593Smuzhiyun ucUMAChannelNumber: System memory channel numbers. 5152*4882a593Smuzhiyun ulCSR_M3_ARB_CNTL_DEFAULT[10]: Arrays with values for CSR M3 arbiter for default 5153*4882a593Smuzhiyun ulCSR_M3_ARB_CNTL_UVD[10]: Arrays with values for CSR M3 arbiter for UVD playback. 5154*4882a593Smuzhiyun ulCSR_M3_ARB_CNTL_FS3D[10]: Arrays with values for CSR M3 arbiter for Full Screen 3D applications. 5155*4882a593Smuzhiyun sAvail_SCLK[5]: Arrays to provide availabe list of SLCK and corresponding voltage, order from low to high 5156*4882a593Smuzhiyun ulGMCRestoreResetTime: GMC power restore and GMC reset time to calculate data reconnection latency. Unit in ns. 5157*4882a593Smuzhiyun ulMinimumNClk: Minimum NCLK speed among all NB-Pstates to calcualte data reconnection latency. Unit in 10kHz. 5158*4882a593Smuzhiyun ulIdleNClk: NCLK speed while memory runs in self-refresh state. Unit in 10kHz. 5159*4882a593Smuzhiyun ulDDR_DLL_PowerUpTime: DDR PHY DLL power up time. Unit in ns. 5160*4882a593Smuzhiyun ulDDR_PLL_PowerUpTime: DDR PHY PLL power up time. Unit in ns. 5161*4882a593Smuzhiyun usPCIEClkSSPercentage: PCIE Clock Spread Spectrum Percentage in unit 0.01%; 100 mean 1%. 5162*4882a593Smuzhiyun usPCIEClkSSType: PCIE Clock Spread Spectrum Type. 0 for Down spread(default); 1 for Center spread. 5163*4882a593Smuzhiyun usLvdsSSPercentage: LVDS panel ( not include eDP ) Spread Spectrum Percentage in unit of 0.01%, =0, use VBIOS default setting. 5164*4882a593Smuzhiyun usLvdsSSpreadRateIn10Hz: LVDS panel ( not include eDP ) Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting. 5165*4882a593Smuzhiyun usHDMISSPercentage: HDMI Spread Spectrum Percentage in unit 0.01%; 100 mean 1%, =0, use VBIOS default setting. 5166*4882a593Smuzhiyun usHDMISSpreadRateIn10Hz: HDMI Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting. 5167*4882a593Smuzhiyun usDVISSPercentage: DVI Spread Spectrum Percentage in unit 0.01%; 100 mean 1%, =0, use VBIOS default setting. 5168*4882a593Smuzhiyun usDVISSpreadRateIn10Hz: DVI Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting. 5169*4882a593Smuzhiyun usMaxLVDSPclkFreqInSingleLink: Max pixel clock LVDS panel single link, if=0 means VBIOS use default threhold, right now it is 85Mhz 5170*4882a593Smuzhiyun ucLVDSMisc: [bit0] LVDS 888bit panel mode =0: LVDS 888 panel in LDI mode, =1: LVDS 888 panel in FPDI mode 5171*4882a593Smuzhiyun [bit1] LVDS panel lower and upper link mapping =0: lower link and upper link not swap, =1: lower link and upper link are swapped 5172*4882a593Smuzhiyun [bit2] LVDS 888bit per color mode =0: 666 bit per color =1:888 bit per color 5173*4882a593Smuzhiyun [bit3] LVDS parameter override enable =0: ucLvdsMisc parameter are not used =1: ucLvdsMisc parameter should be used 5174*4882a593Smuzhiyun [bit4] Polarity of signal sent to digital BLON output pin. =0: not inverted(active high) =1: inverted ( active low ) 5175*4882a593Smuzhiyun [bit5] Travid LVDS output voltage override enable, when =1, use ucTravisLVDSVolAdjust value to overwrite Traivs register LVDS_CTRL_4 5176*4882a593Smuzhiyun ucTravisLVDSVolAdjust When ucLVDSMisc[5]=1,it means platform SBIOS want to overwrite TravisLVDSVoltage. Then VBIOS will use ucTravisLVDSVolAdjust 5177*4882a593Smuzhiyun value to program Travis register LVDS_CTRL_4 5178*4882a593Smuzhiyun ucLVDSPwrOnSeqDIGONtoDE_in4Ms: LVDS power up sequence time in unit of 4ms, time delay from DIGON signal active to data enable signal active( DE ). 5179*4882a593Smuzhiyun =0 mean use VBIOS default which is 8 ( 32ms ). The LVDS power up sequence is as following: DIGON->DE->VARY_BL->BLON. 5180*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5181*4882a593Smuzhiyun ucLVDSPwrOnDEtoVARY_BL_in4Ms: LVDS power up sequence time in unit of 4ms., time delay from DE( data enable ) active to Vary Brightness enable signal active( VARY_BL ). 5182*4882a593Smuzhiyun =0 mean use VBIOS default which is 90 ( 360ms ). The LVDS power up sequence is as following: DIGON->DE->VARY_BL->BLON. 5183*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5184*4882a593Smuzhiyun 5185*4882a593Smuzhiyun ucLVDSPwrOffVARY_BLtoDE_in4Ms: LVDS power down sequence time in unit of 4ms, time delay from data enable ( DE ) signal off to LCDVCC (DIGON) off. 5186*4882a593Smuzhiyun =0 mean use VBIOS default delay which is 8 ( 32ms ). The LVDS power down sequence is as following: BLON->VARY_BL->DE->DIGON 5187*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5188*4882a593Smuzhiyun 5189*4882a593Smuzhiyun ucLVDSPwrOffDEtoDIGON_in4Ms: LVDS power down sequence time in unit of 4ms, time delay from vary brightness enable signal( VARY_BL) off to data enable ( DE ) signal off. 5190*4882a593Smuzhiyun =0 mean use VBIOS default which is 90 ( 360ms ). The LVDS power down sequence is as following: BLON->VARY_BL->DE->DIGON 5191*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5192*4882a593Smuzhiyun 5193*4882a593Smuzhiyun ucLVDSOffToOnDelay_in4Ms: LVDS power down sequence time in unit of 4ms. Time delay from DIGON signal off to DIGON signal active. 5194*4882a593Smuzhiyun =0 means to use VBIOS default delay which is 125 ( 500ms ). 5195*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5196*4882a593Smuzhiyun 5197*4882a593Smuzhiyun ucLVDSPwrOnSeqVARY_BLtoBLON_in4Ms: 5198*4882a593Smuzhiyun LVDS power up sequence time in unit of 4ms. Time delay from VARY_BL signal on to DLON signal active. 5199*4882a593Smuzhiyun =0 means to use VBIOS default delay which is 0 ( 0ms ). 5200*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5201*4882a593Smuzhiyun 5202*4882a593Smuzhiyun ucLVDSPwrOffSeqBLONtoVARY_BL_in4Ms: 5203*4882a593Smuzhiyun LVDS power down sequence time in unit of 4ms. Time delay from BLON signal off to VARY_BL signal off. 5204*4882a593Smuzhiyun =0 means to use VBIOS default delay which is 0 ( 0ms ). 5205*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5206*4882a593Smuzhiyun 5207*4882a593Smuzhiyun ucMinAllowedBL_Level: Lowest LCD backlight PWM level. This is customer platform specific parameters. By default it is 0. 5208*4882a593Smuzhiyun 5209*4882a593Smuzhiyun ulNbpStateMemclkFreq[4]: system memory clock frequncey in unit of 10Khz in different NB pstate. 5210*4882a593Smuzhiyun 5211*4882a593Smuzhiyun **********************************************************************************************************************/ 5212*4882a593Smuzhiyun 5213*4882a593Smuzhiyun // this IntegrateSystemInfoTable is used for Kaveri & Kabini APU 5214*4882a593Smuzhiyun typedef struct _ATOM_INTEGRATED_SYSTEM_INFO_V1_8 5215*4882a593Smuzhiyun { 5216*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 5217*4882a593Smuzhiyun ULONG ulBootUpEngineClock; 5218*4882a593Smuzhiyun ULONG ulDentistVCOFreq; 5219*4882a593Smuzhiyun ULONG ulBootUpUMAClock; 5220*4882a593Smuzhiyun ATOM_CLK_VOLT_CAPABILITY sDISPCLK_Voltage[4]; 5221*4882a593Smuzhiyun ULONG ulBootUpReqDisplayVector; 5222*4882a593Smuzhiyun ULONG ulVBIOSMisc; 5223*4882a593Smuzhiyun ULONG ulGPUCapInfo; 5224*4882a593Smuzhiyun ULONG ulDISP_CLK2Freq; 5225*4882a593Smuzhiyun USHORT usRequestedPWMFreqInHz; 5226*4882a593Smuzhiyun UCHAR ucHtcTmpLmt; 5227*4882a593Smuzhiyun UCHAR ucHtcHystLmt; 5228*4882a593Smuzhiyun ULONG ulReserved2; 5229*4882a593Smuzhiyun ULONG ulSystemConfig; 5230*4882a593Smuzhiyun ULONG ulCPUCapInfo; 5231*4882a593Smuzhiyun ULONG ulReserved3; 5232*4882a593Smuzhiyun USHORT usGPUReservedSysMemSize; 5233*4882a593Smuzhiyun USHORT usExtDispConnInfoOffset; 5234*4882a593Smuzhiyun USHORT usPanelRefreshRateRange; 5235*4882a593Smuzhiyun UCHAR ucMemoryType; 5236*4882a593Smuzhiyun UCHAR ucUMAChannelNumber; 5237*4882a593Smuzhiyun UCHAR strVBIOSMsg[40]; 5238*4882a593Smuzhiyun ATOM_TDP_CONFIG asTdpConfig; 5239*4882a593Smuzhiyun ULONG ulReserved[19]; 5240*4882a593Smuzhiyun ATOM_AVAILABLE_SCLK_LIST sAvail_SCLK[5]; 5241*4882a593Smuzhiyun ULONG ulGMCRestoreResetTime; 5242*4882a593Smuzhiyun ULONG ulReserved4; 5243*4882a593Smuzhiyun ULONG ulIdleNClk; 5244*4882a593Smuzhiyun ULONG ulDDR_DLL_PowerUpTime; 5245*4882a593Smuzhiyun ULONG ulDDR_PLL_PowerUpTime; 5246*4882a593Smuzhiyun USHORT usPCIEClkSSPercentage; 5247*4882a593Smuzhiyun USHORT usPCIEClkSSType; 5248*4882a593Smuzhiyun USHORT usLvdsSSPercentage; 5249*4882a593Smuzhiyun USHORT usLvdsSSpreadRateIn10Hz; 5250*4882a593Smuzhiyun USHORT usHDMISSPercentage; 5251*4882a593Smuzhiyun USHORT usHDMISSpreadRateIn10Hz; 5252*4882a593Smuzhiyun USHORT usDVISSPercentage; 5253*4882a593Smuzhiyun USHORT usDVISSpreadRateIn10Hz; 5254*4882a593Smuzhiyun ULONG ulGPUReservedSysMemBaseAddrLo; 5255*4882a593Smuzhiyun ULONG ulGPUReservedSysMemBaseAddrHi; 5256*4882a593Smuzhiyun ULONG ulReserved5[3]; 5257*4882a593Smuzhiyun USHORT usMaxLVDSPclkFreqInSingleLink; 5258*4882a593Smuzhiyun UCHAR ucLvdsMisc; 5259*4882a593Smuzhiyun UCHAR ucTravisLVDSVolAdjust; 5260*4882a593Smuzhiyun UCHAR ucLVDSPwrOnSeqDIGONtoDE_in4Ms; 5261*4882a593Smuzhiyun UCHAR ucLVDSPwrOnSeqDEtoVARY_BL_in4Ms; 5262*4882a593Smuzhiyun UCHAR ucLVDSPwrOffSeqVARY_BLtoDE_in4Ms; 5263*4882a593Smuzhiyun UCHAR ucLVDSPwrOffSeqDEtoDIGON_in4Ms; 5264*4882a593Smuzhiyun UCHAR ucLVDSOffToOnDelay_in4Ms; 5265*4882a593Smuzhiyun UCHAR ucLVDSPwrOnSeqVARY_BLtoBLON_in4Ms; 5266*4882a593Smuzhiyun UCHAR ucLVDSPwrOffSeqBLONtoVARY_BL_in4Ms; 5267*4882a593Smuzhiyun UCHAR ucMinAllowedBL_Level; 5268*4882a593Smuzhiyun ULONG ulLCDBitDepthControlVal; 5269*4882a593Smuzhiyun ULONG ulNbpStateMemclkFreq[4]; 5270*4882a593Smuzhiyun ULONG ulReserved6; 5271*4882a593Smuzhiyun ULONG ulNbpStateNClkFreq[4]; 5272*4882a593Smuzhiyun USHORT usNBPStateVoltage[4]; 5273*4882a593Smuzhiyun USHORT usBootUpNBVoltage; 5274*4882a593Smuzhiyun USHORT usReserved2; 5275*4882a593Smuzhiyun ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO sExtDispConnInfo; 5276*4882a593Smuzhiyun }ATOM_INTEGRATED_SYSTEM_INFO_V1_8; 5277*4882a593Smuzhiyun 5278*4882a593Smuzhiyun /********************************************************************************************************************** 5279*4882a593Smuzhiyun ATOM_INTEGRATED_SYSTEM_INFO_V1_8 Description 5280*4882a593Smuzhiyun ulBootUpEngineClock: VBIOS bootup Engine clock frequency, in 10kHz unit. if it is equal 0, then VBIOS use pre-defined bootup engine clock 5281*4882a593Smuzhiyun ulDentistVCOFreq: Dentist VCO clock in 10kHz unit. 5282*4882a593Smuzhiyun ulBootUpUMAClock: System memory boot up clock frequency in 10Khz unit. 5283*4882a593Smuzhiyun sDISPCLK_Voltage: Report Display clock frequency requirement on GNB voltage(up to 4 voltage levels). 5284*4882a593Smuzhiyun 5285*4882a593Smuzhiyun ulBootUpReqDisplayVector: VBIOS boot up display IDs, following are supported devices in Trinity projects: 5286*4882a593Smuzhiyun ATOM_DEVICE_CRT1_SUPPORT 0x0001 5287*4882a593Smuzhiyun ATOM_DEVICE_DFP1_SUPPORT 0x0008 5288*4882a593Smuzhiyun ATOM_DEVICE_DFP6_SUPPORT 0x0040 5289*4882a593Smuzhiyun ATOM_DEVICE_DFP2_SUPPORT 0x0080 5290*4882a593Smuzhiyun ATOM_DEVICE_DFP3_SUPPORT 0x0200 5291*4882a593Smuzhiyun ATOM_DEVICE_DFP4_SUPPORT 0x0400 5292*4882a593Smuzhiyun ATOM_DEVICE_DFP5_SUPPORT 0x0800 5293*4882a593Smuzhiyun ATOM_DEVICE_LCD1_SUPPORT 0x0002 5294*4882a593Smuzhiyun 5295*4882a593Smuzhiyun ulVBIOSMisc: Miscellenous flags for VBIOS requirement and interface 5296*4882a593Smuzhiyun bit[0]=0: INT15 callback function Get LCD EDID ( ax=4e08, bl=1b ) is not supported by SBIOS. 5297*4882a593Smuzhiyun =1: INT15 callback function Get LCD EDID ( ax=4e08, bl=1b ) is supported by SBIOS. 5298*4882a593Smuzhiyun bit[1]=0: INT15 callback function Get boot display( ax=4e08, bl=01h) is not supported by SBIOS 5299*4882a593Smuzhiyun =1: INT15 callback function Get boot display( ax=4e08, bl=01h) is supported by SBIOS 5300*4882a593Smuzhiyun bit[2]=0: INT15 callback function Get panel Expansion ( ax=4e08, bl=02h) is not supported by SBIOS 5301*4882a593Smuzhiyun =1: INT15 callback function Get panel Expansion ( ax=4e08, bl=02h) is supported by SBIOS 5302*4882a593Smuzhiyun bit[3]=0: VBIOS fast boot is disable 5303*4882a593Smuzhiyun =1: VBIOS fast boot is enable. ( VBIOS skip display device detection in every set mode if LCD panel is connect and LID is open) 5304*4882a593Smuzhiyun 5305*4882a593Smuzhiyun ulGPUCapInfo: bit[0~2]= Reserved 5306*4882a593Smuzhiyun bit[3]=0: Enable AUX HW mode detection logic 5307*4882a593Smuzhiyun =1: Disable AUX HW mode detection logic 5308*4882a593Smuzhiyun bit[4]=0: Disable DFS bypass feature 5309*4882a593Smuzhiyun =1: Enable DFS bypass feature 5310*4882a593Smuzhiyun 5311*4882a593Smuzhiyun usRequestedPWMFreqInHz: When it's set to 0x0 by SBIOS: the LCD BackLight is not controlled by GPU(SW). 5312*4882a593Smuzhiyun Any attempt to change BL using VBIOS function or enable VariBri from PP table is not effective since ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==0; 5313*4882a593Smuzhiyun 5314*4882a593Smuzhiyun When it's set to a non-zero frequency, the BackLight is controlled by GPU (SW) in one of two ways below: 5315*4882a593Smuzhiyun 1. SW uses the GPU BL PWM output to control the BL, in chis case, this non-zero frequency determines what freq GPU should use; 5316*4882a593Smuzhiyun VBIOS will set up proper PWM frequency and ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==1,as the result, 5317*4882a593Smuzhiyun Changing BL using VBIOS function is functional in both driver and non-driver present environment; 5318*4882a593Smuzhiyun and enabling VariBri under the driver environment from PP table is optional. 5319*4882a593Smuzhiyun 5320*4882a593Smuzhiyun 2. SW uses other means to control BL (like DPCD),this non-zero frequency serves as a flag only indicating 5321*4882a593Smuzhiyun that BL control from GPU is expected. 5322*4882a593Smuzhiyun VBIOS will NOT set up PWM frequency but make ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==1 5323*4882a593Smuzhiyun Changing BL using VBIOS function could be functional in both driver and non-driver present environment,but 5324*4882a593Smuzhiyun it's per platform 5325*4882a593Smuzhiyun and enabling VariBri under the driver environment from PP table is optional. 5326*4882a593Smuzhiyun 5327*4882a593Smuzhiyun ucHtcTmpLmt: Refer to D18F3x64 bit[22:16], HtcTmpLmt. Threshold on value to enter HTC_active state. 5328*4882a593Smuzhiyun ucHtcHystLmt: Refer to D18F3x64 bit[27:24], HtcHystLmt. 5329*4882a593Smuzhiyun To calculate threshold off value to exit HTC_active state, which is Threshold on vlaue minus ucHtcHystLmt. 5330*4882a593Smuzhiyun 5331*4882a593Smuzhiyun ulSystemConfig: Bit[0]=0: PCIE Power Gating Disabled 5332*4882a593Smuzhiyun =1: PCIE Power Gating Enabled 5333*4882a593Smuzhiyun Bit[1]=0: DDR-DLL shut-down feature disabled. 5334*4882a593Smuzhiyun 1: DDR-DLL shut-down feature enabled. 5335*4882a593Smuzhiyun Bit[2]=0: DDR-PLL Power down feature disabled. 5336*4882a593Smuzhiyun 1: DDR-PLL Power down feature enabled. 5337*4882a593Smuzhiyun Bit[3]=0: GNB DPM is disabled 5338*4882a593Smuzhiyun =1: GNB DPM is enabled 5339*4882a593Smuzhiyun ulCPUCapInfo: TBD 5340*4882a593Smuzhiyun 5341*4882a593Smuzhiyun usExtDispConnInfoOffset: Offset to sExtDispConnInfo inside the structure 5342*4882a593Smuzhiyun usPanelRefreshRateRange: Bit vector for LCD supported refresh rate range. If DRR is requestd by the platform, at least two bits need to be set 5343*4882a593Smuzhiyun to indicate a range. 5344*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_30Hz 0x0004 5345*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_40Hz 0x0008 5346*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_50Hz 0x0010 5347*4882a593Smuzhiyun SUPPORTED_LCD_REFRESHRATE_60Hz 0x0020 5348*4882a593Smuzhiyun 5349*4882a593Smuzhiyun ucMemoryType: [3:0]=1:DDR1;=2:DDR2;=3:DDR3;=5:GDDR5; [7:4] is reserved. 5350*4882a593Smuzhiyun ucUMAChannelNumber: System memory channel numbers. 5351*4882a593Smuzhiyun 5352*4882a593Smuzhiyun strVBIOSMsg[40]: VBIOS boot up customized message string 5353*4882a593Smuzhiyun 5354*4882a593Smuzhiyun sAvail_SCLK[5]: Arrays to provide availabe list of SLCK and corresponding voltage, order from low to high 5355*4882a593Smuzhiyun 5356*4882a593Smuzhiyun ulGMCRestoreResetTime: GMC power restore and GMC reset time to calculate data reconnection latency. Unit in ns. 5357*4882a593Smuzhiyun ulIdleNClk: NCLK speed while memory runs in self-refresh state, used to calculate self-refresh latency. Unit in 10kHz. 5358*4882a593Smuzhiyun ulDDR_DLL_PowerUpTime: DDR PHY DLL power up time. Unit in ns. 5359*4882a593Smuzhiyun ulDDR_PLL_PowerUpTime: DDR PHY PLL power up time. Unit in ns. 5360*4882a593Smuzhiyun 5361*4882a593Smuzhiyun usPCIEClkSSPercentage: PCIE Clock Spread Spectrum Percentage in unit 0.01%; 100 mean 1%. 5362*4882a593Smuzhiyun usPCIEClkSSType: PCIE Clock Spread Spectrum Type. 0 for Down spread(default); 1 for Center spread. 5363*4882a593Smuzhiyun usLvdsSSPercentage: LVDS panel ( not include eDP ) Spread Spectrum Percentage in unit of 0.01%, =0, use VBIOS default setting. 5364*4882a593Smuzhiyun usLvdsSSpreadRateIn10Hz: LVDS panel ( not include eDP ) Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting. 5365*4882a593Smuzhiyun usHDMISSPercentage: HDMI Spread Spectrum Percentage in unit 0.01%; 100 mean 1%, =0, use VBIOS default setting. 5366*4882a593Smuzhiyun usHDMISSpreadRateIn10Hz: HDMI Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting. 5367*4882a593Smuzhiyun usDVISSPercentage: DVI Spread Spectrum Percentage in unit 0.01%; 100 mean 1%, =0, use VBIOS default setting. 5368*4882a593Smuzhiyun usDVISSpreadRateIn10Hz: DVI Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting. 5369*4882a593Smuzhiyun 5370*4882a593Smuzhiyun usGPUReservedSysMemSize: Reserved system memory size for ACP engine in APU GNB, units in MB. 0/2/4MB based on CMOS options, current default could be 0MB. KV only, not on KB. 5371*4882a593Smuzhiyun ulGPUReservedSysMemBaseAddrLo: Low 32 bits base address to the reserved system memory. 5372*4882a593Smuzhiyun ulGPUReservedSysMemBaseAddrHi: High 32 bits base address to the reserved system memory. 5373*4882a593Smuzhiyun 5374*4882a593Smuzhiyun usMaxLVDSPclkFreqInSingleLink: Max pixel clock LVDS panel single link, if=0 means VBIOS use default threhold, right now it is 85Mhz 5375*4882a593Smuzhiyun ucLVDSMisc: [bit0] LVDS 888bit panel mode =0: LVDS 888 panel in LDI mode, =1: LVDS 888 panel in FPDI mode 5376*4882a593Smuzhiyun [bit1] LVDS panel lower and upper link mapping =0: lower link and upper link not swap, =1: lower link and upper link are swapped 5377*4882a593Smuzhiyun [bit2] LVDS 888bit per color mode =0: 666 bit per color =1:888 bit per color 5378*4882a593Smuzhiyun [bit3] LVDS parameter override enable =0: ucLvdsMisc parameter are not used =1: ucLvdsMisc parameter should be used 5379*4882a593Smuzhiyun [bit4] Polarity of signal sent to digital BLON output pin. =0: not inverted(active high) =1: inverted ( active low ) 5380*4882a593Smuzhiyun [bit5] Travid LVDS output voltage override enable, when =1, use ucTravisLVDSVolAdjust value to overwrite Traivs register LVDS_CTRL_4 5381*4882a593Smuzhiyun ucTravisLVDSVolAdjust When ucLVDSMisc[5]=1,it means platform SBIOS want to overwrite TravisLVDSVoltage. Then VBIOS will use ucTravisLVDSVolAdjust 5382*4882a593Smuzhiyun value to program Travis register LVDS_CTRL_4 5383*4882a593Smuzhiyun ucLVDSPwrOnSeqDIGONtoDE_in4Ms: 5384*4882a593Smuzhiyun LVDS power up sequence time in unit of 4ms, time delay from DIGON signal active to data enable signal active( DE ). 5385*4882a593Smuzhiyun =0 mean use VBIOS default which is 8 ( 32ms ). The LVDS power up sequence is as following: DIGON->DE->VARY_BL->BLON. 5386*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5387*4882a593Smuzhiyun ucLVDSPwrOnDEtoVARY_BL_in4Ms: 5388*4882a593Smuzhiyun LVDS power up sequence time in unit of 4ms., time delay from DE( data enable ) active to Vary Brightness enable signal active( VARY_BL ). 5389*4882a593Smuzhiyun =0 mean use VBIOS default which is 90 ( 360ms ). The LVDS power up sequence is as following: DIGON->DE->VARY_BL->BLON. 5390*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5391*4882a593Smuzhiyun ucLVDSPwrOffVARY_BLtoDE_in4Ms: 5392*4882a593Smuzhiyun LVDS power down sequence time in unit of 4ms, time delay from data enable ( DE ) signal off to LCDVCC (DIGON) off. 5393*4882a593Smuzhiyun =0 mean use VBIOS default delay which is 8 ( 32ms ). The LVDS power down sequence is as following: BLON->VARY_BL->DE->DIGON 5394*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5395*4882a593Smuzhiyun ucLVDSPwrOffDEtoDIGON_in4Ms: 5396*4882a593Smuzhiyun LVDS power down sequence time in unit of 4ms, time delay from vary brightness enable signal( VARY_BL) off to data enable ( DE ) signal off. 5397*4882a593Smuzhiyun =0 mean use VBIOS default which is 90 ( 360ms ). The LVDS power down sequence is as following: BLON->VARY_BL->DE->DIGON 5398*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5399*4882a593Smuzhiyun ucLVDSOffToOnDelay_in4Ms: 5400*4882a593Smuzhiyun LVDS power down sequence time in unit of 4ms. Time delay from DIGON signal off to DIGON signal active. 5401*4882a593Smuzhiyun =0 means to use VBIOS default delay which is 125 ( 500ms ). 5402*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5403*4882a593Smuzhiyun ucLVDSPwrOnSeqVARY_BLtoBLON_in4Ms: 5404*4882a593Smuzhiyun LVDS power up sequence time in unit of 4ms. Time delay from VARY_BL signal on to DLON signal active. 5405*4882a593Smuzhiyun =0 means to use VBIOS default delay which is 0 ( 0ms ). 5406*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5407*4882a593Smuzhiyun 5408*4882a593Smuzhiyun ucLVDSPwrOffSeqBLONtoVARY_BL_in4Ms: 5409*4882a593Smuzhiyun LVDS power down sequence time in unit of 4ms. Time delay from BLON signal off to VARY_BL signal off. 5410*4882a593Smuzhiyun =0 means to use VBIOS default delay which is 0 ( 0ms ). 5411*4882a593Smuzhiyun This parameter is used by VBIOS only. VBIOS will patch LVDS_InfoTable. 5412*4882a593Smuzhiyun ucMinAllowedBL_Level: Lowest LCD backlight PWM level. This is customer platform specific parameters. By default it is 0. 5413*4882a593Smuzhiyun 5414*4882a593Smuzhiyun ulLCDBitDepthControlVal: GPU display control encoder bit dither control setting, used to program register mmFMT_BIT_DEPTH_CONTROL 5415*4882a593Smuzhiyun 5416*4882a593Smuzhiyun ulNbpStateMemclkFreq[4]: system memory clock frequncey in unit of 10Khz in different NB P-State(P0, P1, P2 & P3). 5417*4882a593Smuzhiyun ulNbpStateNClkFreq[4]: NB P-State NClk frequency in different NB P-State 5418*4882a593Smuzhiyun usNBPStateVoltage[4]: NB P-State (P0/P1 & P2/P3) voltage; NBP3 refers to lowes voltage 5419*4882a593Smuzhiyun usBootUpNBVoltage: NB P-State voltage during boot up before driver loaded 5420*4882a593Smuzhiyun sExtDispConnInfo: Display connector information table provided to VBIOS 5421*4882a593Smuzhiyun 5422*4882a593Smuzhiyun **********************************************************************************************************************/ 5423*4882a593Smuzhiyun 5424*4882a593Smuzhiyun // this Table is used for Kaveri/Kabini APU 5425*4882a593Smuzhiyun typedef struct _ATOM_FUSION_SYSTEM_INFO_V2 5426*4882a593Smuzhiyun { 5427*4882a593Smuzhiyun ATOM_INTEGRATED_SYSTEM_INFO_V1_8 sIntegratedSysInfo; // refer to ATOM_INTEGRATED_SYSTEM_INFO_V1_8 definition 5428*4882a593Smuzhiyun ULONG ulPowerplayTable[128]; // Update comments here to link new powerplay table definition structure 5429*4882a593Smuzhiyun }ATOM_FUSION_SYSTEM_INFO_V2; 5430*4882a593Smuzhiyun 5431*4882a593Smuzhiyun 5432*4882a593Smuzhiyun /**************************************************************************/ 5433*4882a593Smuzhiyun // This portion is only used when ext thermal chip or engine/memory clock SS chip is populated on a design 5434*4882a593Smuzhiyun //Memory SS Info Table 5435*4882a593Smuzhiyun //Define Memory Clock SS chip ID 5436*4882a593Smuzhiyun #define ICS91719 1 5437*4882a593Smuzhiyun #define ICS91720 2 5438*4882a593Smuzhiyun 5439*4882a593Smuzhiyun //Define one structure to inform SW a "block of data" writing to external SS chip via I2C protocol 5440*4882a593Smuzhiyun typedef struct _ATOM_I2C_DATA_RECORD 5441*4882a593Smuzhiyun { 5442*4882a593Smuzhiyun UCHAR ucNunberOfBytes; //Indicates how many bytes SW needs to write to the external ASIC for one block, besides to "Start" and "Stop" 5443*4882a593Smuzhiyun UCHAR ucI2CData[1]; //I2C data in bytes, should be less than 16 bytes usually 5444*4882a593Smuzhiyun }ATOM_I2C_DATA_RECORD; 5445*4882a593Smuzhiyun 5446*4882a593Smuzhiyun 5447*4882a593Smuzhiyun //Define one structure to inform SW how many blocks of data writing to external SS chip via I2C protocol, in addition to other information 5448*4882a593Smuzhiyun typedef struct _ATOM_I2C_DEVICE_SETUP_INFO 5449*4882a593Smuzhiyun { 5450*4882a593Smuzhiyun ATOM_I2C_ID_CONFIG_ACCESS sucI2cId; //I2C line and HW/SW assisted cap. 5451*4882a593Smuzhiyun UCHAR ucSSChipID; //SS chip being used 5452*4882a593Smuzhiyun UCHAR ucSSChipSlaveAddr; //Slave Address to set up this SS chip 5453*4882a593Smuzhiyun UCHAR ucNumOfI2CDataRecords; //number of data block 5454*4882a593Smuzhiyun ATOM_I2C_DATA_RECORD asI2CData[1]; 5455*4882a593Smuzhiyun }ATOM_I2C_DEVICE_SETUP_INFO; 5456*4882a593Smuzhiyun 5457*4882a593Smuzhiyun //========================================================================================== 5458*4882a593Smuzhiyun typedef struct _ATOM_ASIC_MVDD_INFO 5459*4882a593Smuzhiyun { 5460*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 5461*4882a593Smuzhiyun ATOM_I2C_DEVICE_SETUP_INFO asI2CSetup[1]; 5462*4882a593Smuzhiyun }ATOM_ASIC_MVDD_INFO; 5463*4882a593Smuzhiyun 5464*4882a593Smuzhiyun //========================================================================================== 5465*4882a593Smuzhiyun #define ATOM_MCLK_SS_INFO ATOM_ASIC_MVDD_INFO 5466*4882a593Smuzhiyun 5467*4882a593Smuzhiyun //========================================================================================== 5468*4882a593Smuzhiyun /**************************************************************************/ 5469*4882a593Smuzhiyun 5470*4882a593Smuzhiyun typedef struct _ATOM_ASIC_SS_ASSIGNMENT 5471*4882a593Smuzhiyun { 5472*4882a593Smuzhiyun ULONG ulTargetClockRange; //Clock Out frequence (VCO ), in unit of 10Khz 5473*4882a593Smuzhiyun USHORT usSpreadSpectrumPercentage; //in unit of 0.01% 5474*4882a593Smuzhiyun USHORT usSpreadRateInKhz; //in unit of kHz, modulation freq 5475*4882a593Smuzhiyun UCHAR ucClockIndication; //Indicate which clock source needs SS 5476*4882a593Smuzhiyun UCHAR ucSpreadSpectrumMode; //Bit1=0 Down Spread,=1 Center Spread. 5477*4882a593Smuzhiyun UCHAR ucReserved[2]; 5478*4882a593Smuzhiyun }ATOM_ASIC_SS_ASSIGNMENT; 5479*4882a593Smuzhiyun 5480*4882a593Smuzhiyun //Define ucClockIndication, SW uses the IDs below to search if the SS is required/enabled on a clock branch/signal type. 5481*4882a593Smuzhiyun //SS is not required or enabled if a match is not found. 5482*4882a593Smuzhiyun #define ASIC_INTERNAL_MEMORY_SS 1 5483*4882a593Smuzhiyun #define ASIC_INTERNAL_ENGINE_SS 2 5484*4882a593Smuzhiyun #define ASIC_INTERNAL_UVD_SS 3 5485*4882a593Smuzhiyun #define ASIC_INTERNAL_SS_ON_TMDS 4 5486*4882a593Smuzhiyun #define ASIC_INTERNAL_SS_ON_HDMI 5 5487*4882a593Smuzhiyun #define ASIC_INTERNAL_SS_ON_LVDS 6 5488*4882a593Smuzhiyun #define ASIC_INTERNAL_SS_ON_DP 7 5489*4882a593Smuzhiyun #define ASIC_INTERNAL_SS_ON_DCPLL 8 5490*4882a593Smuzhiyun #define ASIC_EXTERNAL_SS_ON_DP_CLOCK 9 5491*4882a593Smuzhiyun #define ASIC_INTERNAL_VCE_SS 10 5492*4882a593Smuzhiyun #define ASIC_INTERNAL_GPUPLL_SS 11 5493*4882a593Smuzhiyun 5494*4882a593Smuzhiyun 5495*4882a593Smuzhiyun typedef struct _ATOM_ASIC_SS_ASSIGNMENT_V2 5496*4882a593Smuzhiyun { 5497*4882a593Smuzhiyun ULONG ulTargetClockRange; //For mem/engine/uvd, Clock Out frequence (VCO ), in unit of 10Khz 5498*4882a593Smuzhiyun //For TMDS/HDMI/LVDS, it is pixel clock , for DP, it is link clock ( 27000 or 16200 ) 5499*4882a593Smuzhiyun USHORT usSpreadSpectrumPercentage; //in unit of 0.01% or 0.001%, decided by ucSpreadSpectrumMode bit4 5500*4882a593Smuzhiyun USHORT usSpreadRateIn10Hz; //in unit of 10Hz, modulation freq 5501*4882a593Smuzhiyun UCHAR ucClockIndication; //Indicate which clock source needs SS 5502*4882a593Smuzhiyun UCHAR ucSpreadSpectrumMode; //Bit0=0 Down Spread,=1 Center Spread, bit1=0: internal SS bit1=1: external SS 5503*4882a593Smuzhiyun UCHAR ucReserved[2]; 5504*4882a593Smuzhiyun }ATOM_ASIC_SS_ASSIGNMENT_V2; 5505*4882a593Smuzhiyun 5506*4882a593Smuzhiyun //ucSpreadSpectrumMode 5507*4882a593Smuzhiyun //#define ATOM_SS_DOWN_SPREAD_MODE_MASK 0x00000000 5508*4882a593Smuzhiyun //#define ATOM_SS_DOWN_SPREAD_MODE 0x00000000 5509*4882a593Smuzhiyun //#define ATOM_SS_CENTRE_SPREAD_MODE_MASK 0x00000001 5510*4882a593Smuzhiyun //#define ATOM_SS_CENTRE_SPREAD_MODE 0x00000001 5511*4882a593Smuzhiyun //#define ATOM_INTERNAL_SS_MASK 0x00000000 5512*4882a593Smuzhiyun //#define ATOM_EXTERNAL_SS_MASK 0x00000002 5513*4882a593Smuzhiyun 5514*4882a593Smuzhiyun typedef struct _ATOM_ASIC_INTERNAL_SS_INFO 5515*4882a593Smuzhiyun { 5516*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 5517*4882a593Smuzhiyun ATOM_ASIC_SS_ASSIGNMENT asSpreadSpectrum[4]; 5518*4882a593Smuzhiyun }ATOM_ASIC_INTERNAL_SS_INFO; 5519*4882a593Smuzhiyun 5520*4882a593Smuzhiyun typedef struct _ATOM_ASIC_INTERNAL_SS_INFO_V2 5521*4882a593Smuzhiyun { 5522*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 5523*4882a593Smuzhiyun ATOM_ASIC_SS_ASSIGNMENT_V2 asSpreadSpectrum[1]; //this is point only. 5524*4882a593Smuzhiyun }ATOM_ASIC_INTERNAL_SS_INFO_V2; 5525*4882a593Smuzhiyun 5526*4882a593Smuzhiyun typedef struct _ATOM_ASIC_SS_ASSIGNMENT_V3 5527*4882a593Smuzhiyun { 5528*4882a593Smuzhiyun ULONG ulTargetClockRange; //For mem/engine/uvd, Clock Out frequence (VCO ), in unit of 10Khz 5529*4882a593Smuzhiyun //For TMDS/HDMI/LVDS, it is pixel clock , for DP, it is link clock ( 27000 or 16200 ) 5530*4882a593Smuzhiyun USHORT usSpreadSpectrumPercentage; //in unit of 0.01% 5531*4882a593Smuzhiyun USHORT usSpreadRateIn10Hz; //in unit of 10Hz, modulation freq 5532*4882a593Smuzhiyun UCHAR ucClockIndication; //Indicate which clock source needs SS 5533*4882a593Smuzhiyun UCHAR ucSpreadSpectrumMode; //Bit0=0 Down Spread,=1 Center Spread, bit1=0: internal SS bit1=1: external SS 5534*4882a593Smuzhiyun UCHAR ucReserved[2]; 5535*4882a593Smuzhiyun }ATOM_ASIC_SS_ASSIGNMENT_V3; 5536*4882a593Smuzhiyun 5537*4882a593Smuzhiyun //ATOM_ASIC_SS_ASSIGNMENT_V3.ucSpreadSpectrumMode 5538*4882a593Smuzhiyun #define SS_MODE_V3_CENTRE_SPREAD_MASK 0x01 5539*4882a593Smuzhiyun #define SS_MODE_V3_EXTERNAL_SS_MASK 0x02 5540*4882a593Smuzhiyun #define SS_MODE_V3_PERCENTAGE_DIV_BY_1000_MASK 0x10 5541*4882a593Smuzhiyun 5542*4882a593Smuzhiyun typedef struct _ATOM_ASIC_INTERNAL_SS_INFO_V3 5543*4882a593Smuzhiyun { 5544*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 5545*4882a593Smuzhiyun ATOM_ASIC_SS_ASSIGNMENT_V3 asSpreadSpectrum[1]; //this is pointer only. 5546*4882a593Smuzhiyun }ATOM_ASIC_INTERNAL_SS_INFO_V3; 5547*4882a593Smuzhiyun 5548*4882a593Smuzhiyun 5549*4882a593Smuzhiyun //==============================Scratch Pad Definition Portion=============================== 5550*4882a593Smuzhiyun #define ATOM_DEVICE_CONNECT_INFO_DEF 0 5551*4882a593Smuzhiyun #define ATOM_ROM_LOCATION_DEF 1 5552*4882a593Smuzhiyun #define ATOM_TV_STANDARD_DEF 2 5553*4882a593Smuzhiyun #define ATOM_ACTIVE_INFO_DEF 3 5554*4882a593Smuzhiyun #define ATOM_LCD_INFO_DEF 4 5555*4882a593Smuzhiyun #define ATOM_DOS_REQ_INFO_DEF 5 5556*4882a593Smuzhiyun #define ATOM_ACC_CHANGE_INFO_DEF 6 5557*4882a593Smuzhiyun #define ATOM_DOS_MODE_INFO_DEF 7 5558*4882a593Smuzhiyun #define ATOM_I2C_CHANNEL_STATUS_DEF 8 5559*4882a593Smuzhiyun #define ATOM_I2C_CHANNEL_STATUS1_DEF 9 5560*4882a593Smuzhiyun #define ATOM_INTERNAL_TIMER_DEF 10 5561*4882a593Smuzhiyun 5562*4882a593Smuzhiyun // BIOS_0_SCRATCH Definition 5563*4882a593Smuzhiyun #define ATOM_S0_CRT1_MONO 0x00000001L 5564*4882a593Smuzhiyun #define ATOM_S0_CRT1_COLOR 0x00000002L 5565*4882a593Smuzhiyun #define ATOM_S0_CRT1_MASK (ATOM_S0_CRT1_MONO+ATOM_S0_CRT1_COLOR) 5566*4882a593Smuzhiyun 5567*4882a593Smuzhiyun #define ATOM_S0_TV1_COMPOSITE_A 0x00000004L 5568*4882a593Smuzhiyun #define ATOM_S0_TV1_SVIDEO_A 0x00000008L 5569*4882a593Smuzhiyun #define ATOM_S0_TV1_MASK_A (ATOM_S0_TV1_COMPOSITE_A+ATOM_S0_TV1_SVIDEO_A) 5570*4882a593Smuzhiyun 5571*4882a593Smuzhiyun #define ATOM_S0_CV_A 0x00000010L 5572*4882a593Smuzhiyun #define ATOM_S0_CV_DIN_A 0x00000020L 5573*4882a593Smuzhiyun #define ATOM_S0_CV_MASK_A (ATOM_S0_CV_A+ATOM_S0_CV_DIN_A) 5574*4882a593Smuzhiyun 5575*4882a593Smuzhiyun 5576*4882a593Smuzhiyun #define ATOM_S0_CRT2_MONO 0x00000100L 5577*4882a593Smuzhiyun #define ATOM_S0_CRT2_COLOR 0x00000200L 5578*4882a593Smuzhiyun #define ATOM_S0_CRT2_MASK (ATOM_S0_CRT2_MONO+ATOM_S0_CRT2_COLOR) 5579*4882a593Smuzhiyun 5580*4882a593Smuzhiyun #define ATOM_S0_TV1_COMPOSITE 0x00000400L 5581*4882a593Smuzhiyun #define ATOM_S0_TV1_SVIDEO 0x00000800L 5582*4882a593Smuzhiyun #define ATOM_S0_TV1_SCART 0x00004000L 5583*4882a593Smuzhiyun #define ATOM_S0_TV1_MASK (ATOM_S0_TV1_COMPOSITE+ATOM_S0_TV1_SVIDEO+ATOM_S0_TV1_SCART) 5584*4882a593Smuzhiyun 5585*4882a593Smuzhiyun #define ATOM_S0_CV 0x00001000L 5586*4882a593Smuzhiyun #define ATOM_S0_CV_DIN 0x00002000L 5587*4882a593Smuzhiyun #define ATOM_S0_CV_MASK (ATOM_S0_CV+ATOM_S0_CV_DIN) 5588*4882a593Smuzhiyun 5589*4882a593Smuzhiyun #define ATOM_S0_DFP1 0x00010000L 5590*4882a593Smuzhiyun #define ATOM_S0_DFP2 0x00020000L 5591*4882a593Smuzhiyun #define ATOM_S0_LCD1 0x00040000L 5592*4882a593Smuzhiyun #define ATOM_S0_LCD2 0x00080000L 5593*4882a593Smuzhiyun #define ATOM_S0_DFP6 0x00100000L 5594*4882a593Smuzhiyun #define ATOM_S0_DFP3 0x00200000L 5595*4882a593Smuzhiyun #define ATOM_S0_DFP4 0x00400000L 5596*4882a593Smuzhiyun #define ATOM_S0_DFP5 0x00800000L 5597*4882a593Smuzhiyun 5598*4882a593Smuzhiyun #define ATOM_S0_DFP_MASK ATOM_S0_DFP1 | ATOM_S0_DFP2 | ATOM_S0_DFP3 | ATOM_S0_DFP4 | ATOM_S0_DFP5 | ATOM_S0_DFP6 5599*4882a593Smuzhiyun 5600*4882a593Smuzhiyun #define ATOM_S0_FAD_REGISTER_BUG 0x02000000L // If set, indicates we are running a PCIE asic with 5601*4882a593Smuzhiyun // the FAD/HDP reg access bug. Bit is read by DAL, this is obsolete from RV5xx 5602*4882a593Smuzhiyun 5603*4882a593Smuzhiyun #define ATOM_S0_THERMAL_STATE_MASK 0x1C000000L 5604*4882a593Smuzhiyun #define ATOM_S0_THERMAL_STATE_SHIFT 26 5605*4882a593Smuzhiyun 5606*4882a593Smuzhiyun #define ATOM_S0_SYSTEM_POWER_STATE_MASK 0xE0000000L 5607*4882a593Smuzhiyun #define ATOM_S0_SYSTEM_POWER_STATE_SHIFT 29 5608*4882a593Smuzhiyun 5609*4882a593Smuzhiyun #define ATOM_S0_SYSTEM_POWER_STATE_VALUE_AC 1 5610*4882a593Smuzhiyun #define ATOM_S0_SYSTEM_POWER_STATE_VALUE_DC 2 5611*4882a593Smuzhiyun #define ATOM_S0_SYSTEM_POWER_STATE_VALUE_LITEAC 3 5612*4882a593Smuzhiyun #define ATOM_S0_SYSTEM_POWER_STATE_VALUE_LIT2AC 4 5613*4882a593Smuzhiyun 5614*4882a593Smuzhiyun //Byte aligned definition for BIOS usage 5615*4882a593Smuzhiyun #define ATOM_S0_CRT1_MONOb0 0x01 5616*4882a593Smuzhiyun #define ATOM_S0_CRT1_COLORb0 0x02 5617*4882a593Smuzhiyun #define ATOM_S0_CRT1_MASKb0 (ATOM_S0_CRT1_MONOb0+ATOM_S0_CRT1_COLORb0) 5618*4882a593Smuzhiyun 5619*4882a593Smuzhiyun #define ATOM_S0_TV1_COMPOSITEb0 0x04 5620*4882a593Smuzhiyun #define ATOM_S0_TV1_SVIDEOb0 0x08 5621*4882a593Smuzhiyun #define ATOM_S0_TV1_MASKb0 (ATOM_S0_TV1_COMPOSITEb0+ATOM_S0_TV1_SVIDEOb0) 5622*4882a593Smuzhiyun 5623*4882a593Smuzhiyun #define ATOM_S0_CVb0 0x10 5624*4882a593Smuzhiyun #define ATOM_S0_CV_DINb0 0x20 5625*4882a593Smuzhiyun #define ATOM_S0_CV_MASKb0 (ATOM_S0_CVb0+ATOM_S0_CV_DINb0) 5626*4882a593Smuzhiyun 5627*4882a593Smuzhiyun #define ATOM_S0_CRT2_MONOb1 0x01 5628*4882a593Smuzhiyun #define ATOM_S0_CRT2_COLORb1 0x02 5629*4882a593Smuzhiyun #define ATOM_S0_CRT2_MASKb1 (ATOM_S0_CRT2_MONOb1+ATOM_S0_CRT2_COLORb1) 5630*4882a593Smuzhiyun 5631*4882a593Smuzhiyun #define ATOM_S0_TV1_COMPOSITEb1 0x04 5632*4882a593Smuzhiyun #define ATOM_S0_TV1_SVIDEOb1 0x08 5633*4882a593Smuzhiyun #define ATOM_S0_TV1_SCARTb1 0x40 5634*4882a593Smuzhiyun #define ATOM_S0_TV1_MASKb1 (ATOM_S0_TV1_COMPOSITEb1+ATOM_S0_TV1_SVIDEOb1+ATOM_S0_TV1_SCARTb1) 5635*4882a593Smuzhiyun 5636*4882a593Smuzhiyun #define ATOM_S0_CVb1 0x10 5637*4882a593Smuzhiyun #define ATOM_S0_CV_DINb1 0x20 5638*4882a593Smuzhiyun #define ATOM_S0_CV_MASKb1 (ATOM_S0_CVb1+ATOM_S0_CV_DINb1) 5639*4882a593Smuzhiyun 5640*4882a593Smuzhiyun #define ATOM_S0_DFP1b2 0x01 5641*4882a593Smuzhiyun #define ATOM_S0_DFP2b2 0x02 5642*4882a593Smuzhiyun #define ATOM_S0_LCD1b2 0x04 5643*4882a593Smuzhiyun #define ATOM_S0_LCD2b2 0x08 5644*4882a593Smuzhiyun #define ATOM_S0_DFP6b2 0x10 5645*4882a593Smuzhiyun #define ATOM_S0_DFP3b2 0x20 5646*4882a593Smuzhiyun #define ATOM_S0_DFP4b2 0x40 5647*4882a593Smuzhiyun #define ATOM_S0_DFP5b2 0x80 5648*4882a593Smuzhiyun 5649*4882a593Smuzhiyun 5650*4882a593Smuzhiyun #define ATOM_S0_THERMAL_STATE_MASKb3 0x1C 5651*4882a593Smuzhiyun #define ATOM_S0_THERMAL_STATE_SHIFTb3 2 5652*4882a593Smuzhiyun 5653*4882a593Smuzhiyun #define ATOM_S0_SYSTEM_POWER_STATE_MASKb3 0xE0 5654*4882a593Smuzhiyun #define ATOM_S0_LCD1_SHIFT 18 5655*4882a593Smuzhiyun 5656*4882a593Smuzhiyun // BIOS_1_SCRATCH Definition 5657*4882a593Smuzhiyun #define ATOM_S1_ROM_LOCATION_MASK 0x0000FFFFL 5658*4882a593Smuzhiyun #define ATOM_S1_PCI_BUS_DEV_MASK 0xFFFF0000L 5659*4882a593Smuzhiyun 5660*4882a593Smuzhiyun // BIOS_2_SCRATCH Definition 5661*4882a593Smuzhiyun #define ATOM_S2_TV1_STANDARD_MASK 0x0000000FL 5662*4882a593Smuzhiyun #define ATOM_S2_CURRENT_BL_LEVEL_MASK 0x0000FF00L 5663*4882a593Smuzhiyun #define ATOM_S2_CURRENT_BL_LEVEL_SHIFT 8 5664*4882a593Smuzhiyun 5665*4882a593Smuzhiyun #define ATOM_S2_FORCEDLOWPWRMODE_STATE_MASK 0x0C000000L 5666*4882a593Smuzhiyun #define ATOM_S2_FORCEDLOWPWRMODE_STATE_MASK_SHIFT 26 5667*4882a593Smuzhiyun #define ATOM_S2_FORCEDLOWPWRMODE_STATE_CHANGE 0x10000000L 5668*4882a593Smuzhiyun 5669*4882a593Smuzhiyun #define ATOM_S2_DEVICE_DPMS_STATE 0x00010000L 5670*4882a593Smuzhiyun #define ATOM_S2_VRI_BRIGHT_ENABLE 0x20000000L 5671*4882a593Smuzhiyun 5672*4882a593Smuzhiyun #define ATOM_S2_DISPLAY_ROTATION_0_DEGREE 0x0 5673*4882a593Smuzhiyun #define ATOM_S2_DISPLAY_ROTATION_90_DEGREE 0x1 5674*4882a593Smuzhiyun #define ATOM_S2_DISPLAY_ROTATION_180_DEGREE 0x2 5675*4882a593Smuzhiyun #define ATOM_S2_DISPLAY_ROTATION_270_DEGREE 0x3 5676*4882a593Smuzhiyun #define ATOM_S2_DISPLAY_ROTATION_DEGREE_SHIFT 30 5677*4882a593Smuzhiyun #define ATOM_S2_DISPLAY_ROTATION_ANGLE_MASK 0xC0000000L 5678*4882a593Smuzhiyun 5679*4882a593Smuzhiyun 5680*4882a593Smuzhiyun //Byte aligned definition for BIOS usage 5681*4882a593Smuzhiyun #define ATOM_S2_TV1_STANDARD_MASKb0 0x0F 5682*4882a593Smuzhiyun #define ATOM_S2_CURRENT_BL_LEVEL_MASKb1 0xFF 5683*4882a593Smuzhiyun #define ATOM_S2_DEVICE_DPMS_STATEb2 0x01 5684*4882a593Smuzhiyun 5685*4882a593Smuzhiyun #define ATOM_S2_DEVICE_DPMS_MASKw1 0x3FF 5686*4882a593Smuzhiyun #define ATOM_S2_FORCEDLOWPWRMODE_STATE_MASKb3 0x0C 5687*4882a593Smuzhiyun #define ATOM_S2_FORCEDLOWPWRMODE_STATE_CHANGEb3 0x10 5688*4882a593Smuzhiyun #define ATOM_S2_TMDS_COHERENT_MODEb3 0x10 // used by VBIOS code only, use coherent mode for TMDS/HDMI mode 5689*4882a593Smuzhiyun #define ATOM_S2_VRI_BRIGHT_ENABLEb3 0x20 5690*4882a593Smuzhiyun #define ATOM_S2_ROTATION_STATE_MASKb3 0xC0 5691*4882a593Smuzhiyun 5692*4882a593Smuzhiyun 5693*4882a593Smuzhiyun // BIOS_3_SCRATCH Definition 5694*4882a593Smuzhiyun #define ATOM_S3_CRT1_ACTIVE 0x00000001L 5695*4882a593Smuzhiyun #define ATOM_S3_LCD1_ACTIVE 0x00000002L 5696*4882a593Smuzhiyun #define ATOM_S3_TV1_ACTIVE 0x00000004L 5697*4882a593Smuzhiyun #define ATOM_S3_DFP1_ACTIVE 0x00000008L 5698*4882a593Smuzhiyun #define ATOM_S3_CRT2_ACTIVE 0x00000010L 5699*4882a593Smuzhiyun #define ATOM_S3_LCD2_ACTIVE 0x00000020L 5700*4882a593Smuzhiyun #define ATOM_S3_DFP6_ACTIVE 0x00000040L 5701*4882a593Smuzhiyun #define ATOM_S3_DFP2_ACTIVE 0x00000080L 5702*4882a593Smuzhiyun #define ATOM_S3_CV_ACTIVE 0x00000100L 5703*4882a593Smuzhiyun #define ATOM_S3_DFP3_ACTIVE 0x00000200L 5704*4882a593Smuzhiyun #define ATOM_S3_DFP4_ACTIVE 0x00000400L 5705*4882a593Smuzhiyun #define ATOM_S3_DFP5_ACTIVE 0x00000800L 5706*4882a593Smuzhiyun 5707*4882a593Smuzhiyun #define ATOM_S3_DEVICE_ACTIVE_MASK 0x00000FFFL 5708*4882a593Smuzhiyun 5709*4882a593Smuzhiyun #define ATOM_S3_LCD_FULLEXPANSION_ACTIVE 0x00001000L 5710*4882a593Smuzhiyun #define ATOM_S3_LCD_EXPANSION_ASPEC_RATIO_ACTIVE 0x00002000L 5711*4882a593Smuzhiyun 5712*4882a593Smuzhiyun #define ATOM_S3_CRT1_CRTC_ACTIVE 0x00010000L 5713*4882a593Smuzhiyun #define ATOM_S3_LCD1_CRTC_ACTIVE 0x00020000L 5714*4882a593Smuzhiyun #define ATOM_S3_TV1_CRTC_ACTIVE 0x00040000L 5715*4882a593Smuzhiyun #define ATOM_S3_DFP1_CRTC_ACTIVE 0x00080000L 5716*4882a593Smuzhiyun #define ATOM_S3_CRT2_CRTC_ACTIVE 0x00100000L 5717*4882a593Smuzhiyun #define ATOM_S3_LCD2_CRTC_ACTIVE 0x00200000L 5718*4882a593Smuzhiyun #define ATOM_S3_DFP6_CRTC_ACTIVE 0x00400000L 5719*4882a593Smuzhiyun #define ATOM_S3_DFP2_CRTC_ACTIVE 0x00800000L 5720*4882a593Smuzhiyun #define ATOM_S3_CV_CRTC_ACTIVE 0x01000000L 5721*4882a593Smuzhiyun #define ATOM_S3_DFP3_CRTC_ACTIVE 0x02000000L 5722*4882a593Smuzhiyun #define ATOM_S3_DFP4_CRTC_ACTIVE 0x04000000L 5723*4882a593Smuzhiyun #define ATOM_S3_DFP5_CRTC_ACTIVE 0x08000000L 5724*4882a593Smuzhiyun 5725*4882a593Smuzhiyun #define ATOM_S3_DEVICE_CRTC_ACTIVE_MASK 0x0FFF0000L 5726*4882a593Smuzhiyun #define ATOM_S3_ASIC_GUI_ENGINE_HUNG 0x20000000L 5727*4882a593Smuzhiyun //Below two definitions are not supported in pplib, but in the old powerplay in DAL 5728*4882a593Smuzhiyun #define ATOM_S3_ALLOW_FAST_PWR_SWITCH 0x40000000L 5729*4882a593Smuzhiyun #define ATOM_S3_RQST_GPU_USE_MIN_PWR 0x80000000L 5730*4882a593Smuzhiyun 5731*4882a593Smuzhiyun //Byte aligned definition for BIOS usage 5732*4882a593Smuzhiyun #define ATOM_S3_CRT1_ACTIVEb0 0x01 5733*4882a593Smuzhiyun #define ATOM_S3_LCD1_ACTIVEb0 0x02 5734*4882a593Smuzhiyun #define ATOM_S3_TV1_ACTIVEb0 0x04 5735*4882a593Smuzhiyun #define ATOM_S3_DFP1_ACTIVEb0 0x08 5736*4882a593Smuzhiyun #define ATOM_S3_CRT2_ACTIVEb0 0x10 5737*4882a593Smuzhiyun #define ATOM_S3_LCD2_ACTIVEb0 0x20 5738*4882a593Smuzhiyun #define ATOM_S3_DFP6_ACTIVEb0 0x40 5739*4882a593Smuzhiyun #define ATOM_S3_DFP2_ACTIVEb0 0x80 5740*4882a593Smuzhiyun #define ATOM_S3_CV_ACTIVEb1 0x01 5741*4882a593Smuzhiyun #define ATOM_S3_DFP3_ACTIVEb1 0x02 5742*4882a593Smuzhiyun #define ATOM_S3_DFP4_ACTIVEb1 0x04 5743*4882a593Smuzhiyun #define ATOM_S3_DFP5_ACTIVEb1 0x08 5744*4882a593Smuzhiyun 5745*4882a593Smuzhiyun #define ATOM_S3_ACTIVE_CRTC1w0 0xFFF 5746*4882a593Smuzhiyun 5747*4882a593Smuzhiyun #define ATOM_S3_CRT1_CRTC_ACTIVEb2 0x01 5748*4882a593Smuzhiyun #define ATOM_S3_LCD1_CRTC_ACTIVEb2 0x02 5749*4882a593Smuzhiyun #define ATOM_S3_TV1_CRTC_ACTIVEb2 0x04 5750*4882a593Smuzhiyun #define ATOM_S3_DFP1_CRTC_ACTIVEb2 0x08 5751*4882a593Smuzhiyun #define ATOM_S3_CRT2_CRTC_ACTIVEb2 0x10 5752*4882a593Smuzhiyun #define ATOM_S3_LCD2_CRTC_ACTIVEb2 0x20 5753*4882a593Smuzhiyun #define ATOM_S3_DFP6_CRTC_ACTIVEb2 0x40 5754*4882a593Smuzhiyun #define ATOM_S3_DFP2_CRTC_ACTIVEb2 0x80 5755*4882a593Smuzhiyun #define ATOM_S3_CV_CRTC_ACTIVEb3 0x01 5756*4882a593Smuzhiyun #define ATOM_S3_DFP3_CRTC_ACTIVEb3 0x02 5757*4882a593Smuzhiyun #define ATOM_S3_DFP4_CRTC_ACTIVEb3 0x04 5758*4882a593Smuzhiyun #define ATOM_S3_DFP5_CRTC_ACTIVEb3 0x08 5759*4882a593Smuzhiyun 5760*4882a593Smuzhiyun #define ATOM_S3_ACTIVE_CRTC2w1 0xFFF 5761*4882a593Smuzhiyun 5762*4882a593Smuzhiyun // BIOS_4_SCRATCH Definition 5763*4882a593Smuzhiyun #define ATOM_S4_LCD1_PANEL_ID_MASK 0x000000FFL 5764*4882a593Smuzhiyun #define ATOM_S4_LCD1_REFRESH_MASK 0x0000FF00L 5765*4882a593Smuzhiyun #define ATOM_S4_LCD1_REFRESH_SHIFT 8 5766*4882a593Smuzhiyun 5767*4882a593Smuzhiyun //Byte aligned definition for BIOS usage 5768*4882a593Smuzhiyun #define ATOM_S4_LCD1_PANEL_ID_MASKb0 0x0FF 5769*4882a593Smuzhiyun #define ATOM_S4_LCD1_REFRESH_MASKb1 ATOM_S4_LCD1_PANEL_ID_MASKb0 5770*4882a593Smuzhiyun #define ATOM_S4_VRAM_INFO_MASKb2 ATOM_S4_LCD1_PANEL_ID_MASKb0 5771*4882a593Smuzhiyun 5772*4882a593Smuzhiyun // BIOS_5_SCRATCH Definition, BIOS_5_SCRATCH is used by Firmware only !!!! 5773*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_CRT1b0 0x01 5774*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_LCD1b0 0x02 5775*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_TV1b0 0x04 5776*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP1b0 0x08 5777*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_CRT2b0 0x10 5778*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_LCD2b0 0x20 5779*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP6b0 0x40 5780*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP2b0 0x80 5781*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_CVb1 0x01 5782*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP3b1 0x02 5783*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP4b1 0x04 5784*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP5b1 0x08 5785*4882a593Smuzhiyun 5786*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DEVICEw0 0x0FFF 5787*4882a593Smuzhiyun 5788*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_CRT1 0x0001 5789*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_LCD1 0x0002 5790*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_TV1 0x0004 5791*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP1 0x0008 5792*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_CRT2 0x0010 5793*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_LCD2 0x0020 5794*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP6 0x0040 5795*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP2 0x0080 5796*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_CV 0x0100 5797*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP3 0x0200 5798*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP4 0x0400 5799*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP5 0x0800 5800*4882a593Smuzhiyun 5801*4882a593Smuzhiyun #define ATOM_S5_DOS_FORCE_CRT1b2 ATOM_S5_DOS_REQ_CRT1b0 5802*4882a593Smuzhiyun #define ATOM_S5_DOS_FORCE_TV1b2 ATOM_S5_DOS_REQ_TV1b0 5803*4882a593Smuzhiyun #define ATOM_S5_DOS_FORCE_CRT2b2 ATOM_S5_DOS_REQ_CRT2b0 5804*4882a593Smuzhiyun #define ATOM_S5_DOS_FORCE_CVb3 ATOM_S5_DOS_REQ_CVb1 5805*4882a593Smuzhiyun #define ATOM_S5_DOS_FORCE_DEVICEw1 (ATOM_S5_DOS_FORCE_CRT1b2+ATOM_S5_DOS_FORCE_TV1b2+ATOM_S5_DOS_FORCE_CRT2b2+\ 5806*4882a593Smuzhiyun (ATOM_S5_DOS_FORCE_CVb3<<8)) 5807*4882a593Smuzhiyun 5808*4882a593Smuzhiyun // BIOS_6_SCRATCH Definition 5809*4882a593Smuzhiyun #define ATOM_S6_DEVICE_CHANGE 0x00000001L 5810*4882a593Smuzhiyun #define ATOM_S6_SCALER_CHANGE 0x00000002L 5811*4882a593Smuzhiyun #define ATOM_S6_LID_CHANGE 0x00000004L 5812*4882a593Smuzhiyun #define ATOM_S6_DOCKING_CHANGE 0x00000008L 5813*4882a593Smuzhiyun #define ATOM_S6_ACC_MODE 0x00000010L 5814*4882a593Smuzhiyun #define ATOM_S6_EXT_DESKTOP_MODE 0x00000020L 5815*4882a593Smuzhiyun #define ATOM_S6_LID_STATE 0x00000040L 5816*4882a593Smuzhiyun #define ATOM_S6_DOCK_STATE 0x00000080L 5817*4882a593Smuzhiyun #define ATOM_S6_CRITICAL_STATE 0x00000100L 5818*4882a593Smuzhiyun #define ATOM_S6_HW_I2C_BUSY_STATE 0x00000200L 5819*4882a593Smuzhiyun #define ATOM_S6_THERMAL_STATE_CHANGE 0x00000400L 5820*4882a593Smuzhiyun #define ATOM_S6_INTERRUPT_SET_BY_BIOS 0x00000800L 5821*4882a593Smuzhiyun #define ATOM_S6_REQ_LCD_EXPANSION_FULL 0x00001000L //Normal expansion Request bit for LCD 5822*4882a593Smuzhiyun #define ATOM_S6_REQ_LCD_EXPANSION_ASPEC_RATIO 0x00002000L //Aspect ratio expansion Request bit for LCD 5823*4882a593Smuzhiyun 5824*4882a593Smuzhiyun #define ATOM_S6_DISPLAY_STATE_CHANGE 0x00004000L //This bit is recycled when ATOM_BIOS_INFO_BIOS_SCRATCH6_SCL2_REDEFINE is set,previously it's SCL2_H_expansion 5825*4882a593Smuzhiyun #define ATOM_S6_I2C_STATE_CHANGE 0x00008000L //This bit is recycled,when ATOM_BIOS_INFO_BIOS_SCRATCH6_SCL2_REDEFINE is set,previously it's SCL2_V_expansion 5826*4882a593Smuzhiyun 5827*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_CRT1 0x00010000L 5828*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_LCD1 0x00020000L 5829*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_TV1 0x00040000L 5830*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP1 0x00080000L 5831*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_CRT2 0x00100000L 5832*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_LCD2 0x00200000L 5833*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP6 0x00400000L 5834*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP2 0x00800000L 5835*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_CV 0x01000000L 5836*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP3 0x02000000L 5837*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP4 0x04000000L 5838*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP5 0x08000000L 5839*4882a593Smuzhiyun 5840*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_MASK 0x0FFF0000L 5841*4882a593Smuzhiyun #define ATOM_S6_SYSTEM_POWER_MODE_CHANGE 0x10000000L 5842*4882a593Smuzhiyun #define ATOM_S6_ACC_BLOCK_DISPLAY_SWITCH 0x20000000L 5843*4882a593Smuzhiyun #define ATOM_S6_VRI_BRIGHTNESS_CHANGE 0x40000000L 5844*4882a593Smuzhiyun #define ATOM_S6_CONFIG_DISPLAY_CHANGE_MASK 0x80000000L 5845*4882a593Smuzhiyun 5846*4882a593Smuzhiyun //Byte aligned definition for BIOS usage 5847*4882a593Smuzhiyun #define ATOM_S6_DEVICE_CHANGEb0 0x01 5848*4882a593Smuzhiyun #define ATOM_S6_SCALER_CHANGEb0 0x02 5849*4882a593Smuzhiyun #define ATOM_S6_LID_CHANGEb0 0x04 5850*4882a593Smuzhiyun #define ATOM_S6_DOCKING_CHANGEb0 0x08 5851*4882a593Smuzhiyun #define ATOM_S6_ACC_MODEb0 0x10 5852*4882a593Smuzhiyun #define ATOM_S6_EXT_DESKTOP_MODEb0 0x20 5853*4882a593Smuzhiyun #define ATOM_S6_LID_STATEb0 0x40 5854*4882a593Smuzhiyun #define ATOM_S6_DOCK_STATEb0 0x80 5855*4882a593Smuzhiyun #define ATOM_S6_CRITICAL_STATEb1 0x01 5856*4882a593Smuzhiyun #define ATOM_S6_HW_I2C_BUSY_STATEb1 0x02 5857*4882a593Smuzhiyun #define ATOM_S6_THERMAL_STATE_CHANGEb1 0x04 5858*4882a593Smuzhiyun #define ATOM_S6_INTERRUPT_SET_BY_BIOSb1 0x08 5859*4882a593Smuzhiyun #define ATOM_S6_REQ_LCD_EXPANSION_FULLb1 0x10 5860*4882a593Smuzhiyun #define ATOM_S6_REQ_LCD_EXPANSION_ASPEC_RATIOb1 0x20 5861*4882a593Smuzhiyun 5862*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_CRT1b2 0x01 5863*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_LCD1b2 0x02 5864*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_TV1b2 0x04 5865*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP1b2 0x08 5866*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_CRT2b2 0x10 5867*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_LCD2b2 0x20 5868*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP6b2 0x40 5869*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP2b2 0x80 5870*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_CVb3 0x01 5871*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP3b3 0x02 5872*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP4b3 0x04 5873*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP5b3 0x08 5874*4882a593Smuzhiyun 5875*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DEVICEw1 ATOM_S5_DOS_REQ_DEVICEw0 5876*4882a593Smuzhiyun #define ATOM_S6_SYSTEM_POWER_MODE_CHANGEb3 0x10 5877*4882a593Smuzhiyun #define ATOM_S6_ACC_BLOCK_DISPLAY_SWITCHb3 0x20 5878*4882a593Smuzhiyun #define ATOM_S6_VRI_BRIGHTNESS_CHANGEb3 0x40 5879*4882a593Smuzhiyun #define ATOM_S6_CONFIG_DISPLAY_CHANGEb3 0x80 5880*4882a593Smuzhiyun 5881*4882a593Smuzhiyun #define ATOM_S6_DEVICE_CHANGE_SHIFT 0 5882*4882a593Smuzhiyun #define ATOM_S6_SCALER_CHANGE_SHIFT 1 5883*4882a593Smuzhiyun #define ATOM_S6_LID_CHANGE_SHIFT 2 5884*4882a593Smuzhiyun #define ATOM_S6_DOCKING_CHANGE_SHIFT 3 5885*4882a593Smuzhiyun #define ATOM_S6_ACC_MODE_SHIFT 4 5886*4882a593Smuzhiyun #define ATOM_S6_EXT_DESKTOP_MODE_SHIFT 5 5887*4882a593Smuzhiyun #define ATOM_S6_LID_STATE_SHIFT 6 5888*4882a593Smuzhiyun #define ATOM_S6_DOCK_STATE_SHIFT 7 5889*4882a593Smuzhiyun #define ATOM_S6_CRITICAL_STATE_SHIFT 8 5890*4882a593Smuzhiyun #define ATOM_S6_HW_I2C_BUSY_STATE_SHIFT 9 5891*4882a593Smuzhiyun #define ATOM_S6_THERMAL_STATE_CHANGE_SHIFT 10 5892*4882a593Smuzhiyun #define ATOM_S6_INTERRUPT_SET_BY_BIOS_SHIFT 11 5893*4882a593Smuzhiyun #define ATOM_S6_REQ_SCALER_SHIFT 12 5894*4882a593Smuzhiyun #define ATOM_S6_REQ_SCALER_ARATIO_SHIFT 13 5895*4882a593Smuzhiyun #define ATOM_S6_DISPLAY_STATE_CHANGE_SHIFT 14 5896*4882a593Smuzhiyun #define ATOM_S6_I2C_STATE_CHANGE_SHIFT 15 5897*4882a593Smuzhiyun #define ATOM_S6_SYSTEM_POWER_MODE_CHANGE_SHIFT 28 5898*4882a593Smuzhiyun #define ATOM_S6_ACC_BLOCK_DISPLAY_SWITCH_SHIFT 29 5899*4882a593Smuzhiyun #define ATOM_S6_VRI_BRIGHTNESS_CHANGE_SHIFT 30 5900*4882a593Smuzhiyun #define ATOM_S6_CONFIG_DISPLAY_CHANGE_SHIFT 31 5901*4882a593Smuzhiyun 5902*4882a593Smuzhiyun // BIOS_7_SCRATCH Definition, BIOS_7_SCRATCH is used by Firmware only !!!! 5903*4882a593Smuzhiyun #define ATOM_S7_DOS_MODE_TYPEb0 0x03 5904*4882a593Smuzhiyun #define ATOM_S7_DOS_MODE_VGAb0 0x00 5905*4882a593Smuzhiyun #define ATOM_S7_DOS_MODE_VESAb0 0x01 5906*4882a593Smuzhiyun #define ATOM_S7_DOS_MODE_EXTb0 0x02 5907*4882a593Smuzhiyun #define ATOM_S7_DOS_MODE_PIXEL_DEPTHb0 0x0C 5908*4882a593Smuzhiyun #define ATOM_S7_DOS_MODE_PIXEL_FORMATb0 0xF0 5909*4882a593Smuzhiyun #define ATOM_S7_DOS_8BIT_DAC_ENb1 0x01 5910*4882a593Smuzhiyun #define ATOM_S7_ASIC_INIT_COMPLETEb1 0x02 5911*4882a593Smuzhiyun #define ATOM_S7_ASIC_INIT_COMPLETE_MASK 0x00000200 5912*4882a593Smuzhiyun #define ATOM_S7_DOS_MODE_NUMBERw1 0x0FFFF 5913*4882a593Smuzhiyun 5914*4882a593Smuzhiyun #define ATOM_S7_DOS_8BIT_DAC_EN_SHIFT 8 5915*4882a593Smuzhiyun 5916*4882a593Smuzhiyun // BIOS_8_SCRATCH Definition 5917*4882a593Smuzhiyun #define ATOM_S8_I2C_CHANNEL_BUSY_MASK 0x00000FFFF 5918*4882a593Smuzhiyun #define ATOM_S8_I2C_HW_ENGINE_BUSY_MASK 0x0FFFF0000 5919*4882a593Smuzhiyun 5920*4882a593Smuzhiyun #define ATOM_S8_I2C_CHANNEL_BUSY_SHIFT 0 5921*4882a593Smuzhiyun #define ATOM_S8_I2C_ENGINE_BUSY_SHIFT 16 5922*4882a593Smuzhiyun 5923*4882a593Smuzhiyun // BIOS_9_SCRATCH Definition 5924*4882a593Smuzhiyun #ifndef ATOM_S9_I2C_CHANNEL_COMPLETED_MASK 5925*4882a593Smuzhiyun #define ATOM_S9_I2C_CHANNEL_COMPLETED_MASK 0x0000FFFF 5926*4882a593Smuzhiyun #endif 5927*4882a593Smuzhiyun #ifndef ATOM_S9_I2C_CHANNEL_ABORTED_MASK 5928*4882a593Smuzhiyun #define ATOM_S9_I2C_CHANNEL_ABORTED_MASK 0xFFFF0000 5929*4882a593Smuzhiyun #endif 5930*4882a593Smuzhiyun #ifndef ATOM_S9_I2C_CHANNEL_COMPLETED_SHIFT 5931*4882a593Smuzhiyun #define ATOM_S9_I2C_CHANNEL_COMPLETED_SHIFT 0 5932*4882a593Smuzhiyun #endif 5933*4882a593Smuzhiyun #ifndef ATOM_S9_I2C_CHANNEL_ABORTED_SHIFT 5934*4882a593Smuzhiyun #define ATOM_S9_I2C_CHANNEL_ABORTED_SHIFT 16 5935*4882a593Smuzhiyun #endif 5936*4882a593Smuzhiyun 5937*4882a593Smuzhiyun 5938*4882a593Smuzhiyun #define ATOM_FLAG_SET 0x20 5939*4882a593Smuzhiyun #define ATOM_FLAG_CLEAR 0 5940*4882a593Smuzhiyun #define CLEAR_ATOM_S6_ACC_MODE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_ACC_MODE_SHIFT | ATOM_FLAG_CLEAR) 5941*4882a593Smuzhiyun #define SET_ATOM_S6_DEVICE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DEVICE_CHANGE_SHIFT | ATOM_FLAG_SET) 5942*4882a593Smuzhiyun #define SET_ATOM_S6_VRI_BRIGHTNESS_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_VRI_BRIGHTNESS_CHANGE_SHIFT | ATOM_FLAG_SET) 5943*4882a593Smuzhiyun #define SET_ATOM_S6_SCALER_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_SCALER_CHANGE_SHIFT | ATOM_FLAG_SET) 5944*4882a593Smuzhiyun #define SET_ATOM_S6_LID_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_LID_CHANGE_SHIFT | ATOM_FLAG_SET) 5945*4882a593Smuzhiyun 5946*4882a593Smuzhiyun #define SET_ATOM_S6_LID_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_LID_STATE_SHIFT | ATOM_FLAG_SET) 5947*4882a593Smuzhiyun #define CLEAR_ATOM_S6_LID_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_LID_STATE_SHIFT | ATOM_FLAG_CLEAR) 5948*4882a593Smuzhiyun 5949*4882a593Smuzhiyun #define SET_ATOM_S6_DOCK_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DOCKING_CHANGE_SHIFT | ATOM_FLAG_SET) 5950*4882a593Smuzhiyun #define SET_ATOM_S6_DOCK_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DOCK_STATE_SHIFT | ATOM_FLAG_SET) 5951*4882a593Smuzhiyun #define CLEAR_ATOM_S6_DOCK_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DOCK_STATE_SHIFT | ATOM_FLAG_CLEAR) 5952*4882a593Smuzhiyun 5953*4882a593Smuzhiyun #define SET_ATOM_S6_THERMAL_STATE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_THERMAL_STATE_CHANGE_SHIFT | ATOM_FLAG_SET) 5954*4882a593Smuzhiyun #define SET_ATOM_S6_SYSTEM_POWER_MODE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_SYSTEM_POWER_MODE_CHANGE_SHIFT | ATOM_FLAG_SET) 5955*4882a593Smuzhiyun #define SET_ATOM_S6_INTERRUPT_SET_BY_BIOS ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_INTERRUPT_SET_BY_BIOS_SHIFT | ATOM_FLAG_SET) 5956*4882a593Smuzhiyun 5957*4882a593Smuzhiyun #define SET_ATOM_S6_CRITICAL_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_CRITICAL_STATE_SHIFT | ATOM_FLAG_SET) 5958*4882a593Smuzhiyun #define CLEAR_ATOM_S6_CRITICAL_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_CRITICAL_STATE_SHIFT | ATOM_FLAG_CLEAR) 5959*4882a593Smuzhiyun 5960*4882a593Smuzhiyun #define SET_ATOM_S6_REQ_SCALER ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_REQ_SCALER_SHIFT | ATOM_FLAG_SET) 5961*4882a593Smuzhiyun #define CLEAR_ATOM_S6_REQ_SCALER ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_REQ_SCALER_SHIFT | ATOM_FLAG_CLEAR ) 5962*4882a593Smuzhiyun 5963*4882a593Smuzhiyun #define SET_ATOM_S6_REQ_SCALER_ARATIO ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_REQ_SCALER_ARATIO_SHIFT | ATOM_FLAG_SET ) 5964*4882a593Smuzhiyun #define CLEAR_ATOM_S6_REQ_SCALER_ARATIO ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_REQ_SCALER_ARATIO_SHIFT | ATOM_FLAG_CLEAR ) 5965*4882a593Smuzhiyun 5966*4882a593Smuzhiyun #define SET_ATOM_S6_I2C_STATE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_I2C_STATE_CHANGE_SHIFT | ATOM_FLAG_SET ) 5967*4882a593Smuzhiyun 5968*4882a593Smuzhiyun #define SET_ATOM_S6_DISPLAY_STATE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DISPLAY_STATE_CHANGE_SHIFT | ATOM_FLAG_SET ) 5969*4882a593Smuzhiyun 5970*4882a593Smuzhiyun #define SET_ATOM_S6_DEVICE_RECONFIG ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_CONFIG_DISPLAY_CHANGE_SHIFT | ATOM_FLAG_SET) 5971*4882a593Smuzhiyun #define CLEAR_ATOM_S0_LCD1 ((ATOM_DEVICE_CONNECT_INFO_DEF << 8 )| ATOM_S0_LCD1_SHIFT | ATOM_FLAG_CLEAR ) 5972*4882a593Smuzhiyun #define SET_ATOM_S7_DOS_8BIT_DAC_EN ((ATOM_DOS_MODE_INFO_DEF << 8 )|ATOM_S7_DOS_8BIT_DAC_EN_SHIFT | ATOM_FLAG_SET ) 5973*4882a593Smuzhiyun #define CLEAR_ATOM_S7_DOS_8BIT_DAC_EN ((ATOM_DOS_MODE_INFO_DEF << 8 )|ATOM_S7_DOS_8BIT_DAC_EN_SHIFT | ATOM_FLAG_CLEAR ) 5974*4882a593Smuzhiyun 5975*4882a593Smuzhiyun /****************************************************************************/ 5976*4882a593Smuzhiyun //Portion II: Definitinos only used in Driver 5977*4882a593Smuzhiyun /****************************************************************************/ 5978*4882a593Smuzhiyun 5979*4882a593Smuzhiyun // Macros used by driver 5980*4882a593Smuzhiyun #ifdef __cplusplus 5981*4882a593Smuzhiyun #define GetIndexIntoMasterTable(MasterOrData, FieldName) ((reinterpret_cast<char*>(&(static_cast<ATOM_MASTER_LIST_OF_##MasterOrData##_TABLES*>(0))->FieldName)-static_cast<char*>(0))/sizeof(USHORT)) 5982*4882a593Smuzhiyun 5983*4882a593Smuzhiyun #define GET_COMMAND_TABLE_COMMANDSET_REVISION(TABLE_HEADER_OFFSET) (((static_cast<ATOM_COMMON_TABLE_HEADER*>(TABLE_HEADER_OFFSET))->ucTableFormatRevision )&0x3F) 5984*4882a593Smuzhiyun #define GET_COMMAND_TABLE_PARAMETER_REVISION(TABLE_HEADER_OFFSET) (((static_cast<ATOM_COMMON_TABLE_HEADER*>(TABLE_HEADER_OFFSET))->ucTableContentRevision)&0x3F) 5985*4882a593Smuzhiyun #else // not __cplusplus 5986*4882a593Smuzhiyun #define GetIndexIntoMasterTable(MasterOrData, FieldName) (((char*)(&((ATOM_MASTER_LIST_OF_##MasterOrData##_TABLES*)0)->FieldName)-(char*)0)/sizeof(USHORT)) 5987*4882a593Smuzhiyun 5988*4882a593Smuzhiyun #define GET_COMMAND_TABLE_COMMANDSET_REVISION(TABLE_HEADER_OFFSET) ((((ATOM_COMMON_TABLE_HEADER*)TABLE_HEADER_OFFSET)->ucTableFormatRevision)&0x3F) 5989*4882a593Smuzhiyun #define GET_COMMAND_TABLE_PARAMETER_REVISION(TABLE_HEADER_OFFSET) ((((ATOM_COMMON_TABLE_HEADER*)TABLE_HEADER_OFFSET)->ucTableContentRevision)&0x3F) 5990*4882a593Smuzhiyun #endif // __cplusplus 5991*4882a593Smuzhiyun 5992*4882a593Smuzhiyun #define GET_DATA_TABLE_MAJOR_REVISION GET_COMMAND_TABLE_COMMANDSET_REVISION 5993*4882a593Smuzhiyun #define GET_DATA_TABLE_MINOR_REVISION GET_COMMAND_TABLE_PARAMETER_REVISION 5994*4882a593Smuzhiyun 5995*4882a593Smuzhiyun /****************************************************************************/ 5996*4882a593Smuzhiyun //Portion III: Definitinos only used in VBIOS 5997*4882a593Smuzhiyun /****************************************************************************/ 5998*4882a593Smuzhiyun #define ATOM_DAC_SRC 0x80 5999*4882a593Smuzhiyun #define ATOM_SRC_DAC1 0 6000*4882a593Smuzhiyun #define ATOM_SRC_DAC2 0x80 6001*4882a593Smuzhiyun 6002*4882a593Smuzhiyun typedef struct _MEMORY_PLLINIT_PARAMETERS 6003*4882a593Smuzhiyun { 6004*4882a593Smuzhiyun ULONG ulTargetMemoryClock; //In 10Khz unit 6005*4882a593Smuzhiyun UCHAR ucAction; //not define yet 6006*4882a593Smuzhiyun UCHAR ucFbDiv_Hi; //Fbdiv Hi byte 6007*4882a593Smuzhiyun UCHAR ucFbDiv; //FB value 6008*4882a593Smuzhiyun UCHAR ucPostDiv; //Post div 6009*4882a593Smuzhiyun }MEMORY_PLLINIT_PARAMETERS; 6010*4882a593Smuzhiyun 6011*4882a593Smuzhiyun #define MEMORY_PLLINIT_PS_ALLOCATION MEMORY_PLLINIT_PARAMETERS 6012*4882a593Smuzhiyun 6013*4882a593Smuzhiyun 6014*4882a593Smuzhiyun #define GPIO_PIN_WRITE 0x01 6015*4882a593Smuzhiyun #define GPIO_PIN_READ 0x00 6016*4882a593Smuzhiyun 6017*4882a593Smuzhiyun typedef struct _GPIO_PIN_CONTROL_PARAMETERS 6018*4882a593Smuzhiyun { 6019*4882a593Smuzhiyun UCHAR ucGPIO_ID; //return value, read from GPIO pins 6020*4882a593Smuzhiyun UCHAR ucGPIOBitShift; //define which bit in uGPIOBitVal need to be update 6021*4882a593Smuzhiyun UCHAR ucGPIOBitVal; //Set/Reset corresponding bit defined in ucGPIOBitMask 6022*4882a593Smuzhiyun UCHAR ucAction; //=GPIO_PIN_WRITE: Read; =GPIO_PIN_READ: Write 6023*4882a593Smuzhiyun }GPIO_PIN_CONTROL_PARAMETERS; 6024*4882a593Smuzhiyun 6025*4882a593Smuzhiyun typedef struct _ENABLE_SCALER_PARAMETERS 6026*4882a593Smuzhiyun { 6027*4882a593Smuzhiyun UCHAR ucScaler; // ATOM_SCALER1, ATOM_SCALER2 6028*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_SCALER_DISABLE or ATOM_SCALER_CENTER or ATOM_SCALER_EXPANSION 6029*4882a593Smuzhiyun UCHAR ucTVStandard; // 6030*4882a593Smuzhiyun UCHAR ucPadding[1]; 6031*4882a593Smuzhiyun }ENABLE_SCALER_PARAMETERS; 6032*4882a593Smuzhiyun #define ENABLE_SCALER_PS_ALLOCATION ENABLE_SCALER_PARAMETERS 6033*4882a593Smuzhiyun 6034*4882a593Smuzhiyun //ucEnable: 6035*4882a593Smuzhiyun #define SCALER_BYPASS_AUTO_CENTER_NO_REPLICATION 0 6036*4882a593Smuzhiyun #define SCALER_BYPASS_AUTO_CENTER_AUTO_REPLICATION 1 6037*4882a593Smuzhiyun #define SCALER_ENABLE_2TAP_ALPHA_MODE 2 6038*4882a593Smuzhiyun #define SCALER_ENABLE_MULTITAP_MODE 3 6039*4882a593Smuzhiyun 6040*4882a593Smuzhiyun typedef struct _ENABLE_HARDWARE_ICON_CURSOR_PARAMETERS 6041*4882a593Smuzhiyun { 6042*4882a593Smuzhiyun ULONG usHWIconHorzVertPosn; // Hardware Icon Vertical position 6043*4882a593Smuzhiyun UCHAR ucHWIconVertOffset; // Hardware Icon Vertical offset 6044*4882a593Smuzhiyun UCHAR ucHWIconHorzOffset; // Hardware Icon Horizontal offset 6045*4882a593Smuzhiyun UCHAR ucSelection; // ATOM_CURSOR1 or ATOM_ICON1 or ATOM_CURSOR2 or ATOM_ICON2 6046*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 6047*4882a593Smuzhiyun }ENABLE_HARDWARE_ICON_CURSOR_PARAMETERS; 6048*4882a593Smuzhiyun 6049*4882a593Smuzhiyun typedef struct _ENABLE_HARDWARE_ICON_CURSOR_PS_ALLOCATION 6050*4882a593Smuzhiyun { 6051*4882a593Smuzhiyun ENABLE_HARDWARE_ICON_CURSOR_PARAMETERS sEnableIcon; 6052*4882a593Smuzhiyun ENABLE_CRTC_PARAMETERS sReserved; 6053*4882a593Smuzhiyun }ENABLE_HARDWARE_ICON_CURSOR_PS_ALLOCATION; 6054*4882a593Smuzhiyun 6055*4882a593Smuzhiyun typedef struct _ENABLE_GRAPH_SURFACE_PARAMETERS 6056*4882a593Smuzhiyun { 6057*4882a593Smuzhiyun USHORT usHight; // Image Hight 6058*4882a593Smuzhiyun USHORT usWidth; // Image Width 6059*4882a593Smuzhiyun UCHAR ucSurface; // Surface 1 or 2 6060*4882a593Smuzhiyun UCHAR ucPadding[3]; 6061*4882a593Smuzhiyun }ENABLE_GRAPH_SURFACE_PARAMETERS; 6062*4882a593Smuzhiyun 6063*4882a593Smuzhiyun typedef struct _ENABLE_GRAPH_SURFACE_PARAMETERS_V1_2 6064*4882a593Smuzhiyun { 6065*4882a593Smuzhiyun USHORT usHight; // Image Hight 6066*4882a593Smuzhiyun USHORT usWidth; // Image Width 6067*4882a593Smuzhiyun UCHAR ucSurface; // Surface 1 or 2 6068*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 6069*4882a593Smuzhiyun UCHAR ucPadding[2]; 6070*4882a593Smuzhiyun }ENABLE_GRAPH_SURFACE_PARAMETERS_V1_2; 6071*4882a593Smuzhiyun 6072*4882a593Smuzhiyun typedef struct _ENABLE_GRAPH_SURFACE_PARAMETERS_V1_3 6073*4882a593Smuzhiyun { 6074*4882a593Smuzhiyun USHORT usHight; // Image Hight 6075*4882a593Smuzhiyun USHORT usWidth; // Image Width 6076*4882a593Smuzhiyun UCHAR ucSurface; // Surface 1 or 2 6077*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 6078*4882a593Smuzhiyun USHORT usDeviceId; // Active Device Id for this surface. If no device, set to 0. 6079*4882a593Smuzhiyun }ENABLE_GRAPH_SURFACE_PARAMETERS_V1_3; 6080*4882a593Smuzhiyun 6081*4882a593Smuzhiyun typedef struct _ENABLE_GRAPH_SURFACE_PARAMETERS_V1_4 6082*4882a593Smuzhiyun { 6083*4882a593Smuzhiyun USHORT usHight; // Image Hight 6084*4882a593Smuzhiyun USHORT usWidth; // Image Width 6085*4882a593Smuzhiyun USHORT usGraphPitch; 6086*4882a593Smuzhiyun UCHAR ucColorDepth; 6087*4882a593Smuzhiyun UCHAR ucPixelFormat; 6088*4882a593Smuzhiyun UCHAR ucSurface; // Surface 1 or 2 6089*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE 6090*4882a593Smuzhiyun UCHAR ucModeType; 6091*4882a593Smuzhiyun UCHAR ucReserved; 6092*4882a593Smuzhiyun }ENABLE_GRAPH_SURFACE_PARAMETERS_V1_4; 6093*4882a593Smuzhiyun 6094*4882a593Smuzhiyun // ucEnable 6095*4882a593Smuzhiyun #define ATOM_GRAPH_CONTROL_SET_PITCH 0x0f 6096*4882a593Smuzhiyun #define ATOM_GRAPH_CONTROL_SET_DISP_START 0x10 6097*4882a593Smuzhiyun 6098*4882a593Smuzhiyun typedef struct _ENABLE_GRAPH_SURFACE_PS_ALLOCATION 6099*4882a593Smuzhiyun { 6100*4882a593Smuzhiyun ENABLE_GRAPH_SURFACE_PARAMETERS sSetSurface; 6101*4882a593Smuzhiyun ENABLE_YUV_PS_ALLOCATION sReserved; // Don't set this one 6102*4882a593Smuzhiyun }ENABLE_GRAPH_SURFACE_PS_ALLOCATION; 6103*4882a593Smuzhiyun 6104*4882a593Smuzhiyun typedef struct _MEMORY_CLEAN_UP_PARAMETERS 6105*4882a593Smuzhiyun { 6106*4882a593Smuzhiyun USHORT usMemoryStart; //in 8Kb boundary, offset from memory base address 6107*4882a593Smuzhiyun USHORT usMemorySize; //8Kb blocks aligned 6108*4882a593Smuzhiyun }MEMORY_CLEAN_UP_PARAMETERS; 6109*4882a593Smuzhiyun #define MEMORY_CLEAN_UP_PS_ALLOCATION MEMORY_CLEAN_UP_PARAMETERS 6110*4882a593Smuzhiyun 6111*4882a593Smuzhiyun typedef struct _GET_DISPLAY_SURFACE_SIZE_PARAMETERS 6112*4882a593Smuzhiyun { 6113*4882a593Smuzhiyun USHORT usX_Size; //When use as input parameter, usX_Size indicates which CRTC 6114*4882a593Smuzhiyun USHORT usY_Size; 6115*4882a593Smuzhiyun }GET_DISPLAY_SURFACE_SIZE_PARAMETERS; 6116*4882a593Smuzhiyun 6117*4882a593Smuzhiyun typedef struct _GET_DISPLAY_SURFACE_SIZE_PARAMETERS_V2 6118*4882a593Smuzhiyun { 6119*4882a593Smuzhiyun union{ 6120*4882a593Smuzhiyun USHORT usX_Size; //When use as input parameter, usX_Size indicates which CRTC 6121*4882a593Smuzhiyun USHORT usSurface; 6122*4882a593Smuzhiyun }; 6123*4882a593Smuzhiyun USHORT usY_Size; 6124*4882a593Smuzhiyun USHORT usDispXStart; 6125*4882a593Smuzhiyun USHORT usDispYStart; 6126*4882a593Smuzhiyun }GET_DISPLAY_SURFACE_SIZE_PARAMETERS_V2; 6127*4882a593Smuzhiyun 6128*4882a593Smuzhiyun 6129*4882a593Smuzhiyun typedef struct _PALETTE_DATA_CONTROL_PARAMETERS_V3 6130*4882a593Smuzhiyun { 6131*4882a593Smuzhiyun UCHAR ucLutId; 6132*4882a593Smuzhiyun UCHAR ucAction; 6133*4882a593Smuzhiyun USHORT usLutStartIndex; 6134*4882a593Smuzhiyun USHORT usLutLength; 6135*4882a593Smuzhiyun USHORT usLutOffsetInVram; 6136*4882a593Smuzhiyun }PALETTE_DATA_CONTROL_PARAMETERS_V3; 6137*4882a593Smuzhiyun 6138*4882a593Smuzhiyun // ucAction: 6139*4882a593Smuzhiyun #define PALETTE_DATA_AUTO_FILL 1 6140*4882a593Smuzhiyun #define PALETTE_DATA_READ 2 6141*4882a593Smuzhiyun #define PALETTE_DATA_WRITE 3 6142*4882a593Smuzhiyun 6143*4882a593Smuzhiyun 6144*4882a593Smuzhiyun typedef struct _INTERRUPT_SERVICE_PARAMETERS_V2 6145*4882a593Smuzhiyun { 6146*4882a593Smuzhiyun UCHAR ucInterruptId; 6147*4882a593Smuzhiyun UCHAR ucServiceId; 6148*4882a593Smuzhiyun UCHAR ucStatus; 6149*4882a593Smuzhiyun UCHAR ucReserved; 6150*4882a593Smuzhiyun }INTERRUPT_SERVICE_PARAMETER_V2; 6151*4882a593Smuzhiyun 6152*4882a593Smuzhiyun // ucInterruptId 6153*4882a593Smuzhiyun #define HDP1_INTERRUPT_ID 1 6154*4882a593Smuzhiyun #define HDP2_INTERRUPT_ID 2 6155*4882a593Smuzhiyun #define HDP3_INTERRUPT_ID 3 6156*4882a593Smuzhiyun #define HDP4_INTERRUPT_ID 4 6157*4882a593Smuzhiyun #define HDP5_INTERRUPT_ID 5 6158*4882a593Smuzhiyun #define HDP6_INTERRUPT_ID 6 6159*4882a593Smuzhiyun #define SW_INTERRUPT_ID 11 6160*4882a593Smuzhiyun 6161*4882a593Smuzhiyun // ucAction 6162*4882a593Smuzhiyun #define INTERRUPT_SERVICE_GEN_SW_INT 1 6163*4882a593Smuzhiyun #define INTERRUPT_SERVICE_GET_STATUS 2 6164*4882a593Smuzhiyun 6165*4882a593Smuzhiyun // ucStatus 6166*4882a593Smuzhiyun #define INTERRUPT_STATUS__INT_TRIGGER 1 6167*4882a593Smuzhiyun #define INTERRUPT_STATUS__HPD_HIGH 2 6168*4882a593Smuzhiyun 6169*4882a593Smuzhiyun typedef struct _INDIRECT_IO_ACCESS 6170*4882a593Smuzhiyun { 6171*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6172*4882a593Smuzhiyun UCHAR IOAccessSequence[256]; 6173*4882a593Smuzhiyun } INDIRECT_IO_ACCESS; 6174*4882a593Smuzhiyun 6175*4882a593Smuzhiyun #define INDIRECT_READ 0x00 6176*4882a593Smuzhiyun #define INDIRECT_WRITE 0x80 6177*4882a593Smuzhiyun 6178*4882a593Smuzhiyun #define INDIRECT_IO_MM 0 6179*4882a593Smuzhiyun #define INDIRECT_IO_PLL 1 6180*4882a593Smuzhiyun #define INDIRECT_IO_MC 2 6181*4882a593Smuzhiyun #define INDIRECT_IO_PCIE 3 6182*4882a593Smuzhiyun #define INDIRECT_IO_PCIEP 4 6183*4882a593Smuzhiyun #define INDIRECT_IO_NBMISC 5 6184*4882a593Smuzhiyun #define INDIRECT_IO_SMU 5 6185*4882a593Smuzhiyun 6186*4882a593Smuzhiyun #define INDIRECT_IO_PLL_READ INDIRECT_IO_PLL | INDIRECT_READ 6187*4882a593Smuzhiyun #define INDIRECT_IO_PLL_WRITE INDIRECT_IO_PLL | INDIRECT_WRITE 6188*4882a593Smuzhiyun #define INDIRECT_IO_MC_READ INDIRECT_IO_MC | INDIRECT_READ 6189*4882a593Smuzhiyun #define INDIRECT_IO_MC_WRITE INDIRECT_IO_MC | INDIRECT_WRITE 6190*4882a593Smuzhiyun #define INDIRECT_IO_PCIE_READ INDIRECT_IO_PCIE | INDIRECT_READ 6191*4882a593Smuzhiyun #define INDIRECT_IO_PCIE_WRITE INDIRECT_IO_PCIE | INDIRECT_WRITE 6192*4882a593Smuzhiyun #define INDIRECT_IO_PCIEP_READ INDIRECT_IO_PCIEP | INDIRECT_READ 6193*4882a593Smuzhiyun #define INDIRECT_IO_PCIEP_WRITE INDIRECT_IO_PCIEP | INDIRECT_WRITE 6194*4882a593Smuzhiyun #define INDIRECT_IO_NBMISC_READ INDIRECT_IO_NBMISC | INDIRECT_READ 6195*4882a593Smuzhiyun #define INDIRECT_IO_NBMISC_WRITE INDIRECT_IO_NBMISC | INDIRECT_WRITE 6196*4882a593Smuzhiyun #define INDIRECT_IO_SMU_READ INDIRECT_IO_SMU | INDIRECT_READ 6197*4882a593Smuzhiyun #define INDIRECT_IO_SMU_WRITE INDIRECT_IO_SMU | INDIRECT_WRITE 6198*4882a593Smuzhiyun 6199*4882a593Smuzhiyun typedef struct _ATOM_OEM_INFO 6200*4882a593Smuzhiyun { 6201*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6202*4882a593Smuzhiyun ATOM_I2C_ID_CONFIG_ACCESS sucI2cId; 6203*4882a593Smuzhiyun }ATOM_OEM_INFO; 6204*4882a593Smuzhiyun 6205*4882a593Smuzhiyun typedef struct _ATOM_TV_MODE 6206*4882a593Smuzhiyun { 6207*4882a593Smuzhiyun UCHAR ucVMode_Num; //Video mode number 6208*4882a593Smuzhiyun UCHAR ucTV_Mode_Num; //Internal TV mode number 6209*4882a593Smuzhiyun }ATOM_TV_MODE; 6210*4882a593Smuzhiyun 6211*4882a593Smuzhiyun typedef struct _ATOM_BIOS_INT_TVSTD_MODE 6212*4882a593Smuzhiyun { 6213*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6214*4882a593Smuzhiyun USHORT usTV_Mode_LUT_Offset; // Pointer to standard to internal number conversion table 6215*4882a593Smuzhiyun USHORT usTV_FIFO_Offset; // Pointer to FIFO entry table 6216*4882a593Smuzhiyun USHORT usNTSC_Tbl_Offset; // Pointer to SDTV_Mode_NTSC table 6217*4882a593Smuzhiyun USHORT usPAL_Tbl_Offset; // Pointer to SDTV_Mode_PAL table 6218*4882a593Smuzhiyun USHORT usCV_Tbl_Offset; // Pointer to SDTV_Mode_PAL table 6219*4882a593Smuzhiyun }ATOM_BIOS_INT_TVSTD_MODE; 6220*4882a593Smuzhiyun 6221*4882a593Smuzhiyun 6222*4882a593Smuzhiyun typedef struct _ATOM_TV_MODE_SCALER_PTR 6223*4882a593Smuzhiyun { 6224*4882a593Smuzhiyun USHORT ucFilter0_Offset; //Pointer to filter format 0 coefficients 6225*4882a593Smuzhiyun USHORT usFilter1_Offset; //Pointer to filter format 0 coefficients 6226*4882a593Smuzhiyun UCHAR ucTV_Mode_Num; 6227*4882a593Smuzhiyun }ATOM_TV_MODE_SCALER_PTR; 6228*4882a593Smuzhiyun 6229*4882a593Smuzhiyun typedef struct _ATOM_STANDARD_VESA_TIMING 6230*4882a593Smuzhiyun { 6231*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6232*4882a593Smuzhiyun ATOM_DTD_FORMAT aModeTimings[16]; // 16 is not the real array number, just for initial allocation 6233*4882a593Smuzhiyun }ATOM_STANDARD_VESA_TIMING; 6234*4882a593Smuzhiyun 6235*4882a593Smuzhiyun 6236*4882a593Smuzhiyun typedef struct _ATOM_STD_FORMAT 6237*4882a593Smuzhiyun { 6238*4882a593Smuzhiyun USHORT usSTD_HDisp; 6239*4882a593Smuzhiyun USHORT usSTD_VDisp; 6240*4882a593Smuzhiyun USHORT usSTD_RefreshRate; 6241*4882a593Smuzhiyun USHORT usReserved; 6242*4882a593Smuzhiyun }ATOM_STD_FORMAT; 6243*4882a593Smuzhiyun 6244*4882a593Smuzhiyun typedef struct _ATOM_VESA_TO_EXTENDED_MODE 6245*4882a593Smuzhiyun { 6246*4882a593Smuzhiyun USHORT usVESA_ModeNumber; 6247*4882a593Smuzhiyun USHORT usExtendedModeNumber; 6248*4882a593Smuzhiyun }ATOM_VESA_TO_EXTENDED_MODE; 6249*4882a593Smuzhiyun 6250*4882a593Smuzhiyun typedef struct _ATOM_VESA_TO_INTENAL_MODE_LUT 6251*4882a593Smuzhiyun { 6252*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6253*4882a593Smuzhiyun ATOM_VESA_TO_EXTENDED_MODE asVESA_ToExtendedModeInfo[76]; 6254*4882a593Smuzhiyun }ATOM_VESA_TO_INTENAL_MODE_LUT; 6255*4882a593Smuzhiyun 6256*4882a593Smuzhiyun /*************** ATOM Memory Related Data Structure ***********************/ 6257*4882a593Smuzhiyun typedef struct _ATOM_MEMORY_VENDOR_BLOCK{ 6258*4882a593Smuzhiyun UCHAR ucMemoryType; 6259*4882a593Smuzhiyun UCHAR ucMemoryVendor; 6260*4882a593Smuzhiyun UCHAR ucAdjMCId; 6261*4882a593Smuzhiyun UCHAR ucDynClkId; 6262*4882a593Smuzhiyun ULONG ulDllResetClkRange; 6263*4882a593Smuzhiyun }ATOM_MEMORY_VENDOR_BLOCK; 6264*4882a593Smuzhiyun 6265*4882a593Smuzhiyun 6266*4882a593Smuzhiyun typedef struct _ATOM_MEMORY_SETTING_ID_CONFIG{ 6267*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 6268*4882a593Smuzhiyun ULONG ucMemBlkId:8; 6269*4882a593Smuzhiyun ULONG ulMemClockRange:24; 6270*4882a593Smuzhiyun #else 6271*4882a593Smuzhiyun ULONG ulMemClockRange:24; 6272*4882a593Smuzhiyun ULONG ucMemBlkId:8; 6273*4882a593Smuzhiyun #endif 6274*4882a593Smuzhiyun }ATOM_MEMORY_SETTING_ID_CONFIG; 6275*4882a593Smuzhiyun 6276*4882a593Smuzhiyun typedef union _ATOM_MEMORY_SETTING_ID_CONFIG_ACCESS 6277*4882a593Smuzhiyun { 6278*4882a593Smuzhiyun ATOM_MEMORY_SETTING_ID_CONFIG slAccess; 6279*4882a593Smuzhiyun ULONG ulAccess; 6280*4882a593Smuzhiyun }ATOM_MEMORY_SETTING_ID_CONFIG_ACCESS; 6281*4882a593Smuzhiyun 6282*4882a593Smuzhiyun 6283*4882a593Smuzhiyun typedef struct _ATOM_MEMORY_SETTING_DATA_BLOCK{ 6284*4882a593Smuzhiyun ATOM_MEMORY_SETTING_ID_CONFIG_ACCESS ulMemoryID; 6285*4882a593Smuzhiyun ULONG aulMemData[1]; 6286*4882a593Smuzhiyun }ATOM_MEMORY_SETTING_DATA_BLOCK; 6287*4882a593Smuzhiyun 6288*4882a593Smuzhiyun 6289*4882a593Smuzhiyun typedef struct _ATOM_INIT_REG_INDEX_FORMAT{ 6290*4882a593Smuzhiyun USHORT usRegIndex; // MC register index 6291*4882a593Smuzhiyun UCHAR ucPreRegDataLength; // offset in ATOM_INIT_REG_DATA_BLOCK.saRegDataBuf 6292*4882a593Smuzhiyun }ATOM_INIT_REG_INDEX_FORMAT; 6293*4882a593Smuzhiyun 6294*4882a593Smuzhiyun 6295*4882a593Smuzhiyun typedef struct _ATOM_INIT_REG_BLOCK{ 6296*4882a593Smuzhiyun USHORT usRegIndexTblSize; //size of asRegIndexBuf 6297*4882a593Smuzhiyun USHORT usRegDataBlkSize; //size of ATOM_MEMORY_SETTING_DATA_BLOCK 6298*4882a593Smuzhiyun ATOM_INIT_REG_INDEX_FORMAT asRegIndexBuf[1]; 6299*4882a593Smuzhiyun ATOM_MEMORY_SETTING_DATA_BLOCK asRegDataBuf[1]; 6300*4882a593Smuzhiyun }ATOM_INIT_REG_BLOCK; 6301*4882a593Smuzhiyun 6302*4882a593Smuzhiyun #define END_OF_REG_INDEX_BLOCK 0x0ffff 6303*4882a593Smuzhiyun #define END_OF_REG_DATA_BLOCK 0x00000000 6304*4882a593Smuzhiyun #define ATOM_INIT_REG_MASK_FLAG 0x80 //Not used in BIOS 6305*4882a593Smuzhiyun #define CLOCK_RANGE_HIGHEST 0x00ffffff 6306*4882a593Smuzhiyun 6307*4882a593Smuzhiyun #define VALUE_DWORD SIZEOF ULONG 6308*4882a593Smuzhiyun #define VALUE_SAME_AS_ABOVE 0 6309*4882a593Smuzhiyun #define VALUE_MASK_DWORD 0x84 6310*4882a593Smuzhiyun 6311*4882a593Smuzhiyun #define INDEX_ACCESS_RANGE_BEGIN (VALUE_DWORD + 1) 6312*4882a593Smuzhiyun #define INDEX_ACCESS_RANGE_END (INDEX_ACCESS_RANGE_BEGIN + 1) 6313*4882a593Smuzhiyun #define VALUE_INDEX_ACCESS_SINGLE (INDEX_ACCESS_RANGE_END + 1) 6314*4882a593Smuzhiyun //#define ACCESS_MCIODEBUGIND 0x40 //defined in BIOS code 6315*4882a593Smuzhiyun #define ACCESS_PLACEHOLDER 0x80 6316*4882a593Smuzhiyun 6317*4882a593Smuzhiyun typedef struct _ATOM_MC_INIT_PARAM_TABLE 6318*4882a593Smuzhiyun { 6319*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6320*4882a593Smuzhiyun USHORT usAdjustARB_SEQDataOffset; 6321*4882a593Smuzhiyun USHORT usMCInitMemTypeTblOffset; 6322*4882a593Smuzhiyun USHORT usMCInitCommonTblOffset; 6323*4882a593Smuzhiyun USHORT usMCInitPowerDownTblOffset; 6324*4882a593Smuzhiyun ULONG ulARB_SEQDataBuf[32]; 6325*4882a593Smuzhiyun ATOM_INIT_REG_BLOCK asMCInitMemType; 6326*4882a593Smuzhiyun ATOM_INIT_REG_BLOCK asMCInitCommon; 6327*4882a593Smuzhiyun }ATOM_MC_INIT_PARAM_TABLE; 6328*4882a593Smuzhiyun 6329*4882a593Smuzhiyun 6330*4882a593Smuzhiyun #define _4Mx16 0x2 6331*4882a593Smuzhiyun #define _4Mx32 0x3 6332*4882a593Smuzhiyun #define _8Mx16 0x12 6333*4882a593Smuzhiyun #define _8Mx32 0x13 6334*4882a593Smuzhiyun #define _16Mx16 0x22 6335*4882a593Smuzhiyun #define _16Mx32 0x23 6336*4882a593Smuzhiyun #define _32Mx16 0x32 6337*4882a593Smuzhiyun #define _32Mx32 0x33 6338*4882a593Smuzhiyun #define _64Mx8 0x41 6339*4882a593Smuzhiyun #define _64Mx16 0x42 6340*4882a593Smuzhiyun #define _64Mx32 0x43 6341*4882a593Smuzhiyun #define _128Mx8 0x51 6342*4882a593Smuzhiyun #define _128Mx16 0x52 6343*4882a593Smuzhiyun #define _128Mx32 0x53 6344*4882a593Smuzhiyun #define _256Mx8 0x61 6345*4882a593Smuzhiyun #define _256Mx16 0x62 6346*4882a593Smuzhiyun #define _512Mx8 0x71 6347*4882a593Smuzhiyun 6348*4882a593Smuzhiyun #define SAMSUNG 0x1 6349*4882a593Smuzhiyun #define INFINEON 0x2 6350*4882a593Smuzhiyun #define ELPIDA 0x3 6351*4882a593Smuzhiyun #define ETRON 0x4 6352*4882a593Smuzhiyun #define NANYA 0x5 6353*4882a593Smuzhiyun #define HYNIX 0x6 6354*4882a593Smuzhiyun #define MOSEL 0x7 6355*4882a593Smuzhiyun #define WINBOND 0x8 6356*4882a593Smuzhiyun #define ESMT 0x9 6357*4882a593Smuzhiyun #define MICRON 0xF 6358*4882a593Smuzhiyun 6359*4882a593Smuzhiyun #define QIMONDA INFINEON 6360*4882a593Smuzhiyun #define PROMOS MOSEL 6361*4882a593Smuzhiyun #define KRETON INFINEON 6362*4882a593Smuzhiyun #define ELIXIR NANYA 6363*4882a593Smuzhiyun #define MEZZA ELPIDA 6364*4882a593Smuzhiyun 6365*4882a593Smuzhiyun 6366*4882a593Smuzhiyun /////////////Support for GDDR5 MC uCode to reside in upper 64K of ROM///////////// 6367*4882a593Smuzhiyun 6368*4882a593Smuzhiyun #define UCODE_ROM_START_ADDRESS 0x1b800 6369*4882a593Smuzhiyun #define UCODE_SIGNATURE 0x4375434d // 'MCuC' - MC uCode 6370*4882a593Smuzhiyun 6371*4882a593Smuzhiyun //uCode block header for reference 6372*4882a593Smuzhiyun 6373*4882a593Smuzhiyun typedef struct _MCuCodeHeader 6374*4882a593Smuzhiyun { 6375*4882a593Smuzhiyun ULONG ulSignature; 6376*4882a593Smuzhiyun UCHAR ucRevision; 6377*4882a593Smuzhiyun UCHAR ucChecksum; 6378*4882a593Smuzhiyun UCHAR ucReserved1; 6379*4882a593Smuzhiyun UCHAR ucReserved2; 6380*4882a593Smuzhiyun USHORT usParametersLength; 6381*4882a593Smuzhiyun USHORT usUCodeLength; 6382*4882a593Smuzhiyun USHORT usReserved1; 6383*4882a593Smuzhiyun USHORT usReserved2; 6384*4882a593Smuzhiyun } MCuCodeHeader; 6385*4882a593Smuzhiyun 6386*4882a593Smuzhiyun ////////////////////////////////////////////////////////////////////////////////// 6387*4882a593Smuzhiyun 6388*4882a593Smuzhiyun #define ATOM_MAX_NUMBER_OF_VRAM_MODULE 16 6389*4882a593Smuzhiyun 6390*4882a593Smuzhiyun #define ATOM_VRAM_MODULE_MEMORY_VENDOR_ID_MASK 0xF 6391*4882a593Smuzhiyun typedef struct _ATOM_VRAM_MODULE_V1 6392*4882a593Smuzhiyun { 6393*4882a593Smuzhiyun ULONG ulReserved; 6394*4882a593Smuzhiyun USHORT usEMRSValue; 6395*4882a593Smuzhiyun USHORT usMRSValue; 6396*4882a593Smuzhiyun USHORT usReserved; 6397*4882a593Smuzhiyun UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module 6398*4882a593Smuzhiyun UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4;[3:0] reserved; 6399*4882a593Smuzhiyun UCHAR ucMemoryVenderID; // Predefined,never change across designs or memory type/vender 6400*4882a593Smuzhiyun UCHAR ucMemoryDeviceCfg; // [7:4]=0x0:4M;=0x1:8M;=0x2:16M;0x3:32M....[3:0]=0x0:x4;=0x1:x8;=0x2:x16;=0x3:x32... 6401*4882a593Smuzhiyun UCHAR ucRow; // Number of Row,in power of 2; 6402*4882a593Smuzhiyun UCHAR ucColumn; // Number of Column,in power of 2; 6403*4882a593Smuzhiyun UCHAR ucBank; // Nunber of Bank; 6404*4882a593Smuzhiyun UCHAR ucRank; // Number of Rank, in power of 2 6405*4882a593Smuzhiyun UCHAR ucChannelNum; // Number of channel; 6406*4882a593Smuzhiyun UCHAR ucChannelConfig; // [3:0]=Indication of what channel combination;[4:7]=Channel bit width, in number of 2 6407*4882a593Smuzhiyun UCHAR ucDefaultMVDDQ_ID; // Default MVDDQ setting for this memory block, ID linking to MVDDQ info table to find real set-up data; 6408*4882a593Smuzhiyun UCHAR ucDefaultMVDDC_ID; // Default MVDDC setting for this memory block, ID linking to MVDDC info table to find real set-up data; 6409*4882a593Smuzhiyun UCHAR ucReserved[2]; 6410*4882a593Smuzhiyun }ATOM_VRAM_MODULE_V1; 6411*4882a593Smuzhiyun 6412*4882a593Smuzhiyun 6413*4882a593Smuzhiyun typedef struct _ATOM_VRAM_MODULE_V2 6414*4882a593Smuzhiyun { 6415*4882a593Smuzhiyun ULONG ulReserved; 6416*4882a593Smuzhiyun ULONG ulFlags; // To enable/disable functionalities based on memory type 6417*4882a593Smuzhiyun ULONG ulEngineClock; // Override of default engine clock for particular memory type 6418*4882a593Smuzhiyun ULONG ulMemoryClock; // Override of default memory clock for particular memory type 6419*4882a593Smuzhiyun USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type 6420*4882a593Smuzhiyun USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type 6421*4882a593Smuzhiyun USHORT usEMRSValue; 6422*4882a593Smuzhiyun USHORT usMRSValue; 6423*4882a593Smuzhiyun USHORT usReserved; 6424*4882a593Smuzhiyun UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module 6425*4882a593Smuzhiyun UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4;[3:0] - must not be used for now; 6426*4882a593Smuzhiyun UCHAR ucMemoryVenderID; // Predefined,never change across designs or memory type/vender. If not predefined, vendor detection table gets executed 6427*4882a593Smuzhiyun UCHAR ucMemoryDeviceCfg; // [7:4]=0x0:4M;=0x1:8M;=0x2:16M;0x3:32M....[3:0]=0x0:x4;=0x1:x8;=0x2:x16;=0x3:x32... 6428*4882a593Smuzhiyun UCHAR ucRow; // Number of Row,in power of 2; 6429*4882a593Smuzhiyun UCHAR ucColumn; // Number of Column,in power of 2; 6430*4882a593Smuzhiyun UCHAR ucBank; // Nunber of Bank; 6431*4882a593Smuzhiyun UCHAR ucRank; // Number of Rank, in power of 2 6432*4882a593Smuzhiyun UCHAR ucChannelNum; // Number of channel; 6433*4882a593Smuzhiyun UCHAR ucChannelConfig; // [3:0]=Indication of what channel combination;[4:7]=Channel bit width, in number of 2 6434*4882a593Smuzhiyun UCHAR ucDefaultMVDDQ_ID; // Default MVDDQ setting for this memory block, ID linking to MVDDQ info table to find real set-up data; 6435*4882a593Smuzhiyun UCHAR ucDefaultMVDDC_ID; // Default MVDDC setting for this memory block, ID linking to MVDDC info table to find real set-up data; 6436*4882a593Smuzhiyun UCHAR ucRefreshRateFactor; 6437*4882a593Smuzhiyun UCHAR ucReserved[3]; 6438*4882a593Smuzhiyun }ATOM_VRAM_MODULE_V2; 6439*4882a593Smuzhiyun 6440*4882a593Smuzhiyun 6441*4882a593Smuzhiyun typedef struct _ATOM_MEMORY_TIMING_FORMAT 6442*4882a593Smuzhiyun { 6443*4882a593Smuzhiyun ULONG ulClkRange; // memory clock in 10kHz unit, when target memory clock is below this clock, use this memory timing 6444*4882a593Smuzhiyun union{ 6445*4882a593Smuzhiyun USHORT usMRS; // mode register 6446*4882a593Smuzhiyun USHORT usDDR3_MR0; 6447*4882a593Smuzhiyun }; 6448*4882a593Smuzhiyun union{ 6449*4882a593Smuzhiyun USHORT usEMRS; // extended mode register 6450*4882a593Smuzhiyun USHORT usDDR3_MR1; 6451*4882a593Smuzhiyun }; 6452*4882a593Smuzhiyun UCHAR ucCL; // CAS latency 6453*4882a593Smuzhiyun UCHAR ucWL; // WRITE Latency 6454*4882a593Smuzhiyun UCHAR uctRAS; // tRAS 6455*4882a593Smuzhiyun UCHAR uctRC; // tRC 6456*4882a593Smuzhiyun UCHAR uctRFC; // tRFC 6457*4882a593Smuzhiyun UCHAR uctRCDR; // tRCDR 6458*4882a593Smuzhiyun UCHAR uctRCDW; // tRCDW 6459*4882a593Smuzhiyun UCHAR uctRP; // tRP 6460*4882a593Smuzhiyun UCHAR uctRRD; // tRRD 6461*4882a593Smuzhiyun UCHAR uctWR; // tWR 6462*4882a593Smuzhiyun UCHAR uctWTR; // tWTR 6463*4882a593Smuzhiyun UCHAR uctPDIX; // tPDIX 6464*4882a593Smuzhiyun UCHAR uctFAW; // tFAW 6465*4882a593Smuzhiyun UCHAR uctAOND; // tAOND 6466*4882a593Smuzhiyun union 6467*4882a593Smuzhiyun { 6468*4882a593Smuzhiyun struct { 6469*4882a593Smuzhiyun UCHAR ucflag; // flag to control memory timing calculation. bit0= control EMRS2 Infineon 6470*4882a593Smuzhiyun UCHAR ucReserved; 6471*4882a593Smuzhiyun }; 6472*4882a593Smuzhiyun USHORT usDDR3_MR2; 6473*4882a593Smuzhiyun }; 6474*4882a593Smuzhiyun }ATOM_MEMORY_TIMING_FORMAT; 6475*4882a593Smuzhiyun 6476*4882a593Smuzhiyun 6477*4882a593Smuzhiyun typedef struct _ATOM_MEMORY_TIMING_FORMAT_V1 6478*4882a593Smuzhiyun { 6479*4882a593Smuzhiyun ULONG ulClkRange; // memory clock in 10kHz unit, when target memory clock is below this clock, use this memory timing 6480*4882a593Smuzhiyun USHORT usMRS; // mode register 6481*4882a593Smuzhiyun USHORT usEMRS; // extended mode register 6482*4882a593Smuzhiyun UCHAR ucCL; // CAS latency 6483*4882a593Smuzhiyun UCHAR ucWL; // WRITE Latency 6484*4882a593Smuzhiyun UCHAR uctRAS; // tRAS 6485*4882a593Smuzhiyun UCHAR uctRC; // tRC 6486*4882a593Smuzhiyun UCHAR uctRFC; // tRFC 6487*4882a593Smuzhiyun UCHAR uctRCDR; // tRCDR 6488*4882a593Smuzhiyun UCHAR uctRCDW; // tRCDW 6489*4882a593Smuzhiyun UCHAR uctRP; // tRP 6490*4882a593Smuzhiyun UCHAR uctRRD; // tRRD 6491*4882a593Smuzhiyun UCHAR uctWR; // tWR 6492*4882a593Smuzhiyun UCHAR uctWTR; // tWTR 6493*4882a593Smuzhiyun UCHAR uctPDIX; // tPDIX 6494*4882a593Smuzhiyun UCHAR uctFAW; // tFAW 6495*4882a593Smuzhiyun UCHAR uctAOND; // tAOND 6496*4882a593Smuzhiyun UCHAR ucflag; // flag to control memory timing calculation. bit0= control EMRS2 Infineon 6497*4882a593Smuzhiyun ////////////////////////////////////GDDR parameters/////////////////////////////////// 6498*4882a593Smuzhiyun UCHAR uctCCDL; // 6499*4882a593Smuzhiyun UCHAR uctCRCRL; // 6500*4882a593Smuzhiyun UCHAR uctCRCWL; // 6501*4882a593Smuzhiyun UCHAR uctCKE; // 6502*4882a593Smuzhiyun UCHAR uctCKRSE; // 6503*4882a593Smuzhiyun UCHAR uctCKRSX; // 6504*4882a593Smuzhiyun UCHAR uctFAW32; // 6505*4882a593Smuzhiyun UCHAR ucMR5lo; // 6506*4882a593Smuzhiyun UCHAR ucMR5hi; // 6507*4882a593Smuzhiyun UCHAR ucTerminator; 6508*4882a593Smuzhiyun }ATOM_MEMORY_TIMING_FORMAT_V1; 6509*4882a593Smuzhiyun 6510*4882a593Smuzhiyun typedef struct _ATOM_MEMORY_TIMING_FORMAT_V2 6511*4882a593Smuzhiyun { 6512*4882a593Smuzhiyun ULONG ulClkRange; // memory clock in 10kHz unit, when target memory clock is below this clock, use this memory timing 6513*4882a593Smuzhiyun USHORT usMRS; // mode register 6514*4882a593Smuzhiyun USHORT usEMRS; // extended mode register 6515*4882a593Smuzhiyun UCHAR ucCL; // CAS latency 6516*4882a593Smuzhiyun UCHAR ucWL; // WRITE Latency 6517*4882a593Smuzhiyun UCHAR uctRAS; // tRAS 6518*4882a593Smuzhiyun UCHAR uctRC; // tRC 6519*4882a593Smuzhiyun UCHAR uctRFC; // tRFC 6520*4882a593Smuzhiyun UCHAR uctRCDR; // tRCDR 6521*4882a593Smuzhiyun UCHAR uctRCDW; // tRCDW 6522*4882a593Smuzhiyun UCHAR uctRP; // tRP 6523*4882a593Smuzhiyun UCHAR uctRRD; // tRRD 6524*4882a593Smuzhiyun UCHAR uctWR; // tWR 6525*4882a593Smuzhiyun UCHAR uctWTR; // tWTR 6526*4882a593Smuzhiyun UCHAR uctPDIX; // tPDIX 6527*4882a593Smuzhiyun UCHAR uctFAW; // tFAW 6528*4882a593Smuzhiyun UCHAR uctAOND; // tAOND 6529*4882a593Smuzhiyun UCHAR ucflag; // flag to control memory timing calculation. bit0= control EMRS2 Infineon 6530*4882a593Smuzhiyun ////////////////////////////////////GDDR parameters/////////////////////////////////// 6531*4882a593Smuzhiyun UCHAR uctCCDL; // 6532*4882a593Smuzhiyun UCHAR uctCRCRL; // 6533*4882a593Smuzhiyun UCHAR uctCRCWL; // 6534*4882a593Smuzhiyun UCHAR uctCKE; // 6535*4882a593Smuzhiyun UCHAR uctCKRSE; // 6536*4882a593Smuzhiyun UCHAR uctCKRSX; // 6537*4882a593Smuzhiyun UCHAR uctFAW32; // 6538*4882a593Smuzhiyun UCHAR ucMR4lo; // 6539*4882a593Smuzhiyun UCHAR ucMR4hi; // 6540*4882a593Smuzhiyun UCHAR ucMR5lo; // 6541*4882a593Smuzhiyun UCHAR ucMR5hi; // 6542*4882a593Smuzhiyun UCHAR ucTerminator; 6543*4882a593Smuzhiyun UCHAR ucReserved; 6544*4882a593Smuzhiyun }ATOM_MEMORY_TIMING_FORMAT_V2; 6545*4882a593Smuzhiyun 6546*4882a593Smuzhiyun typedef struct _ATOM_MEMORY_FORMAT 6547*4882a593Smuzhiyun { 6548*4882a593Smuzhiyun ULONG ulDllDisClock; // memory DLL will be disable when target memory clock is below this clock 6549*4882a593Smuzhiyun union{ 6550*4882a593Smuzhiyun USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type 6551*4882a593Smuzhiyun USHORT usDDR3_Reserved; // Not used for DDR3 memory 6552*4882a593Smuzhiyun }; 6553*4882a593Smuzhiyun union{ 6554*4882a593Smuzhiyun USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type 6555*4882a593Smuzhiyun USHORT usDDR3_MR3; // Used for DDR3 memory 6556*4882a593Smuzhiyun }; 6557*4882a593Smuzhiyun UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4;[3:0] - must not be used for now; 6558*4882a593Smuzhiyun UCHAR ucMemoryVenderID; // Predefined,never change across designs or memory type/vender. If not predefined, vendor detection table gets executed 6559*4882a593Smuzhiyun UCHAR ucRow; // Number of Row,in power of 2; 6560*4882a593Smuzhiyun UCHAR ucColumn; // Number of Column,in power of 2; 6561*4882a593Smuzhiyun UCHAR ucBank; // Nunber of Bank; 6562*4882a593Smuzhiyun UCHAR ucRank; // Number of Rank, in power of 2 6563*4882a593Smuzhiyun UCHAR ucBurstSize; // burst size, 0= burst size=4 1= burst size=8 6564*4882a593Smuzhiyun UCHAR ucDllDisBit; // position of DLL Enable/Disable bit in EMRS ( Extended Mode Register ) 6565*4882a593Smuzhiyun UCHAR ucRefreshRateFactor; // memory refresh rate in unit of ms 6566*4882a593Smuzhiyun UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 6567*4882a593Smuzhiyun UCHAR ucPreamble; //[7:4] Write Preamble, [3:0] Read Preamble 6568*4882a593Smuzhiyun UCHAR ucMemAttrib; // Memory Device Addribute, like RDBI/WDBI etc 6569*4882a593Smuzhiyun ATOM_MEMORY_TIMING_FORMAT asMemTiming[5]; //Memory Timing block sort from lower clock to higher clock 6570*4882a593Smuzhiyun }ATOM_MEMORY_FORMAT; 6571*4882a593Smuzhiyun 6572*4882a593Smuzhiyun 6573*4882a593Smuzhiyun typedef struct _ATOM_VRAM_MODULE_V3 6574*4882a593Smuzhiyun { 6575*4882a593Smuzhiyun ULONG ulChannelMapCfg; // board dependent paramenter:Channel combination 6576*4882a593Smuzhiyun USHORT usSize; // size of ATOM_VRAM_MODULE_V3 6577*4882a593Smuzhiyun USHORT usDefaultMVDDQ; // board dependent parameter:Default Memory Core Voltage 6578*4882a593Smuzhiyun USHORT usDefaultMVDDC; // board dependent parameter:Default Memory IO Voltage 6579*4882a593Smuzhiyun UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module 6580*4882a593Smuzhiyun UCHAR ucChannelNum; // board dependent parameter:Number of channel; 6581*4882a593Smuzhiyun UCHAR ucChannelSize; // board dependent parameter:32bit or 64bit 6582*4882a593Smuzhiyun UCHAR ucVREFI; // board dependnt parameter: EXT or INT +160mv to -140mv 6583*4882a593Smuzhiyun UCHAR ucNPL_RT; // board dependent parameter:NPL round trip delay, used for calculate memory timing parameters 6584*4882a593Smuzhiyun UCHAR ucFlag; // To enable/disable functionalities based on memory type 6585*4882a593Smuzhiyun ATOM_MEMORY_FORMAT asMemory; // describ all of video memory parameters from memory spec 6586*4882a593Smuzhiyun }ATOM_VRAM_MODULE_V3; 6587*4882a593Smuzhiyun 6588*4882a593Smuzhiyun 6589*4882a593Smuzhiyun //ATOM_VRAM_MODULE_V3.ucNPL_RT 6590*4882a593Smuzhiyun #define NPL_RT_MASK 0x0f 6591*4882a593Smuzhiyun #define BATTERY_ODT_MASK 0xc0 6592*4882a593Smuzhiyun 6593*4882a593Smuzhiyun #define ATOM_VRAM_MODULE ATOM_VRAM_MODULE_V3 6594*4882a593Smuzhiyun 6595*4882a593Smuzhiyun typedef struct _ATOM_VRAM_MODULE_V4 6596*4882a593Smuzhiyun { 6597*4882a593Smuzhiyun ULONG ulChannelMapCfg; // board dependent parameter: Channel combination 6598*4882a593Smuzhiyun USHORT usModuleSize; // size of ATOM_VRAM_MODULE_V4, make it easy for VBIOS to look for next entry of VRAM_MODULE 6599*4882a593Smuzhiyun USHORT usPrivateReserved; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!! 6600*4882a593Smuzhiyun // MC_ARB_RAMCFG (includes NOOFBANK,NOOFRANKS,NOOFROWS,NOOFCOLS) 6601*4882a593Smuzhiyun USHORT usReserved; 6602*4882a593Smuzhiyun UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module 6603*4882a593Smuzhiyun UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4; 0x5:DDR5 [3:0] - Must be 0x0 for now; 6604*4882a593Smuzhiyun UCHAR ucChannelNum; // Number of channels present in this module config 6605*4882a593Smuzhiyun UCHAR ucChannelWidth; // 0 - 32 bits; 1 - 64 bits 6606*4882a593Smuzhiyun UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 6607*4882a593Smuzhiyun UCHAR ucFlag; // To enable/disable functionalities based on memory type 6608*4882a593Smuzhiyun UCHAR ucMisc; // bit0: 0 - single rank; 1 - dual rank; bit2: 0 - burstlength 4, 1 - burstlength 8 6609*4882a593Smuzhiyun UCHAR ucVREFI; // board dependent parameter 6610*4882a593Smuzhiyun UCHAR ucNPL_RT; // board dependent parameter:NPL round trip delay, used for calculate memory timing parameters 6611*4882a593Smuzhiyun UCHAR ucPreamble; // [7:4] Write Preamble, [3:0] Read Preamble 6612*4882a593Smuzhiyun UCHAR ucMemorySize; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!! 6613*4882a593Smuzhiyun // Total memory size in unit of 16MB for CONFIG_MEMSIZE - bit[23:0] zeros 6614*4882a593Smuzhiyun UCHAR ucReserved[3]; 6615*4882a593Smuzhiyun 6616*4882a593Smuzhiyun //compare with V3, we flat the struct by merging ATOM_MEMORY_FORMAT (as is) into V4 as the same level 6617*4882a593Smuzhiyun union{ 6618*4882a593Smuzhiyun USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type 6619*4882a593Smuzhiyun USHORT usDDR3_Reserved; 6620*4882a593Smuzhiyun }; 6621*4882a593Smuzhiyun union{ 6622*4882a593Smuzhiyun USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type 6623*4882a593Smuzhiyun USHORT usDDR3_MR3; // Used for DDR3 memory 6624*4882a593Smuzhiyun }; 6625*4882a593Smuzhiyun UCHAR ucMemoryVenderID; // Predefined, If not predefined, vendor detection table gets executed 6626*4882a593Smuzhiyun UCHAR ucRefreshRateFactor; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 6627*4882a593Smuzhiyun UCHAR ucReserved2[2]; 6628*4882a593Smuzhiyun ATOM_MEMORY_TIMING_FORMAT asMemTiming[5];//Memory Timing block sort from lower clock to higher clock 6629*4882a593Smuzhiyun }ATOM_VRAM_MODULE_V4; 6630*4882a593Smuzhiyun 6631*4882a593Smuzhiyun #define VRAM_MODULE_V4_MISC_RANK_MASK 0x3 6632*4882a593Smuzhiyun #define VRAM_MODULE_V4_MISC_DUAL_RANK 0x1 6633*4882a593Smuzhiyun #define VRAM_MODULE_V4_MISC_BL_MASK 0x4 6634*4882a593Smuzhiyun #define VRAM_MODULE_V4_MISC_BL8 0x4 6635*4882a593Smuzhiyun #define VRAM_MODULE_V4_MISC_DUAL_CS 0x10 6636*4882a593Smuzhiyun 6637*4882a593Smuzhiyun typedef struct _ATOM_VRAM_MODULE_V5 6638*4882a593Smuzhiyun { 6639*4882a593Smuzhiyun ULONG ulChannelMapCfg; // board dependent parameter: Channel combination 6640*4882a593Smuzhiyun USHORT usModuleSize; // size of ATOM_VRAM_MODULE_V4, make it easy for VBIOS to look for next entry of VRAM_MODULE 6641*4882a593Smuzhiyun USHORT usPrivateReserved; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!! 6642*4882a593Smuzhiyun // MC_ARB_RAMCFG (includes NOOFBANK,NOOFRANKS,NOOFROWS,NOOFCOLS) 6643*4882a593Smuzhiyun USHORT usReserved; 6644*4882a593Smuzhiyun UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module 6645*4882a593Smuzhiyun UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4; 0x5:DDR5 [3:0] - Must be 0x0 for now; 6646*4882a593Smuzhiyun UCHAR ucChannelNum; // Number of channels present in this module config 6647*4882a593Smuzhiyun UCHAR ucChannelWidth; // 0 - 32 bits; 1 - 64 bits 6648*4882a593Smuzhiyun UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 6649*4882a593Smuzhiyun UCHAR ucFlag; // To enable/disable functionalities based on memory type 6650*4882a593Smuzhiyun UCHAR ucMisc; // bit0: 0 - single rank; 1 - dual rank; bit2: 0 - burstlength 4, 1 - burstlength 8 6651*4882a593Smuzhiyun UCHAR ucVREFI; // board dependent parameter 6652*4882a593Smuzhiyun UCHAR ucNPL_RT; // board dependent parameter:NPL round trip delay, used for calculate memory timing parameters 6653*4882a593Smuzhiyun UCHAR ucPreamble; // [7:4] Write Preamble, [3:0] Read Preamble 6654*4882a593Smuzhiyun UCHAR ucMemorySize; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!! 6655*4882a593Smuzhiyun // Total memory size in unit of 16MB for CONFIG_MEMSIZE - bit[23:0] zeros 6656*4882a593Smuzhiyun UCHAR ucReserved[3]; 6657*4882a593Smuzhiyun 6658*4882a593Smuzhiyun //compare with V3, we flat the struct by merging ATOM_MEMORY_FORMAT (as is) into V4 as the same level 6659*4882a593Smuzhiyun USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type 6660*4882a593Smuzhiyun USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type 6661*4882a593Smuzhiyun UCHAR ucMemoryVenderID; // Predefined, If not predefined, vendor detection table gets executed 6662*4882a593Smuzhiyun UCHAR ucRefreshRateFactor; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 6663*4882a593Smuzhiyun UCHAR ucFIFODepth; // FIFO depth supposes to be detected during vendor detection, but if we dont do vendor detection we have to hardcode FIFO Depth 6664*4882a593Smuzhiyun UCHAR ucCDR_Bandwidth; // [0:3]=Read CDR bandwidth, [4:7] - Write CDR Bandwidth 6665*4882a593Smuzhiyun ATOM_MEMORY_TIMING_FORMAT_V1 asMemTiming[5];//Memory Timing block sort from lower clock to higher clock 6666*4882a593Smuzhiyun }ATOM_VRAM_MODULE_V5; 6667*4882a593Smuzhiyun 6668*4882a593Smuzhiyun typedef struct _ATOM_VRAM_MODULE_V6 6669*4882a593Smuzhiyun { 6670*4882a593Smuzhiyun ULONG ulChannelMapCfg; // board dependent parameter: Channel combination 6671*4882a593Smuzhiyun USHORT usModuleSize; // size of ATOM_VRAM_MODULE_V4, make it easy for VBIOS to look for next entry of VRAM_MODULE 6672*4882a593Smuzhiyun USHORT usPrivateReserved; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!! 6673*4882a593Smuzhiyun // MC_ARB_RAMCFG (includes NOOFBANK,NOOFRANKS,NOOFROWS,NOOFCOLS) 6674*4882a593Smuzhiyun USHORT usReserved; 6675*4882a593Smuzhiyun UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module 6676*4882a593Smuzhiyun UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4; 0x5:DDR5 [3:0] - Must be 0x0 for now; 6677*4882a593Smuzhiyun UCHAR ucChannelNum; // Number of channels present in this module config 6678*4882a593Smuzhiyun UCHAR ucChannelWidth; // 0 - 32 bits; 1 - 64 bits 6679*4882a593Smuzhiyun UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 6680*4882a593Smuzhiyun UCHAR ucFlag; // To enable/disable functionalities based on memory type 6681*4882a593Smuzhiyun UCHAR ucMisc; // bit0: 0 - single rank; 1 - dual rank; bit2: 0 - burstlength 4, 1 - burstlength 8 6682*4882a593Smuzhiyun UCHAR ucVREFI; // board dependent parameter 6683*4882a593Smuzhiyun UCHAR ucNPL_RT; // board dependent parameter:NPL round trip delay, used for calculate memory timing parameters 6684*4882a593Smuzhiyun UCHAR ucPreamble; // [7:4] Write Preamble, [3:0] Read Preamble 6685*4882a593Smuzhiyun UCHAR ucMemorySize; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!! 6686*4882a593Smuzhiyun // Total memory size in unit of 16MB for CONFIG_MEMSIZE - bit[23:0] zeros 6687*4882a593Smuzhiyun UCHAR ucReserved[3]; 6688*4882a593Smuzhiyun 6689*4882a593Smuzhiyun //compare with V3, we flat the struct by merging ATOM_MEMORY_FORMAT (as is) into V4 as the same level 6690*4882a593Smuzhiyun USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type 6691*4882a593Smuzhiyun USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type 6692*4882a593Smuzhiyun UCHAR ucMemoryVenderID; // Predefined, If not predefined, vendor detection table gets executed 6693*4882a593Smuzhiyun UCHAR ucRefreshRateFactor; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 6694*4882a593Smuzhiyun UCHAR ucFIFODepth; // FIFO depth supposes to be detected during vendor detection, but if we dont do vendor detection we have to hardcode FIFO Depth 6695*4882a593Smuzhiyun UCHAR ucCDR_Bandwidth; // [0:3]=Read CDR bandwidth, [4:7] - Write CDR Bandwidth 6696*4882a593Smuzhiyun ATOM_MEMORY_TIMING_FORMAT_V2 asMemTiming[5];//Memory Timing block sort from lower clock to higher clock 6697*4882a593Smuzhiyun }ATOM_VRAM_MODULE_V6; 6698*4882a593Smuzhiyun 6699*4882a593Smuzhiyun typedef struct _ATOM_VRAM_MODULE_V7 6700*4882a593Smuzhiyun { 6701*4882a593Smuzhiyun // Design Specific Values 6702*4882a593Smuzhiyun ULONG ulChannelMapCfg; // mmMC_SHARED_CHREMAP 6703*4882a593Smuzhiyun USHORT usModuleSize; // Size of ATOM_VRAM_MODULE_V7 6704*4882a593Smuzhiyun USHORT usPrivateReserved; // MC_ARB_RAMCFG (includes NOOFBANK,NOOFRANKS,NOOFROWS,NOOFCOLS) 6705*4882a593Smuzhiyun USHORT usEnableChannels; // bit vector which indicate which channels are enabled 6706*4882a593Smuzhiyun UCHAR ucExtMemoryID; // Current memory module ID 6707*4882a593Smuzhiyun UCHAR ucMemoryType; // MEM_TYPE_DDR2/DDR3/GDDR3/GDDR5 6708*4882a593Smuzhiyun UCHAR ucChannelNum; // Number of mem. channels supported in this module 6709*4882a593Smuzhiyun UCHAR ucChannelWidth; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT 6710*4882a593Smuzhiyun UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx16 6711*4882a593Smuzhiyun UCHAR ucReserve; // Former container for Mx_FLAGS like DBI_AC_MODE_ENABLE_ASIC for GDDR4. Not used now. 6712*4882a593Smuzhiyun UCHAR ucMisc; // RANK_OF_THISMEMORY etc. 6713*4882a593Smuzhiyun UCHAR ucVREFI; // Not used. 6714*4882a593Smuzhiyun UCHAR ucNPL_RT; // Round trip delay (MC_SEQ_CAS_TIMING [28:24]:TCL=CL+NPL_RT-2). Always 2. 6715*4882a593Smuzhiyun UCHAR ucPreamble; // [7:4] Write Preamble, [3:0] Read Preamble 6716*4882a593Smuzhiyun UCHAR ucMemorySize; // Total memory size in unit of 16MB for CONFIG_MEMSIZE - bit[23:0] zeros 6717*4882a593Smuzhiyun USHORT usSEQSettingOffset; 6718*4882a593Smuzhiyun UCHAR ucReserved; 6719*4882a593Smuzhiyun // Memory Module specific values 6720*4882a593Smuzhiyun USHORT usEMRS2Value; // EMRS2/MR2 Value. 6721*4882a593Smuzhiyun USHORT usEMRS3Value; // EMRS3/MR3 Value. 6722*4882a593Smuzhiyun UCHAR ucMemoryVenderID; // [7:4] Revision, [3:0] Vendor code 6723*4882a593Smuzhiyun UCHAR ucRefreshRateFactor; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms) 6724*4882a593Smuzhiyun UCHAR ucFIFODepth; // FIFO depth can be detected during vendor detection, here is hardcoded per memory 6725*4882a593Smuzhiyun UCHAR ucCDR_Bandwidth; // [0:3]=Read CDR bandwidth, [4:7] - Write CDR Bandwidth 6726*4882a593Smuzhiyun char strMemPNString[20]; // part number end with '0'. 6727*4882a593Smuzhiyun }ATOM_VRAM_MODULE_V7; 6728*4882a593Smuzhiyun 6729*4882a593Smuzhiyun typedef struct _ATOM_VRAM_INFO_V2 6730*4882a593Smuzhiyun { 6731*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6732*4882a593Smuzhiyun UCHAR ucNumOfVRAMModule; 6733*4882a593Smuzhiyun ATOM_VRAM_MODULE aVramInfo[ATOM_MAX_NUMBER_OF_VRAM_MODULE]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 6734*4882a593Smuzhiyun }ATOM_VRAM_INFO_V2; 6735*4882a593Smuzhiyun 6736*4882a593Smuzhiyun typedef struct _ATOM_VRAM_INFO_V3 6737*4882a593Smuzhiyun { 6738*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6739*4882a593Smuzhiyun USHORT usMemAdjustTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory vendor specific MC adjust setting 6740*4882a593Smuzhiyun USHORT usMemClkPatchTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory clock specific MC setting 6741*4882a593Smuzhiyun USHORT usRerseved; 6742*4882a593Smuzhiyun UCHAR aVID_PinsShift[9]; // 8 bit strap maximum+terminator 6743*4882a593Smuzhiyun UCHAR ucNumOfVRAMModule; 6744*4882a593Smuzhiyun ATOM_VRAM_MODULE aVramInfo[ATOM_MAX_NUMBER_OF_VRAM_MODULE]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 6745*4882a593Smuzhiyun ATOM_INIT_REG_BLOCK asMemPatch; // for allocation 6746*4882a593Smuzhiyun // ATOM_INIT_REG_BLOCK aMemAdjust; 6747*4882a593Smuzhiyun }ATOM_VRAM_INFO_V3; 6748*4882a593Smuzhiyun 6749*4882a593Smuzhiyun #define ATOM_VRAM_INFO_LAST ATOM_VRAM_INFO_V3 6750*4882a593Smuzhiyun 6751*4882a593Smuzhiyun typedef struct _ATOM_VRAM_INFO_V4 6752*4882a593Smuzhiyun { 6753*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6754*4882a593Smuzhiyun USHORT usMemAdjustTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory vendor specific MC adjust setting 6755*4882a593Smuzhiyun USHORT usMemClkPatchTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory clock specific MC setting 6756*4882a593Smuzhiyun USHORT usRerseved; 6757*4882a593Smuzhiyun UCHAR ucMemDQ7_0ByteRemap; // DQ line byte remap, =0: Memory Data line BYTE0, =1: BYTE1, =2: BYTE2, =3: BYTE3 6758*4882a593Smuzhiyun ULONG ulMemDQ7_0BitRemap; // each DQ line ( 7~0) use 3bits, like: DQ0=Bit[2:0], DQ1:[5:3], ... DQ7:[23:21] 6759*4882a593Smuzhiyun UCHAR ucReservde[4]; 6760*4882a593Smuzhiyun UCHAR ucNumOfVRAMModule; 6761*4882a593Smuzhiyun ATOM_VRAM_MODULE_V4 aVramInfo[ATOM_MAX_NUMBER_OF_VRAM_MODULE]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 6762*4882a593Smuzhiyun ATOM_INIT_REG_BLOCK asMemPatch; // for allocation 6763*4882a593Smuzhiyun // ATOM_INIT_REG_BLOCK aMemAdjust; 6764*4882a593Smuzhiyun }ATOM_VRAM_INFO_V4; 6765*4882a593Smuzhiyun 6766*4882a593Smuzhiyun typedef struct _ATOM_VRAM_INFO_HEADER_V2_1 6767*4882a593Smuzhiyun { 6768*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6769*4882a593Smuzhiyun USHORT usMemAdjustTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory vendor specific MC adjust setting 6770*4882a593Smuzhiyun USHORT usMemClkPatchTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory clock specific MC setting 6771*4882a593Smuzhiyun USHORT usPerBytePresetOffset; // offset of ATOM_INIT_REG_BLOCK structure for Per Byte Offset Preset Settings 6772*4882a593Smuzhiyun USHORT usReserved[3]; 6773*4882a593Smuzhiyun UCHAR ucNumOfVRAMModule; // indicate number of VRAM module 6774*4882a593Smuzhiyun UCHAR ucMemoryClkPatchTblVer; // version of memory AC timing register list 6775*4882a593Smuzhiyun UCHAR ucVramModuleVer; // indicate ATOM_VRAM_MODUE version 6776*4882a593Smuzhiyun UCHAR ucReserved; 6777*4882a593Smuzhiyun ATOM_VRAM_MODULE_V7 aVramInfo[ATOM_MAX_NUMBER_OF_VRAM_MODULE]; // just for allocation, real number of blocks is in ucNumOfVRAMModule; 6778*4882a593Smuzhiyun }ATOM_VRAM_INFO_HEADER_V2_1; 6779*4882a593Smuzhiyun 6780*4882a593Smuzhiyun 6781*4882a593Smuzhiyun typedef struct _ATOM_VRAM_GPIO_DETECTION_INFO 6782*4882a593Smuzhiyun { 6783*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6784*4882a593Smuzhiyun UCHAR aVID_PinsShift[9]; //8 bit strap maximum+terminator 6785*4882a593Smuzhiyun }ATOM_VRAM_GPIO_DETECTION_INFO; 6786*4882a593Smuzhiyun 6787*4882a593Smuzhiyun 6788*4882a593Smuzhiyun typedef struct _ATOM_MEMORY_TRAINING_INFO 6789*4882a593Smuzhiyun { 6790*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 6791*4882a593Smuzhiyun UCHAR ucTrainingLoop; 6792*4882a593Smuzhiyun UCHAR ucReserved[3]; 6793*4882a593Smuzhiyun ATOM_INIT_REG_BLOCK asMemTrainingSetting; 6794*4882a593Smuzhiyun }ATOM_MEMORY_TRAINING_INFO; 6795*4882a593Smuzhiyun 6796*4882a593Smuzhiyun 6797*4882a593Smuzhiyun typedef struct SW_I2C_CNTL_DATA_PARAMETERS 6798*4882a593Smuzhiyun { 6799*4882a593Smuzhiyun UCHAR ucControl; 6800*4882a593Smuzhiyun UCHAR ucData; 6801*4882a593Smuzhiyun UCHAR ucSatus; 6802*4882a593Smuzhiyun UCHAR ucTemp; 6803*4882a593Smuzhiyun } SW_I2C_CNTL_DATA_PARAMETERS; 6804*4882a593Smuzhiyun 6805*4882a593Smuzhiyun #define SW_I2C_CNTL_DATA_PS_ALLOCATION SW_I2C_CNTL_DATA_PARAMETERS 6806*4882a593Smuzhiyun 6807*4882a593Smuzhiyun typedef struct _SW_I2C_IO_DATA_PARAMETERS 6808*4882a593Smuzhiyun { 6809*4882a593Smuzhiyun USHORT GPIO_Info; 6810*4882a593Smuzhiyun UCHAR ucAct; 6811*4882a593Smuzhiyun UCHAR ucData; 6812*4882a593Smuzhiyun } SW_I2C_IO_DATA_PARAMETERS; 6813*4882a593Smuzhiyun 6814*4882a593Smuzhiyun #define SW_I2C_IO_DATA_PS_ALLOCATION SW_I2C_IO_DATA_PARAMETERS 6815*4882a593Smuzhiyun 6816*4882a593Smuzhiyun /****************************SW I2C CNTL DEFINITIONS**********************/ 6817*4882a593Smuzhiyun #define SW_I2C_IO_RESET 0 6818*4882a593Smuzhiyun #define SW_I2C_IO_GET 1 6819*4882a593Smuzhiyun #define SW_I2C_IO_DRIVE 2 6820*4882a593Smuzhiyun #define SW_I2C_IO_SET 3 6821*4882a593Smuzhiyun #define SW_I2C_IO_START 4 6822*4882a593Smuzhiyun 6823*4882a593Smuzhiyun #define SW_I2C_IO_CLOCK 0 6824*4882a593Smuzhiyun #define SW_I2C_IO_DATA 0x80 6825*4882a593Smuzhiyun 6826*4882a593Smuzhiyun #define SW_I2C_IO_ZERO 0 6827*4882a593Smuzhiyun #define SW_I2C_IO_ONE 0x100 6828*4882a593Smuzhiyun 6829*4882a593Smuzhiyun #define SW_I2C_CNTL_READ 0 6830*4882a593Smuzhiyun #define SW_I2C_CNTL_WRITE 1 6831*4882a593Smuzhiyun #define SW_I2C_CNTL_START 2 6832*4882a593Smuzhiyun #define SW_I2C_CNTL_STOP 3 6833*4882a593Smuzhiyun #define SW_I2C_CNTL_OPEN 4 6834*4882a593Smuzhiyun #define SW_I2C_CNTL_CLOSE 5 6835*4882a593Smuzhiyun #define SW_I2C_CNTL_WRITE1BIT 6 6836*4882a593Smuzhiyun 6837*4882a593Smuzhiyun //==============================VESA definition Portion=============================== 6838*4882a593Smuzhiyun #define VESA_OEM_PRODUCT_REV "01.00" 6839*4882a593Smuzhiyun #define VESA_MODE_ATTRIBUTE_MODE_SUPPORT 0xBB //refer to VBE spec p.32, no TTY support 6840*4882a593Smuzhiyun #define VESA_MODE_WIN_ATTRIBUTE 7 6841*4882a593Smuzhiyun #define VESA_WIN_SIZE 64 6842*4882a593Smuzhiyun 6843*4882a593Smuzhiyun typedef struct _PTR_32_BIT_STRUCTURE 6844*4882a593Smuzhiyun { 6845*4882a593Smuzhiyun USHORT Offset16; 6846*4882a593Smuzhiyun USHORT Segment16; 6847*4882a593Smuzhiyun } PTR_32_BIT_STRUCTURE; 6848*4882a593Smuzhiyun 6849*4882a593Smuzhiyun typedef union _PTR_32_BIT_UNION 6850*4882a593Smuzhiyun { 6851*4882a593Smuzhiyun PTR_32_BIT_STRUCTURE SegmentOffset; 6852*4882a593Smuzhiyun ULONG Ptr32_Bit; 6853*4882a593Smuzhiyun } PTR_32_BIT_UNION; 6854*4882a593Smuzhiyun 6855*4882a593Smuzhiyun typedef struct _VBE_1_2_INFO_BLOCK_UPDATABLE 6856*4882a593Smuzhiyun { 6857*4882a593Smuzhiyun UCHAR VbeSignature[4]; 6858*4882a593Smuzhiyun USHORT VbeVersion; 6859*4882a593Smuzhiyun PTR_32_BIT_UNION OemStringPtr; 6860*4882a593Smuzhiyun UCHAR Capabilities[4]; 6861*4882a593Smuzhiyun PTR_32_BIT_UNION VideoModePtr; 6862*4882a593Smuzhiyun USHORT TotalMemory; 6863*4882a593Smuzhiyun } VBE_1_2_INFO_BLOCK_UPDATABLE; 6864*4882a593Smuzhiyun 6865*4882a593Smuzhiyun 6866*4882a593Smuzhiyun typedef struct _VBE_2_0_INFO_BLOCK_UPDATABLE 6867*4882a593Smuzhiyun { 6868*4882a593Smuzhiyun VBE_1_2_INFO_BLOCK_UPDATABLE CommonBlock; 6869*4882a593Smuzhiyun USHORT OemSoftRev; 6870*4882a593Smuzhiyun PTR_32_BIT_UNION OemVendorNamePtr; 6871*4882a593Smuzhiyun PTR_32_BIT_UNION OemProductNamePtr; 6872*4882a593Smuzhiyun PTR_32_BIT_UNION OemProductRevPtr; 6873*4882a593Smuzhiyun } VBE_2_0_INFO_BLOCK_UPDATABLE; 6874*4882a593Smuzhiyun 6875*4882a593Smuzhiyun typedef union _VBE_VERSION_UNION 6876*4882a593Smuzhiyun { 6877*4882a593Smuzhiyun VBE_2_0_INFO_BLOCK_UPDATABLE VBE_2_0_InfoBlock; 6878*4882a593Smuzhiyun VBE_1_2_INFO_BLOCK_UPDATABLE VBE_1_2_InfoBlock; 6879*4882a593Smuzhiyun } VBE_VERSION_UNION; 6880*4882a593Smuzhiyun 6881*4882a593Smuzhiyun typedef struct _VBE_INFO_BLOCK 6882*4882a593Smuzhiyun { 6883*4882a593Smuzhiyun VBE_VERSION_UNION UpdatableVBE_Info; 6884*4882a593Smuzhiyun UCHAR Reserved[222]; 6885*4882a593Smuzhiyun UCHAR OemData[256]; 6886*4882a593Smuzhiyun } VBE_INFO_BLOCK; 6887*4882a593Smuzhiyun 6888*4882a593Smuzhiyun typedef struct _VBE_FP_INFO 6889*4882a593Smuzhiyun { 6890*4882a593Smuzhiyun USHORT HSize; 6891*4882a593Smuzhiyun USHORT VSize; 6892*4882a593Smuzhiyun USHORT FPType; 6893*4882a593Smuzhiyun UCHAR RedBPP; 6894*4882a593Smuzhiyun UCHAR GreenBPP; 6895*4882a593Smuzhiyun UCHAR BlueBPP; 6896*4882a593Smuzhiyun UCHAR ReservedBPP; 6897*4882a593Smuzhiyun ULONG RsvdOffScrnMemSize; 6898*4882a593Smuzhiyun ULONG RsvdOffScrnMEmPtr; 6899*4882a593Smuzhiyun UCHAR Reserved[14]; 6900*4882a593Smuzhiyun } VBE_FP_INFO; 6901*4882a593Smuzhiyun 6902*4882a593Smuzhiyun typedef struct _VESA_MODE_INFO_BLOCK 6903*4882a593Smuzhiyun { 6904*4882a593Smuzhiyun // Mandatory information for all VBE revisions 6905*4882a593Smuzhiyun USHORT ModeAttributes; // dw ? ; mode attributes 6906*4882a593Smuzhiyun UCHAR WinAAttributes; // db ? ; window A attributes 6907*4882a593Smuzhiyun UCHAR WinBAttributes; // db ? ; window B attributes 6908*4882a593Smuzhiyun USHORT WinGranularity; // dw ? ; window granularity 6909*4882a593Smuzhiyun USHORT WinSize; // dw ? ; window size 6910*4882a593Smuzhiyun USHORT WinASegment; // dw ? ; window A start segment 6911*4882a593Smuzhiyun USHORT WinBSegment; // dw ? ; window B start segment 6912*4882a593Smuzhiyun ULONG WinFuncPtr; // dd ? ; real mode pointer to window function 6913*4882a593Smuzhiyun USHORT BytesPerScanLine;// dw ? ; bytes per scan line 6914*4882a593Smuzhiyun 6915*4882a593Smuzhiyun //; Mandatory information for VBE 1.2 and above 6916*4882a593Smuzhiyun USHORT XResolution; // dw ? ; horizontal resolution in pixels or characters 6917*4882a593Smuzhiyun USHORT YResolution; // dw ? ; vertical resolution in pixels or characters 6918*4882a593Smuzhiyun UCHAR XCharSize; // db ? ; character cell width in pixels 6919*4882a593Smuzhiyun UCHAR YCharSize; // db ? ; character cell height in pixels 6920*4882a593Smuzhiyun UCHAR NumberOfPlanes; // db ? ; number of memory planes 6921*4882a593Smuzhiyun UCHAR BitsPerPixel; // db ? ; bits per pixel 6922*4882a593Smuzhiyun UCHAR NumberOfBanks; // db ? ; number of banks 6923*4882a593Smuzhiyun UCHAR MemoryModel; // db ? ; memory model type 6924*4882a593Smuzhiyun UCHAR BankSize; // db ? ; bank size in KB 6925*4882a593Smuzhiyun UCHAR NumberOfImagePages;// db ? ; number of images 6926*4882a593Smuzhiyun UCHAR ReservedForPageFunction;//db 1 ; reserved for page function 6927*4882a593Smuzhiyun 6928*4882a593Smuzhiyun //; Direct Color fields(required for direct/6 and YUV/7 memory models) 6929*4882a593Smuzhiyun UCHAR RedMaskSize; // db ? ; size of direct color red mask in bits 6930*4882a593Smuzhiyun UCHAR RedFieldPosition; // db ? ; bit position of lsb of red mask 6931*4882a593Smuzhiyun UCHAR GreenMaskSize; // db ? ; size of direct color green mask in bits 6932*4882a593Smuzhiyun UCHAR GreenFieldPosition; // db ? ; bit position of lsb of green mask 6933*4882a593Smuzhiyun UCHAR BlueMaskSize; // db ? ; size of direct color blue mask in bits 6934*4882a593Smuzhiyun UCHAR BlueFieldPosition; // db ? ; bit position of lsb of blue mask 6935*4882a593Smuzhiyun UCHAR RsvdMaskSize; // db ? ; size of direct color reserved mask in bits 6936*4882a593Smuzhiyun UCHAR RsvdFieldPosition; // db ? ; bit position of lsb of reserved mask 6937*4882a593Smuzhiyun UCHAR DirectColorModeInfo;// db ? ; direct color mode attributes 6938*4882a593Smuzhiyun 6939*4882a593Smuzhiyun //; Mandatory information for VBE 2.0 and above 6940*4882a593Smuzhiyun ULONG PhysBasePtr; // dd ? ; physical address for flat memory frame buffer 6941*4882a593Smuzhiyun ULONG Reserved_1; // dd 0 ; reserved - always set to 0 6942*4882a593Smuzhiyun USHORT Reserved_2; // dw 0 ; reserved - always set to 0 6943*4882a593Smuzhiyun 6944*4882a593Smuzhiyun //; Mandatory information for VBE 3.0 and above 6945*4882a593Smuzhiyun USHORT LinBytesPerScanLine; // dw ? ; bytes per scan line for linear modes 6946*4882a593Smuzhiyun UCHAR BnkNumberOfImagePages;// db ? ; number of images for banked modes 6947*4882a593Smuzhiyun UCHAR LinNumberOfImagPages; // db ? ; number of images for linear modes 6948*4882a593Smuzhiyun UCHAR LinRedMaskSize; // db ? ; size of direct color red mask(linear modes) 6949*4882a593Smuzhiyun UCHAR LinRedFieldPosition; // db ? ; bit position of lsb of red mask(linear modes) 6950*4882a593Smuzhiyun UCHAR LinGreenMaskSize; // db ? ; size of direct color green mask(linear modes) 6951*4882a593Smuzhiyun UCHAR LinGreenFieldPosition;// db ? ; bit position of lsb of green mask(linear modes) 6952*4882a593Smuzhiyun UCHAR LinBlueMaskSize; // db ? ; size of direct color blue mask(linear modes) 6953*4882a593Smuzhiyun UCHAR LinBlueFieldPosition; // db ? ; bit position of lsb of blue mask(linear modes) 6954*4882a593Smuzhiyun UCHAR LinRsvdMaskSize; // db ? ; size of direct color reserved mask(linear modes) 6955*4882a593Smuzhiyun UCHAR LinRsvdFieldPosition; // db ? ; bit position of lsb of reserved mask(linear modes) 6956*4882a593Smuzhiyun ULONG MaxPixelClock; // dd ? ; maximum pixel clock(in Hz) for graphics mode 6957*4882a593Smuzhiyun UCHAR Reserved; // db 190 dup (0) 6958*4882a593Smuzhiyun } VESA_MODE_INFO_BLOCK; 6959*4882a593Smuzhiyun 6960*4882a593Smuzhiyun // BIOS function CALLS 6961*4882a593Smuzhiyun #define ATOM_BIOS_EXTENDED_FUNCTION_CODE 0xA0 // ATI Extended Function code 6962*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_COP_MODE 0x00 6963*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_SHORT_QUERY1 0x04 6964*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_SHORT_QUERY2 0x05 6965*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_SHORT_QUERY3 0x06 6966*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_GET_DDC 0x0B 6967*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_ASIC_DSTATE 0x0E 6968*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_DEBUG_PLAY 0x0F 6969*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_STV_STD 0x16 6970*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_DEVICE_DET 0x17 6971*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_DEVICE_SWITCH 0x18 6972*4882a593Smuzhiyun 6973*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_PANEL_CONTROL 0x82 6974*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_OLD_DEVICE_DET 0x83 6975*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_OLD_DEVICE_SWITCH 0x84 6976*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_HW_ICON 0x8A 6977*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_SET_CMOS 0x8B 6978*4882a593Smuzhiyun #define SUB_FUNCTION_UPDATE_DISPLAY_INFO 0x8000 // Sub function 80 6979*4882a593Smuzhiyun #define SUB_FUNCTION_UPDATE_EXPANSION_INFO 0x8100 // Sub function 80 6980*4882a593Smuzhiyun 6981*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_DISPLAY_INFO 0x8D 6982*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_DEVICE_ON_OFF 0x8E 6983*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_VIDEO_STATE 0x8F 6984*4882a593Smuzhiyun #define ATOM_SUB_FUNCTION_GET_CRITICAL_STATE 0x0300 // Sub function 03 6985*4882a593Smuzhiyun #define ATOM_SUB_FUNCTION_GET_LIDSTATE 0x0700 // Sub function 7 6986*4882a593Smuzhiyun #define ATOM_SUB_FUNCTION_THERMAL_STATE_NOTICE 0x1400 // Notify caller the current thermal state 6987*4882a593Smuzhiyun #define ATOM_SUB_FUNCTION_CRITICAL_STATE_NOTICE 0x8300 // Notify caller the current critical state 6988*4882a593Smuzhiyun #define ATOM_SUB_FUNCTION_SET_LIDSTATE 0x8500 // Sub function 85 6989*4882a593Smuzhiyun #define ATOM_SUB_FUNCTION_GET_REQ_DISPLAY_FROM_SBIOS_MODE 0x8900// Sub function 89 6990*4882a593Smuzhiyun #define ATOM_SUB_FUNCTION_INFORM_ADC_SUPPORT 0x9400 // Notify caller that ADC is supported 6991*4882a593Smuzhiyun 6992*4882a593Smuzhiyun 6993*4882a593Smuzhiyun #define ATOM_BIOS_FUNCTION_VESA_DPMS 0x4F10 // Set DPMS 6994*4882a593Smuzhiyun #define ATOM_SUB_FUNCTION_SET_DPMS 0x0001 // BL: Sub function 01 6995*4882a593Smuzhiyun #define ATOM_SUB_FUNCTION_GET_DPMS 0x0002 // BL: Sub function 02 6996*4882a593Smuzhiyun #define ATOM_PARAMETER_VESA_DPMS_ON 0x0000 // BH Parameter for DPMS ON. 6997*4882a593Smuzhiyun #define ATOM_PARAMETER_VESA_DPMS_STANDBY 0x0100 // BH Parameter for DPMS STANDBY 6998*4882a593Smuzhiyun #define ATOM_PARAMETER_VESA_DPMS_SUSPEND 0x0200 // BH Parameter for DPMS SUSPEND 6999*4882a593Smuzhiyun #define ATOM_PARAMETER_VESA_DPMS_OFF 0x0400 // BH Parameter for DPMS OFF 7000*4882a593Smuzhiyun #define ATOM_PARAMETER_VESA_DPMS_REDUCE_ON 0x0800 // BH Parameter for DPMS REDUCE ON (NOT SUPPORTED) 7001*4882a593Smuzhiyun 7002*4882a593Smuzhiyun #define ATOM_BIOS_RETURN_CODE_MASK 0x0000FF00L 7003*4882a593Smuzhiyun #define ATOM_BIOS_REG_HIGH_MASK 0x0000FF00L 7004*4882a593Smuzhiyun #define ATOM_BIOS_REG_LOW_MASK 0x000000FFL 7005*4882a593Smuzhiyun 7006*4882a593Smuzhiyun // structure used for VBIOS only 7007*4882a593Smuzhiyun 7008*4882a593Smuzhiyun //DispOutInfoTable 7009*4882a593Smuzhiyun typedef struct _ASIC_TRANSMITTER_INFO 7010*4882a593Smuzhiyun { 7011*4882a593Smuzhiyun USHORT usTransmitterObjId; 7012*4882a593Smuzhiyun USHORT usSupportDevice; 7013*4882a593Smuzhiyun UCHAR ucTransmitterCmdTblId; 7014*4882a593Smuzhiyun UCHAR ucConfig; 7015*4882a593Smuzhiyun UCHAR ucEncoderID; //available 1st encoder ( default ) 7016*4882a593Smuzhiyun UCHAR ucOptionEncoderID; //available 2nd encoder ( optional ) 7017*4882a593Smuzhiyun UCHAR uc2ndEncoderID; 7018*4882a593Smuzhiyun UCHAR ucReserved; 7019*4882a593Smuzhiyun }ASIC_TRANSMITTER_INFO; 7020*4882a593Smuzhiyun 7021*4882a593Smuzhiyun #define ASIC_TRANSMITTER_INFO_CONFIG__DVO_SDR_MODE 0x01 7022*4882a593Smuzhiyun #define ASIC_TRANSMITTER_INFO_CONFIG__COHERENT_MODE 0x02 7023*4882a593Smuzhiyun #define ASIC_TRANSMITTER_INFO_CONFIG__ENCODEROBJ_ID_MASK 0xc4 7024*4882a593Smuzhiyun #define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_A 0x00 7025*4882a593Smuzhiyun #define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_B 0x04 7026*4882a593Smuzhiyun #define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_C 0x40 7027*4882a593Smuzhiyun #define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_D 0x44 7028*4882a593Smuzhiyun #define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_E 0x80 7029*4882a593Smuzhiyun #define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_F 0x84 7030*4882a593Smuzhiyun 7031*4882a593Smuzhiyun typedef struct _ASIC_ENCODER_INFO 7032*4882a593Smuzhiyun { 7033*4882a593Smuzhiyun UCHAR ucEncoderID; 7034*4882a593Smuzhiyun UCHAR ucEncoderConfig; 7035*4882a593Smuzhiyun USHORT usEncoderCmdTblId; 7036*4882a593Smuzhiyun }ASIC_ENCODER_INFO; 7037*4882a593Smuzhiyun 7038*4882a593Smuzhiyun typedef struct _ATOM_DISP_OUT_INFO 7039*4882a593Smuzhiyun { 7040*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7041*4882a593Smuzhiyun USHORT ptrTransmitterInfo; 7042*4882a593Smuzhiyun USHORT ptrEncoderInfo; 7043*4882a593Smuzhiyun ASIC_TRANSMITTER_INFO asTransmitterInfo[1]; 7044*4882a593Smuzhiyun ASIC_ENCODER_INFO asEncoderInfo[1]; 7045*4882a593Smuzhiyun }ATOM_DISP_OUT_INFO; 7046*4882a593Smuzhiyun 7047*4882a593Smuzhiyun typedef struct _ATOM_DISP_OUT_INFO_V2 7048*4882a593Smuzhiyun { 7049*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7050*4882a593Smuzhiyun USHORT ptrTransmitterInfo; 7051*4882a593Smuzhiyun USHORT ptrEncoderInfo; 7052*4882a593Smuzhiyun USHORT ptrMainCallParserFar; // direct address of main parser call in VBIOS binary. 7053*4882a593Smuzhiyun ASIC_TRANSMITTER_INFO asTransmitterInfo[1]; 7054*4882a593Smuzhiyun ASIC_ENCODER_INFO asEncoderInfo[1]; 7055*4882a593Smuzhiyun }ATOM_DISP_OUT_INFO_V2; 7056*4882a593Smuzhiyun 7057*4882a593Smuzhiyun 7058*4882a593Smuzhiyun typedef struct _ATOM_DISP_CLOCK_ID { 7059*4882a593Smuzhiyun UCHAR ucPpllId; 7060*4882a593Smuzhiyun UCHAR ucPpllAttribute; 7061*4882a593Smuzhiyun }ATOM_DISP_CLOCK_ID; 7062*4882a593Smuzhiyun 7063*4882a593Smuzhiyun // ucPpllAttribute 7064*4882a593Smuzhiyun #define CLOCK_SOURCE_SHAREABLE 0x01 7065*4882a593Smuzhiyun #define CLOCK_SOURCE_DP_MODE 0x02 7066*4882a593Smuzhiyun #define CLOCK_SOURCE_NONE_DP_MODE 0x04 7067*4882a593Smuzhiyun 7068*4882a593Smuzhiyun //DispOutInfoTable 7069*4882a593Smuzhiyun typedef struct _ASIC_TRANSMITTER_INFO_V2 7070*4882a593Smuzhiyun { 7071*4882a593Smuzhiyun USHORT usTransmitterObjId; 7072*4882a593Smuzhiyun USHORT usDispClkIdOffset; // point to clock source id list supported by Encoder Object 7073*4882a593Smuzhiyun UCHAR ucTransmitterCmdTblId; 7074*4882a593Smuzhiyun UCHAR ucConfig; 7075*4882a593Smuzhiyun UCHAR ucEncoderID; // available 1st encoder ( default ) 7076*4882a593Smuzhiyun UCHAR ucOptionEncoderID; // available 2nd encoder ( optional ) 7077*4882a593Smuzhiyun UCHAR uc2ndEncoderID; 7078*4882a593Smuzhiyun UCHAR ucReserved; 7079*4882a593Smuzhiyun }ASIC_TRANSMITTER_INFO_V2; 7080*4882a593Smuzhiyun 7081*4882a593Smuzhiyun typedef struct _ATOM_DISP_OUT_INFO_V3 7082*4882a593Smuzhiyun { 7083*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7084*4882a593Smuzhiyun USHORT ptrTransmitterInfo; 7085*4882a593Smuzhiyun USHORT ptrEncoderInfo; 7086*4882a593Smuzhiyun USHORT ptrMainCallParserFar; // direct address of main parser call in VBIOS binary. 7087*4882a593Smuzhiyun USHORT usReserved; 7088*4882a593Smuzhiyun UCHAR ucDCERevision; 7089*4882a593Smuzhiyun UCHAR ucMaxDispEngineNum; 7090*4882a593Smuzhiyun UCHAR ucMaxActiveDispEngineNum; 7091*4882a593Smuzhiyun UCHAR ucMaxPPLLNum; 7092*4882a593Smuzhiyun UCHAR ucCoreRefClkSource; // value of CORE_REF_CLK_SOURCE 7093*4882a593Smuzhiyun UCHAR ucDispCaps; 7094*4882a593Smuzhiyun UCHAR ucReserved[2]; 7095*4882a593Smuzhiyun ASIC_TRANSMITTER_INFO_V2 asTransmitterInfo[1]; // for alligment only 7096*4882a593Smuzhiyun }ATOM_DISP_OUT_INFO_V3; 7097*4882a593Smuzhiyun 7098*4882a593Smuzhiyun //ucDispCaps 7099*4882a593Smuzhiyun #define DISPLAY_CAPS__DP_PCLK_FROM_PPLL 0x01 7100*4882a593Smuzhiyun #define DISPLAY_CAPS__FORCE_DISPDEV_CONNECTED 0x02 7101*4882a593Smuzhiyun 7102*4882a593Smuzhiyun typedef enum CORE_REF_CLK_SOURCE{ 7103*4882a593Smuzhiyun CLOCK_SRC_XTALIN=0, 7104*4882a593Smuzhiyun CLOCK_SRC_XO_IN=1, 7105*4882a593Smuzhiyun CLOCK_SRC_XO_IN2=2, 7106*4882a593Smuzhiyun }CORE_REF_CLK_SOURCE; 7107*4882a593Smuzhiyun 7108*4882a593Smuzhiyun // DispDevicePriorityInfo 7109*4882a593Smuzhiyun typedef struct _ATOM_DISPLAY_DEVICE_PRIORITY_INFO 7110*4882a593Smuzhiyun { 7111*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7112*4882a593Smuzhiyun USHORT asDevicePriority[16]; 7113*4882a593Smuzhiyun }ATOM_DISPLAY_DEVICE_PRIORITY_INFO; 7114*4882a593Smuzhiyun 7115*4882a593Smuzhiyun //ProcessAuxChannelTransactionTable 7116*4882a593Smuzhiyun typedef struct _PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS 7117*4882a593Smuzhiyun { 7118*4882a593Smuzhiyun USHORT lpAuxRequest; 7119*4882a593Smuzhiyun USHORT lpDataOut; 7120*4882a593Smuzhiyun UCHAR ucChannelID; 7121*4882a593Smuzhiyun union 7122*4882a593Smuzhiyun { 7123*4882a593Smuzhiyun UCHAR ucReplyStatus; 7124*4882a593Smuzhiyun UCHAR ucDelay; 7125*4882a593Smuzhiyun }; 7126*4882a593Smuzhiyun UCHAR ucDataOutLen; 7127*4882a593Smuzhiyun UCHAR ucReserved; 7128*4882a593Smuzhiyun }PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS; 7129*4882a593Smuzhiyun 7130*4882a593Smuzhiyun //ProcessAuxChannelTransactionTable 7131*4882a593Smuzhiyun typedef struct _PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS_V2 7132*4882a593Smuzhiyun { 7133*4882a593Smuzhiyun USHORT lpAuxRequest; 7134*4882a593Smuzhiyun USHORT lpDataOut; 7135*4882a593Smuzhiyun UCHAR ucChannelID; 7136*4882a593Smuzhiyun union 7137*4882a593Smuzhiyun { 7138*4882a593Smuzhiyun UCHAR ucReplyStatus; 7139*4882a593Smuzhiyun UCHAR ucDelay; 7140*4882a593Smuzhiyun }; 7141*4882a593Smuzhiyun UCHAR ucDataOutLen; 7142*4882a593Smuzhiyun UCHAR ucHPD_ID; //=0: HPD1, =1: HPD2, =2: HPD3, =3: HPD4, =4: HPD5, =5: HPD6 7143*4882a593Smuzhiyun }PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS_V2; 7144*4882a593Smuzhiyun 7145*4882a593Smuzhiyun #define PROCESS_AUX_CHANNEL_TRANSACTION_PS_ALLOCATION PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS 7146*4882a593Smuzhiyun 7147*4882a593Smuzhiyun //GetSinkType 7148*4882a593Smuzhiyun 7149*4882a593Smuzhiyun typedef struct _DP_ENCODER_SERVICE_PARAMETERS 7150*4882a593Smuzhiyun { 7151*4882a593Smuzhiyun USHORT ucLinkClock; 7152*4882a593Smuzhiyun union 7153*4882a593Smuzhiyun { 7154*4882a593Smuzhiyun UCHAR ucConfig; // for DP training command 7155*4882a593Smuzhiyun UCHAR ucI2cId; // use for GET_SINK_TYPE command 7156*4882a593Smuzhiyun }; 7157*4882a593Smuzhiyun UCHAR ucAction; 7158*4882a593Smuzhiyun UCHAR ucStatus; 7159*4882a593Smuzhiyun UCHAR ucLaneNum; 7160*4882a593Smuzhiyun UCHAR ucReserved[2]; 7161*4882a593Smuzhiyun }DP_ENCODER_SERVICE_PARAMETERS; 7162*4882a593Smuzhiyun 7163*4882a593Smuzhiyun // ucAction 7164*4882a593Smuzhiyun #define ATOM_DP_ACTION_GET_SINK_TYPE 0x01 7165*4882a593Smuzhiyun /* obselete */ 7166*4882a593Smuzhiyun #define ATOM_DP_ACTION_TRAINING_START 0x02 7167*4882a593Smuzhiyun #define ATOM_DP_ACTION_TRAINING_COMPLETE 0x03 7168*4882a593Smuzhiyun #define ATOM_DP_ACTION_TRAINING_PATTERN_SEL 0x04 7169*4882a593Smuzhiyun #define ATOM_DP_ACTION_SET_VSWING_PREEMP 0x05 7170*4882a593Smuzhiyun #define ATOM_DP_ACTION_GET_VSWING_PREEMP 0x06 7171*4882a593Smuzhiyun #define ATOM_DP_ACTION_BLANKING 0x07 7172*4882a593Smuzhiyun 7173*4882a593Smuzhiyun // ucConfig 7174*4882a593Smuzhiyun #define ATOM_DP_CONFIG_ENCODER_SEL_MASK 0x03 7175*4882a593Smuzhiyun #define ATOM_DP_CONFIG_DIG1_ENCODER 0x00 7176*4882a593Smuzhiyun #define ATOM_DP_CONFIG_DIG2_ENCODER 0x01 7177*4882a593Smuzhiyun #define ATOM_DP_CONFIG_EXTERNAL_ENCODER 0x02 7178*4882a593Smuzhiyun #define ATOM_DP_CONFIG_LINK_SEL_MASK 0x04 7179*4882a593Smuzhiyun #define ATOM_DP_CONFIG_LINK_A 0x00 7180*4882a593Smuzhiyun #define ATOM_DP_CONFIG_LINK_B 0x04 7181*4882a593Smuzhiyun /* /obselete */ 7182*4882a593Smuzhiyun #define DP_ENCODER_SERVICE_PS_ALLOCATION WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS 7183*4882a593Smuzhiyun 7184*4882a593Smuzhiyun 7185*4882a593Smuzhiyun typedef struct _DP_ENCODER_SERVICE_PARAMETERS_V2 7186*4882a593Smuzhiyun { 7187*4882a593Smuzhiyun USHORT usExtEncoderObjId; // External Encoder Object Id, output parameter only, use when ucAction = DP_SERVICE_V2_ACTION_DET_EXT_CONNECTION 7188*4882a593Smuzhiyun UCHAR ucAuxId; 7189*4882a593Smuzhiyun UCHAR ucAction; 7190*4882a593Smuzhiyun UCHAR ucSinkType; // Iput and Output parameters. 7191*4882a593Smuzhiyun UCHAR ucHPDId; // Input parameter, used when ucAction = DP_SERVICE_V2_ACTION_DET_EXT_CONNECTION 7192*4882a593Smuzhiyun UCHAR ucReserved[2]; 7193*4882a593Smuzhiyun }DP_ENCODER_SERVICE_PARAMETERS_V2; 7194*4882a593Smuzhiyun 7195*4882a593Smuzhiyun typedef struct _DP_ENCODER_SERVICE_PS_ALLOCATION_V2 7196*4882a593Smuzhiyun { 7197*4882a593Smuzhiyun DP_ENCODER_SERVICE_PARAMETERS_V2 asDPServiceParam; 7198*4882a593Smuzhiyun PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS_V2 asAuxParam; 7199*4882a593Smuzhiyun }DP_ENCODER_SERVICE_PS_ALLOCATION_V2; 7200*4882a593Smuzhiyun 7201*4882a593Smuzhiyun // ucAction 7202*4882a593Smuzhiyun #define DP_SERVICE_V2_ACTION_GET_SINK_TYPE 0x01 7203*4882a593Smuzhiyun #define DP_SERVICE_V2_ACTION_DET_LCD_CONNECTION 0x02 7204*4882a593Smuzhiyun 7205*4882a593Smuzhiyun 7206*4882a593Smuzhiyun // DP_TRAINING_TABLE 7207*4882a593Smuzhiyun #define DPCD_SET_LINKRATE_LANENUM_PATTERN1_TBL_ADDR ATOM_DP_TRAINING_TBL_ADDR 7208*4882a593Smuzhiyun #define DPCD_SET_SS_CNTL_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 8 ) 7209*4882a593Smuzhiyun #define DPCD_SET_LANE_VSWING_PREEMP_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 16 ) 7210*4882a593Smuzhiyun #define DPCD_SET_TRAINING_PATTERN0_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 24 ) 7211*4882a593Smuzhiyun #define DPCD_SET_TRAINING_PATTERN2_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 32) 7212*4882a593Smuzhiyun #define DPCD_GET_LINKRATE_LANENUM_SS_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 40) 7213*4882a593Smuzhiyun #define DPCD_GET_LANE_STATUS_ADJUST_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 48) 7214*4882a593Smuzhiyun #define DP_I2C_AUX_DDC_WRITE_START_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 60) 7215*4882a593Smuzhiyun #define DP_I2C_AUX_DDC_WRITE_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 64) 7216*4882a593Smuzhiyun #define DP_I2C_AUX_DDC_READ_START_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 72) 7217*4882a593Smuzhiyun #define DP_I2C_AUX_DDC_READ_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 76) 7218*4882a593Smuzhiyun #define DP_I2C_AUX_DDC_WRITE_END_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 80) 7219*4882a593Smuzhiyun #define DP_I2C_AUX_DDC_READ_END_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 84) 7220*4882a593Smuzhiyun 7221*4882a593Smuzhiyun typedef struct _PROCESS_I2C_CHANNEL_TRANSACTION_PARAMETERS 7222*4882a593Smuzhiyun { 7223*4882a593Smuzhiyun UCHAR ucI2CSpeed; 7224*4882a593Smuzhiyun union 7225*4882a593Smuzhiyun { 7226*4882a593Smuzhiyun UCHAR ucRegIndex; 7227*4882a593Smuzhiyun UCHAR ucStatus; 7228*4882a593Smuzhiyun }; 7229*4882a593Smuzhiyun USHORT lpI2CDataOut; 7230*4882a593Smuzhiyun UCHAR ucFlag; 7231*4882a593Smuzhiyun UCHAR ucTransBytes; 7232*4882a593Smuzhiyun UCHAR ucSlaveAddr; 7233*4882a593Smuzhiyun UCHAR ucLineNumber; 7234*4882a593Smuzhiyun }PROCESS_I2C_CHANNEL_TRANSACTION_PARAMETERS; 7235*4882a593Smuzhiyun 7236*4882a593Smuzhiyun #define PROCESS_I2C_CHANNEL_TRANSACTION_PS_ALLOCATION PROCESS_I2C_CHANNEL_TRANSACTION_PARAMETERS 7237*4882a593Smuzhiyun 7238*4882a593Smuzhiyun //ucFlag 7239*4882a593Smuzhiyun #define HW_I2C_WRITE 1 7240*4882a593Smuzhiyun #define HW_I2C_READ 0 7241*4882a593Smuzhiyun #define I2C_2BYTE_ADDR 0x02 7242*4882a593Smuzhiyun 7243*4882a593Smuzhiyun /****************************************************************************/ 7244*4882a593Smuzhiyun // Structures used by HW_Misc_OperationTable 7245*4882a593Smuzhiyun /****************************************************************************/ 7246*4882a593Smuzhiyun typedef struct _ATOM_HW_MISC_OPERATION_INPUT_PARAMETER_V1_1 7247*4882a593Smuzhiyun { 7248*4882a593Smuzhiyun UCHAR ucCmd; // Input: To tell which action to take 7249*4882a593Smuzhiyun UCHAR ucReserved[3]; 7250*4882a593Smuzhiyun ULONG ulReserved; 7251*4882a593Smuzhiyun }ATOM_HW_MISC_OPERATION_INPUT_PARAMETER_V1_1; 7252*4882a593Smuzhiyun 7253*4882a593Smuzhiyun typedef struct _ATOM_HW_MISC_OPERATION_OUTPUT_PARAMETER_V1_1 7254*4882a593Smuzhiyun { 7255*4882a593Smuzhiyun UCHAR ucReturnCode; // Output: Return value base on action was taken 7256*4882a593Smuzhiyun UCHAR ucReserved[3]; 7257*4882a593Smuzhiyun ULONG ulReserved; 7258*4882a593Smuzhiyun }ATOM_HW_MISC_OPERATION_OUTPUT_PARAMETER_V1_1; 7259*4882a593Smuzhiyun 7260*4882a593Smuzhiyun // Actions code 7261*4882a593Smuzhiyun #define ATOM_GET_SDI_SUPPORT 0xF0 7262*4882a593Smuzhiyun 7263*4882a593Smuzhiyun // Return code 7264*4882a593Smuzhiyun #define ATOM_UNKNOWN_CMD 0 7265*4882a593Smuzhiyun #define ATOM_FEATURE_NOT_SUPPORTED 1 7266*4882a593Smuzhiyun #define ATOM_FEATURE_SUPPORTED 2 7267*4882a593Smuzhiyun 7268*4882a593Smuzhiyun typedef struct _ATOM_HW_MISC_OPERATION_PS_ALLOCATION 7269*4882a593Smuzhiyun { 7270*4882a593Smuzhiyun ATOM_HW_MISC_OPERATION_INPUT_PARAMETER_V1_1 sInput_Output; 7271*4882a593Smuzhiyun PROCESS_I2C_CHANNEL_TRANSACTION_PARAMETERS sReserved; 7272*4882a593Smuzhiyun }ATOM_HW_MISC_OPERATION_PS_ALLOCATION; 7273*4882a593Smuzhiyun 7274*4882a593Smuzhiyun /****************************************************************************/ 7275*4882a593Smuzhiyun 7276*4882a593Smuzhiyun typedef struct _SET_HWBLOCK_INSTANCE_PARAMETER_V2 7277*4882a593Smuzhiyun { 7278*4882a593Smuzhiyun UCHAR ucHWBlkInst; // HW block instance, 0, 1, 2, ... 7279*4882a593Smuzhiyun UCHAR ucReserved[3]; 7280*4882a593Smuzhiyun }SET_HWBLOCK_INSTANCE_PARAMETER_V2; 7281*4882a593Smuzhiyun 7282*4882a593Smuzhiyun #define HWBLKINST_INSTANCE_MASK 0x07 7283*4882a593Smuzhiyun #define HWBLKINST_HWBLK_MASK 0xF0 7284*4882a593Smuzhiyun #define HWBLKINST_HWBLK_SHIFT 0x04 7285*4882a593Smuzhiyun 7286*4882a593Smuzhiyun //ucHWBlock 7287*4882a593Smuzhiyun #define SELECT_DISP_ENGINE 0 7288*4882a593Smuzhiyun #define SELECT_DISP_PLL 1 7289*4882a593Smuzhiyun #define SELECT_DCIO_UNIPHY_LINK0 2 7290*4882a593Smuzhiyun #define SELECT_DCIO_UNIPHY_LINK1 3 7291*4882a593Smuzhiyun #define SELECT_DCIO_IMPCAL 4 7292*4882a593Smuzhiyun #define SELECT_DCIO_DIG 6 7293*4882a593Smuzhiyun #define SELECT_CRTC_PIXEL_RATE 7 7294*4882a593Smuzhiyun #define SELECT_VGA_BLK 8 7295*4882a593Smuzhiyun 7296*4882a593Smuzhiyun // DIGTransmitterInfoTable structure used to program UNIPHY settings 7297*4882a593Smuzhiyun typedef struct _DIG_TRANSMITTER_INFO_HEADER_V3_1{ 7298*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7299*4882a593Smuzhiyun USHORT usDPVsPreEmphSettingOffset; // offset of PHY_ANALOG_SETTING_INFO * with DP Voltage Swing and Pre-Emphasis for each Link clock 7300*4882a593Smuzhiyun USHORT usPhyAnalogRegListOffset; // offset of CLOCK_CONDITION_REGESTER_INFO* with None-DP mode Analog Setting's register Info 7301*4882a593Smuzhiyun USHORT usPhyAnalogSettingOffset; // offset of CLOCK_CONDITION_SETTING_ENTRY* with None-DP mode Analog Setting for each link clock range 7302*4882a593Smuzhiyun USHORT usPhyPllRegListOffset; // offset of CLOCK_CONDITION_REGESTER_INFO* with Phy Pll register Info 7303*4882a593Smuzhiyun USHORT usPhyPllSettingOffset; // offset of CLOCK_CONDITION_SETTING_ENTRY* with Phy Pll Settings 7304*4882a593Smuzhiyun }DIG_TRANSMITTER_INFO_HEADER_V3_1; 7305*4882a593Smuzhiyun 7306*4882a593Smuzhiyun typedef struct _DIG_TRANSMITTER_INFO_HEADER_V3_2{ 7307*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7308*4882a593Smuzhiyun USHORT usDPVsPreEmphSettingOffset; // offset of PHY_ANALOG_SETTING_INFO * with DP Voltage Swing and Pre-Emphasis for each Link clock 7309*4882a593Smuzhiyun USHORT usPhyAnalogRegListOffset; // offset of CLOCK_CONDITION_REGESTER_INFO* with None-DP mode Analog Setting's register Info 7310*4882a593Smuzhiyun USHORT usPhyAnalogSettingOffset; // offset of CLOCK_CONDITION_SETTING_ENTRY* with None-DP mode Analog Setting for each link clock range 7311*4882a593Smuzhiyun USHORT usPhyPllRegListOffset; // offset of CLOCK_CONDITION_REGESTER_INFO* with Phy Pll register Info 7312*4882a593Smuzhiyun USHORT usPhyPllSettingOffset; // offset of CLOCK_CONDITION_SETTING_ENTRY* with Phy Pll Settings 7313*4882a593Smuzhiyun USHORT usDPSSRegListOffset; // offset of CLOCK_CONDITION_REGESTER_INFO* with Phy SS Pll register Info 7314*4882a593Smuzhiyun USHORT usDPSSSettingOffset; // offset of CLOCK_CONDITION_SETTING_ENTRY* with Phy SS Pll Settings 7315*4882a593Smuzhiyun }DIG_TRANSMITTER_INFO_HEADER_V3_2; 7316*4882a593Smuzhiyun 7317*4882a593Smuzhiyun typedef struct _CLOCK_CONDITION_REGESTER_INFO{ 7318*4882a593Smuzhiyun USHORT usRegisterIndex; 7319*4882a593Smuzhiyun UCHAR ucStartBit; 7320*4882a593Smuzhiyun UCHAR ucEndBit; 7321*4882a593Smuzhiyun }CLOCK_CONDITION_REGESTER_INFO; 7322*4882a593Smuzhiyun 7323*4882a593Smuzhiyun typedef struct _CLOCK_CONDITION_SETTING_ENTRY{ 7324*4882a593Smuzhiyun USHORT usMaxClockFreq; 7325*4882a593Smuzhiyun UCHAR ucEncodeMode; 7326*4882a593Smuzhiyun UCHAR ucPhySel; 7327*4882a593Smuzhiyun ULONG ulAnalogSetting[1]; 7328*4882a593Smuzhiyun }CLOCK_CONDITION_SETTING_ENTRY; 7329*4882a593Smuzhiyun 7330*4882a593Smuzhiyun typedef struct _CLOCK_CONDITION_SETTING_INFO{ 7331*4882a593Smuzhiyun USHORT usEntrySize; 7332*4882a593Smuzhiyun CLOCK_CONDITION_SETTING_ENTRY asClkCondSettingEntry[1]; 7333*4882a593Smuzhiyun }CLOCK_CONDITION_SETTING_INFO; 7334*4882a593Smuzhiyun 7335*4882a593Smuzhiyun typedef struct _PHY_CONDITION_REG_VAL{ 7336*4882a593Smuzhiyun ULONG ulCondition; 7337*4882a593Smuzhiyun ULONG ulRegVal; 7338*4882a593Smuzhiyun }PHY_CONDITION_REG_VAL; 7339*4882a593Smuzhiyun 7340*4882a593Smuzhiyun typedef struct _PHY_CONDITION_REG_VAL_V2{ 7341*4882a593Smuzhiyun ULONG ulCondition; 7342*4882a593Smuzhiyun UCHAR ucCondition2; 7343*4882a593Smuzhiyun ULONG ulRegVal; 7344*4882a593Smuzhiyun }PHY_CONDITION_REG_VAL_V2; 7345*4882a593Smuzhiyun 7346*4882a593Smuzhiyun typedef struct _PHY_CONDITION_REG_INFO{ 7347*4882a593Smuzhiyun USHORT usRegIndex; 7348*4882a593Smuzhiyun USHORT usSize; 7349*4882a593Smuzhiyun PHY_CONDITION_REG_VAL asRegVal[1]; 7350*4882a593Smuzhiyun }PHY_CONDITION_REG_INFO; 7351*4882a593Smuzhiyun 7352*4882a593Smuzhiyun typedef struct _PHY_CONDITION_REG_INFO_V2{ 7353*4882a593Smuzhiyun USHORT usRegIndex; 7354*4882a593Smuzhiyun USHORT usSize; 7355*4882a593Smuzhiyun PHY_CONDITION_REG_VAL_V2 asRegVal[1]; 7356*4882a593Smuzhiyun }PHY_CONDITION_REG_INFO_V2; 7357*4882a593Smuzhiyun 7358*4882a593Smuzhiyun typedef struct _PHY_ANALOG_SETTING_INFO{ 7359*4882a593Smuzhiyun UCHAR ucEncodeMode; 7360*4882a593Smuzhiyun UCHAR ucPhySel; 7361*4882a593Smuzhiyun USHORT usSize; 7362*4882a593Smuzhiyun PHY_CONDITION_REG_INFO asAnalogSetting[1]; 7363*4882a593Smuzhiyun }PHY_ANALOG_SETTING_INFO; 7364*4882a593Smuzhiyun 7365*4882a593Smuzhiyun typedef struct _PHY_ANALOG_SETTING_INFO_V2{ 7366*4882a593Smuzhiyun UCHAR ucEncodeMode; 7367*4882a593Smuzhiyun UCHAR ucPhySel; 7368*4882a593Smuzhiyun USHORT usSize; 7369*4882a593Smuzhiyun PHY_CONDITION_REG_INFO_V2 asAnalogSetting[1]; 7370*4882a593Smuzhiyun }PHY_ANALOG_SETTING_INFO_V2; 7371*4882a593Smuzhiyun 7372*4882a593Smuzhiyun typedef struct _GFX_HAVESTING_PARAMETERS { 7373*4882a593Smuzhiyun UCHAR ucGfxBlkId; //GFX blk id to be harvested, like CU, RB or PRIM 7374*4882a593Smuzhiyun UCHAR ucReserved; //reserved 7375*4882a593Smuzhiyun UCHAR ucActiveUnitNumPerSH; //requested active CU/RB/PRIM number per shader array 7376*4882a593Smuzhiyun UCHAR ucMaxUnitNumPerSH; //max CU/RB/PRIM number per shader array 7377*4882a593Smuzhiyun } GFX_HAVESTING_PARAMETERS; 7378*4882a593Smuzhiyun 7379*4882a593Smuzhiyun //ucGfxBlkId 7380*4882a593Smuzhiyun #define GFX_HARVESTING_CU_ID 0 7381*4882a593Smuzhiyun #define GFX_HARVESTING_RB_ID 1 7382*4882a593Smuzhiyun #define GFX_HARVESTING_PRIM_ID 2 7383*4882a593Smuzhiyun 7384*4882a593Smuzhiyun /****************************************************************************/ 7385*4882a593Smuzhiyun //Portion VI: Definitinos for vbios MC scratch registers that driver used 7386*4882a593Smuzhiyun /****************************************************************************/ 7387*4882a593Smuzhiyun 7388*4882a593Smuzhiyun #define MC_MISC0__MEMORY_TYPE_MASK 0xF0000000 7389*4882a593Smuzhiyun #define MC_MISC0__MEMORY_TYPE__GDDR1 0x10000000 7390*4882a593Smuzhiyun #define MC_MISC0__MEMORY_TYPE__DDR2 0x20000000 7391*4882a593Smuzhiyun #define MC_MISC0__MEMORY_TYPE__GDDR3 0x30000000 7392*4882a593Smuzhiyun #define MC_MISC0__MEMORY_TYPE__GDDR4 0x40000000 7393*4882a593Smuzhiyun #define MC_MISC0__MEMORY_TYPE__GDDR5 0x50000000 7394*4882a593Smuzhiyun #define MC_MISC0__MEMORY_TYPE__HBM 0x60000000 7395*4882a593Smuzhiyun #define MC_MISC0__MEMORY_TYPE__DDR3 0xB0000000 7396*4882a593Smuzhiyun 7397*4882a593Smuzhiyun #define ATOM_MEM_TYPE_DDR_STRING "DDR" 7398*4882a593Smuzhiyun #define ATOM_MEM_TYPE_DDR2_STRING "DDR2" 7399*4882a593Smuzhiyun #define ATOM_MEM_TYPE_GDDR3_STRING "GDDR3" 7400*4882a593Smuzhiyun #define ATOM_MEM_TYPE_GDDR4_STRING "GDDR4" 7401*4882a593Smuzhiyun #define ATOM_MEM_TYPE_GDDR5_STRING "GDDR5" 7402*4882a593Smuzhiyun #define ATOM_MEM_TYPE_HBM_STRING "HBM" 7403*4882a593Smuzhiyun #define ATOM_MEM_TYPE_DDR3_STRING "DDR3" 7404*4882a593Smuzhiyun 7405*4882a593Smuzhiyun /****************************************************************************/ 7406*4882a593Smuzhiyun //Portion VI: Definitinos being oboselete 7407*4882a593Smuzhiyun /****************************************************************************/ 7408*4882a593Smuzhiyun 7409*4882a593Smuzhiyun //========================================================================================== 7410*4882a593Smuzhiyun //Remove the definitions below when driver is ready! 7411*4882a593Smuzhiyun typedef struct _ATOM_DAC_INFO 7412*4882a593Smuzhiyun { 7413*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7414*4882a593Smuzhiyun USHORT usMaxFrequency; // in 10kHz unit 7415*4882a593Smuzhiyun USHORT usReserved; 7416*4882a593Smuzhiyun }ATOM_DAC_INFO; 7417*4882a593Smuzhiyun 7418*4882a593Smuzhiyun 7419*4882a593Smuzhiyun typedef struct _COMPASSIONATE_DATA 7420*4882a593Smuzhiyun { 7421*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7422*4882a593Smuzhiyun 7423*4882a593Smuzhiyun //============================== DAC1 portion 7424*4882a593Smuzhiyun UCHAR ucDAC1_BG_Adjustment; 7425*4882a593Smuzhiyun UCHAR ucDAC1_DAC_Adjustment; 7426*4882a593Smuzhiyun USHORT usDAC1_FORCE_Data; 7427*4882a593Smuzhiyun //============================== DAC2 portion 7428*4882a593Smuzhiyun UCHAR ucDAC2_CRT2_BG_Adjustment; 7429*4882a593Smuzhiyun UCHAR ucDAC2_CRT2_DAC_Adjustment; 7430*4882a593Smuzhiyun USHORT usDAC2_CRT2_FORCE_Data; 7431*4882a593Smuzhiyun USHORT usDAC2_CRT2_MUX_RegisterIndex; 7432*4882a593Smuzhiyun UCHAR ucDAC2_CRT2_MUX_RegisterInfo; //Bit[4:0]=Bit position,Bit[7]=1:Active High;=0 Active Low 7433*4882a593Smuzhiyun UCHAR ucDAC2_NTSC_BG_Adjustment; 7434*4882a593Smuzhiyun UCHAR ucDAC2_NTSC_DAC_Adjustment; 7435*4882a593Smuzhiyun USHORT usDAC2_TV1_FORCE_Data; 7436*4882a593Smuzhiyun USHORT usDAC2_TV1_MUX_RegisterIndex; 7437*4882a593Smuzhiyun UCHAR ucDAC2_TV1_MUX_RegisterInfo; //Bit[4:0]=Bit position,Bit[7]=1:Active High;=0 Active Low 7438*4882a593Smuzhiyun UCHAR ucDAC2_CV_BG_Adjustment; 7439*4882a593Smuzhiyun UCHAR ucDAC2_CV_DAC_Adjustment; 7440*4882a593Smuzhiyun USHORT usDAC2_CV_FORCE_Data; 7441*4882a593Smuzhiyun USHORT usDAC2_CV_MUX_RegisterIndex; 7442*4882a593Smuzhiyun UCHAR ucDAC2_CV_MUX_RegisterInfo; //Bit[4:0]=Bit position,Bit[7]=1:Active High;=0 Active Low 7443*4882a593Smuzhiyun UCHAR ucDAC2_PAL_BG_Adjustment; 7444*4882a593Smuzhiyun UCHAR ucDAC2_PAL_DAC_Adjustment; 7445*4882a593Smuzhiyun USHORT usDAC2_TV2_FORCE_Data; 7446*4882a593Smuzhiyun }COMPASSIONATE_DATA; 7447*4882a593Smuzhiyun 7448*4882a593Smuzhiyun /****************************Supported Device Info Table Definitions**********************/ 7449*4882a593Smuzhiyun // ucConnectInfo: 7450*4882a593Smuzhiyun // [7:4] - connector type 7451*4882a593Smuzhiyun // = 1 - VGA connector 7452*4882a593Smuzhiyun // = 2 - DVI-I 7453*4882a593Smuzhiyun // = 3 - DVI-D 7454*4882a593Smuzhiyun // = 4 - DVI-A 7455*4882a593Smuzhiyun // = 5 - SVIDEO 7456*4882a593Smuzhiyun // = 6 - COMPOSITE 7457*4882a593Smuzhiyun // = 7 - LVDS 7458*4882a593Smuzhiyun // = 8 - DIGITAL LINK 7459*4882a593Smuzhiyun // = 9 - SCART 7460*4882a593Smuzhiyun // = 0xA - HDMI_type A 7461*4882a593Smuzhiyun // = 0xB - HDMI_type B 7462*4882a593Smuzhiyun // = 0xE - Special case1 (DVI+DIN) 7463*4882a593Smuzhiyun // Others=TBD 7464*4882a593Smuzhiyun // [3:0] - DAC Associated 7465*4882a593Smuzhiyun // = 0 - no DAC 7466*4882a593Smuzhiyun // = 1 - DACA 7467*4882a593Smuzhiyun // = 2 - DACB 7468*4882a593Smuzhiyun // = 3 - External DAC 7469*4882a593Smuzhiyun // Others=TBD 7470*4882a593Smuzhiyun // 7471*4882a593Smuzhiyun 7472*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_INFO 7473*4882a593Smuzhiyun { 7474*4882a593Smuzhiyun #if ATOM_BIG_ENDIAN 7475*4882a593Smuzhiyun UCHAR bfConnectorType:4; 7476*4882a593Smuzhiyun UCHAR bfAssociatedDAC:4; 7477*4882a593Smuzhiyun #else 7478*4882a593Smuzhiyun UCHAR bfAssociatedDAC:4; 7479*4882a593Smuzhiyun UCHAR bfConnectorType:4; 7480*4882a593Smuzhiyun #endif 7481*4882a593Smuzhiyun }ATOM_CONNECTOR_INFO; 7482*4882a593Smuzhiyun 7483*4882a593Smuzhiyun typedef union _ATOM_CONNECTOR_INFO_ACCESS 7484*4882a593Smuzhiyun { 7485*4882a593Smuzhiyun ATOM_CONNECTOR_INFO sbfAccess; 7486*4882a593Smuzhiyun UCHAR ucAccess; 7487*4882a593Smuzhiyun }ATOM_CONNECTOR_INFO_ACCESS; 7488*4882a593Smuzhiyun 7489*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_INFO_I2C 7490*4882a593Smuzhiyun { 7491*4882a593Smuzhiyun ATOM_CONNECTOR_INFO_ACCESS sucConnectorInfo; 7492*4882a593Smuzhiyun ATOM_I2C_ID_CONFIG_ACCESS sucI2cId; 7493*4882a593Smuzhiyun }ATOM_CONNECTOR_INFO_I2C; 7494*4882a593Smuzhiyun 7495*4882a593Smuzhiyun 7496*4882a593Smuzhiyun typedef struct _ATOM_SUPPORTED_DEVICES_INFO 7497*4882a593Smuzhiyun { 7498*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7499*4882a593Smuzhiyun USHORT usDeviceSupport; 7500*4882a593Smuzhiyun ATOM_CONNECTOR_INFO_I2C asConnInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO]; 7501*4882a593Smuzhiyun }ATOM_SUPPORTED_DEVICES_INFO; 7502*4882a593Smuzhiyun 7503*4882a593Smuzhiyun #define NO_INT_SRC_MAPPED 0xFF 7504*4882a593Smuzhiyun 7505*4882a593Smuzhiyun typedef struct _ATOM_CONNECTOR_INC_SRC_BITMAP 7506*4882a593Smuzhiyun { 7507*4882a593Smuzhiyun UCHAR ucIntSrcBitmap; 7508*4882a593Smuzhiyun }ATOM_CONNECTOR_INC_SRC_BITMAP; 7509*4882a593Smuzhiyun 7510*4882a593Smuzhiyun typedef struct _ATOM_SUPPORTED_DEVICES_INFO_2 7511*4882a593Smuzhiyun { 7512*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7513*4882a593Smuzhiyun USHORT usDeviceSupport; 7514*4882a593Smuzhiyun ATOM_CONNECTOR_INFO_I2C asConnInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_2]; 7515*4882a593Smuzhiyun ATOM_CONNECTOR_INC_SRC_BITMAP asIntSrcInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_2]; 7516*4882a593Smuzhiyun }ATOM_SUPPORTED_DEVICES_INFO_2; 7517*4882a593Smuzhiyun 7518*4882a593Smuzhiyun typedef struct _ATOM_SUPPORTED_DEVICES_INFO_2d1 7519*4882a593Smuzhiyun { 7520*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7521*4882a593Smuzhiyun USHORT usDeviceSupport; 7522*4882a593Smuzhiyun ATOM_CONNECTOR_INFO_I2C asConnInfo[ATOM_MAX_SUPPORTED_DEVICE]; 7523*4882a593Smuzhiyun ATOM_CONNECTOR_INC_SRC_BITMAP asIntSrcInfo[ATOM_MAX_SUPPORTED_DEVICE]; 7524*4882a593Smuzhiyun }ATOM_SUPPORTED_DEVICES_INFO_2d1; 7525*4882a593Smuzhiyun 7526*4882a593Smuzhiyun #define ATOM_SUPPORTED_DEVICES_INFO_LAST ATOM_SUPPORTED_DEVICES_INFO_2d1 7527*4882a593Smuzhiyun 7528*4882a593Smuzhiyun 7529*4882a593Smuzhiyun 7530*4882a593Smuzhiyun typedef struct _ATOM_MISC_CONTROL_INFO 7531*4882a593Smuzhiyun { 7532*4882a593Smuzhiyun USHORT usFrequency; 7533*4882a593Smuzhiyun UCHAR ucPLL_ChargePump; // PLL charge-pump gain control 7534*4882a593Smuzhiyun UCHAR ucPLL_DutyCycle; // PLL duty cycle control 7535*4882a593Smuzhiyun UCHAR ucPLL_VCO_Gain; // PLL VCO gain control 7536*4882a593Smuzhiyun UCHAR ucPLL_VoltageSwing; // PLL driver voltage swing control 7537*4882a593Smuzhiyun }ATOM_MISC_CONTROL_INFO; 7538*4882a593Smuzhiyun 7539*4882a593Smuzhiyun 7540*4882a593Smuzhiyun #define ATOM_MAX_MISC_INFO 4 7541*4882a593Smuzhiyun 7542*4882a593Smuzhiyun typedef struct _ATOM_TMDS_INFO 7543*4882a593Smuzhiyun { 7544*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7545*4882a593Smuzhiyun USHORT usMaxFrequency; // in 10Khz 7546*4882a593Smuzhiyun ATOM_MISC_CONTROL_INFO asMiscInfo[ATOM_MAX_MISC_INFO]; 7547*4882a593Smuzhiyun }ATOM_TMDS_INFO; 7548*4882a593Smuzhiyun 7549*4882a593Smuzhiyun 7550*4882a593Smuzhiyun typedef struct _ATOM_ENCODER_ANALOG_ATTRIBUTE 7551*4882a593Smuzhiyun { 7552*4882a593Smuzhiyun UCHAR ucTVStandard; //Same as TV standards defined above, 7553*4882a593Smuzhiyun UCHAR ucPadding[1]; 7554*4882a593Smuzhiyun }ATOM_ENCODER_ANALOG_ATTRIBUTE; 7555*4882a593Smuzhiyun 7556*4882a593Smuzhiyun typedef struct _ATOM_ENCODER_DIGITAL_ATTRIBUTE 7557*4882a593Smuzhiyun { 7558*4882a593Smuzhiyun UCHAR ucAttribute; //Same as other digital encoder attributes defined above 7559*4882a593Smuzhiyun UCHAR ucPadding[1]; 7560*4882a593Smuzhiyun }ATOM_ENCODER_DIGITAL_ATTRIBUTE; 7561*4882a593Smuzhiyun 7562*4882a593Smuzhiyun typedef union _ATOM_ENCODER_ATTRIBUTE 7563*4882a593Smuzhiyun { 7564*4882a593Smuzhiyun ATOM_ENCODER_ANALOG_ATTRIBUTE sAlgAttrib; 7565*4882a593Smuzhiyun ATOM_ENCODER_DIGITAL_ATTRIBUTE sDigAttrib; 7566*4882a593Smuzhiyun }ATOM_ENCODER_ATTRIBUTE; 7567*4882a593Smuzhiyun 7568*4882a593Smuzhiyun 7569*4882a593Smuzhiyun typedef struct _DVO_ENCODER_CONTROL_PARAMETERS 7570*4882a593Smuzhiyun { 7571*4882a593Smuzhiyun USHORT usPixelClock; 7572*4882a593Smuzhiyun USHORT usEncoderID; 7573*4882a593Smuzhiyun UCHAR ucDeviceType; //Use ATOM_DEVICE_xxx1_Index to indicate device type only. 7574*4882a593Smuzhiyun UCHAR ucAction; //ATOM_ENABLE/ATOM_DISABLE/ATOM_HPD_INIT 7575*4882a593Smuzhiyun ATOM_ENCODER_ATTRIBUTE usDevAttr; 7576*4882a593Smuzhiyun }DVO_ENCODER_CONTROL_PARAMETERS; 7577*4882a593Smuzhiyun 7578*4882a593Smuzhiyun typedef struct _DVO_ENCODER_CONTROL_PS_ALLOCATION 7579*4882a593Smuzhiyun { 7580*4882a593Smuzhiyun DVO_ENCODER_CONTROL_PARAMETERS sDVOEncoder; 7581*4882a593Smuzhiyun WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; //Caller doesn't need to init this portion 7582*4882a593Smuzhiyun }DVO_ENCODER_CONTROL_PS_ALLOCATION; 7583*4882a593Smuzhiyun 7584*4882a593Smuzhiyun 7585*4882a593Smuzhiyun #define ATOM_XTMDS_ASIC_SI164_ID 1 7586*4882a593Smuzhiyun #define ATOM_XTMDS_ASIC_SI178_ID 2 7587*4882a593Smuzhiyun #define ATOM_XTMDS_ASIC_TFP513_ID 3 7588*4882a593Smuzhiyun #define ATOM_XTMDS_SUPPORTED_SINGLELINK 0x00000001 7589*4882a593Smuzhiyun #define ATOM_XTMDS_SUPPORTED_DUALLINK 0x00000002 7590*4882a593Smuzhiyun #define ATOM_XTMDS_MVPU_FPGA 0x00000004 7591*4882a593Smuzhiyun 7592*4882a593Smuzhiyun 7593*4882a593Smuzhiyun typedef struct _ATOM_XTMDS_INFO 7594*4882a593Smuzhiyun { 7595*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7596*4882a593Smuzhiyun USHORT usSingleLinkMaxFrequency; 7597*4882a593Smuzhiyun ATOM_I2C_ID_CONFIG_ACCESS sucI2cId; //Point the ID on which I2C is used to control external chip 7598*4882a593Smuzhiyun UCHAR ucXtransimitterID; 7599*4882a593Smuzhiyun UCHAR ucSupportedLink; // Bit field, bit0=1, single link supported;bit1=1,dual link supported 7600*4882a593Smuzhiyun UCHAR ucSequnceAlterID; // Even with the same external TMDS asic, it's possible that the program seqence alters 7601*4882a593Smuzhiyun // due to design. This ID is used to alert driver that the sequence is not "standard"! 7602*4882a593Smuzhiyun UCHAR ucMasterAddress; // Address to control Master xTMDS Chip 7603*4882a593Smuzhiyun UCHAR ucSlaveAddress; // Address to control Slave xTMDS Chip 7604*4882a593Smuzhiyun }ATOM_XTMDS_INFO; 7605*4882a593Smuzhiyun 7606*4882a593Smuzhiyun typedef struct _DFP_DPMS_STATUS_CHANGE_PARAMETERS 7607*4882a593Smuzhiyun { 7608*4882a593Smuzhiyun UCHAR ucEnable; // ATOM_ENABLE=On or ATOM_DISABLE=Off 7609*4882a593Smuzhiyun UCHAR ucDevice; // ATOM_DEVICE_DFP1_INDEX.... 7610*4882a593Smuzhiyun UCHAR ucPadding[2]; 7611*4882a593Smuzhiyun }DFP_DPMS_STATUS_CHANGE_PARAMETERS; 7612*4882a593Smuzhiyun 7613*4882a593Smuzhiyun /****************************Legacy Power Play Table Definitions **********************/ 7614*4882a593Smuzhiyun 7615*4882a593Smuzhiyun //Definitions for ulPowerPlayMiscInfo 7616*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_SPLIT_CLOCK 0x00000000L 7617*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_USING_MCLK_SRC 0x00000001L 7618*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_USING_SCLK_SRC 0x00000002L 7619*4882a593Smuzhiyun 7620*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_VOLTAGE_DROP_SUPPORT 0x00000004L 7621*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_VOLTAGE_DROP_ACTIVE_HIGH 0x00000008L 7622*4882a593Smuzhiyun 7623*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_LOAD_PERFORMANCE_EN 0x00000010L 7624*4882a593Smuzhiyun 7625*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_ENGINE_CLOCK_CONTRL_EN 0x00000020L 7626*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_MEMORY_CLOCK_CONTRL_EN 0x00000040L 7627*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_PROGRAM_VOLTAGE 0x00000080L //When this bit set, ucVoltageDropIndex is not an index for GPIO pin, but a voltage ID that SW needs program 7628*4882a593Smuzhiyun 7629*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_ASIC_REDUCED_SPEED_SCLK_EN 0x00000100L 7630*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_ASIC_DYNAMIC_VOLTAGE_EN 0x00000200L 7631*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_ASIC_SLEEP_MODE_EN 0x00000400L 7632*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_LOAD_BALANCE_EN 0x00000800L 7633*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_DEFAULT_DC_STATE_ENTRY_TRUE 0x00001000L 7634*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_DEFAULT_LOW_DC_STATE_ENTRY_TRUE 0x00002000L 7635*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_LOW_LCD_REFRESH_RATE 0x00004000L 7636*4882a593Smuzhiyun 7637*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_DRIVER_DEFAULT_MODE 0x00008000L 7638*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_OVER_CLOCK_MODE 0x00010000L 7639*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_OVER_DRIVE_MODE 0x00020000L 7640*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_POWER_SAVING_MODE 0x00040000L 7641*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_THERMAL_DIODE_MODE 0x00080000L 7642*4882a593Smuzhiyun 7643*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_FRAME_MODULATION_MASK 0x00300000L //0-FM Disable, 1-2 level FM, 2-4 level FM, 3-Reserved 7644*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_FRAME_MODULATION_SHIFT 20 7645*4882a593Smuzhiyun 7646*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_DYN_CLK_3D_IDLE 0x00400000L 7647*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_DYNAMIC_CLOCK_DIVIDER_BY_2 0x00800000L 7648*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_DYNAMIC_CLOCK_DIVIDER_BY_4 0x01000000L 7649*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_DYNAMIC_HDP_BLOCK_EN 0x02000000L //When set, Dynamic 7650*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_DYNAMIC_MC_HOST_BLOCK_EN 0x04000000L //When set, Dynamic 7651*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_3D_ACCELERATION_EN 0x08000000L //When set, This mode is for acceleated 3D mode 7652*4882a593Smuzhiyun 7653*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_POWERPLAY_SETTINGS_GROUP_MASK 0x70000000L //1-Optimal Battery Life Group, 2-High Battery, 3-Balanced, 4-High Performance, 5- Optimal Performance (Default state with Default clocks) 7654*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_POWERPLAY_SETTINGS_GROUP_SHIFT 28 7655*4882a593Smuzhiyun #define ATOM_PM_MISCINFO_ENABLE_BACK_BIAS 0x80000000L 7656*4882a593Smuzhiyun 7657*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_SYSTEM_AC_LITE_MODE 0x00000001L 7658*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_MULTI_DISPLAY_SUPPORT 0x00000002L 7659*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_DYNAMIC_BACK_BIAS_EN 0x00000004L 7660*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_FS3D_OVERDRIVE_INFO 0x00000008L 7661*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_FORCEDLOWPWR_MODE 0x00000010L 7662*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_VDDCI_DYNAMIC_VOLTAGE_EN 0x00000020L 7663*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_VIDEO_PLAYBACK_CAPABLE 0x00000040L //If this bit is set in multi-pp mode, then driver will pack up one with the minior power consumption. 7664*4882a593Smuzhiyun //If it's not set in any pp mode, driver will use its default logic to pick a pp mode in video playback 7665*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_NOT_VALID_ON_DC 0x00000080L 7666*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_STUTTER_MODE_EN 0x00000100L 7667*4882a593Smuzhiyun #define ATOM_PM_MISCINFO2_UVD_SUPPORT_MODE 0x00000200L 7668*4882a593Smuzhiyun 7669*4882a593Smuzhiyun //ucTableFormatRevision=1 7670*4882a593Smuzhiyun //ucTableContentRevision=1 7671*4882a593Smuzhiyun typedef struct _ATOM_POWERMODE_INFO 7672*4882a593Smuzhiyun { 7673*4882a593Smuzhiyun ULONG ulMiscInfo; //The power level should be arranged in ascending order 7674*4882a593Smuzhiyun ULONG ulReserved1; // must set to 0 7675*4882a593Smuzhiyun ULONG ulReserved2; // must set to 0 7676*4882a593Smuzhiyun USHORT usEngineClock; 7677*4882a593Smuzhiyun USHORT usMemoryClock; 7678*4882a593Smuzhiyun UCHAR ucVoltageDropIndex; // index to GPIO table 7679*4882a593Smuzhiyun UCHAR ucSelectedPanel_RefreshRate;// panel refresh rate 7680*4882a593Smuzhiyun UCHAR ucMinTemperature; 7681*4882a593Smuzhiyun UCHAR ucMaxTemperature; 7682*4882a593Smuzhiyun UCHAR ucNumPciELanes; // number of PCIE lanes 7683*4882a593Smuzhiyun }ATOM_POWERMODE_INFO; 7684*4882a593Smuzhiyun 7685*4882a593Smuzhiyun //ucTableFormatRevision=2 7686*4882a593Smuzhiyun //ucTableContentRevision=1 7687*4882a593Smuzhiyun typedef struct _ATOM_POWERMODE_INFO_V2 7688*4882a593Smuzhiyun { 7689*4882a593Smuzhiyun ULONG ulMiscInfo; //The power level should be arranged in ascending order 7690*4882a593Smuzhiyun ULONG ulMiscInfo2; 7691*4882a593Smuzhiyun ULONG ulEngineClock; 7692*4882a593Smuzhiyun ULONG ulMemoryClock; 7693*4882a593Smuzhiyun UCHAR ucVoltageDropIndex; // index to GPIO table 7694*4882a593Smuzhiyun UCHAR ucSelectedPanel_RefreshRate;// panel refresh rate 7695*4882a593Smuzhiyun UCHAR ucMinTemperature; 7696*4882a593Smuzhiyun UCHAR ucMaxTemperature; 7697*4882a593Smuzhiyun UCHAR ucNumPciELanes; // number of PCIE lanes 7698*4882a593Smuzhiyun }ATOM_POWERMODE_INFO_V2; 7699*4882a593Smuzhiyun 7700*4882a593Smuzhiyun //ucTableFormatRevision=2 7701*4882a593Smuzhiyun //ucTableContentRevision=2 7702*4882a593Smuzhiyun typedef struct _ATOM_POWERMODE_INFO_V3 7703*4882a593Smuzhiyun { 7704*4882a593Smuzhiyun ULONG ulMiscInfo; //The power level should be arranged in ascending order 7705*4882a593Smuzhiyun ULONG ulMiscInfo2; 7706*4882a593Smuzhiyun ULONG ulEngineClock; 7707*4882a593Smuzhiyun ULONG ulMemoryClock; 7708*4882a593Smuzhiyun UCHAR ucVoltageDropIndex; // index to Core (VDDC) votage table 7709*4882a593Smuzhiyun UCHAR ucSelectedPanel_RefreshRate;// panel refresh rate 7710*4882a593Smuzhiyun UCHAR ucMinTemperature; 7711*4882a593Smuzhiyun UCHAR ucMaxTemperature; 7712*4882a593Smuzhiyun UCHAR ucNumPciELanes; // number of PCIE lanes 7713*4882a593Smuzhiyun UCHAR ucVDDCI_VoltageDropIndex; // index to VDDCI votage table 7714*4882a593Smuzhiyun }ATOM_POWERMODE_INFO_V3; 7715*4882a593Smuzhiyun 7716*4882a593Smuzhiyun 7717*4882a593Smuzhiyun #define ATOM_MAX_NUMBEROF_POWER_BLOCK 8 7718*4882a593Smuzhiyun 7719*4882a593Smuzhiyun #define ATOM_PP_OVERDRIVE_INTBITMAP_AUXWIN 0x01 7720*4882a593Smuzhiyun #define ATOM_PP_OVERDRIVE_INTBITMAP_OVERDRIVE 0x02 7721*4882a593Smuzhiyun 7722*4882a593Smuzhiyun #define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_LM63 0x01 7723*4882a593Smuzhiyun #define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_ADM1032 0x02 7724*4882a593Smuzhiyun #define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_ADM1030 0x03 7725*4882a593Smuzhiyun #define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_MUA6649 0x04 7726*4882a593Smuzhiyun #define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_LM64 0x05 7727*4882a593Smuzhiyun #define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_F75375 0x06 7728*4882a593Smuzhiyun #define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_ASC7512 0x07 // Andigilog 7729*4882a593Smuzhiyun 7730*4882a593Smuzhiyun 7731*4882a593Smuzhiyun typedef struct _ATOM_POWERPLAY_INFO 7732*4882a593Smuzhiyun { 7733*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7734*4882a593Smuzhiyun UCHAR ucOverdriveThermalController; 7735*4882a593Smuzhiyun UCHAR ucOverdriveI2cLine; 7736*4882a593Smuzhiyun UCHAR ucOverdriveIntBitmap; 7737*4882a593Smuzhiyun UCHAR ucOverdriveControllerAddress; 7738*4882a593Smuzhiyun UCHAR ucSizeOfPowerModeEntry; 7739*4882a593Smuzhiyun UCHAR ucNumOfPowerModeEntries; 7740*4882a593Smuzhiyun ATOM_POWERMODE_INFO asPowerPlayInfo[ATOM_MAX_NUMBEROF_POWER_BLOCK]; 7741*4882a593Smuzhiyun }ATOM_POWERPLAY_INFO; 7742*4882a593Smuzhiyun 7743*4882a593Smuzhiyun typedef struct _ATOM_POWERPLAY_INFO_V2 7744*4882a593Smuzhiyun { 7745*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7746*4882a593Smuzhiyun UCHAR ucOverdriveThermalController; 7747*4882a593Smuzhiyun UCHAR ucOverdriveI2cLine; 7748*4882a593Smuzhiyun UCHAR ucOverdriveIntBitmap; 7749*4882a593Smuzhiyun UCHAR ucOverdriveControllerAddress; 7750*4882a593Smuzhiyun UCHAR ucSizeOfPowerModeEntry; 7751*4882a593Smuzhiyun UCHAR ucNumOfPowerModeEntries; 7752*4882a593Smuzhiyun ATOM_POWERMODE_INFO_V2 asPowerPlayInfo[ATOM_MAX_NUMBEROF_POWER_BLOCK]; 7753*4882a593Smuzhiyun }ATOM_POWERPLAY_INFO_V2; 7754*4882a593Smuzhiyun 7755*4882a593Smuzhiyun typedef struct _ATOM_POWERPLAY_INFO_V3 7756*4882a593Smuzhiyun { 7757*4882a593Smuzhiyun ATOM_COMMON_TABLE_HEADER sHeader; 7758*4882a593Smuzhiyun UCHAR ucOverdriveThermalController; 7759*4882a593Smuzhiyun UCHAR ucOverdriveI2cLine; 7760*4882a593Smuzhiyun UCHAR ucOverdriveIntBitmap; 7761*4882a593Smuzhiyun UCHAR ucOverdriveControllerAddress; 7762*4882a593Smuzhiyun UCHAR ucSizeOfPowerModeEntry; 7763*4882a593Smuzhiyun UCHAR ucNumOfPowerModeEntries; 7764*4882a593Smuzhiyun ATOM_POWERMODE_INFO_V3 asPowerPlayInfo[ATOM_MAX_NUMBEROF_POWER_BLOCK]; 7765*4882a593Smuzhiyun }ATOM_POWERPLAY_INFO_V3; 7766*4882a593Smuzhiyun 7767*4882a593Smuzhiyun 7768*4882a593Smuzhiyun // Following definitions are for compatibility issue in different SW components. 7769*4882a593Smuzhiyun #define ATOM_MASTER_DATA_TABLE_REVISION 0x01 7770*4882a593Smuzhiyun #define Object_Info Object_Header 7771*4882a593Smuzhiyun #define AdjustARB_SEQ MC_InitParameter 7772*4882a593Smuzhiyun #define VRAM_GPIO_DetectionInfo VoltageObjectInfo 7773*4882a593Smuzhiyun #define ASIC_VDDCI_Info ASIC_ProfilingInfo 7774*4882a593Smuzhiyun #define ASIC_MVDDQ_Info MemoryTrainingInfo 7775*4882a593Smuzhiyun #define SS_Info PPLL_SS_Info 7776*4882a593Smuzhiyun #define ASIC_MVDDC_Info ASIC_InternalSS_Info 7777*4882a593Smuzhiyun #define DispDevicePriorityInfo SaveRestoreInfo 7778*4882a593Smuzhiyun #define DispOutInfo TV_VideoMode 7779*4882a593Smuzhiyun 7780*4882a593Smuzhiyun 7781*4882a593Smuzhiyun #define ATOM_ENCODER_OBJECT_TABLE ATOM_OBJECT_TABLE 7782*4882a593Smuzhiyun #define ATOM_CONNECTOR_OBJECT_TABLE ATOM_OBJECT_TABLE 7783*4882a593Smuzhiyun 7784*4882a593Smuzhiyun //New device naming, remove them when both DAL/VBIOS is ready 7785*4882a593Smuzhiyun #define DFP2I_OUTPUT_CONTROL_PARAMETERS CRT1_OUTPUT_CONTROL_PARAMETERS 7786*4882a593Smuzhiyun #define DFP2I_OUTPUT_CONTROL_PS_ALLOCATION DFP2I_OUTPUT_CONTROL_PARAMETERS 7787*4882a593Smuzhiyun 7788*4882a593Smuzhiyun #define DFP1X_OUTPUT_CONTROL_PARAMETERS CRT1_OUTPUT_CONTROL_PARAMETERS 7789*4882a593Smuzhiyun #define DFP1X_OUTPUT_CONTROL_PS_ALLOCATION DFP1X_OUTPUT_CONTROL_PARAMETERS 7790*4882a593Smuzhiyun 7791*4882a593Smuzhiyun #define DFP1I_OUTPUT_CONTROL_PARAMETERS DFP1_OUTPUT_CONTROL_PARAMETERS 7792*4882a593Smuzhiyun #define DFP1I_OUTPUT_CONTROL_PS_ALLOCATION DFP1_OUTPUT_CONTROL_PS_ALLOCATION 7793*4882a593Smuzhiyun 7794*4882a593Smuzhiyun #define ATOM_DEVICE_DFP1I_SUPPORT ATOM_DEVICE_DFP1_SUPPORT 7795*4882a593Smuzhiyun #define ATOM_DEVICE_DFP1X_SUPPORT ATOM_DEVICE_DFP2_SUPPORT 7796*4882a593Smuzhiyun 7797*4882a593Smuzhiyun #define ATOM_DEVICE_DFP1I_INDEX ATOM_DEVICE_DFP1_INDEX 7798*4882a593Smuzhiyun #define ATOM_DEVICE_DFP1X_INDEX ATOM_DEVICE_DFP2_INDEX 7799*4882a593Smuzhiyun 7800*4882a593Smuzhiyun #define ATOM_DEVICE_DFP2I_INDEX 0x00000009 7801*4882a593Smuzhiyun #define ATOM_DEVICE_DFP2I_SUPPORT (0x1L << ATOM_DEVICE_DFP2I_INDEX) 7802*4882a593Smuzhiyun 7803*4882a593Smuzhiyun #define ATOM_S0_DFP1I ATOM_S0_DFP1 7804*4882a593Smuzhiyun #define ATOM_S0_DFP1X ATOM_S0_DFP2 7805*4882a593Smuzhiyun 7806*4882a593Smuzhiyun #define ATOM_S0_DFP2I 0x00200000L 7807*4882a593Smuzhiyun #define ATOM_S0_DFP2Ib2 0x20 7808*4882a593Smuzhiyun 7809*4882a593Smuzhiyun #define ATOM_S2_DFP1I_DPMS_STATE ATOM_S2_DFP1_DPMS_STATE 7810*4882a593Smuzhiyun #define ATOM_S2_DFP1X_DPMS_STATE ATOM_S2_DFP2_DPMS_STATE 7811*4882a593Smuzhiyun 7812*4882a593Smuzhiyun #define ATOM_S2_DFP2I_DPMS_STATE 0x02000000L 7813*4882a593Smuzhiyun #define ATOM_S2_DFP2I_DPMS_STATEb3 0x02 7814*4882a593Smuzhiyun 7815*4882a593Smuzhiyun #define ATOM_S3_DFP2I_ACTIVEb1 0x02 7816*4882a593Smuzhiyun 7817*4882a593Smuzhiyun #define ATOM_S3_DFP1I_ACTIVE ATOM_S3_DFP1_ACTIVE 7818*4882a593Smuzhiyun #define ATOM_S3_DFP1X_ACTIVE ATOM_S3_DFP2_ACTIVE 7819*4882a593Smuzhiyun 7820*4882a593Smuzhiyun #define ATOM_S3_DFP2I_ACTIVE 0x00000200L 7821*4882a593Smuzhiyun 7822*4882a593Smuzhiyun #define ATOM_S3_DFP1I_CRTC_ACTIVE ATOM_S3_DFP1_CRTC_ACTIVE 7823*4882a593Smuzhiyun #define ATOM_S3_DFP1X_CRTC_ACTIVE ATOM_S3_DFP2_CRTC_ACTIVE 7824*4882a593Smuzhiyun #define ATOM_S3_DFP2I_CRTC_ACTIVE 0x02000000L 7825*4882a593Smuzhiyun 7826*4882a593Smuzhiyun #define ATOM_S3_DFP2I_CRTC_ACTIVEb3 0x02 7827*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP2Ib1 0x02 7828*4882a593Smuzhiyun 7829*4882a593Smuzhiyun #define ATOM_S5_DOS_REQ_DFP2I 0x0200 7830*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP1I ATOM_S6_ACC_REQ_DFP1 7831*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP1X ATOM_S6_ACC_REQ_DFP2 7832*4882a593Smuzhiyun 7833*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP2Ib3 0x02 7834*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_DFP2I 0x02000000L 7835*4882a593Smuzhiyun 7836*4882a593Smuzhiyun #define TMDS1XEncoderControl DVOEncoderControl 7837*4882a593Smuzhiyun #define DFP1XOutputControl DVOOutputControl 7838*4882a593Smuzhiyun 7839*4882a593Smuzhiyun #define ExternalDFPOutputControl DFP1XOutputControl 7840*4882a593Smuzhiyun #define EnableExternalTMDS_Encoder TMDS1XEncoderControl 7841*4882a593Smuzhiyun 7842*4882a593Smuzhiyun #define DFP1IOutputControl TMDSAOutputControl 7843*4882a593Smuzhiyun #define DFP2IOutputControl LVTMAOutputControl 7844*4882a593Smuzhiyun 7845*4882a593Smuzhiyun #define DAC1_ENCODER_CONTROL_PARAMETERS DAC_ENCODER_CONTROL_PARAMETERS 7846*4882a593Smuzhiyun #define DAC1_ENCODER_CONTROL_PS_ALLOCATION DAC_ENCODER_CONTROL_PS_ALLOCATION 7847*4882a593Smuzhiyun 7848*4882a593Smuzhiyun #define DAC2_ENCODER_CONTROL_PARAMETERS DAC_ENCODER_CONTROL_PARAMETERS 7849*4882a593Smuzhiyun #define DAC2_ENCODER_CONTROL_PS_ALLOCATION DAC_ENCODER_CONTROL_PS_ALLOCATION 7850*4882a593Smuzhiyun 7851*4882a593Smuzhiyun #define ucDac1Standard ucDacStandard 7852*4882a593Smuzhiyun #define ucDac2Standard ucDacStandard 7853*4882a593Smuzhiyun 7854*4882a593Smuzhiyun #define TMDS1EncoderControl TMDSAEncoderControl 7855*4882a593Smuzhiyun #define TMDS2EncoderControl LVTMAEncoderControl 7856*4882a593Smuzhiyun 7857*4882a593Smuzhiyun #define DFP1OutputControl TMDSAOutputControl 7858*4882a593Smuzhiyun #define DFP2OutputControl LVTMAOutputControl 7859*4882a593Smuzhiyun #define CRT1OutputControl DAC1OutputControl 7860*4882a593Smuzhiyun #define CRT2OutputControl DAC2OutputControl 7861*4882a593Smuzhiyun 7862*4882a593Smuzhiyun //These two lines will be removed for sure in a few days, will follow up with Michael V. 7863*4882a593Smuzhiyun #define EnableLVDS_SS EnableSpreadSpectrumOnPPLL 7864*4882a593Smuzhiyun #define ENABLE_LVDS_SS_PARAMETERS_V3 ENABLE_SPREAD_SPECTRUM_ON_PPLL 7865*4882a593Smuzhiyun 7866*4882a593Smuzhiyun //#define ATOM_S2_CRT1_DPMS_STATE 0x00010000L 7867*4882a593Smuzhiyun //#define ATOM_S2_LCD1_DPMS_STATE ATOM_S2_CRT1_DPMS_STATE 7868*4882a593Smuzhiyun //#define ATOM_S2_TV1_DPMS_STATE ATOM_S2_CRT1_DPMS_STATE 7869*4882a593Smuzhiyun //#define ATOM_S2_DFP1_DPMS_STATE ATOM_S2_CRT1_DPMS_STATE 7870*4882a593Smuzhiyun //#define ATOM_S2_CRT2_DPMS_STATE ATOM_S2_CRT1_DPMS_STATE 7871*4882a593Smuzhiyun 7872*4882a593Smuzhiyun #define ATOM_S6_ACC_REQ_TV2 0x00400000L 7873*4882a593Smuzhiyun #define ATOM_DEVICE_TV2_INDEX 0x00000006 7874*4882a593Smuzhiyun #define ATOM_DEVICE_TV2_SUPPORT (0x1L << ATOM_DEVICE_TV2_INDEX) 7875*4882a593Smuzhiyun #define ATOM_S0_TV2 0x00100000L 7876*4882a593Smuzhiyun #define ATOM_S3_TV2_ACTIVE ATOM_S3_DFP6_ACTIVE 7877*4882a593Smuzhiyun #define ATOM_S3_TV2_CRTC_ACTIVE ATOM_S3_DFP6_CRTC_ACTIVE 7878*4882a593Smuzhiyun 7879*4882a593Smuzhiyun // 7880*4882a593Smuzhiyun #define ATOM_S2_CRT1_DPMS_STATE 0x00010000L 7881*4882a593Smuzhiyun #define ATOM_S2_LCD1_DPMS_STATE 0x00020000L 7882*4882a593Smuzhiyun #define ATOM_S2_TV1_DPMS_STATE 0x00040000L 7883*4882a593Smuzhiyun #define ATOM_S2_DFP1_DPMS_STATE 0x00080000L 7884*4882a593Smuzhiyun #define ATOM_S2_CRT2_DPMS_STATE 0x00100000L 7885*4882a593Smuzhiyun #define ATOM_S2_LCD2_DPMS_STATE 0x00200000L 7886*4882a593Smuzhiyun #define ATOM_S2_TV2_DPMS_STATE 0x00400000L 7887*4882a593Smuzhiyun #define ATOM_S2_DFP2_DPMS_STATE 0x00800000L 7888*4882a593Smuzhiyun #define ATOM_S2_CV_DPMS_STATE 0x01000000L 7889*4882a593Smuzhiyun #define ATOM_S2_DFP3_DPMS_STATE 0x02000000L 7890*4882a593Smuzhiyun #define ATOM_S2_DFP4_DPMS_STATE 0x04000000L 7891*4882a593Smuzhiyun #define ATOM_S2_DFP5_DPMS_STATE 0x08000000L 7892*4882a593Smuzhiyun 7893*4882a593Smuzhiyun #define ATOM_S2_CRT1_DPMS_STATEb2 0x01 7894*4882a593Smuzhiyun #define ATOM_S2_LCD1_DPMS_STATEb2 0x02 7895*4882a593Smuzhiyun #define ATOM_S2_TV1_DPMS_STATEb2 0x04 7896*4882a593Smuzhiyun #define ATOM_S2_DFP1_DPMS_STATEb2 0x08 7897*4882a593Smuzhiyun #define ATOM_S2_CRT2_DPMS_STATEb2 0x10 7898*4882a593Smuzhiyun #define ATOM_S2_LCD2_DPMS_STATEb2 0x20 7899*4882a593Smuzhiyun #define ATOM_S2_TV2_DPMS_STATEb2 0x40 7900*4882a593Smuzhiyun #define ATOM_S2_DFP2_DPMS_STATEb2 0x80 7901*4882a593Smuzhiyun #define ATOM_S2_CV_DPMS_STATEb3 0x01 7902*4882a593Smuzhiyun #define ATOM_S2_DFP3_DPMS_STATEb3 0x02 7903*4882a593Smuzhiyun #define ATOM_S2_DFP4_DPMS_STATEb3 0x04 7904*4882a593Smuzhiyun #define ATOM_S2_DFP5_DPMS_STATEb3 0x08 7905*4882a593Smuzhiyun 7906*4882a593Smuzhiyun #define ATOM_S3_ASIC_GUI_ENGINE_HUNGb3 0x20 7907*4882a593Smuzhiyun #define ATOM_S3_ALLOW_FAST_PWR_SWITCHb3 0x40 7908*4882a593Smuzhiyun #define ATOM_S3_RQST_GPU_USE_MIN_PWRb3 0x80 7909*4882a593Smuzhiyun 7910*4882a593Smuzhiyun /*********************************************************************************/ 7911*4882a593Smuzhiyun 7912*4882a593Smuzhiyun #pragma pack() // BIOS data must use byte alignment 7913*4882a593Smuzhiyun 7914*4882a593Smuzhiyun // 7915*4882a593Smuzhiyun // AMD ACPI Table 7916*4882a593Smuzhiyun // 7917*4882a593Smuzhiyun #pragma pack(1) 7918*4882a593Smuzhiyun 7919*4882a593Smuzhiyun typedef struct { 7920*4882a593Smuzhiyun ULONG Signature; 7921*4882a593Smuzhiyun ULONG TableLength; //Length 7922*4882a593Smuzhiyun UCHAR Revision; 7923*4882a593Smuzhiyun UCHAR Checksum; 7924*4882a593Smuzhiyun UCHAR OemId[6]; 7925*4882a593Smuzhiyun UCHAR OemTableId[8]; //UINT64 OemTableId; 7926*4882a593Smuzhiyun ULONG OemRevision; 7927*4882a593Smuzhiyun ULONG CreatorId; 7928*4882a593Smuzhiyun ULONG CreatorRevision; 7929*4882a593Smuzhiyun } AMD_ACPI_DESCRIPTION_HEADER; 7930*4882a593Smuzhiyun /* 7931*4882a593Smuzhiyun //EFI_ACPI_DESCRIPTION_HEADER from AcpiCommon.h 7932*4882a593Smuzhiyun typedef struct { 7933*4882a593Smuzhiyun UINT32 Signature; //0x0 7934*4882a593Smuzhiyun UINT32 Length; //0x4 7935*4882a593Smuzhiyun UINT8 Revision; //0x8 7936*4882a593Smuzhiyun UINT8 Checksum; //0x9 7937*4882a593Smuzhiyun UINT8 OemId[6]; //0xA 7938*4882a593Smuzhiyun UINT64 OemTableId; //0x10 7939*4882a593Smuzhiyun UINT32 OemRevision; //0x18 7940*4882a593Smuzhiyun UINT32 CreatorId; //0x1C 7941*4882a593Smuzhiyun UINT32 CreatorRevision; //0x20 7942*4882a593Smuzhiyun }EFI_ACPI_DESCRIPTION_HEADER; 7943*4882a593Smuzhiyun */ 7944*4882a593Smuzhiyun typedef struct { 7945*4882a593Smuzhiyun AMD_ACPI_DESCRIPTION_HEADER SHeader; 7946*4882a593Smuzhiyun UCHAR TableUUID[16]; //0x24 7947*4882a593Smuzhiyun ULONG VBIOSImageOffset; //0x34. Offset to the first GOP_VBIOS_CONTENT block from the beginning of the structure. 7948*4882a593Smuzhiyun ULONG Lib1ImageOffset; //0x38. Offset to the first GOP_LIB1_CONTENT block from the beginning of the structure. 7949*4882a593Smuzhiyun ULONG Reserved[4]; //0x3C 7950*4882a593Smuzhiyun }UEFI_ACPI_VFCT; 7951*4882a593Smuzhiyun 7952*4882a593Smuzhiyun typedef struct { 7953*4882a593Smuzhiyun ULONG PCIBus; //0x4C 7954*4882a593Smuzhiyun ULONG PCIDevice; //0x50 7955*4882a593Smuzhiyun ULONG PCIFunction; //0x54 7956*4882a593Smuzhiyun USHORT VendorID; //0x58 7957*4882a593Smuzhiyun USHORT DeviceID; //0x5A 7958*4882a593Smuzhiyun USHORT SSVID; //0x5C 7959*4882a593Smuzhiyun USHORT SSID; //0x5E 7960*4882a593Smuzhiyun ULONG Revision; //0x60 7961*4882a593Smuzhiyun ULONG ImageLength; //0x64 7962*4882a593Smuzhiyun }VFCT_IMAGE_HEADER; 7963*4882a593Smuzhiyun 7964*4882a593Smuzhiyun 7965*4882a593Smuzhiyun typedef struct { 7966*4882a593Smuzhiyun VFCT_IMAGE_HEADER VbiosHeader; 7967*4882a593Smuzhiyun UCHAR VbiosContent[1]; 7968*4882a593Smuzhiyun }GOP_VBIOS_CONTENT; 7969*4882a593Smuzhiyun 7970*4882a593Smuzhiyun typedef struct { 7971*4882a593Smuzhiyun VFCT_IMAGE_HEADER Lib1Header; 7972*4882a593Smuzhiyun UCHAR Lib1Content[1]; 7973*4882a593Smuzhiyun }GOP_LIB1_CONTENT; 7974*4882a593Smuzhiyun 7975*4882a593Smuzhiyun #pragma pack() 7976*4882a593Smuzhiyun 7977*4882a593Smuzhiyun 7978*4882a593Smuzhiyun #endif /* _ATOMBIOS_H */ 7979*4882a593Smuzhiyun 7980*4882a593Smuzhiyun #include "pptable.h" 7981*4882a593Smuzhiyun 7982