Path: blob/master/drivers/gpu/drm/radeon/atombios.h
15113 views
/*1* Copyright 2006-2007 Advanced Micro Devices, Inc.2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice shall be included in11* all copies or substantial portions of the Software.12*13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,15* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL16* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR17* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,18* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR19* OTHER DEALINGS IN THE SOFTWARE.20*/212223/****************************************************************************/24/*Portion I: Definitions shared between VBIOS and Driver */25/****************************************************************************/262728#ifndef _ATOMBIOS_H29#define _ATOMBIOS_H3031#define ATOM_VERSION_MAJOR 0x0002000032#define ATOM_VERSION_MINOR 0x000000023334#define ATOM_HEADER_VERSION (ATOM_VERSION_MAJOR | ATOM_VERSION_MINOR)3536/* Endianness should be specified before inclusion,37* default to little endian38*/39#ifndef ATOM_BIG_ENDIAN40#error Endian not specified41#endif4243#ifdef _H2INC44#ifndef ULONG45typedef unsigned long ULONG;46#endif4748#ifndef UCHAR49typedef unsigned char UCHAR;50#endif5152#ifndef USHORT53typedef unsigned short USHORT;54#endif55#endif5657#define ATOM_DAC_A 058#define ATOM_DAC_B 159#define ATOM_EXT_DAC 26061#define ATOM_CRTC1 062#define ATOM_CRTC2 163#define ATOM_CRTC3 264#define ATOM_CRTC4 365#define ATOM_CRTC5 466#define ATOM_CRTC6 567#define ATOM_CRTC_INVALID 0xFF6869#define ATOM_DIGA 070#define ATOM_DIGB 17172#define ATOM_PPLL1 073#define ATOM_PPLL2 174#define ATOM_DCPLL 275#define ATOM_PPLL0 276#define ATOM_EXT_PLL1 877#define ATOM_EXT_PLL2 978#define ATOM_EXT_CLOCK 1079#define ATOM_PPLL_INVALID 0xFF8081#define ENCODER_REFCLK_SRC_P1PLL 082#define ENCODER_REFCLK_SRC_P2PLL 183#define ENCODER_REFCLK_SRC_DCPLL 284#define ENCODER_REFCLK_SRC_EXTCLK 385#define ENCODER_REFCLK_SRC_INVALID 0xFF8687#define ATOM_SCALER1 088#define ATOM_SCALER2 18990#define ATOM_SCALER_DISABLE 091#define ATOM_SCALER_CENTER 192#define ATOM_SCALER_EXPANSION 293#define ATOM_SCALER_MULTI_EX 39495#define ATOM_DISABLE 096#define ATOM_ENABLE 197#define ATOM_LCD_BLOFF (ATOM_DISABLE+2)98#define ATOM_LCD_BLON (ATOM_ENABLE+2)99#define ATOM_LCD_BL_BRIGHTNESS_CONTROL (ATOM_ENABLE+3)100#define ATOM_LCD_SELFTEST_START (ATOM_DISABLE+5)101#define ATOM_LCD_SELFTEST_STOP (ATOM_ENABLE+5)102#define ATOM_ENCODER_INIT (ATOM_DISABLE+7)103#define ATOM_GET_STATUS (ATOM_DISABLE+8)104105#define ATOM_BLANKING 1106#define ATOM_BLANKING_OFF 0107108#define ATOM_CURSOR1 0109#define ATOM_CURSOR2 1110111#define ATOM_ICON1 0112#define ATOM_ICON2 1113114#define ATOM_CRT1 0115#define ATOM_CRT2 1116117#define ATOM_TV_NTSC 1118#define ATOM_TV_NTSCJ 2119#define ATOM_TV_PAL 3120#define ATOM_TV_PALM 4121#define ATOM_TV_PALCN 5122#define ATOM_TV_PALN 6123#define ATOM_TV_PAL60 7124#define ATOM_TV_SECAM 8125#define ATOM_TV_CV 16126127#define ATOM_DAC1_PS2 1128#define ATOM_DAC1_CV 2129#define ATOM_DAC1_NTSC 3130#define ATOM_DAC1_PAL 4131132#define ATOM_DAC2_PS2 ATOM_DAC1_PS2133#define ATOM_DAC2_CV ATOM_DAC1_CV134#define ATOM_DAC2_NTSC ATOM_DAC1_NTSC135#define ATOM_DAC2_PAL ATOM_DAC1_PAL136137#define ATOM_PM_ON 0138#define ATOM_PM_STANDBY 1139#define ATOM_PM_SUSPEND 2140#define ATOM_PM_OFF 3141142/* Bit0:{=0:single, =1:dual},143Bit1 {=0:666RGB, =1:888RGB},144Bit2:3:{Grey level}145Bit4:{=0:LDI format for RGB888, =1 FPDI format for RGB888}*/146147#define ATOM_PANEL_MISC_DUAL 0x00000001148#define ATOM_PANEL_MISC_888RGB 0x00000002149#define ATOM_PANEL_MISC_GREY_LEVEL 0x0000000C150#define ATOM_PANEL_MISC_FPDI 0x00000010151#define ATOM_PANEL_MISC_GREY_LEVEL_SHIFT 2152#define ATOM_PANEL_MISC_SPATIAL 0x00000020153#define ATOM_PANEL_MISC_TEMPORAL 0x00000040154#define ATOM_PANEL_MISC_API_ENABLED 0x00000080155156157#define MEMTYPE_DDR1 "DDR1"158#define MEMTYPE_DDR2 "DDR2"159#define MEMTYPE_DDR3 "DDR3"160#define MEMTYPE_DDR4 "DDR4"161162#define ASIC_BUS_TYPE_PCI "PCI"163#define ASIC_BUS_TYPE_AGP "AGP"164#define ASIC_BUS_TYPE_PCIE "PCI_EXPRESS"165166/* Maximum size of that FireGL flag string */167168#define ATOM_FIREGL_FLAG_STRING "FGL" //Flag used to enable FireGL Support169#define ATOM_MAX_SIZE_OF_FIREGL_FLAG_STRING 3 //sizeof( ATOM_FIREGL_FLAG_STRING )170171#define ATOM_FAKE_DESKTOP_STRING "DSK" //Flag used to enable mobile ASIC on Desktop172#define ATOM_MAX_SIZE_OF_FAKE_DESKTOP_STRING ATOM_MAX_SIZE_OF_FIREGL_FLAG_STRING173174#define ATOM_M54T_FLAG_STRING "M54T" //Flag used to enable M54T Support175#define ATOM_MAX_SIZE_OF_M54T_FLAG_STRING 4 //sizeof( ATOM_M54T_FLAG_STRING )176177#define HW_ASSISTED_I2C_STATUS_FAILURE 2178#define HW_ASSISTED_I2C_STATUS_SUCCESS 1179180#pragma pack(1) /* BIOS data must use byte aligment */181182/* Define offset to location of ROM header. */183184#define OFFSET_TO_POINTER_TO_ATOM_ROM_HEADER 0x00000048L185#define OFFSET_TO_ATOM_ROM_IMAGE_SIZE 0x00000002L186187#define OFFSET_TO_ATOMBIOS_ASIC_BUS_MEM_TYPE 0x94188#define MAXSIZE_OF_ATOMBIOS_ASIC_BUS_MEM_TYPE 20 /* including the terminator 0x0! */189#define OFFSET_TO_GET_ATOMBIOS_STRINGS_NUMBER 0x002f190#define OFFSET_TO_GET_ATOMBIOS_STRINGS_START 0x006e191192/* Common header for all ROM Data tables.193Every table pointed _ATOM_MASTER_DATA_TABLE has this common header.194And the pointer actually points to this header. */195196typedef struct _ATOM_COMMON_TABLE_HEADER197{198USHORT usStructureSize;199UCHAR ucTableFormatRevision; /*Change it when the Parser is not backward compatible */200UCHAR ucTableContentRevision; /*Change it only when the table needs to change but the firmware */201/*Image can't be updated, while Driver needs to carry the new table! */202}ATOM_COMMON_TABLE_HEADER;203204/****************************************************************************/205// Structure stores the ROM header.206/****************************************************************************/207typedef struct _ATOM_ROM_HEADER208{209ATOM_COMMON_TABLE_HEADER sHeader;210UCHAR uaFirmWareSignature[4]; /*Signature to distinguish between Atombios and non-atombios,211atombios should init it as "ATOM", don't change the position */212USHORT usBiosRuntimeSegmentAddress;213USHORT usProtectedModeInfoOffset;214USHORT usConfigFilenameOffset;215USHORT usCRC_BlockOffset;216USHORT usBIOS_BootupMessageOffset;217USHORT usInt10Offset;218USHORT usPciBusDevInitCode;219USHORT usIoBaseAddress;220USHORT usSubsystemVendorID;221USHORT usSubsystemID;222USHORT usPCI_InfoOffset;223USHORT usMasterCommandTableOffset; /*Offset for SW to get all command table offsets, Don't change the position */224USHORT usMasterDataTableOffset; /*Offset for SW to get all data table offsets, Don't change the position */225UCHAR ucExtendedFunctionCode;226UCHAR ucReserved;227}ATOM_ROM_HEADER;228229/*==============================Command Table Portion==================================== */230231#ifdef UEFI_BUILD232#define UTEMP USHORT233#define USHORT void*234#endif235236/****************************************************************************/237// Structures used in Command.mtb238/****************************************************************************/239typedef struct _ATOM_MASTER_LIST_OF_COMMAND_TABLES{240USHORT ASIC_Init; //Function Table, used by various SW components,latest version 1.1241USHORT GetDisplaySurfaceSize; //Atomic Table, Used by Bios when enabling HW ICON242USHORT ASIC_RegistersInit; //Atomic Table, indirectly used by various SW components,called from ASIC_Init243USHORT VRAM_BlockVenderDetection; //Atomic Table, used only by Bios244USHORT DIGxEncoderControl; //Only used by Bios245USHORT MemoryControllerInit; //Atomic Table, indirectly used by various SW components,called from ASIC_Init246USHORT EnableCRTCMemReq; //Function Table,directly used by various SW components,latest version 2.1247USHORT MemoryParamAdjust; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock if needed248USHORT DVOEncoderControl; //Function Table,directly used by various SW components,latest version 1.2249USHORT GPIOPinControl; //Atomic Table, only used by Bios250USHORT SetEngineClock; //Function Table,directly used by various SW components,latest version 1.1251USHORT SetMemoryClock; //Function Table,directly used by various SW components,latest version 1.1252USHORT SetPixelClock; //Function Table,directly used by various SW components,latest version 1.2253USHORT DynamicClockGating; //Atomic Table, indirectly used by various SW components,called from ASIC_Init254USHORT ResetMemoryDLL; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock255USHORT ResetMemoryDevice; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock256USHORT MemoryPLLInit;257USHORT AdjustDisplayPll; //only used by Bios258USHORT AdjustMemoryController; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock259USHORT EnableASIC_StaticPwrMgt; //Atomic Table, only used by Bios260USHORT ASIC_StaticPwrMgtStatusChange; //Obsolete , only used by Bios261USHORT DAC_LoadDetection; //Atomic Table, directly used by various SW components,latest version 1.2262USHORT LVTMAEncoderControl; //Atomic Table,directly used by various SW components,latest version 1.3263USHORT LCD1OutputControl; //Atomic Table, directly used by various SW components,latest version 1.1264USHORT DAC1EncoderControl; //Atomic Table, directly used by various SW components,latest version 1.1265USHORT DAC2EncoderControl; //Atomic Table, directly used by various SW components,latest version 1.1266USHORT DVOOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1267USHORT CV1OutputControl; //Atomic Table, Atomic Table, Obsolete from Ry6xx, use DAC2 Output instead268USHORT GetConditionalGoldenSetting; //only used by Bios269USHORT TVEncoderControl; //Function Table,directly used by various SW components,latest version 1.1270USHORT TMDSAEncoderControl; //Atomic Table, directly used by various SW components,latest version 1.3271USHORT LVDSEncoderControl; //Atomic Table, directly used by various SW components,latest version 1.3272USHORT TV1OutputControl; //Atomic Table, Obsolete from Ry6xx, use DAC2 Output instead273USHORT EnableScaler; //Atomic Table, used only by Bios274USHORT BlankCRTC; //Atomic Table, directly used by various SW components,latest version 1.1275USHORT EnableCRTC; //Atomic Table, directly used by various SW components,latest version 1.1276USHORT GetPixelClock; //Atomic Table, directly used by various SW components,latest version 1.1277USHORT EnableVGA_Render; //Function Table,directly used by various SW components,latest version 1.1278USHORT GetSCLKOverMCLKRatio; //Atomic Table, only used by Bios279USHORT SetCRTC_Timing; //Atomic Table, directly used by various SW components,latest version 1.1280USHORT SetCRTC_OverScan; //Atomic Table, used by various SW components,latest version 1.1281USHORT SetCRTC_Replication; //Atomic Table, used only by Bios282USHORT SelectCRTC_Source; //Atomic Table, directly used by various SW components,latest version 1.1283USHORT EnableGraphSurfaces; //Atomic Table, used only by Bios284USHORT UpdateCRTC_DoubleBufferRegisters;285USHORT LUT_AutoFill; //Atomic Table, only used by Bios286USHORT EnableHW_IconCursor; //Atomic Table, only used by Bios287USHORT GetMemoryClock; //Atomic Table, directly used by various SW components,latest version 1.1288USHORT GetEngineClock; //Atomic Table, directly used by various SW components,latest version 1.1289USHORT SetCRTC_UsingDTDTiming; //Atomic Table, directly used by various SW components,latest version 1.1290USHORT ExternalEncoderControl; //Atomic Table, directly used by various SW components,latest version 2.1291USHORT LVTMAOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1292USHORT VRAM_BlockDetectionByStrap; //Atomic Table, used only by Bios293USHORT MemoryCleanUp; //Atomic Table, only used by Bios294USHORT ProcessI2cChannelTransaction; //Function Table,only used by Bios295USHORT WriteOneByteToHWAssistedI2C; //Function Table,indirectly used by various SW components296USHORT ReadHWAssistedI2CStatus; //Atomic Table, indirectly used by various SW components297USHORT SpeedFanControl; //Function Table,indirectly used by various SW components,called from ASIC_Init298USHORT PowerConnectorDetection; //Atomic Table, directly used by various SW components,latest version 1.1299USHORT MC_Synchronization; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock300USHORT ComputeMemoryEnginePLL; //Atomic Table, indirectly used by various SW components,called from SetMemory/EngineClock301USHORT MemoryRefreshConversion; //Atomic Table, indirectly used by various SW components,called from SetMemory or SetEngineClock302USHORT VRAM_GetCurrentInfoBlock; //Atomic Table, used only by Bios303USHORT DynamicMemorySettings; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock304USHORT MemoryTraining; //Atomic Table, used only by Bios305USHORT EnableSpreadSpectrumOnPPLL; //Atomic Table, directly used by various SW components,latest version 1.2306USHORT TMDSAOutputControl; //Atomic Table, directly used by various SW components,latest version 1.1307USHORT SetVoltage; //Function Table,directly and/or indirectly used by various SW components,latest version 1.1308USHORT DAC1OutputControl; //Atomic Table, directly used by various SW components,latest version 1.1309USHORT DAC2OutputControl; //Atomic Table, directly used by various SW components,latest version 1.1310USHORT SetupHWAssistedI2CStatus; //Function Table,only used by Bios, obsolete soon.Switch to use "ReadEDIDFromHWAssistedI2C"311USHORT ClockSource; //Atomic Table, indirectly used by various SW components,called from ASIC_Init312USHORT MemoryDeviceInit; //Atomic Table, indirectly used by various SW components,called from SetMemoryClock313USHORT EnableYUV; //Atomic Table, indirectly used by various SW components,called from EnableVGARender314USHORT DIG1EncoderControl; //Atomic Table,directly used by various SW components,latest version 1.1315USHORT DIG2EncoderControl; //Atomic Table,directly used by various SW components,latest version 1.1316USHORT DIG1TransmitterControl; //Atomic Table,directly used by various SW components,latest version 1.1317USHORT DIG2TransmitterControl; //Atomic Table,directly used by various SW components,latest version 1.1318USHORT ProcessAuxChannelTransaction; //Function Table,only used by Bios319USHORT DPEncoderService; //Function Table,only used by Bios320}ATOM_MASTER_LIST_OF_COMMAND_TABLES;321322// For backward compatible323#define ReadEDIDFromHWAssistedI2C ProcessI2cChannelTransaction324#define UNIPHYTransmitterControl DIG1TransmitterControl325#define LVTMATransmitterControl DIG2TransmitterControl326#define SetCRTC_DPM_State GetConditionalGoldenSetting327#define SetUniphyInstance ASIC_StaticPwrMgtStatusChange328#define HPDInterruptService ReadHWAssistedI2CStatus329#define EnableVGA_Access GetSCLKOverMCLKRatio330#define GetDispObjectInfo EnableYUV331332typedef struct _ATOM_MASTER_COMMAND_TABLE333{334ATOM_COMMON_TABLE_HEADER sHeader;335ATOM_MASTER_LIST_OF_COMMAND_TABLES ListOfCommandTables;336}ATOM_MASTER_COMMAND_TABLE;337338/****************************************************************************/339// Structures used in every command table340/****************************************************************************/341typedef struct _ATOM_TABLE_ATTRIBUTE342{343#if ATOM_BIG_ENDIAN344USHORT UpdatedByUtility:1; //[15]=Table updated by utility flag345USHORT PS_SizeInBytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword),346USHORT WS_SizeInBytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword),347#else348USHORT WS_SizeInBytes:8; //[7:0]=Size of workspace in Bytes (in multiple of a dword),349USHORT PS_SizeInBytes:7; //[14:8]=Size of parameter space in Bytes (multiple of a dword),350USHORT UpdatedByUtility:1; //[15]=Table updated by utility flag351#endif352}ATOM_TABLE_ATTRIBUTE;353354typedef union _ATOM_TABLE_ATTRIBUTE_ACCESS355{356ATOM_TABLE_ATTRIBUTE sbfAccess;357USHORT susAccess;358}ATOM_TABLE_ATTRIBUTE_ACCESS;359360/****************************************************************************/361// Common header for all command tables.362// Every table pointed by _ATOM_MASTER_COMMAND_TABLE has this common header.363// And the pointer actually points to this header.364/****************************************************************************/365typedef struct _ATOM_COMMON_ROM_COMMAND_TABLE_HEADER366{367ATOM_COMMON_TABLE_HEADER CommonHeader;368ATOM_TABLE_ATTRIBUTE TableAttribute;369}ATOM_COMMON_ROM_COMMAND_TABLE_HEADER;370371/****************************************************************************/372// Structures used by ComputeMemoryEnginePLLTable373/****************************************************************************/374#define COMPUTE_MEMORY_PLL_PARAM 1375#define COMPUTE_ENGINE_PLL_PARAM 2376#define ADJUST_MC_SETTING_PARAM 3377378/****************************************************************************/379// Structures used by AdjustMemoryControllerTable380/****************************************************************************/381typedef struct _ATOM_ADJUST_MEMORY_CLOCK_FREQ382{383#if ATOM_BIG_ENDIAN384ULONG ulPointerReturnFlag:1; // BYTE_3[7]=1 - Return the pointer to the right Data Block; BYTE_3[7]=0 - Program the right Data Block385ULONG ulMemoryModuleNumber:7; // BYTE_3[6:0]386ULONG ulClockFreq:24;387#else388ULONG ulClockFreq:24;389ULONG ulMemoryModuleNumber:7; // BYTE_3[6:0]390ULONG ulPointerReturnFlag:1; // BYTE_3[7]=1 - Return the pointer to the right Data Block; BYTE_3[7]=0 - Program the right Data Block391#endif392}ATOM_ADJUST_MEMORY_CLOCK_FREQ;393#define POINTER_RETURN_FLAG 0x80394395typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS396{397ULONG ulClock; //When returen, it's the re-calculated clock based on given Fb_div Post_Div and ref_div398UCHAR ucAction; //0:reserved //1:Memory //2:Engine399UCHAR ucReserved; //may expand to return larger Fbdiv later400UCHAR ucFbDiv; //return value401UCHAR ucPostDiv; //return value402}COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS;403404typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V2405{406ULONG ulClock; //When return, [23:0] return real clock407UCHAR ucAction; //0:reserved;COMPUTE_MEMORY_PLL_PARAM:Memory;COMPUTE_ENGINE_PLL_PARAM:Engine. it return ref_div to be written to register408USHORT usFbDiv; //return Feedback value to be written to register409UCHAR ucPostDiv; //return post div to be written to register410}COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V2;411#define COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_PS_ALLOCATION COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS412413414#define SET_CLOCK_FREQ_MASK 0x00FFFFFF //Clock change tables only take bit [23:0] as the requested clock value415#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)416#define USE_MEMORY_SELF_REFRESH_MASK 0x02000000 //Only applicable to memory clock change, when set, using memory self refresh during clock transition417#define SKIP_INTERNAL_MEMORY_PARAMETER_CHANGE 0x04000000 //Only applicable to memory clock change, when set, the table will skip predefined internal memory parameter change418#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 bootup419#define SKIP_SW_PROGRAM_PLL 0x10000000 //Applicable to both memory and engine clock change, when set, it means the table will not program SPLL/MPLL420#define USE_SS_ENABLED_PIXEL_CLOCK USE_NON_BUS_CLOCK_MASK421422#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)423#define b3USE_MEMORY_SELF_REFRESH 0x02 //Only applicable to memory clock change, when set, using memory self refresh during clock transition424#define b3SKIP_INTERNAL_MEMORY_PARAMETER_CHANGE 0x04 //Only applicable to memory clock change, when set, the table will skip predefined internal memory parameter change425#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 bootup426#define b3SKIP_SW_PROGRAM_PLL 0x10 //Applicable to both memory and engine clock change, when set, it means the table will not program SPLL/MPLL427428typedef struct _ATOM_COMPUTE_CLOCK_FREQ429{430#if ATOM_BIG_ENDIAN431ULONG ulComputeClockFlag:8; // =1: COMPUTE_MEMORY_PLL_PARAM, =2: COMPUTE_ENGINE_PLL_PARAM432ULONG ulClockFreq:24; // in unit of 10kHz433#else434ULONG ulClockFreq:24; // in unit of 10kHz435ULONG ulComputeClockFlag:8; // =1: COMPUTE_MEMORY_PLL_PARAM, =2: COMPUTE_ENGINE_PLL_PARAM436#endif437}ATOM_COMPUTE_CLOCK_FREQ;438439typedef struct _ATOM_S_MPLL_FB_DIVIDER440{441USHORT usFbDivFrac;442USHORT usFbDiv;443}ATOM_S_MPLL_FB_DIVIDER;444445typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V3446{447union448{449ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter450ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter451};452UCHAR ucRefDiv; //Output Parameter453UCHAR ucPostDiv; //Output Parameter454UCHAR ucCntlFlag; //Output Parameter455UCHAR ucReserved;456}COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V3;457458// ucCntlFlag459#define ATOM_PLL_CNTL_FLAG_PLL_POST_DIV_EN 1460#define ATOM_PLL_CNTL_FLAG_MPLL_VCO_MODE 2461#define ATOM_PLL_CNTL_FLAG_FRACTION_DISABLE 4462#define ATOM_PLL_CNTL_FLAG_SPLL_ISPARE_9 8463464465// V4 are only used for APU which PLL outside GPU466typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V4467{468#if ATOM_BIG_ENDIAN469ULONG ucPostDiv; //return parameter: post divider which is used to program to register directly470ULONG ulClock:24; //Input= target clock, output = actual clock471#else472ULONG ulClock:24; //Input= target clock, output = actual clock473ULONG ucPostDiv; //return parameter: post divider which is used to program to register directly474#endif475}COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V4;476477typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V5478{479union480{481ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter482ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter483};484UCHAR ucRefDiv; //Output Parameter485UCHAR ucPostDiv; //Output Parameter486union487{488UCHAR ucCntlFlag; //Output Flags489UCHAR ucInputFlag; //Input Flags. ucInputFlag[0] - Strobe(1)/Performance(0) mode490};491UCHAR ucReserved;492}COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V5;493494// ucInputFlag495#define ATOM_PLL_INPUT_FLAG_PLL_STROBE_MODE_EN 1 // 1-StrobeMode, 0-PerformanceMode496497typedef struct _DYNAMICE_MEMORY_SETTINGS_PARAMETER498{499ATOM_COMPUTE_CLOCK_FREQ ulClock;500ULONG ulReserved[2];501}DYNAMICE_MEMORY_SETTINGS_PARAMETER;502503typedef struct _DYNAMICE_ENGINE_SETTINGS_PARAMETER504{505ATOM_COMPUTE_CLOCK_FREQ ulClock;506ULONG ulMemoryClock;507ULONG ulReserved;508}DYNAMICE_ENGINE_SETTINGS_PARAMETER;509510/****************************************************************************/511// Structures used by SetEngineClockTable512/****************************************************************************/513typedef struct _SET_ENGINE_CLOCK_PARAMETERS514{515ULONG ulTargetEngineClock; //In 10Khz unit516}SET_ENGINE_CLOCK_PARAMETERS;517518typedef struct _SET_ENGINE_CLOCK_PS_ALLOCATION519{520ULONG ulTargetEngineClock; //In 10Khz unit521COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_PS_ALLOCATION sReserved;522}SET_ENGINE_CLOCK_PS_ALLOCATION;523524/****************************************************************************/525// Structures used by SetMemoryClockTable526/****************************************************************************/527typedef struct _SET_MEMORY_CLOCK_PARAMETERS528{529ULONG ulTargetMemoryClock; //In 10Khz unit530}SET_MEMORY_CLOCK_PARAMETERS;531532typedef struct _SET_MEMORY_CLOCK_PS_ALLOCATION533{534ULONG ulTargetMemoryClock; //In 10Khz unit535COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_PS_ALLOCATION sReserved;536}SET_MEMORY_CLOCK_PS_ALLOCATION;537538/****************************************************************************/539// Structures used by ASIC_Init.ctb540/****************************************************************************/541typedef struct _ASIC_INIT_PARAMETERS542{543ULONG ulDefaultEngineClock; //In 10Khz unit544ULONG ulDefaultMemoryClock; //In 10Khz unit545}ASIC_INIT_PARAMETERS;546547typedef struct _ASIC_INIT_PS_ALLOCATION548{549ASIC_INIT_PARAMETERS sASICInitClocks;550SET_ENGINE_CLOCK_PS_ALLOCATION sReserved; //Caller doesn't need to init this structure551}ASIC_INIT_PS_ALLOCATION;552553/****************************************************************************/554// Structure used by DynamicClockGatingTable.ctb555/****************************************************************************/556typedef struct _DYNAMIC_CLOCK_GATING_PARAMETERS557{558UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE559UCHAR ucPadding[3];560}DYNAMIC_CLOCK_GATING_PARAMETERS;561#define DYNAMIC_CLOCK_GATING_PS_ALLOCATION DYNAMIC_CLOCK_GATING_PARAMETERS562563/****************************************************************************/564// Structure used by EnableASIC_StaticPwrMgtTable.ctb565/****************************************************************************/566typedef struct _ENABLE_ASIC_STATIC_PWR_MGT_PARAMETERS567{568UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE569UCHAR ucPadding[3];570}ENABLE_ASIC_STATIC_PWR_MGT_PARAMETERS;571#define ENABLE_ASIC_STATIC_PWR_MGT_PS_ALLOCATION ENABLE_ASIC_STATIC_PWR_MGT_PARAMETERS572573/****************************************************************************/574// Structures used by DAC_LoadDetectionTable.ctb575/****************************************************************************/576typedef struct _DAC_LOAD_DETECTION_PARAMETERS577{578USHORT usDeviceID; //{ATOM_DEVICE_CRTx_SUPPORT,ATOM_DEVICE_TVx_SUPPORT,ATOM_DEVICE_CVx_SUPPORT}579UCHAR ucDacType; //{ATOM_DAC_A,ATOM_DAC_B, ATOM_EXT_DAC}580UCHAR ucMisc; //Valid only when table revision =1.3 and above581}DAC_LOAD_DETECTION_PARAMETERS;582583// DAC_LOAD_DETECTION_PARAMETERS.ucMisc584#define DAC_LOAD_MISC_YPrPb 0x01585586typedef struct _DAC_LOAD_DETECTION_PS_ALLOCATION587{588DAC_LOAD_DETECTION_PARAMETERS sDacload;589ULONG Reserved[2];// Don't set this one, allocation for EXT DAC590}DAC_LOAD_DETECTION_PS_ALLOCATION;591592/****************************************************************************/593// Structures used by DAC1EncoderControlTable.ctb and DAC2EncoderControlTable.ctb594/****************************************************************************/595typedef struct _DAC_ENCODER_CONTROL_PARAMETERS596{597USHORT usPixelClock; // in 10KHz; for bios convenient598UCHAR ucDacStandard; // See definition of ATOM_DACx_xxx, For DEC3.0, bit 7 used as internal flag to indicate DAC2 (==1) or DAC1 (==0)599UCHAR ucAction; // 0: turn off encoder600// 1: setup and turn on encoder601// 7: ATOM_ENCODER_INIT Initialize DAC602}DAC_ENCODER_CONTROL_PARAMETERS;603604#define DAC_ENCODER_CONTROL_PS_ALLOCATION DAC_ENCODER_CONTROL_PARAMETERS605606/****************************************************************************/607// Structures used by DIG1EncoderControlTable608// DIG2EncoderControlTable609// ExternalEncoderControlTable610/****************************************************************************/611typedef struct _DIG_ENCODER_CONTROL_PARAMETERS612{613USHORT usPixelClock; // in 10KHz; for bios convenient614UCHAR ucConfig;615// [2] Link Select:616// =0: PHY linkA if bfLane<3617// =1: PHY linkB if bfLanes<3618// =0: PHY linkA+B if bfLanes=3619// [3] Transmitter Sel620// =0: UNIPHY or PCIEPHY621// =1: LVTMA622UCHAR ucAction; // =0: turn off encoder623// =1: turn on encoder624UCHAR ucEncoderMode;625// =0: DP encoder626// =1: LVDS encoder627// =2: DVI encoder628// =3: HDMI encoder629// =4: SDVO encoder630UCHAR ucLaneNum; // how many lanes to enable631UCHAR ucReserved[2];632}DIG_ENCODER_CONTROL_PARAMETERS;633#define DIG_ENCODER_CONTROL_PS_ALLOCATION DIG_ENCODER_CONTROL_PARAMETERS634#define EXTERNAL_ENCODER_CONTROL_PARAMETER DIG_ENCODER_CONTROL_PARAMETERS635636//ucConfig637#define ATOM_ENCODER_CONFIG_DPLINKRATE_MASK 0x01638#define ATOM_ENCODER_CONFIG_DPLINKRATE_1_62GHZ 0x00639#define ATOM_ENCODER_CONFIG_DPLINKRATE_2_70GHZ 0x01640#define ATOM_ENCODER_CONFIG_DPLINKRATE_5_40GHZ 0x02641#define ATOM_ENCODER_CONFIG_LINK_SEL_MASK 0x04642#define ATOM_ENCODER_CONFIG_LINKA 0x00643#define ATOM_ENCODER_CONFIG_LINKB 0x04644#define ATOM_ENCODER_CONFIG_LINKA_B ATOM_TRANSMITTER_CONFIG_LINKA645#define ATOM_ENCODER_CONFIG_LINKB_A ATOM_ENCODER_CONFIG_LINKB646#define ATOM_ENCODER_CONFIG_TRANSMITTER_SEL_MASK 0x08647#define ATOM_ENCODER_CONFIG_UNIPHY 0x00648#define ATOM_ENCODER_CONFIG_LVTMA 0x08649#define ATOM_ENCODER_CONFIG_TRANSMITTER1 0x00650#define ATOM_ENCODER_CONFIG_TRANSMITTER2 0x08651#define ATOM_ENCODER_CONFIG_DIGB 0x80 // VBIOS Internal use, outside SW should set this bit=0652// ucAction653// ATOM_ENABLE: Enable Encoder654// ATOM_DISABLE: Disable Encoder655656//ucEncoderMode657#define ATOM_ENCODER_MODE_DP 0658#define ATOM_ENCODER_MODE_LVDS 1659#define ATOM_ENCODER_MODE_DVI 2660#define ATOM_ENCODER_MODE_HDMI 3661#define ATOM_ENCODER_MODE_SDVO 4662#define ATOM_ENCODER_MODE_DP_AUDIO 5663#define ATOM_ENCODER_MODE_TV 13664#define ATOM_ENCODER_MODE_CV 14665#define ATOM_ENCODER_MODE_CRT 15666#define ATOM_ENCODER_MODE_DVO 16667#define ATOM_ENCODER_MODE_DP_SST ATOM_ENCODER_MODE_DP // For DP1.2668#define ATOM_ENCODER_MODE_DP_MST 5 // For DP1.2669670typedef struct _ATOM_DIG_ENCODER_CONFIG_V2671{672#if ATOM_BIG_ENDIAN673UCHAR ucReserved1:2;674UCHAR ucTransmitterSel:2; // =0: UniphyAB, =1: UniphyCD =2: UniphyEF675UCHAR ucLinkSel:1; // =0: linkA/C/E =1: linkB/D/F676UCHAR ucReserved:1;677UCHAR ucDPLinkRate:1; // =0: 1.62Ghz, =1: 2.7Ghz678#else679UCHAR ucDPLinkRate:1; // =0: 1.62Ghz, =1: 2.7Ghz680UCHAR ucReserved:1;681UCHAR ucLinkSel:1; // =0: linkA/C/E =1: linkB/D/F682UCHAR ucTransmitterSel:2; // =0: UniphyAB, =1: UniphyCD =2: UniphyEF683UCHAR ucReserved1:2;684#endif685}ATOM_DIG_ENCODER_CONFIG_V2;686687688typedef struct _DIG_ENCODER_CONTROL_PARAMETERS_V2689{690USHORT usPixelClock; // in 10KHz; for bios convenient691ATOM_DIG_ENCODER_CONFIG_V2 acConfig;692UCHAR ucAction;693UCHAR ucEncoderMode;694// =0: DP encoder695// =1: LVDS encoder696// =2: DVI encoder697// =3: HDMI encoder698// =4: SDVO encoder699UCHAR ucLaneNum; // how many lanes to enable700UCHAR ucStatus; // = DP_LINK_TRAINING_COMPLETE or DP_LINK_TRAINING_INCOMPLETE, only used by VBIOS with command ATOM_ENCODER_CMD_QUERY_DP_LINK_TRAINING_STATUS701UCHAR ucReserved;702}DIG_ENCODER_CONTROL_PARAMETERS_V2;703704//ucConfig705#define ATOM_ENCODER_CONFIG_V2_DPLINKRATE_MASK 0x01706#define ATOM_ENCODER_CONFIG_V2_DPLINKRATE_1_62GHZ 0x00707#define ATOM_ENCODER_CONFIG_V2_DPLINKRATE_2_70GHZ 0x01708#define ATOM_ENCODER_CONFIG_V2_LINK_SEL_MASK 0x04709#define ATOM_ENCODER_CONFIG_V2_LINKA 0x00710#define ATOM_ENCODER_CONFIG_V2_LINKB 0x04711#define ATOM_ENCODER_CONFIG_V2_TRANSMITTER_SEL_MASK 0x18712#define ATOM_ENCODER_CONFIG_V2_TRANSMITTER1 0x00713#define ATOM_ENCODER_CONFIG_V2_TRANSMITTER2 0x08714#define ATOM_ENCODER_CONFIG_V2_TRANSMITTER3 0x10715716// ucAction:717// ATOM_DISABLE718// ATOM_ENABLE719#define ATOM_ENCODER_CMD_DP_LINK_TRAINING_START 0x08720#define ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1 0x09721#define ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2 0x0a722#define ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3 0x13723#define ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE 0x0b724#define ATOM_ENCODER_CMD_DP_VIDEO_OFF 0x0c725#define ATOM_ENCODER_CMD_DP_VIDEO_ON 0x0d726#define ATOM_ENCODER_CMD_QUERY_DP_LINK_TRAINING_STATUS 0x0e727#define ATOM_ENCODER_CMD_SETUP 0x0f728#define ATOM_ENCODER_CMD_SETUP_PANEL_MODE 0x10729730// ucStatus731#define ATOM_ENCODER_STATUS_LINK_TRAINING_COMPLETE 0x10732#define ATOM_ENCODER_STATUS_LINK_TRAINING_INCOMPLETE 0x00733734//ucTableFormatRevision=1735//ucTableContentRevision=3736// Following function ENABLE sub-function will be used by driver when TMDS/HDMI/LVDS is used, disable function will be used by driver737typedef struct _ATOM_DIG_ENCODER_CONFIG_V3738{739#if ATOM_BIG_ENDIAN740UCHAR ucReserved1:1;741UCHAR 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)742UCHAR ucReserved:3;743UCHAR ucDPLinkRate:1; // =0: 1.62Ghz, =1: 2.7Ghz744#else745UCHAR ucDPLinkRate:1; // =0: 1.62Ghz, =1: 2.7Ghz746UCHAR ucReserved:3;747UCHAR 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)748UCHAR ucReserved1:1;749#endif750}ATOM_DIG_ENCODER_CONFIG_V3;751752#define ATOM_ENCODER_CONFIG_V3_DPLINKRATE_MASK 0x03753#define ATOM_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ 0x00754#define ATOM_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ 0x01755#define ATOM_ENCODER_CONFIG_V3_ENCODER_SEL 0x70756#define ATOM_ENCODER_CONFIG_V3_DIG0_ENCODER 0x00757#define ATOM_ENCODER_CONFIG_V3_DIG1_ENCODER 0x10758#define ATOM_ENCODER_CONFIG_V3_DIG2_ENCODER 0x20759#define ATOM_ENCODER_CONFIG_V3_DIG3_ENCODER 0x30760#define ATOM_ENCODER_CONFIG_V3_DIG4_ENCODER 0x40761#define ATOM_ENCODER_CONFIG_V3_DIG5_ENCODER 0x50762763typedef struct _DIG_ENCODER_CONTROL_PARAMETERS_V3764{765USHORT usPixelClock; // in 10KHz; for bios convenient766ATOM_DIG_ENCODER_CONFIG_V3 acConfig;767UCHAR ucAction;768union {769UCHAR ucEncoderMode;770// =0: DP encoder771// =1: LVDS encoder772// =2: DVI encoder773// =3: HDMI encoder774// =4: SDVO encoder775// =5: DP audio776UCHAR ucPanelMode; // only valid when ucAction == ATOM_ENCODER_CMD_SETUP_PANEL_MODE777// =0: external DP778// =1: internal DP2779// =0x11: internal DP1 for NutMeg/Travis DP translator780};781UCHAR ucLaneNum; // how many lanes to enable782UCHAR ucBitPerColor; // only valid for DP mode when ucAction = ATOM_ENCODER_CMD_SETUP783UCHAR ucReserved;784}DIG_ENCODER_CONTROL_PARAMETERS_V3;785786//ucTableFormatRevision=1787//ucTableContentRevision=4788// start from NI789// Following function ENABLE sub-function will be used by driver when TMDS/HDMI/LVDS is used, disable function will be used by driver790typedef struct _ATOM_DIG_ENCODER_CONFIG_V4791{792#if ATOM_BIG_ENDIAN793UCHAR ucReserved1:1;794UCHAR 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)795UCHAR ucReserved:2;796UCHAR ucDPLinkRate:2; // =0: 1.62Ghz, =1: 2.7Ghz, 2=5.4Ghz <= Changed comparing to previous version797#else798UCHAR ucDPLinkRate:2; // =0: 1.62Ghz, =1: 2.7Ghz, 2=5.4Ghz <= Changed comparing to previous version799UCHAR ucReserved:2;800UCHAR 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)801UCHAR ucReserved1:1;802#endif803}ATOM_DIG_ENCODER_CONFIG_V4;804805#define ATOM_ENCODER_CONFIG_V4_DPLINKRATE_MASK 0x03806#define ATOM_ENCODER_CONFIG_V4_DPLINKRATE_1_62GHZ 0x00807#define ATOM_ENCODER_CONFIG_V4_DPLINKRATE_2_70GHZ 0x01808#define ATOM_ENCODER_CONFIG_V4_DPLINKRATE_5_40GHZ 0x02809#define ATOM_ENCODER_CONFIG_V4_ENCODER_SEL 0x70810#define ATOM_ENCODER_CONFIG_V4_DIG0_ENCODER 0x00811#define ATOM_ENCODER_CONFIG_V4_DIG1_ENCODER 0x10812#define ATOM_ENCODER_CONFIG_V4_DIG2_ENCODER 0x20813#define ATOM_ENCODER_CONFIG_V4_DIG3_ENCODER 0x30814#define ATOM_ENCODER_CONFIG_V4_DIG4_ENCODER 0x40815#define ATOM_ENCODER_CONFIG_V4_DIG5_ENCODER 0x50816817typedef struct _DIG_ENCODER_CONTROL_PARAMETERS_V4818{819USHORT usPixelClock; // in 10KHz; for bios convenient820union{821ATOM_DIG_ENCODER_CONFIG_V4 acConfig;822UCHAR ucConfig;823};824UCHAR ucAction;825union {826UCHAR ucEncoderMode;827// =0: DP encoder828// =1: LVDS encoder829// =2: DVI encoder830// =3: HDMI encoder831// =4: SDVO encoder832// =5: DP audio833UCHAR ucPanelMode; // only valid when ucAction == ATOM_ENCODER_CMD_SETUP_PANEL_MODE834// =0: external DP835// =1: internal DP2836// =0x11: internal DP1 for NutMeg/Travis DP translator837};838UCHAR ucLaneNum; // how many lanes to enable839UCHAR ucBitPerColor; // only valid for DP mode when ucAction = ATOM_ENCODER_CMD_SETUP840UCHAR ucHPD_ID; // HPD ID (1-6). =0 means to skip HDP programming. New comparing to previous version841}DIG_ENCODER_CONTROL_PARAMETERS_V4;842843// define ucBitPerColor:844#define PANEL_BPC_UNDEFINE 0x00845#define PANEL_6BIT_PER_COLOR 0x01846#define PANEL_8BIT_PER_COLOR 0x02847#define PANEL_10BIT_PER_COLOR 0x03848#define PANEL_12BIT_PER_COLOR 0x04849#define PANEL_16BIT_PER_COLOR 0x05850851//define ucPanelMode852#define DP_PANEL_MODE_EXTERNAL_DP_MODE 0x00853#define DP_PANEL_MODE_INTERNAL_DP2_MODE 0x01854#define DP_PANEL_MODE_INTERNAL_DP1_MODE 0x11855856/****************************************************************************/857// Structures used by UNIPHYTransmitterControlTable858// LVTMATransmitterControlTable859// DVOOutputControlTable860/****************************************************************************/861typedef struct _ATOM_DP_VS_MODE862{863UCHAR ucLaneSel;864UCHAR ucLaneSet;865}ATOM_DP_VS_MODE;866867typedef struct _DIG_TRANSMITTER_CONTROL_PARAMETERS868{869union870{871USHORT usPixelClock; // in 10KHz; for bios convenient872USHORT usInitInfo; // when init uniphy,lower 8bit is used for connector type defined in objectid.h873ATOM_DP_VS_MODE asMode; // DP Voltage swing mode874};875UCHAR ucConfig;876// [0]=0: 4 lane Link,877// =1: 8 lane Link ( Dual Links TMDS )878// [1]=0: InCoherent mode879// =1: Coherent Mode880// [2] Link Select:881// =0: PHY linkA if bfLane<3882// =1: PHY linkB if bfLanes<3883// =0: PHY linkA+B if bfLanes=3884// [5:4]PCIE lane Sel885// =0: lane 0~3 or 0~7886// =1: lane 4~7887// =2: lane 8~11 or 8~15888// =3: lane 12~15889UCHAR ucAction; // =0: turn off encoder890// =1: turn on encoder891UCHAR ucReserved[4];892}DIG_TRANSMITTER_CONTROL_PARAMETERS;893894#define DIG_TRANSMITTER_CONTROL_PS_ALLOCATION DIG_TRANSMITTER_CONTROL_PARAMETERS895896//ucInitInfo897#define ATOM_TRAMITTER_INITINFO_CONNECTOR_MASK 0x00ff898899//ucConfig900#define ATOM_TRANSMITTER_CONFIG_8LANE_LINK 0x01901#define ATOM_TRANSMITTER_CONFIG_COHERENT 0x02902#define ATOM_TRANSMITTER_CONFIG_LINK_SEL_MASK 0x04903#define ATOM_TRANSMITTER_CONFIG_LINKA 0x00904#define ATOM_TRANSMITTER_CONFIG_LINKB 0x04905#define ATOM_TRANSMITTER_CONFIG_LINKA_B 0x00906#define ATOM_TRANSMITTER_CONFIG_LINKB_A 0x04907908#define ATOM_TRANSMITTER_CONFIG_ENCODER_SEL_MASK 0x08 // only used when ATOM_TRANSMITTER_ACTION_ENABLE909#define ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER 0x00 // only used when ATOM_TRANSMITTER_ACTION_ENABLE910#define ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER 0x08 // only used when ATOM_TRANSMITTER_ACTION_ENABLE911912#define ATOM_TRANSMITTER_CONFIG_CLKSRC_MASK 0x30913#define ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL 0x00914#define ATOM_TRANSMITTER_CONFIG_CLKSRC_PCIE 0x20915#define ATOM_TRANSMITTER_CONFIG_CLKSRC_XTALIN 0x30916#define ATOM_TRANSMITTER_CONFIG_LANE_SEL_MASK 0xc0917#define ATOM_TRANSMITTER_CONFIG_LANE_0_3 0x00918#define ATOM_TRANSMITTER_CONFIG_LANE_0_7 0x00919#define ATOM_TRANSMITTER_CONFIG_LANE_4_7 0x40920#define ATOM_TRANSMITTER_CONFIG_LANE_8_11 0x80921#define ATOM_TRANSMITTER_CONFIG_LANE_8_15 0x80922#define ATOM_TRANSMITTER_CONFIG_LANE_12_15 0xc0923924//ucAction925#define ATOM_TRANSMITTER_ACTION_DISABLE 0926#define ATOM_TRANSMITTER_ACTION_ENABLE 1927#define ATOM_TRANSMITTER_ACTION_LCD_BLOFF 2928#define ATOM_TRANSMITTER_ACTION_LCD_BLON 3929#define ATOM_TRANSMITTER_ACTION_BL_BRIGHTNESS_CONTROL 4930#define ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_START 5931#define ATOM_TRANSMITTER_ACTION_LCD_SELFTEST_STOP 6932#define ATOM_TRANSMITTER_ACTION_INIT 7933#define ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT 8934#define ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT 9935#define ATOM_TRANSMITTER_ACTION_SETUP 10936#define ATOM_TRANSMITTER_ACTION_SETUP_VSEMPH 11937#define ATOM_TRANSMITTER_ACTION_POWER_ON 12938#define ATOM_TRANSMITTER_ACTION_POWER_OFF 13939940// Following are used for DigTransmitterControlTable ver1.2941typedef struct _ATOM_DIG_TRANSMITTER_CONFIG_V2942{943#if ATOM_BIG_ENDIAN944UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB )945// =1 Dig Transmitter 2 ( Uniphy CD )946// =2 Dig Transmitter 3 ( Uniphy EF )947UCHAR ucReserved:1;948UCHAR fDPConnector:1; //bit4=0: DP connector =1: None DP connector949UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA( DIG inst0 ). =1: Data/clk path source from DIGB ( DIG inst1 )950UCHAR 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 E951// =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 F952953UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode )954UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector955#else956UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector957UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode )958UCHAR 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 E959// =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 F960UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA( DIG inst0 ). =1: Data/clk path source from DIGB ( DIG inst1 )961UCHAR fDPConnector:1; //bit4=0: DP connector =1: None DP connector962UCHAR ucReserved:1;963UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB )964// =1 Dig Transmitter 2 ( Uniphy CD )965// =2 Dig Transmitter 3 ( Uniphy EF )966#endif967}ATOM_DIG_TRANSMITTER_CONFIG_V2;968969//ucConfig970//Bit0971#define ATOM_TRANSMITTER_CONFIG_V2_DUAL_LINK_CONNECTOR 0x01972973//Bit1974#define ATOM_TRANSMITTER_CONFIG_V2_COHERENT 0x02975976//Bit2977#define ATOM_TRANSMITTER_CONFIG_V2_LINK_SEL_MASK 0x04978#define ATOM_TRANSMITTER_CONFIG_V2_LINKA 0x00979#define ATOM_TRANSMITTER_CONFIG_V2_LINKB 0x04980981// Bit3982#define ATOM_TRANSMITTER_CONFIG_V2_ENCODER_SEL_MASK 0x08983#define ATOM_TRANSMITTER_CONFIG_V2_DIG1_ENCODER 0x00 // only used when ucAction == ATOM_TRANSMITTER_ACTION_ENABLE or ATOM_TRANSMITTER_ACTION_SETUP984#define ATOM_TRANSMITTER_CONFIG_V2_DIG2_ENCODER 0x08 // only used when ucAction == ATOM_TRANSMITTER_ACTION_ENABLE or ATOM_TRANSMITTER_ACTION_SETUP985986// Bit4987#define ATOM_TRASMITTER_CONFIG_V2_DP_CONNECTOR 0x10988989// Bit7:6990#define ATOM_TRANSMITTER_CONFIG_V2_TRANSMITTER_SEL_MASK 0xC0991#define ATOM_TRANSMITTER_CONFIG_V2_TRANSMITTER1 0x00 //AB992#define ATOM_TRANSMITTER_CONFIG_V2_TRANSMITTER2 0x40 //CD993#define ATOM_TRANSMITTER_CONFIG_V2_TRANSMITTER3 0x80 //EF994995typedef struct _DIG_TRANSMITTER_CONTROL_PARAMETERS_V2996{997union998{999USHORT usPixelClock; // in 10KHz; for bios convenient1000USHORT usInitInfo; // when init uniphy,lower 8bit is used for connector type defined in objectid.h1001ATOM_DP_VS_MODE asMode; // DP Voltage swing mode1002};1003ATOM_DIG_TRANSMITTER_CONFIG_V2 acConfig;1004UCHAR ucAction; // define as ATOM_TRANSMITER_ACTION_XXX1005UCHAR ucReserved[4];1006}DIG_TRANSMITTER_CONTROL_PARAMETERS_V2;10071008typedef struct _ATOM_DIG_TRANSMITTER_CONFIG_V31009{1010#if ATOM_BIG_ENDIAN1011UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB )1012// =1 Dig Transmitter 2 ( Uniphy CD )1013// =2 Dig Transmitter 3 ( Uniphy EF )1014UCHAR ucRefClkSource:2; //bit5:4: PPLL1 =0, PPLL2=1, EXT_CLK=21015UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA/C/E. =1: Data/clk path source from DIGB/D/F1016UCHAR 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 E1017// =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 F1018UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode )1019UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector1020#else1021UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector1022UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode )1023UCHAR 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 E1024// =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 F1025UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA/C/E. =1: Data/clk path source from DIGB/D/F1026UCHAR ucRefClkSource:2; //bit5:4: PPLL1 =0, PPLL2=1, EXT_CLK=21027UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB )1028// =1 Dig Transmitter 2 ( Uniphy CD )1029// =2 Dig Transmitter 3 ( Uniphy EF )1030#endif1031}ATOM_DIG_TRANSMITTER_CONFIG_V3;103210331034typedef struct _DIG_TRANSMITTER_CONTROL_PARAMETERS_V31035{1036union1037{1038USHORT usPixelClock; // in 10KHz; for bios convenient1039USHORT usInitInfo; // when init uniphy,lower 8bit is used for connector type defined in objectid.h1040ATOM_DP_VS_MODE asMode; // DP Voltage swing mode1041};1042ATOM_DIG_TRANSMITTER_CONFIG_V3 acConfig;1043UCHAR ucAction; // define as ATOM_TRANSMITER_ACTION_XXX1044UCHAR ucLaneNum;1045UCHAR ucReserved[3];1046}DIG_TRANSMITTER_CONTROL_PARAMETERS_V3;10471048//ucConfig1049//Bit01050#define ATOM_TRANSMITTER_CONFIG_V3_DUAL_LINK_CONNECTOR 0x0110511052//Bit11053#define ATOM_TRANSMITTER_CONFIG_V3_COHERENT 0x0210541055//Bit21056#define ATOM_TRANSMITTER_CONFIG_V3_LINK_SEL_MASK 0x041057#define ATOM_TRANSMITTER_CONFIG_V3_LINKA 0x001058#define ATOM_TRANSMITTER_CONFIG_V3_LINKB 0x0410591060// Bit31061#define ATOM_TRANSMITTER_CONFIG_V3_ENCODER_SEL_MASK 0x081062#define ATOM_TRANSMITTER_CONFIG_V3_DIG1_ENCODER 0x001063#define ATOM_TRANSMITTER_CONFIG_V3_DIG2_ENCODER 0x0810641065// Bit5:41066#define ATOM_TRASMITTER_CONFIG_V3_REFCLK_SEL_MASK 0x301067#define ATOM_TRASMITTER_CONFIG_V3_P1PLL 0x001068#define ATOM_TRASMITTER_CONFIG_V3_P2PLL 0x101069#define ATOM_TRASMITTER_CONFIG_V3_REFCLK_SRC_EXT 0x2010701071// Bit7:61072#define ATOM_TRANSMITTER_CONFIG_V3_TRANSMITTER_SEL_MASK 0xC01073#define ATOM_TRANSMITTER_CONFIG_V3_TRANSMITTER1 0x00 //AB1074#define ATOM_TRANSMITTER_CONFIG_V3_TRANSMITTER2 0x40 //CD1075#define ATOM_TRANSMITTER_CONFIG_V3_TRANSMITTER3 0x80 //EF107610771078/****************************************************************************/1079// Structures used by UNIPHYTransmitterControlTable V1.41080// ASIC Families: NI1081// ucTableFormatRevision=11082// ucTableContentRevision=41083/****************************************************************************/1084typedef struct _ATOM_DP_VS_MODE_V41085{1086UCHAR ucLaneSel;1087union1088{1089UCHAR ucLaneSet;1090struct {1091#if ATOM_BIG_ENDIAN1092UCHAR ucPOST_CURSOR2:2; //Bit[7:6] Post Cursor2 Level <= New in V41093UCHAR ucPRE_EMPHASIS:3; //Bit[5:3] Pre-emphasis Level1094UCHAR ucVOLTAGE_SWING:3; //Bit[2:0] Voltage Swing Level1095#else1096UCHAR ucVOLTAGE_SWING:3; //Bit[2:0] Voltage Swing Level1097UCHAR ucPRE_EMPHASIS:3; //Bit[5:3] Pre-emphasis Level1098UCHAR ucPOST_CURSOR2:2; //Bit[7:6] Post Cursor2 Level <= New in V41099#endif1100};1101};1102}ATOM_DP_VS_MODE_V4;11031104typedef struct _ATOM_DIG_TRANSMITTER_CONFIG_V41105{1106#if ATOM_BIG_ENDIAN1107UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB )1108// =1 Dig Transmitter 2 ( Uniphy CD )1109// =2 Dig Transmitter 3 ( Uniphy EF )1110UCHAR ucRefClkSource:2; //bit5:4: PPLL1 =0, PPLL2=1, DCPLL=2, EXT_CLK=3 <= New1111UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA/C/E. =1: Data/clk path source from DIGB/D/F1112UCHAR 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 E1113// =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 F1114UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode )1115UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector1116#else1117UCHAR fDualLinkConnector:1; //bit0=1: Dual Link DVI connector1118UCHAR fCoherentMode:1; //bit1=1: Coherent Mode ( for DVI/HDMI mode )1119UCHAR 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 E1120// =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 F1121UCHAR ucEncoderSel:1; //bit3=0: Data/Clk path source from DIGA/C/E. =1: Data/clk path source from DIGB/D/F1122UCHAR ucRefClkSource:2; //bit5:4: PPLL1 =0, PPLL2=1, DCPLL=2, EXT_CLK=3 <= New1123UCHAR ucTransmitterSel:2; //bit7:6: =0 Dig Transmitter 1 ( Uniphy AB )1124// =1 Dig Transmitter 2 ( Uniphy CD )1125// =2 Dig Transmitter 3 ( Uniphy EF )1126#endif1127}ATOM_DIG_TRANSMITTER_CONFIG_V4;11281129typedef struct _DIG_TRANSMITTER_CONTROL_PARAMETERS_V41130{1131union1132{1133USHORT usPixelClock; // in 10KHz; for bios convenient1134USHORT usInitInfo; // when init uniphy,lower 8bit is used for connector type defined in objectid.h1135ATOM_DP_VS_MODE_V4 asMode; // DP Voltage swing mode Redefined comparing to previous version1136};1137union1138{1139ATOM_DIG_TRANSMITTER_CONFIG_V4 acConfig;1140UCHAR ucConfig;1141};1142UCHAR ucAction; // define as ATOM_TRANSMITER_ACTION_XXX1143UCHAR ucLaneNum;1144UCHAR ucReserved[3];1145}DIG_TRANSMITTER_CONTROL_PARAMETERS_V4;11461147//ucConfig1148//Bit01149#define ATOM_TRANSMITTER_CONFIG_V4_DUAL_LINK_CONNECTOR 0x011150//Bit11151#define ATOM_TRANSMITTER_CONFIG_V4_COHERENT 0x021152//Bit21153#define ATOM_TRANSMITTER_CONFIG_V4_LINK_SEL_MASK 0x041154#define ATOM_TRANSMITTER_CONFIG_V4_LINKA 0x001155#define ATOM_TRANSMITTER_CONFIG_V4_LINKB 0x041156// Bit31157#define ATOM_TRANSMITTER_CONFIG_V4_ENCODER_SEL_MASK 0x081158#define ATOM_TRANSMITTER_CONFIG_V4_DIG1_ENCODER 0x001159#define ATOM_TRANSMITTER_CONFIG_V4_DIG2_ENCODER 0x081160// Bit5:41161#define ATOM_TRANSMITTER_CONFIG_V4_REFCLK_SEL_MASK 0x301162#define ATOM_TRANSMITTER_CONFIG_V4_P1PLL 0x001163#define ATOM_TRANSMITTER_CONFIG_V4_P2PLL 0x101164#define ATOM_TRANSMITTER_CONFIG_V4_DCPLL 0x20 // New in _V41165#define ATOM_TRANSMITTER_CONFIG_V4_REFCLK_SRC_EXT 0x30 // Changed comparing to V31166// Bit7:61167#define ATOM_TRANSMITTER_CONFIG_V4_TRANSMITTER_SEL_MASK 0xC01168#define ATOM_TRANSMITTER_CONFIG_V4_TRANSMITTER1 0x00 //AB1169#define ATOM_TRANSMITTER_CONFIG_V4_TRANSMITTER2 0x40 //CD1170#define ATOM_TRANSMITTER_CONFIG_V4_TRANSMITTER3 0x80 //EF117111721173/****************************************************************************/1174// Structures used by ExternalEncoderControlTable V1.31175// ASIC Families: Evergreen, Llano, NI1176// ucTableFormatRevision=11177// ucTableContentRevision=31178/****************************************************************************/11791180typedef struct _EXTERNAL_ENCODER_CONTROL_PARAMETERS_V31181{1182union{1183USHORT usPixelClock; // pixel clock in 10Khz, valid when ucAction=SETUP/ENABLE_OUTPUT1184USHORT usConnectorId; // connector id, valid when ucAction = INIT1185};1186UCHAR ucConfig; // indicate which encoder, and DP link rate when ucAction = SETUP/ENABLE_OUTPUT1187UCHAR ucAction; //1188UCHAR ucEncoderMode; // encoder mode, only used when ucAction = SETUP/ENABLE_OUTPUT1189UCHAR ucLaneNum; // lane number, only used when ucAction = SETUP/ENABLE_OUTPUT1190UCHAR ucBitPerColor; // output bit per color, only valid when ucAction = SETUP/ENABLE_OUTPUT and ucEncodeMode= DP1191UCHAR ucReserved;1192}EXTERNAL_ENCODER_CONTROL_PARAMETERS_V3;11931194// ucAction1195#define EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT 0x001196#define EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT 0x011197#define EXTERNAL_ENCODER_ACTION_V3_ENCODER_INIT 0x071198#define EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP 0x0f1199#define EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF 0x101200#define EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING 0x111201#define EXTERNAL_ENCODER_ACTION_V3_DACLOAD_DETECTION 0x121202#define EXTERNAL_ENCODER_ACTION_V3_DDC_SETUP 0x1412031204// ucConfig1205#define EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_MASK 0x031206#define EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_1_62GHZ 0x001207#define EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_2_70GHZ 0x011208#define EXTERNAL_ENCODER_CONFIG_V3_DPLINKRATE_5_40GHZ 0x021209#define EXTERNAL_ENCODER_CONFIG_V3_ENCODER_SEL_MASK 0x701210#define EXTERNAL_ENCODER_CONFIG_V3_ENCODER1 0x001211#define EXTERNAL_ENCODER_CONFIG_V3_ENCODER2 0x101212#define EXTERNAL_ENCODER_CONFIG_V3_ENCODER3 0x2012131214typedef struct _EXTERNAL_ENCODER_CONTROL_PS_ALLOCATION_V31215{1216EXTERNAL_ENCODER_CONTROL_PARAMETERS_V3 sExtEncoder;1217ULONG ulReserved[2];1218}EXTERNAL_ENCODER_CONTROL_PS_ALLOCATION_V3;121912201221/****************************************************************************/1222// Structures used by DAC1OuputControlTable1223// DAC2OuputControlTable1224// LVTMAOutputControlTable (Before DEC30)1225// TMDSAOutputControlTable (Before DEC30)1226/****************************************************************************/1227typedef struct _DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS1228{1229UCHAR ucAction; // Possible input:ATOM_ENABLE||ATOMDISABLE1230// When the display is LCD, in addition to above:1231// ATOM_LCD_BLOFF|| ATOM_LCD_BLON ||ATOM_LCD_BL_BRIGHTNESS_CONTROL||ATOM_LCD_SELFTEST_START||1232// ATOM_LCD_SELFTEST_STOP12331234UCHAR aucPadding[3]; // padding to DWORD aligned1235}DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS;12361237#define DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS123812391240#define CRT1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS1241#define CRT1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION12421243#define CRT2_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS1244#define CRT2_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION12451246#define CV1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS1247#define CV1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION12481249#define TV1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS1250#define TV1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION12511252#define DFP1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS1253#define DFP1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION12541255#define DFP2_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS1256#define DFP2_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION12571258#define LCD1_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS1259#define LCD1_OUTPUT_CONTROL_PS_ALLOCATION DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION12601261#define DVO_OUTPUT_CONTROL_PARAMETERS DISPLAY_DEVICE_OUTPUT_CONTROL_PARAMETERS1262#define DVO_OUTPUT_CONTROL_PS_ALLOCATION DIG_TRANSMITTER_CONTROL_PS_ALLOCATION1263#define DVO_OUTPUT_CONTROL_PARAMETERS_V3 DIG_TRANSMITTER_CONTROL_PARAMETERS12641265/****************************************************************************/1266// Structures used by BlankCRTCTable1267/****************************************************************************/1268typedef struct _BLANK_CRTC_PARAMETERS1269{1270UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC21271UCHAR ucBlanking; // ATOM_BLANKING or ATOM_BLANKINGOFF1272USHORT usBlackColorRCr;1273USHORT usBlackColorGY;1274USHORT usBlackColorBCb;1275}BLANK_CRTC_PARAMETERS;1276#define BLANK_CRTC_PS_ALLOCATION BLANK_CRTC_PARAMETERS12771278/****************************************************************************/1279// Structures used by EnableCRTCTable1280// EnableCRTCMemReqTable1281// UpdateCRTC_DoubleBufferRegistersTable1282/****************************************************************************/1283typedef struct _ENABLE_CRTC_PARAMETERS1284{1285UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC21286UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE1287UCHAR ucPadding[2];1288}ENABLE_CRTC_PARAMETERS;1289#define ENABLE_CRTC_PS_ALLOCATION ENABLE_CRTC_PARAMETERS12901291/****************************************************************************/1292// Structures used by SetCRTC_OverScanTable1293/****************************************************************************/1294typedef struct _SET_CRTC_OVERSCAN_PARAMETERS1295{1296USHORT usOverscanRight; // right1297USHORT usOverscanLeft; // left1298USHORT usOverscanBottom; // bottom1299USHORT usOverscanTop; // top1300UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC21301UCHAR ucPadding[3];1302}SET_CRTC_OVERSCAN_PARAMETERS;1303#define SET_CRTC_OVERSCAN_PS_ALLOCATION SET_CRTC_OVERSCAN_PARAMETERS13041305/****************************************************************************/1306// Structures used by SetCRTC_ReplicationTable1307/****************************************************************************/1308typedef struct _SET_CRTC_REPLICATION_PARAMETERS1309{1310UCHAR ucH_Replication; // horizontal replication1311UCHAR ucV_Replication; // vertical replication1312UCHAR usCRTC; // ATOM_CRTC1 or ATOM_CRTC21313UCHAR ucPadding;1314}SET_CRTC_REPLICATION_PARAMETERS;1315#define SET_CRTC_REPLICATION_PS_ALLOCATION SET_CRTC_REPLICATION_PARAMETERS13161317/****************************************************************************/1318// Structures used by SelectCRTC_SourceTable1319/****************************************************************************/1320typedef struct _SELECT_CRTC_SOURCE_PARAMETERS1321{1322UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC21323UCHAR ucDevice; // ATOM_DEVICE_CRT1|ATOM_DEVICE_CRT2|....1324UCHAR ucPadding[2];1325}SELECT_CRTC_SOURCE_PARAMETERS;1326#define SELECT_CRTC_SOURCE_PS_ALLOCATION SELECT_CRTC_SOURCE_PARAMETERS13271328typedef struct _SELECT_CRTC_SOURCE_PARAMETERS_V21329{1330UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC21331UCHAR ucEncoderID; // DAC1/DAC2/TVOUT/DIG1/DIG2/DVO1332UCHAR ucEncodeMode; // Encoding mode, only valid when using DIG1/DIG2/DVO1333UCHAR ucPadding;1334}SELECT_CRTC_SOURCE_PARAMETERS_V2;13351336//ucEncoderID1337//#define ASIC_INT_DAC1_ENCODER_ID 0x001338//#define ASIC_INT_TV_ENCODER_ID 0x021339//#define ASIC_INT_DIG1_ENCODER_ID 0x031340//#define ASIC_INT_DAC2_ENCODER_ID 0x041341//#define ASIC_EXT_TV_ENCODER_ID 0x061342//#define ASIC_INT_DVO_ENCODER_ID 0x071343//#define ASIC_INT_DIG2_ENCODER_ID 0x091344//#define ASIC_EXT_DIG_ENCODER_ID 0x0513451346//ucEncodeMode1347//#define ATOM_ENCODER_MODE_DP 01348//#define ATOM_ENCODER_MODE_LVDS 11349//#define ATOM_ENCODER_MODE_DVI 21350//#define ATOM_ENCODER_MODE_HDMI 31351//#define ATOM_ENCODER_MODE_SDVO 41352//#define ATOM_ENCODER_MODE_TV 131353//#define ATOM_ENCODER_MODE_CV 141354//#define ATOM_ENCODER_MODE_CRT 1513551356/****************************************************************************/1357// Structures used by SetPixelClockTable1358// GetPixelClockTable1359/****************************************************************************/1360//Major revision=1., Minor revision=11361typedef struct _PIXEL_CLOCK_PARAMETERS1362{1363USHORT usPixelClock; // in 10kHz unit; for bios convenient = (RefClk*FB_Div)/(Ref_Div*Post_Div)1364// 0 means disable PPLL1365USHORT usRefDiv; // Reference divider1366USHORT usFbDiv; // feedback divider1367UCHAR ucPostDiv; // post divider1368UCHAR ucFracFbDiv; // fractional feedback divider1369UCHAR ucPpll; // ATOM_PPLL1 or ATOM_PPL21370UCHAR ucRefDivSrc; // ATOM_PJITTER or ATO_NONPJITTER1371UCHAR ucCRTC; // Which CRTC uses this Ppll1372UCHAR ucPadding;1373}PIXEL_CLOCK_PARAMETERS;13741375//Major revision=1., Minor revision=2, add ucMiscIfno1376//ucMiscInfo:1377#define MISC_FORCE_REPROG_PIXEL_CLOCK 0x11378#define MISC_DEVICE_INDEX_MASK 0xF01379#define MISC_DEVICE_INDEX_SHIFT 413801381typedef struct _PIXEL_CLOCK_PARAMETERS_V21382{1383USHORT usPixelClock; // in 10kHz unit; for bios convenient = (RefClk*FB_Div)/(Ref_Div*Post_Div)1384// 0 means disable PPLL1385USHORT usRefDiv; // Reference divider1386USHORT usFbDiv; // feedback divider1387UCHAR ucPostDiv; // post divider1388UCHAR ucFracFbDiv; // fractional feedback divider1389UCHAR ucPpll; // ATOM_PPLL1 or ATOM_PPL21390UCHAR ucRefDivSrc; // ATOM_PJITTER or ATO_NONPJITTER1391UCHAR ucCRTC; // Which CRTC uses this Ppll1392UCHAR ucMiscInfo; // Different bits for different purpose, bit [7:4] as device index, bit[0]=Force prog1393}PIXEL_CLOCK_PARAMETERS_V2;13941395//Major revision=1., Minor revision=3, structure/definition change1396//ucEncoderMode:1397//ATOM_ENCODER_MODE_DP1398//ATOM_ENOCDER_MODE_LVDS1399//ATOM_ENOCDER_MODE_DVI1400//ATOM_ENOCDER_MODE_HDMI1401//ATOM_ENOCDER_MODE_SDVO1402//ATOM_ENCODER_MODE_TV 131403//ATOM_ENCODER_MODE_CV 141404//ATOM_ENCODER_MODE_CRT 1514051406//ucDVOConfig1407//#define DVO_ENCODER_CONFIG_RATE_SEL 0x011408//#define DVO_ENCODER_CONFIG_DDR_SPEED 0x001409//#define DVO_ENCODER_CONFIG_SDR_SPEED 0x011410//#define DVO_ENCODER_CONFIG_OUTPUT_SEL 0x0c1411//#define DVO_ENCODER_CONFIG_LOW12BIT 0x001412//#define DVO_ENCODER_CONFIG_UPPER12BIT 0x041413//#define DVO_ENCODER_CONFIG_24BIT 0x0814141415//ucMiscInfo: also changed, see below1416#define PIXEL_CLOCK_MISC_FORCE_PROG_PPLL 0x011417#define PIXEL_CLOCK_MISC_VGA_MODE 0x021418#define PIXEL_CLOCK_MISC_CRTC_SEL_MASK 0x041419#define PIXEL_CLOCK_MISC_CRTC_SEL_CRTC1 0x001420#define PIXEL_CLOCK_MISC_CRTC_SEL_CRTC2 0x041421#define PIXEL_CLOCK_MISC_USE_ENGINE_FOR_DISPCLK 0x081422#define PIXEL_CLOCK_MISC_REF_DIV_SRC 0x101423// V1.4 for RoadRunner1424#define PIXEL_CLOCK_V4_MISC_SS_ENABLE 0x101425#define PIXEL_CLOCK_V4_MISC_COHERENT_MODE 0x20142614271428typedef struct _PIXEL_CLOCK_PARAMETERS_V31429{1430USHORT usPixelClock; // in 10kHz unit; for bios convenient = (RefClk*FB_Div)/(Ref_Div*Post_Div)1431// 0 means disable PPLL. For VGA PPLL,make sure this value is not 0.1432USHORT usRefDiv; // Reference divider1433USHORT usFbDiv; // feedback divider1434UCHAR ucPostDiv; // post divider1435UCHAR ucFracFbDiv; // fractional feedback divider1436UCHAR ucPpll; // ATOM_PPLL1 or ATOM_PPL21437UCHAR ucTransmitterId; // graphic encoder id defined in objectId.h1438union1439{1440UCHAR ucEncoderMode; // encoder type defined as ATOM_ENCODER_MODE_DP/DVI/HDMI/1441UCHAR ucDVOConfig; // when use DVO, need to know SDR/DDR, 12bit or 24bit1442};1443UCHAR ucMiscInfo; // bit[0]=Force program, bit[1]= set pclk for VGA, b[2]= CRTC sel1444// bit[3]=0:use PPLL for dispclk source, =1: use engine clock for dispclock source1445// bit[4]=0:use XTALIN as the source of reference divider,=1 use the pre-defined clock as the source of reference divider1446}PIXEL_CLOCK_PARAMETERS_V3;14471448#define PIXEL_CLOCK_PARAMETERS_LAST PIXEL_CLOCK_PARAMETERS_V21449#define GET_PIXEL_CLOCK_PS_ALLOCATION PIXEL_CLOCK_PARAMETERS_LAST14501451typedef struct _PIXEL_CLOCK_PARAMETERS_V51452{1453UCHAR ucCRTC; // ATOM_CRTC1~6, indicate the CRTC controller to1454// drive the pixel clock. not used for DCPLL case.1455union{1456UCHAR ucReserved;1457UCHAR ucFracFbDiv; // [gphan] temporary to prevent build problem. remove it after driver code is changed.1458};1459USHORT usPixelClock; // target the pixel clock to drive the CRTC timing1460// 0 means disable PPLL/DCPLL.1461USHORT usFbDiv; // feedback divider integer part.1462UCHAR ucPostDiv; // post divider.1463UCHAR ucRefDiv; // Reference divider1464UCHAR ucPpll; // ATOM_PPLL1/ATOM_PPLL2/ATOM_DCPLL1465UCHAR ucTransmitterID; // ASIC encoder id defined in objectId.h,1466// indicate which graphic encoder will be used.1467UCHAR ucEncoderMode; // Encoder mode:1468UCHAR ucMiscInfo; // bit[0]= Force program PPLL1469// bit[1]= when VGA timing is used.1470// bit[3:2]= HDMI panel bit depth: =0: 24bpp =1:30bpp, =2:32bpp1471// bit[4]= RefClock source for PPLL.1472// =0: XTLAIN( default mode )1473// =1: other external clock source, which is pre-defined1474// by VBIOS depend on the feature required.1475// bit[7:5]: reserved.1476ULONG ulFbDivDecFrac; // 20 bit feedback divider decimal fraction part, range from 1~999999 ( 0.000001 to 0.999999 )14771478}PIXEL_CLOCK_PARAMETERS_V5;14791480#define PIXEL_CLOCK_V5_MISC_FORCE_PROG_PPLL 0x011481#define PIXEL_CLOCK_V5_MISC_VGA_MODE 0x021482#define PIXEL_CLOCK_V5_MISC_HDMI_BPP_MASK 0x0c1483#define PIXEL_CLOCK_V5_MISC_HDMI_24BPP 0x001484#define PIXEL_CLOCK_V5_MISC_HDMI_30BPP 0x041485#define PIXEL_CLOCK_V5_MISC_HDMI_32BPP 0x081486#define PIXEL_CLOCK_V5_MISC_REF_DIV_SRC 0x1014871488typedef struct _CRTC_PIXEL_CLOCK_FREQ1489{1490#if ATOM_BIG_ENDIAN1491ULONG ucCRTC:8; // ATOM_CRTC1~6, indicate the CRTC controller to1492// drive the pixel clock. not used for DCPLL case.1493ULONG ulPixelClock:24; // target the pixel clock to drive the CRTC timing.1494// 0 means disable PPLL/DCPLL. Expanded to 24 bits comparing to previous version.1495#else1496ULONG ulPixelClock:24; // target the pixel clock to drive the CRTC timing.1497// 0 means disable PPLL/DCPLL. Expanded to 24 bits comparing to previous version.1498ULONG ucCRTC:8; // ATOM_CRTC1~6, indicate the CRTC controller to1499// drive the pixel clock. not used for DCPLL case.1500#endif1501}CRTC_PIXEL_CLOCK_FREQ;15021503typedef struct _PIXEL_CLOCK_PARAMETERS_V61504{1505union{1506CRTC_PIXEL_CLOCK_FREQ ulCrtcPclkFreq; // pixel clock and CRTC id frequency1507ULONG ulDispEngClkFreq; // dispclk frequency1508};1509USHORT usFbDiv; // feedback divider integer part.1510UCHAR ucPostDiv; // post divider.1511UCHAR ucRefDiv; // Reference divider1512UCHAR ucPpll; // ATOM_PPLL1/ATOM_PPLL2/ATOM_DCPLL1513UCHAR ucTransmitterID; // ASIC encoder id defined in objectId.h,1514// indicate which graphic encoder will be used.1515UCHAR ucEncoderMode; // Encoder mode:1516UCHAR ucMiscInfo; // bit[0]= Force program PPLL1517// bit[1]= when VGA timing is used.1518// bit[3:2]= HDMI panel bit depth: =0: 24bpp =1:30bpp, =2:32bpp1519// bit[4]= RefClock source for PPLL.1520// =0: XTLAIN( default mode )1521// =1: other external clock source, which is pre-defined1522// by VBIOS depend on the feature required.1523// bit[7:5]: reserved.1524ULONG ulFbDivDecFrac; // 20 bit feedback divider decimal fraction part, range from 1~999999 ( 0.000001 to 0.999999 )15251526}PIXEL_CLOCK_PARAMETERS_V6;15271528#define PIXEL_CLOCK_V6_MISC_FORCE_PROG_PPLL 0x011529#define PIXEL_CLOCK_V6_MISC_VGA_MODE 0x021530#define PIXEL_CLOCK_V6_MISC_HDMI_BPP_MASK 0x0c1531#define PIXEL_CLOCK_V6_MISC_HDMI_24BPP 0x001532#define PIXEL_CLOCK_V6_MISC_HDMI_36BPP 0x041533#define PIXEL_CLOCK_V6_MISC_HDMI_30BPP 0x081534#define PIXEL_CLOCK_V6_MISC_HDMI_48BPP 0x0c1535#define PIXEL_CLOCK_V6_MISC_REF_DIV_SRC 0x1015361537typedef struct _GET_DISP_PLL_STATUS_INPUT_PARAMETERS_V21538{1539PIXEL_CLOCK_PARAMETERS_V3 sDispClkInput;1540}GET_DISP_PLL_STATUS_INPUT_PARAMETERS_V2;15411542typedef struct _GET_DISP_PLL_STATUS_OUTPUT_PARAMETERS_V21543{1544UCHAR ucStatus;1545UCHAR ucRefDivSrc; // =1: reference clock source from XTALIN, =0: source from PCIE ref clock1546UCHAR ucReserved[2];1547}GET_DISP_PLL_STATUS_OUTPUT_PARAMETERS_V2;15481549typedef struct _GET_DISP_PLL_STATUS_INPUT_PARAMETERS_V31550{1551PIXEL_CLOCK_PARAMETERS_V5 sDispClkInput;1552}GET_DISP_PLL_STATUS_INPUT_PARAMETERS_V3;15531554/****************************************************************************/1555// Structures used by AdjustDisplayPllTable1556/****************************************************************************/1557typedef struct _ADJUST_DISPLAY_PLL_PARAMETERS1558{1559USHORT usPixelClock;1560UCHAR ucTransmitterID;1561UCHAR ucEncodeMode;1562union1563{1564UCHAR ucDVOConfig; //if DVO, need passing link rate and output 12bitlow or 24bit1565UCHAR ucConfig; //if none DVO, not defined yet1566};1567UCHAR ucReserved[3];1568}ADJUST_DISPLAY_PLL_PARAMETERS;15691570#define ADJUST_DISPLAY_CONFIG_SS_ENABLE 0x101571#define ADJUST_DISPLAY_PLL_PS_ALLOCATION ADJUST_DISPLAY_PLL_PARAMETERS15721573typedef struct _ADJUST_DISPLAY_PLL_INPUT_PARAMETERS_V31574{1575USHORT usPixelClock; // target pixel clock1576UCHAR ucTransmitterID; // GPU transmitter id defined in objectid.h1577UCHAR ucEncodeMode; // encoder mode: CRT, LVDS, DP, TMDS or HDMI1578UCHAR ucDispPllConfig; // display pll configure parameter defined as following DISPPLL_CONFIG_XXXX1579UCHAR ucExtTransmitterID; // external encoder id.1580UCHAR ucReserved[2];1581}ADJUST_DISPLAY_PLL_INPUT_PARAMETERS_V3;15821583// usDispPllConfig v1.2 for RoadRunner1584#define DISPPLL_CONFIG_DVO_RATE_SEL 0x0001 // need only when ucTransmitterID = DVO1585#define DISPPLL_CONFIG_DVO_DDR_SPEED 0x0000 // need only when ucTransmitterID = DVO1586#define DISPPLL_CONFIG_DVO_SDR_SPEED 0x0001 // need only when ucTransmitterID = DVO1587#define DISPPLL_CONFIG_DVO_OUTPUT_SEL 0x000c // need only when ucTransmitterID = DVO1588#define DISPPLL_CONFIG_DVO_LOW12BIT 0x0000 // need only when ucTransmitterID = DVO1589#define DISPPLL_CONFIG_DVO_UPPER12BIT 0x0004 // need only when ucTransmitterID = DVO1590#define DISPPLL_CONFIG_DVO_24BIT 0x0008 // need only when ucTransmitterID = DVO1591#define DISPPLL_CONFIG_SS_ENABLE 0x0010 // Only used when ucEncoderMode = DP or LVDS1592#define DISPPLL_CONFIG_COHERENT_MODE 0x0020 // Only used when ucEncoderMode = TMDS or HDMI1593#define DISPPLL_CONFIG_DUAL_LINK 0x0040 // Only used when ucEncoderMode = TMDS or LVDS159415951596typedef struct _ADJUST_DISPLAY_PLL_OUTPUT_PARAMETERS_V31597{1598ULONG ulDispPllFreq; // return display PPLL freq which is used to generate the pixclock, and related idclk, symclk etc1599UCHAR 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 )1600UCHAR ucPostDiv; // if it is none-zero, it is used to be calculated the other ppll parameter fb_divider1601UCHAR ucReserved[2];1602}ADJUST_DISPLAY_PLL_OUTPUT_PARAMETERS_V3;16031604typedef struct _ADJUST_DISPLAY_PLL_PS_ALLOCATION_V31605{1606union1607{1608ADJUST_DISPLAY_PLL_INPUT_PARAMETERS_V3 sInput;1609ADJUST_DISPLAY_PLL_OUTPUT_PARAMETERS_V3 sOutput;1610};1611} ADJUST_DISPLAY_PLL_PS_ALLOCATION_V3;16121613/****************************************************************************/1614// Structures used by EnableYUVTable1615/****************************************************************************/1616typedef struct _ENABLE_YUV_PARAMETERS1617{1618UCHAR ucEnable; // ATOM_ENABLE:Enable YUV or ATOM_DISABLE:Disable YUV (RGB)1619UCHAR ucCRTC; // Which CRTC needs this YUV or RGB format1620UCHAR ucPadding[2];1621}ENABLE_YUV_PARAMETERS;1622#define ENABLE_YUV_PS_ALLOCATION ENABLE_YUV_PARAMETERS16231624/****************************************************************************/1625// Structures used by GetMemoryClockTable1626/****************************************************************************/1627typedef struct _GET_MEMORY_CLOCK_PARAMETERS1628{1629ULONG ulReturnMemoryClock; // current memory speed in 10KHz unit1630} GET_MEMORY_CLOCK_PARAMETERS;1631#define GET_MEMORY_CLOCK_PS_ALLOCATION GET_MEMORY_CLOCK_PARAMETERS16321633/****************************************************************************/1634// Structures used by GetEngineClockTable1635/****************************************************************************/1636typedef struct _GET_ENGINE_CLOCK_PARAMETERS1637{1638ULONG ulReturnEngineClock; // current engine speed in 10KHz unit1639} GET_ENGINE_CLOCK_PARAMETERS;1640#define GET_ENGINE_CLOCK_PS_ALLOCATION GET_ENGINE_CLOCK_PARAMETERS16411642/****************************************************************************/1643// Following Structures and constant may be obsolete1644/****************************************************************************/1645//Maxium 8 bytes,the data read in will be placed in the parameter space.1646//Read operaion successeful when the paramter space is non-zero, otherwise read operation failed1647typedef struct _READ_EDID_FROM_HW_I2C_DATA_PARAMETERS1648{1649USHORT usPrescale; //Ratio between Engine clock and I2C clock1650USHORT usVRAMAddress; //Address in Frame Buffer where to pace raw EDID1651USHORT usStatus; //When use output: lower byte EDID checksum, high byte hardware status1652//WHen use input: lower byte as 'byte to read':currently limited to 128byte or 1byte1653UCHAR ucSlaveAddr; //Read from which slave1654UCHAR ucLineNumber; //Read from which HW assisted line1655}READ_EDID_FROM_HW_I2C_DATA_PARAMETERS;1656#define READ_EDID_FROM_HW_I2C_DATA_PS_ALLOCATION READ_EDID_FROM_HW_I2C_DATA_PARAMETERS165716581659#define ATOM_WRITE_I2C_FORMAT_PSOFFSET_PSDATABYTE 01660#define ATOM_WRITE_I2C_FORMAT_PSOFFSET_PSTWODATABYTES 11661#define ATOM_WRITE_I2C_FORMAT_PSCOUNTER_PSOFFSET_IDDATABLOCK 21662#define ATOM_WRITE_I2C_FORMAT_PSCOUNTER_IDOFFSET_PLUS_IDDATABLOCK 31663#define ATOM_WRITE_I2C_FORMAT_IDCOUNTER_IDOFFSET_IDDATABLOCK 416641665typedef struct _WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS1666{1667USHORT usPrescale; //Ratio between Engine clock and I2C clock1668USHORT usByteOffset; //Write to which byte1669//Upper portion of usByteOffset is Format of data1670//1bytePS+offsetPS1671//2bytesPS+offsetPS1672//blockID+offsetPS1673//blockID+offsetID1674//blockID+counterID+offsetID1675UCHAR ucData; //PS data11676UCHAR ucStatus; //Status byte 1=success, 2=failure, Also is used as PS data21677UCHAR ucSlaveAddr; //Write to which slave1678UCHAR ucLineNumber; //Write from which HW assisted line1679}WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS;16801681#define WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS16821683typedef struct _SET_UP_HW_I2C_DATA_PARAMETERS1684{1685USHORT usPrescale; //Ratio between Engine clock and I2C clock1686UCHAR ucSlaveAddr; //Write to which slave1687UCHAR ucLineNumber; //Write from which HW assisted line1688}SET_UP_HW_I2C_DATA_PARAMETERS;168916901691/**************************************************************************/1692#define SPEED_FAN_CONTROL_PS_ALLOCATION WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS169316941695/****************************************************************************/1696// Structures used by PowerConnectorDetectionTable1697/****************************************************************************/1698typedef struct _POWER_CONNECTOR_DETECTION_PARAMETERS1699{1700UCHAR ucPowerConnectorStatus; //Used for return value 0: detected, 1:not detected1701UCHAR ucPwrBehaviorId;1702USHORT usPwrBudget; //how much power currently boot to in unit of watt1703}POWER_CONNECTOR_DETECTION_PARAMETERS;17041705typedef struct POWER_CONNECTOR_DETECTION_PS_ALLOCATION1706{1707UCHAR ucPowerConnectorStatus; //Used for return value 0: detected, 1:not detected1708UCHAR ucReserved;1709USHORT usPwrBudget; //how much power currently boot to in unit of watt1710WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved;1711}POWER_CONNECTOR_DETECTION_PS_ALLOCATION;17121713/****************************LVDS SS Command Table Definitions**********************/17141715/****************************************************************************/1716// Structures used by EnableSpreadSpectrumOnPPLLTable1717/****************************************************************************/1718typedef struct _ENABLE_LVDS_SS_PARAMETERS1719{1720USHORT usSpreadSpectrumPercentage;1721UCHAR ucSpreadSpectrumType; //Bit1=0 Down Spread,=1 Center Spread. Bit1=1 Ext. =0 Int. Others:TBD1722UCHAR ucSpreadSpectrumStepSize_Delay; //bits3:2 SS_STEP_SIZE; bit 6:4 SS_DELAY1723UCHAR ucEnable; //ATOM_ENABLE or ATOM_DISABLE1724UCHAR ucPadding[3];1725}ENABLE_LVDS_SS_PARAMETERS;17261727//ucTableFormatRevision=1,ucTableContentRevision=21728typedef struct _ENABLE_LVDS_SS_PARAMETERS_V21729{1730USHORT usSpreadSpectrumPercentage;1731UCHAR ucSpreadSpectrumType; //Bit1=0 Down Spread,=1 Center Spread. Bit1=1 Ext. =0 Int. Others:TBD1732UCHAR ucSpreadSpectrumStep; //1733UCHAR ucEnable; //ATOM_ENABLE or ATOM_DISABLE1734UCHAR ucSpreadSpectrumDelay;1735UCHAR ucSpreadSpectrumRange;1736UCHAR ucPadding;1737}ENABLE_LVDS_SS_PARAMETERS_V2;17381739//This new structure is based on ENABLE_LVDS_SS_PARAMETERS but expands to SS on PPLL, so other devices can use SS.1740typedef struct _ENABLE_SPREAD_SPECTRUM_ON_PPLL1741{1742USHORT usSpreadSpectrumPercentage;1743UCHAR ucSpreadSpectrumType; // Bit1=0 Down Spread,=1 Center Spread. Bit1=1 Ext. =0 Int. Others:TBD1744UCHAR ucSpreadSpectrumStep; //1745UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE1746UCHAR ucSpreadSpectrumDelay;1747UCHAR ucSpreadSpectrumRange;1748UCHAR ucPpll; // ATOM_PPLL1/ATOM_PPLL21749}ENABLE_SPREAD_SPECTRUM_ON_PPLL;17501751typedef struct _ENABLE_SPREAD_SPECTRUM_ON_PPLL_V21752{1753USHORT usSpreadSpectrumPercentage;1754UCHAR ucSpreadSpectrumType; // Bit[0]: 0-Down Spread,1-Center Spread.1755// Bit[1]: 1-Ext. 0-Int.1756// Bit[3:2]: =0 P1PLL =1 P2PLL =2 DCPLL1757// Bits[7:4] reserved1758UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE1759USHORT usSpreadSpectrumAmount; // Includes SS_AMOUNT_FBDIV[7:0] and SS_AMOUNT_NFRAC_SLIP[11:8]1760USHORT usSpreadSpectrumStep; // SS_STEP_SIZE_DSFRAC1761}ENABLE_SPREAD_SPECTRUM_ON_PPLL_V2;17621763#define ATOM_PPLL_SS_TYPE_V2_DOWN_SPREAD 0x001764#define ATOM_PPLL_SS_TYPE_V2_CENTRE_SPREAD 0x011765#define ATOM_PPLL_SS_TYPE_V2_EXT_SPREAD 0x021766#define ATOM_PPLL_SS_TYPE_V2_PPLL_SEL_MASK 0x0c1767#define ATOM_PPLL_SS_TYPE_V2_P1PLL 0x001768#define ATOM_PPLL_SS_TYPE_V2_P2PLL 0x041769#define ATOM_PPLL_SS_TYPE_V2_DCPLL 0x081770#define ATOM_PPLL_SS_AMOUNT_V2_FBDIV_MASK 0x00FF1771#define ATOM_PPLL_SS_AMOUNT_V2_FBDIV_SHIFT 01772#define ATOM_PPLL_SS_AMOUNT_V2_NFRAC_MASK 0x0F001773#define ATOM_PPLL_SS_AMOUNT_V2_NFRAC_SHIFT 817741775// Used by DCE5.01776typedef struct _ENABLE_SPREAD_SPECTRUM_ON_PPLL_V31777{1778USHORT usSpreadSpectrumAmountFrac; // SS_AMOUNT_DSFRAC New in DCE5.01779UCHAR ucSpreadSpectrumType; // Bit[0]: 0-Down Spread,1-Center Spread.1780// Bit[1]: 1-Ext. 0-Int.1781// Bit[3:2]: =0 P1PLL =1 P2PLL =2 DCPLL1782// Bits[7:4] reserved1783UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE1784USHORT usSpreadSpectrumAmount; // Includes SS_AMOUNT_FBDIV[7:0] and SS_AMOUNT_NFRAC_SLIP[11:8]1785USHORT usSpreadSpectrumStep; // SS_STEP_SIZE_DSFRAC1786}ENABLE_SPREAD_SPECTRUM_ON_PPLL_V3;17871788#define ATOM_PPLL_SS_TYPE_V3_DOWN_SPREAD 0x001789#define ATOM_PPLL_SS_TYPE_V3_CENTRE_SPREAD 0x011790#define ATOM_PPLL_SS_TYPE_V3_EXT_SPREAD 0x021791#define ATOM_PPLL_SS_TYPE_V3_PPLL_SEL_MASK 0x0c1792#define ATOM_PPLL_SS_TYPE_V3_P1PLL 0x001793#define ATOM_PPLL_SS_TYPE_V3_P2PLL 0x041794#define ATOM_PPLL_SS_TYPE_V3_DCPLL 0x081795#define ATOM_PPLL_SS_AMOUNT_V3_FBDIV_MASK 0x00FF1796#define ATOM_PPLL_SS_AMOUNT_V3_FBDIV_SHIFT 01797#define ATOM_PPLL_SS_AMOUNT_V3_NFRAC_MASK 0x0F001798#define ATOM_PPLL_SS_AMOUNT_V3_NFRAC_SHIFT 817991800#define ENABLE_SPREAD_SPECTRUM_ON_PPLL_PS_ALLOCATION ENABLE_SPREAD_SPECTRUM_ON_PPLL18011802/**************************************************************************/18031804typedef struct _SET_PIXEL_CLOCK_PS_ALLOCATION1805{1806PIXEL_CLOCK_PARAMETERS sPCLKInput;1807ENABLE_SPREAD_SPECTRUM_ON_PPLL sReserved;//Caller doesn't need to init this portion1808}SET_PIXEL_CLOCK_PS_ALLOCATION;18091810#define ENABLE_VGA_RENDER_PS_ALLOCATION SET_PIXEL_CLOCK_PS_ALLOCATION18111812/****************************************************************************/1813// Structures used by ###1814/****************************************************************************/1815typedef struct _MEMORY_TRAINING_PARAMETERS1816{1817ULONG ulTargetMemoryClock; //In 10Khz unit1818}MEMORY_TRAINING_PARAMETERS;1819#define MEMORY_TRAINING_PS_ALLOCATION MEMORY_TRAINING_PARAMETERS182018211822/****************************LVDS and other encoder command table definitions **********************/182318241825/****************************************************************************/1826// Structures used by LVDSEncoderControlTable (Before DCE30)1827// LVTMAEncoderControlTable (Before DCE30)1828// TMDSAEncoderControlTable (Before DCE30)1829/****************************************************************************/1830typedef struct _LVDS_ENCODER_CONTROL_PARAMETERS1831{1832USHORT usPixelClock; // in 10KHz; for bios convenient1833UCHAR ucMisc; // bit0=0: Enable single link1834// =1: Enable dual link1835// Bit1=0: 666RGB1836// =1: 888RGB1837UCHAR ucAction; // 0: turn off encoder1838// 1: setup and turn on encoder1839}LVDS_ENCODER_CONTROL_PARAMETERS;18401841#define LVDS_ENCODER_CONTROL_PS_ALLOCATION LVDS_ENCODER_CONTROL_PARAMETERS18421843#define TMDS1_ENCODER_CONTROL_PARAMETERS LVDS_ENCODER_CONTROL_PARAMETERS1844#define TMDS1_ENCODER_CONTROL_PS_ALLOCATION TMDS1_ENCODER_CONTROL_PARAMETERS18451846#define TMDS2_ENCODER_CONTROL_PARAMETERS TMDS1_ENCODER_CONTROL_PARAMETERS1847#define TMDS2_ENCODER_CONTROL_PS_ALLOCATION TMDS2_ENCODER_CONTROL_PARAMETERS184818491850//ucTableFormatRevision=1,ucTableContentRevision=21851typedef struct _LVDS_ENCODER_CONTROL_PARAMETERS_V21852{1853USHORT usPixelClock; // in 10KHz; for bios convenient1854UCHAR ucMisc; // see PANEL_ENCODER_MISC_xx defintions below1855UCHAR ucAction; // 0: turn off encoder1856// 1: setup and turn on encoder1857UCHAR ucTruncate; // bit0=0: Disable truncate1858// =1: Enable truncate1859// bit4=0: 666RGB1860// =1: 888RGB1861UCHAR ucSpatial; // bit0=0: Disable spatial dithering1862// =1: Enable spatial dithering1863// bit4=0: 666RGB1864// =1: 888RGB1865UCHAR ucTemporal; // bit0=0: Disable temporal dithering1866// =1: Enable temporal dithering1867// bit4=0: 666RGB1868// =1: 888RGB1869// bit5=0: Gray level 21870// =1: Gray level 41871UCHAR ucFRC; // bit4=0: 25FRC_SEL pattern E1872// =1: 25FRC_SEL pattern F1873// bit6:5=0: 50FRC_SEL pattern A1874// =1: 50FRC_SEL pattern B1875// =2: 50FRC_SEL pattern C1876// =3: 50FRC_SEL pattern D1877// bit7=0: 75FRC_SEL pattern E1878// =1: 75FRC_SEL pattern F1879}LVDS_ENCODER_CONTROL_PARAMETERS_V2;18801881#define LVDS_ENCODER_CONTROL_PS_ALLOCATION_V2 LVDS_ENCODER_CONTROL_PARAMETERS_V218821883#define TMDS1_ENCODER_CONTROL_PARAMETERS_V2 LVDS_ENCODER_CONTROL_PARAMETERS_V21884#define TMDS1_ENCODER_CONTROL_PS_ALLOCATION_V2 TMDS1_ENCODER_CONTROL_PARAMETERS_V218851886#define TMDS2_ENCODER_CONTROL_PARAMETERS_V2 TMDS1_ENCODER_CONTROL_PARAMETERS_V21887#define TMDS2_ENCODER_CONTROL_PS_ALLOCATION_V2 TMDS2_ENCODER_CONTROL_PARAMETERS_V218881889#define LVDS_ENCODER_CONTROL_PARAMETERS_V3 LVDS_ENCODER_CONTROL_PARAMETERS_V21890#define LVDS_ENCODER_CONTROL_PS_ALLOCATION_V3 LVDS_ENCODER_CONTROL_PARAMETERS_V318911892#define TMDS1_ENCODER_CONTROL_PARAMETERS_V3 LVDS_ENCODER_CONTROL_PARAMETERS_V31893#define TMDS1_ENCODER_CONTROL_PS_ALLOCATION_V3 TMDS1_ENCODER_CONTROL_PARAMETERS_V318941895#define TMDS2_ENCODER_CONTROL_PARAMETERS_V3 LVDS_ENCODER_CONTROL_PARAMETERS_V31896#define TMDS2_ENCODER_CONTROL_PS_ALLOCATION_V3 TMDS2_ENCODER_CONTROL_PARAMETERS_V318971898/****************************************************************************/1899// Structures used by ###1900/****************************************************************************/1901typedef struct _ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS1902{1903UCHAR ucEnable; // Enable or Disable External TMDS encoder1904UCHAR ucMisc; // Bit0=0:Enable Single link;=1:Enable Dual link;Bit1 {=0:666RGB, =1:888RGB}1905UCHAR ucPadding[2];1906}ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS;19071908typedef struct _ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION1909{1910ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS sXTmdsEncoder;1911WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; //Caller doesn't need to init this portion1912}ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION;19131914#define ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS_V2 LVDS_ENCODER_CONTROL_PARAMETERS_V219151916typedef struct _ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION_V21917{1918ENABLE_EXTERNAL_TMDS_ENCODER_PARAMETERS_V2 sXTmdsEncoder;1919WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; //Caller doesn't need to init this portion1920}ENABLE_EXTERNAL_TMDS_ENCODER_PS_ALLOCATION_V2;19211922typedef struct _EXTERNAL_ENCODER_CONTROL_PS_ALLOCATION1923{1924DIG_ENCODER_CONTROL_PARAMETERS sDigEncoder;1925WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved;1926}EXTERNAL_ENCODER_CONTROL_PS_ALLOCATION;19271928/****************************************************************************/1929// Structures used by DVOEncoderControlTable1930/****************************************************************************/1931//ucTableFormatRevision=1,ucTableContentRevision=319321933//ucDVOConfig:1934#define DVO_ENCODER_CONFIG_RATE_SEL 0x011935#define DVO_ENCODER_CONFIG_DDR_SPEED 0x001936#define DVO_ENCODER_CONFIG_SDR_SPEED 0x011937#define DVO_ENCODER_CONFIG_OUTPUT_SEL 0x0c1938#define DVO_ENCODER_CONFIG_LOW12BIT 0x001939#define DVO_ENCODER_CONFIG_UPPER12BIT 0x041940#define DVO_ENCODER_CONFIG_24BIT 0x0819411942typedef struct _DVO_ENCODER_CONTROL_PARAMETERS_V31943{1944USHORT usPixelClock;1945UCHAR ucDVOConfig;1946UCHAR ucAction; //ATOM_ENABLE/ATOM_DISABLE/ATOM_HPD_INIT1947UCHAR ucReseved[4];1948}DVO_ENCODER_CONTROL_PARAMETERS_V3;1949#define DVO_ENCODER_CONTROL_PS_ALLOCATION_V3 DVO_ENCODER_CONTROL_PARAMETERS_V319501951//ucTableFormatRevision=11952//ucTableContentRevision=3 structure is not changed but usMisc add bit 1 as another input for1953// bit1=0: non-coherent mode1954// =1: coherent mode19551956//==========================================================================================1957//Only change is here next time when changing encoder parameter definitions again!1958#define LVDS_ENCODER_CONTROL_PARAMETERS_LAST LVDS_ENCODER_CONTROL_PARAMETERS_V31959#define LVDS_ENCODER_CONTROL_PS_ALLOCATION_LAST LVDS_ENCODER_CONTROL_PARAMETERS_LAST19601961#define TMDS1_ENCODER_CONTROL_PARAMETERS_LAST LVDS_ENCODER_CONTROL_PARAMETERS_V31962#define TMDS1_ENCODER_CONTROL_PS_ALLOCATION_LAST TMDS1_ENCODER_CONTROL_PARAMETERS_LAST19631964#define TMDS2_ENCODER_CONTROL_PARAMETERS_LAST LVDS_ENCODER_CONTROL_PARAMETERS_V31965#define TMDS2_ENCODER_CONTROL_PS_ALLOCATION_LAST TMDS2_ENCODER_CONTROL_PARAMETERS_LAST19661967#define DVO_ENCODER_CONTROL_PARAMETERS_LAST DVO_ENCODER_CONTROL_PARAMETERS1968#define DVO_ENCODER_CONTROL_PS_ALLOCATION_LAST DVO_ENCODER_CONTROL_PS_ALLOCATION19691970//==========================================================================================1971#define PANEL_ENCODER_MISC_DUAL 0x011972#define PANEL_ENCODER_MISC_COHERENT 0x021973#define PANEL_ENCODER_MISC_TMDS_LINKB 0x041974#define PANEL_ENCODER_MISC_HDMI_TYPE 0x0819751976#define PANEL_ENCODER_ACTION_DISABLE ATOM_DISABLE1977#define PANEL_ENCODER_ACTION_ENABLE ATOM_ENABLE1978#define PANEL_ENCODER_ACTION_COHERENTSEQ (ATOM_ENABLE+1)19791980#define PANEL_ENCODER_TRUNCATE_EN 0x011981#define PANEL_ENCODER_TRUNCATE_DEPTH 0x101982#define PANEL_ENCODER_SPATIAL_DITHER_EN 0x011983#define PANEL_ENCODER_SPATIAL_DITHER_DEPTH 0x101984#define PANEL_ENCODER_TEMPORAL_DITHER_EN 0x011985#define PANEL_ENCODER_TEMPORAL_DITHER_DEPTH 0x101986#define PANEL_ENCODER_TEMPORAL_LEVEL_4 0x201987#define PANEL_ENCODER_25FRC_MASK 0x101988#define PANEL_ENCODER_25FRC_E 0x001989#define PANEL_ENCODER_25FRC_F 0x101990#define PANEL_ENCODER_50FRC_MASK 0x601991#define PANEL_ENCODER_50FRC_A 0x001992#define PANEL_ENCODER_50FRC_B 0x201993#define PANEL_ENCODER_50FRC_C 0x401994#define PANEL_ENCODER_50FRC_D 0x601995#define PANEL_ENCODER_75FRC_MASK 0x801996#define PANEL_ENCODER_75FRC_E 0x001997#define PANEL_ENCODER_75FRC_F 0x8019981999/****************************************************************************/2000// Structures used by SetVoltageTable2001/****************************************************************************/2002#define SET_VOLTAGE_TYPE_ASIC_VDDC 12003#define SET_VOLTAGE_TYPE_ASIC_MVDDC 22004#define SET_VOLTAGE_TYPE_ASIC_MVDDQ 32005#define SET_VOLTAGE_TYPE_ASIC_VDDCI 42006#define SET_VOLTAGE_INIT_MODE 52007#define SET_VOLTAGE_GET_MAX_VOLTAGE 6 //Gets the Max. voltage for the soldered Asic20082009#define SET_ASIC_VOLTAGE_MODE_ALL_SOURCE 0x12010#define SET_ASIC_VOLTAGE_MODE_SOURCE_A 0x22011#define SET_ASIC_VOLTAGE_MODE_SOURCE_B 0x420122013#define SET_ASIC_VOLTAGE_MODE_SET_VOLTAGE 0x02014#define SET_ASIC_VOLTAGE_MODE_GET_GPIOVAL 0x12015#define SET_ASIC_VOLTAGE_MODE_GET_GPIOMASK 0x220162017typedef struct _SET_VOLTAGE_PARAMETERS2018{2019UCHAR ucVoltageType; // To tell which voltage to set up, VDDC/MVDDC/MVDDQ2020UCHAR ucVoltageMode; // To set all, to set source A or source B or ...2021UCHAR ucVoltageIndex; // An index to tell which voltage level2022UCHAR ucReserved;2023}SET_VOLTAGE_PARAMETERS;20242025typedef struct _SET_VOLTAGE_PARAMETERS_V22026{2027UCHAR ucVoltageType; // To tell which voltage to set up, VDDC/MVDDC/MVDDQ2028UCHAR ucVoltageMode; // Not used, maybe use for state machine for differen power mode2029USHORT usVoltageLevel; // real voltage level2030}SET_VOLTAGE_PARAMETERS_V2;20312032typedef struct _SET_VOLTAGE_PS_ALLOCATION2033{2034SET_VOLTAGE_PARAMETERS sASICSetVoltage;2035WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved;2036}SET_VOLTAGE_PS_ALLOCATION;20372038/****************************************************************************/2039// Structures used by TVEncoderControlTable2040/****************************************************************************/2041typedef struct _TV_ENCODER_CONTROL_PARAMETERS2042{2043USHORT usPixelClock; // in 10KHz; for bios convenient2044UCHAR ucTvStandard; // See definition "ATOM_TV_NTSC ..."2045UCHAR ucAction; // 0: turn off encoder2046// 1: setup and turn on encoder2047}TV_ENCODER_CONTROL_PARAMETERS;20482049typedef struct _TV_ENCODER_CONTROL_PS_ALLOCATION2050{2051TV_ENCODER_CONTROL_PARAMETERS sTVEncoder;2052WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; // Don't set this one2053}TV_ENCODER_CONTROL_PS_ALLOCATION;20542055//==============================Data Table Portion====================================20562057/****************************************************************************/2058// Structure used in Data.mtb2059/****************************************************************************/2060typedef struct _ATOM_MASTER_LIST_OF_DATA_TABLES2061{2062USHORT UtilityPipeLine; // Offest for the utility to get parser info,Don't change this position!2063USHORT MultimediaCapabilityInfo; // Only used by MM Lib,latest version 1.1, not configuable from Bios, need to include the table to build Bios2064USHORT MultimediaConfigInfo; // Only used by MM Lib,latest version 2.1, not configuable from Bios, need to include the table to build Bios2065USHORT StandardVESA_Timing; // Only used by Bios2066USHORT FirmwareInfo; // Shared by various SW components,latest version 1.42067USHORT DAC_Info; // Will be obsolete from R6002068USHORT LCD_Info; // Shared by various SW components,latest version 1.3, was called LVDS_Info2069USHORT TMDS_Info; // Will be obsolete from R6002070USHORT AnalogTV_Info; // Shared by various SW components,latest version 1.12071USHORT SupportedDevicesInfo; // Will be obsolete from R6002072USHORT GPIO_I2C_Info; // Shared by various SW components,latest version 1.2 will be used from R6002073USHORT VRAM_UsageByFirmware; // Shared by various SW components,latest version 1.3 will be used from R6002074USHORT GPIO_Pin_LUT; // Shared by various SW components,latest version 1.12075USHORT VESA_ToInternalModeLUT; // Only used by Bios2076USHORT ComponentVideoInfo; // Shared by various SW components,latest version 2.1 will be used from R6002077USHORT PowerPlayInfo; // Shared by various SW components,latest version 2.1,new design from R6002078USHORT CompassionateData; // Will be obsolete from R6002079USHORT SaveRestoreInfo; // Only used by Bios2080USHORT 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 info2081USHORT OemInfo; // Defined and used by external SW, should be obsolete soon2082USHORT XTMDS_Info; // Will be obsolete from R6002083USHORT MclkSS_Info; // Shared by various SW components,latest version 1.1, only enabled when ext SS chip is used2084USHORT Object_Header; // Shared by various SW components,latest version 1.12085USHORT IndirectIOAccess; // Only used by Bios,this table position can't change at all!!2086USHORT MC_InitParameter; // Only used by command table2087USHORT ASIC_VDDC_Info; // Will be obsolete from R6002088USHORT ASIC_InternalSS_Info; // New tabel name from R600, used to be called "ASIC_MVDDC_Info"2089USHORT TV_VideoMode; // Only used by command table2090USHORT VRAM_Info; // Only used by command table, latest version 1.32091USHORT MemoryTrainingInfo; // Used for VBIOS and Diag utility for memory training purpose since R600. the new table rev start from 2.12092USHORT IntegratedSystemInfo; // Shared by various SW components2093USHORT ASIC_ProfilingInfo; // New table name from R600, used to be called "ASIC_VDDCI_Info" for pre-R6002094USHORT VoltageObjectInfo; // Shared by various SW components, latest version 1.12095USHORT PowerSourceInfo; // Shared by various SW components, latest versoin 1.12096}ATOM_MASTER_LIST_OF_DATA_TABLES;20972098// For backward compatible2099#define LVDS_Info LCD_Info21002101typedef struct _ATOM_MASTER_DATA_TABLE2102{2103ATOM_COMMON_TABLE_HEADER sHeader;2104ATOM_MASTER_LIST_OF_DATA_TABLES ListOfDataTables;2105}ATOM_MASTER_DATA_TABLE;210621072108/****************************************************************************/2109// Structure used in MultimediaCapabilityInfoTable2110/****************************************************************************/2111typedef struct _ATOM_MULTIMEDIA_CAPABILITY_INFO2112{2113ATOM_COMMON_TABLE_HEADER sHeader;2114ULONG ulSignature; // HW info table signature string "$ATI"2115UCHAR ucI2C_Type; // I2C type (normal GP_IO, ImpactTV GP_IO, Dedicated I2C pin, etc)2116UCHAR ucTV_OutInfo; // Type of TV out supported (3:0) and video out crystal frequency (6:4) and TV data port (7)2117UCHAR ucVideoPortInfo; // Provides the video port capabilities2118UCHAR ucHostPortInfo; // Provides host port configuration information2119}ATOM_MULTIMEDIA_CAPABILITY_INFO;21202121/****************************************************************************/2122// Structure used in MultimediaConfigInfoTable2123/****************************************************************************/2124typedef struct _ATOM_MULTIMEDIA_CONFIG_INFO2125{2126ATOM_COMMON_TABLE_HEADER sHeader;2127ULONG ulSignature; // MM info table signature sting "$MMT"2128UCHAR ucTunerInfo; // Type of tuner installed on the adapter (4:0) and video input for tuner (7:5)2129UCHAR ucAudioChipInfo; // List the audio chip type (3:0) product type (4) and OEM revision (7:5)2130UCHAR ucProductID; // Defines as OEM ID or ATI board ID dependent on product type setting2131UCHAR ucMiscInfo1; // Tuner voltage (1:0) HW teletext support (3:2) FM audio decoder (5:4) reserved (6) audio scrambling (7)2132UCHAR ucMiscInfo2; // I2S input config (0) I2S output config (1) I2S Audio Chip (4:2) SPDIF Output Config (5) reserved (7:6)2133UCHAR ucMiscInfo3; // Video Decoder Type (3:0) Video In Standard/Crystal (7:4)2134UCHAR ucMiscInfo4; // Video Decoder Host Config (2:0) reserved (7:3)2135UCHAR ucVideoInput0Info;// Video Input 0 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6)2136UCHAR ucVideoInput1Info;// Video Input 1 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6)2137UCHAR ucVideoInput2Info;// Video Input 2 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6)2138UCHAR ucVideoInput3Info;// Video Input 3 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6)2139UCHAR ucVideoInput4Info;// Video Input 4 Type (1:0) F/B setting (2) physical connector ID (5:3) reserved (7:6)2140}ATOM_MULTIMEDIA_CONFIG_INFO;214121422143/****************************************************************************/2144// Structures used in FirmwareInfoTable2145/****************************************************************************/21462147// usBIOSCapability Definition:2148// Bit 0 = 0: Bios image is not Posted, =1:Bios image is Posted;2149// Bit 1 = 0: Dual CRTC is not supported, =1: Dual CRTC is supported;2150// Bit 2 = 0: Extended Desktop is not supported, =1: Extended Desktop is supported;2151// Others: Reserved2152#define ATOM_BIOS_INFO_ATOM_FIRMWARE_POSTED 0x00012153#define ATOM_BIOS_INFO_DUAL_CRTC_SUPPORT 0x00022154#define ATOM_BIOS_INFO_EXTENDED_DESKTOP_SUPPORT 0x00042155#define ATOM_BIOS_INFO_MEMORY_CLOCK_SS_SUPPORT 0x0008 // (valid from v1.1 ~v1.4):=1: memclk SS enable, =0 memclk SS disable.2156#define ATOM_BIOS_INFO_ENGINE_CLOCK_SS_SUPPORT 0x0010 // (valid from v1.1 ~v1.4):=1: engclk SS enable, =0 engclk SS disable.2157#define ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU 0x00202158#define ATOM_BIOS_INFO_WMI_SUPPORT 0x00402159#define ATOM_BIOS_INFO_PPMODE_ASSIGNGED_BY_SYSTEM 0x00802160#define ATOM_BIOS_INFO_HYPERMEMORY_SUPPORT 0x01002161#define ATOM_BIOS_INFO_HYPERMEMORY_SIZE_MASK 0x1E002162#define ATOM_BIOS_INFO_VPOST_WITHOUT_FIRST_MODE_SET 0x20002163#define ATOM_BIOS_INFO_BIOS_SCRATCH6_SCL2_REDEFINE 0x40002164#define ATOM_BIOS_INFO_MEMORY_CLOCK_EXT_SS_SUPPORT 0x0008 // (valid from v2.1 ): =1: memclk ss enable with external ss chip2165#define ATOM_BIOS_INFO_ENGINE_CLOCK_EXT_SS_SUPPORT 0x0010 // (valid from v2.1 ): =1: engclk ss enable with external ss chip21662167#ifndef _H2INC21682169//Please don't add or expand this bitfield structure below, this one will retire soon.!2170typedef struct _ATOM_FIRMWARE_CAPABILITY2171{2172#if ATOM_BIG_ENDIAN2173USHORT Reserved:3;2174USHORT HyperMemory_Size:4;2175USHORT HyperMemory_Support:1;2176USHORT PPMode_Assigned:1;2177USHORT WMI_SUPPORT:1;2178USHORT GPUControlsBL:1;2179USHORT EngineClockSS_Support:1;2180USHORT MemoryClockSS_Support:1;2181USHORT ExtendedDesktopSupport:1;2182USHORT DualCRTC_Support:1;2183USHORT FirmwarePosted:1;2184#else2185USHORT FirmwarePosted:1;2186USHORT DualCRTC_Support:1;2187USHORT ExtendedDesktopSupport:1;2188USHORT MemoryClockSS_Support:1;2189USHORT EngineClockSS_Support:1;2190USHORT GPUControlsBL:1;2191USHORT WMI_SUPPORT:1;2192USHORT PPMode_Assigned:1;2193USHORT HyperMemory_Support:1;2194USHORT HyperMemory_Size:4;2195USHORT Reserved:3;2196#endif2197}ATOM_FIRMWARE_CAPABILITY;21982199typedef union _ATOM_FIRMWARE_CAPABILITY_ACCESS2200{2201ATOM_FIRMWARE_CAPABILITY sbfAccess;2202USHORT susAccess;2203}ATOM_FIRMWARE_CAPABILITY_ACCESS;22042205#else22062207typedef union _ATOM_FIRMWARE_CAPABILITY_ACCESS2208{2209USHORT susAccess;2210}ATOM_FIRMWARE_CAPABILITY_ACCESS;22112212#endif22132214typedef struct _ATOM_FIRMWARE_INFO2215{2216ATOM_COMMON_TABLE_HEADER sHeader;2217ULONG ulFirmwareRevision;2218ULONG ulDefaultEngineClock; //In 10Khz unit2219ULONG ulDefaultMemoryClock; //In 10Khz unit2220ULONG ulDriverTargetEngineClock; //In 10Khz unit2221ULONG ulDriverTargetMemoryClock; //In 10Khz unit2222ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit2223ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit2224ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit2225ULONG ulASICMaxEngineClock; //In 10Khz unit2226ULONG ulASICMaxMemoryClock; //In 10Khz unit2227UCHAR ucASICMaxTemperature;2228UCHAR ucPadding[3]; //Don't use them2229ULONG aulReservedForBIOS[3]; //Don't use them2230USHORT usMinEngineClockPLL_Input; //In 10Khz unit2231USHORT usMaxEngineClockPLL_Input; //In 10Khz unit2232USHORT usMinEngineClockPLL_Output; //In 10Khz unit2233USHORT usMinMemoryClockPLL_Input; //In 10Khz unit2234USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit2235USHORT usMinMemoryClockPLL_Output; //In 10Khz unit2236USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk2237USHORT usMinPixelClockPLL_Input; //In 10Khz unit2238USHORT usMaxPixelClockPLL_Input; //In 10Khz unit2239USHORT usMinPixelClockPLL_Output; //In 10Khz unit, the definitions above can't change!!!2240ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability;2241USHORT usReferenceClock; //In 10Khz unit2242USHORT usPM_RTS_Location; //RTS PM4 starting location in ROM in 1Kb unit2243UCHAR ucPM_RTS_StreamSize; //RTS PM4 packets in Kb unit2244UCHAR ucDesign_ID; //Indicate what is the board design2245UCHAR ucMemoryModule_ID; //Indicate what is the board design2246}ATOM_FIRMWARE_INFO;22472248typedef struct _ATOM_FIRMWARE_INFO_V1_22249{2250ATOM_COMMON_TABLE_HEADER sHeader;2251ULONG ulFirmwareRevision;2252ULONG ulDefaultEngineClock; //In 10Khz unit2253ULONG ulDefaultMemoryClock; //In 10Khz unit2254ULONG ulDriverTargetEngineClock; //In 10Khz unit2255ULONG ulDriverTargetMemoryClock; //In 10Khz unit2256ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit2257ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit2258ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit2259ULONG ulASICMaxEngineClock; //In 10Khz unit2260ULONG ulASICMaxMemoryClock; //In 10Khz unit2261UCHAR ucASICMaxTemperature;2262UCHAR ucMinAllowedBL_Level;2263UCHAR ucPadding[2]; //Don't use them2264ULONG aulReservedForBIOS[2]; //Don't use them2265ULONG ulMinPixelClockPLL_Output; //In 10Khz unit2266USHORT usMinEngineClockPLL_Input; //In 10Khz unit2267USHORT usMaxEngineClockPLL_Input; //In 10Khz unit2268USHORT usMinEngineClockPLL_Output; //In 10Khz unit2269USHORT usMinMemoryClockPLL_Input; //In 10Khz unit2270USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit2271USHORT usMinMemoryClockPLL_Output; //In 10Khz unit2272USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk2273USHORT usMinPixelClockPLL_Input; //In 10Khz unit2274USHORT usMaxPixelClockPLL_Input; //In 10Khz unit2275USHORT usMinPixelClockPLL_Output; //In 10Khz unit - lower 16bit of ulMinPixelClockPLL_Output2276ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability;2277USHORT usReferenceClock; //In 10Khz unit2278USHORT usPM_RTS_Location; //RTS PM4 starting location in ROM in 1Kb unit2279UCHAR ucPM_RTS_StreamSize; //RTS PM4 packets in Kb unit2280UCHAR ucDesign_ID; //Indicate what is the board design2281UCHAR ucMemoryModule_ID; //Indicate what is the board design2282}ATOM_FIRMWARE_INFO_V1_2;22832284typedef struct _ATOM_FIRMWARE_INFO_V1_32285{2286ATOM_COMMON_TABLE_HEADER sHeader;2287ULONG ulFirmwareRevision;2288ULONG ulDefaultEngineClock; //In 10Khz unit2289ULONG ulDefaultMemoryClock; //In 10Khz unit2290ULONG ulDriverTargetEngineClock; //In 10Khz unit2291ULONG ulDriverTargetMemoryClock; //In 10Khz unit2292ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit2293ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit2294ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit2295ULONG ulASICMaxEngineClock; //In 10Khz unit2296ULONG ulASICMaxMemoryClock; //In 10Khz unit2297UCHAR ucASICMaxTemperature;2298UCHAR ucMinAllowedBL_Level;2299UCHAR ucPadding[2]; //Don't use them2300ULONG aulReservedForBIOS; //Don't use them2301ULONG ul3DAccelerationEngineClock;//In 10Khz unit2302ULONG ulMinPixelClockPLL_Output; //In 10Khz unit2303USHORT usMinEngineClockPLL_Input; //In 10Khz unit2304USHORT usMaxEngineClockPLL_Input; //In 10Khz unit2305USHORT usMinEngineClockPLL_Output; //In 10Khz unit2306USHORT usMinMemoryClockPLL_Input; //In 10Khz unit2307USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit2308USHORT usMinMemoryClockPLL_Output; //In 10Khz unit2309USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk2310USHORT usMinPixelClockPLL_Input; //In 10Khz unit2311USHORT usMaxPixelClockPLL_Input; //In 10Khz unit2312USHORT usMinPixelClockPLL_Output; //In 10Khz unit - lower 16bit of ulMinPixelClockPLL_Output2313ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability;2314USHORT usReferenceClock; //In 10Khz unit2315USHORT usPM_RTS_Location; //RTS PM4 starting location in ROM in 1Kb unit2316UCHAR ucPM_RTS_StreamSize; //RTS PM4 packets in Kb unit2317UCHAR ucDesign_ID; //Indicate what is the board design2318UCHAR ucMemoryModule_ID; //Indicate what is the board design2319}ATOM_FIRMWARE_INFO_V1_3;23202321typedef struct _ATOM_FIRMWARE_INFO_V1_42322{2323ATOM_COMMON_TABLE_HEADER sHeader;2324ULONG ulFirmwareRevision;2325ULONG ulDefaultEngineClock; //In 10Khz unit2326ULONG ulDefaultMemoryClock; //In 10Khz unit2327ULONG ulDriverTargetEngineClock; //In 10Khz unit2328ULONG ulDriverTargetMemoryClock; //In 10Khz unit2329ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit2330ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit2331ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit2332ULONG ulASICMaxEngineClock; //In 10Khz unit2333ULONG ulASICMaxMemoryClock; //In 10Khz unit2334UCHAR ucASICMaxTemperature;2335UCHAR ucMinAllowedBL_Level;2336USHORT usBootUpVDDCVoltage; //In MV unit2337USHORT usLcdMinPixelClockPLL_Output; // In MHz unit2338USHORT usLcdMaxPixelClockPLL_Output; // In MHz unit2339ULONG ul3DAccelerationEngineClock;//In 10Khz unit2340ULONG ulMinPixelClockPLL_Output; //In 10Khz unit2341USHORT usMinEngineClockPLL_Input; //In 10Khz unit2342USHORT usMaxEngineClockPLL_Input; //In 10Khz unit2343USHORT usMinEngineClockPLL_Output; //In 10Khz unit2344USHORT usMinMemoryClockPLL_Input; //In 10Khz unit2345USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit2346USHORT usMinMemoryClockPLL_Output; //In 10Khz unit2347USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk2348USHORT usMinPixelClockPLL_Input; //In 10Khz unit2349USHORT usMaxPixelClockPLL_Input; //In 10Khz unit2350USHORT usMinPixelClockPLL_Output; //In 10Khz unit - lower 16bit of ulMinPixelClockPLL_Output2351ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability;2352USHORT usReferenceClock; //In 10Khz unit2353USHORT usPM_RTS_Location; //RTS PM4 starting location in ROM in 1Kb unit2354UCHAR ucPM_RTS_StreamSize; //RTS PM4 packets in Kb unit2355UCHAR ucDesign_ID; //Indicate what is the board design2356UCHAR ucMemoryModule_ID; //Indicate what is the board design2357}ATOM_FIRMWARE_INFO_V1_4;23582359//the structure below to be used from Cypress2360typedef struct _ATOM_FIRMWARE_INFO_V2_12361{2362ATOM_COMMON_TABLE_HEADER sHeader;2363ULONG ulFirmwareRevision;2364ULONG ulDefaultEngineClock; //In 10Khz unit2365ULONG ulDefaultMemoryClock; //In 10Khz unit2366ULONG ulReserved1;2367ULONG ulReserved2;2368ULONG ulMaxEngineClockPLL_Output; //In 10Khz unit2369ULONG ulMaxMemoryClockPLL_Output; //In 10Khz unit2370ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit2371ULONG ulBinaryAlteredInfo; //Was ulASICMaxEngineClock2372ULONG ulDefaultDispEngineClkFreq; //In 10Khz unit2373UCHAR ucReserved1; //Was ucASICMaxTemperature;2374UCHAR ucMinAllowedBL_Level;2375USHORT usBootUpVDDCVoltage; //In MV unit2376USHORT usLcdMinPixelClockPLL_Output; // In MHz unit2377USHORT usLcdMaxPixelClockPLL_Output; // In MHz unit2378ULONG ulReserved4; //Was ulAsicMaximumVoltage2379ULONG ulMinPixelClockPLL_Output; //In 10Khz unit2380USHORT usMinEngineClockPLL_Input; //In 10Khz unit2381USHORT usMaxEngineClockPLL_Input; //In 10Khz unit2382USHORT usMinEngineClockPLL_Output; //In 10Khz unit2383USHORT usMinMemoryClockPLL_Input; //In 10Khz unit2384USHORT usMaxMemoryClockPLL_Input; //In 10Khz unit2385USHORT usMinMemoryClockPLL_Output; //In 10Khz unit2386USHORT usMaxPixelClock; //In 10Khz unit, Max. Pclk2387USHORT usMinPixelClockPLL_Input; //In 10Khz unit2388USHORT usMaxPixelClockPLL_Input; //In 10Khz unit2389USHORT usMinPixelClockPLL_Output; //In 10Khz unit - lower 16bit of ulMinPixelClockPLL_Output2390ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability;2391USHORT usCoreReferenceClock; //In 10Khz unit2392USHORT usMemoryReferenceClock; //In 10Khz unit2393USHORT usUniphyDPModeExtClkFreq; //In 10Khz unit, if it is 0, In DP Mode Uniphy Input clock from internal PPLL, otherwise Input clock from external Spread clock2394UCHAR ucMemoryModule_ID; //Indicate what is the board design2395UCHAR ucReserved4[3];2396}ATOM_FIRMWARE_INFO_V2_1;23972398//the structure below to be used from NI2399//ucTableFormatRevision=22400//ucTableContentRevision=22401typedef struct _ATOM_FIRMWARE_INFO_V2_22402{2403ATOM_COMMON_TABLE_HEADER sHeader;2404ULONG ulFirmwareRevision;2405ULONG ulDefaultEngineClock; //In 10Khz unit2406ULONG ulDefaultMemoryClock; //In 10Khz unit2407ULONG ulReserved[2];2408ULONG ulReserved1; //Was ulMaxEngineClockPLL_Output; //In 10Khz unit*2409ULONG ulReserved2; //Was ulMaxMemoryClockPLL_Output; //In 10Khz unit*2410ULONG ulMaxPixelClockPLL_Output; //In 10Khz unit2411ULONG ulBinaryAlteredInfo; //Was ulASICMaxEngineClock ?2412ULONG ulDefaultDispEngineClkFreq; //In 10Khz unit. This is the frequency before DCDTO, corresponding to usBootUpVDDCVoltage.2413UCHAR ucReserved3; //Was ucASICMaxTemperature;2414UCHAR ucMinAllowedBL_Level;2415USHORT usBootUpVDDCVoltage; //In MV unit2416USHORT usLcdMinPixelClockPLL_Output; // In MHz unit2417USHORT usLcdMaxPixelClockPLL_Output; // In MHz unit2418ULONG ulReserved4; //Was ulAsicMaximumVoltage2419ULONG ulMinPixelClockPLL_Output; //In 10Khz unit2420ULONG ulReserved5; //Was usMinEngineClockPLL_Input and usMaxEngineClockPLL_Input2421ULONG ulReserved6; //Was usMinEngineClockPLL_Output and usMinMemoryClockPLL_Input2422ULONG ulReserved7; //Was usMaxMemoryClockPLL_Input and usMinMemoryClockPLL_Output2423USHORT usReserved11; //Was usMaxPixelClock; //In 10Khz unit, Max. Pclk used only for DAC2424USHORT usMinPixelClockPLL_Input; //In 10Khz unit2425USHORT usMaxPixelClockPLL_Input; //In 10Khz unit2426USHORT usBootUpVDDCIVoltage; //In unit of mv; Was usMinPixelClockPLL_Output;2427ATOM_FIRMWARE_CAPABILITY_ACCESS usFirmwareCapability;2428USHORT usCoreReferenceClock; //In 10Khz unit2429USHORT usMemoryReferenceClock; //In 10Khz unit2430USHORT usUniphyDPModeExtClkFreq; //In 10Khz unit, if it is 0, In DP Mode Uniphy Input clock from internal PPLL, otherwise Input clock from external Spread clock2431UCHAR ucMemoryModule_ID; //Indicate what is the board design2432UCHAR ucReserved9[3];2433USHORT usBootUpMVDDCVoltage; //In unit of mv; Was usMinPixelClockPLL_Output;2434USHORT usReserved12;2435ULONG ulReserved10[3]; // New added comparing to previous version2436}ATOM_FIRMWARE_INFO_V2_2;24372438#define ATOM_FIRMWARE_INFO_LAST ATOM_FIRMWARE_INFO_V2_224392440/****************************************************************************/2441// Structures used in IntegratedSystemInfoTable2442/****************************************************************************/2443#define IGP_CAP_FLAG_DYNAMIC_CLOCK_EN 0x22444#define IGP_CAP_FLAG_AC_CARD 0x42445#define IGP_CAP_FLAG_SDVO_CARD 0x82446#define IGP_CAP_FLAG_POSTDIV_BY_2_MODE 0x1024472448typedef struct _ATOM_INTEGRATED_SYSTEM_INFO2449{2450ATOM_COMMON_TABLE_HEADER sHeader;2451ULONG ulBootUpEngineClock; //in 10kHz unit2452ULONG ulBootUpMemoryClock; //in 10kHz unit2453ULONG ulMaxSystemMemoryClock; //in 10kHz unit2454ULONG ulMinSystemMemoryClock; //in 10kHz unit2455UCHAR ucNumberOfCyclesInPeriodHi;2456UCHAR ucLCDTimingSel; //=0:not valid.!=0 sel this timing descriptor from LCD EDID.2457USHORT usReserved1;2458USHORT usInterNBVoltageLow; //An intermidiate PMW value to set the voltage2459USHORT usInterNBVoltageHigh; //Another intermidiate PMW value to set the voltage2460ULONG ulReserved[2];24612462USHORT usFSBClock; //In MHz unit2463USHORT usCapabilityFlag; //Bit0=1 indicates the fake HDMI support,Bit1=0/1 for Dynamic clocking dis/enable2464//Bit[3:2]== 0:No PCIE card, 1:AC card, 2:SDVO card2465//Bit[4]==1: P/2 mode, ==0: P/1 mode2466USHORT usPCIENBCfgReg7; //bit[7:0]=MUX_Sel, bit[9:8]=MUX_SEL_LEVEL2, bit[10]=Lane_Reversal2467USHORT usK8MemoryClock; //in MHz unit2468USHORT usK8SyncStartDelay; //in 0.01 us unit2469USHORT usK8DataReturnTime; //in 0.01 us unit2470UCHAR ucMaxNBVoltage;2471UCHAR ucMinNBVoltage;2472UCHAR ucMemoryType; //[7:4]=1:DDR1;=2:DDR2;=3:DDR3.[3:0] is reserved2473UCHAR ucNumberOfCyclesInPeriod; //CG.FVTHROT_PWM_CTRL_REG0.NumberOfCyclesInPeriod2474UCHAR ucStartingPWM_HighTime; //CG.FVTHROT_PWM_CTRL_REG0.StartingPWM_HighTime2475UCHAR ucHTLinkWidth; //16 bit vs. 8 bit2476UCHAR ucMaxNBVoltageHigh;2477UCHAR ucMinNBVoltageHigh;2478}ATOM_INTEGRATED_SYSTEM_INFO;24792480/* Explanation on entries in ATOM_INTEGRATED_SYSTEM_INFO2481ulBootUpMemoryClock: For Intel IGP,it's the UMA system memory clock2482For AMD IGP,it's 0 if no SidePort memory installed or it's the boot-up SidePort memory clock2483ulMaxSystemMemoryClock: For Intel IGP,it's the Max freq from memory SPD if memory runs in ASYNC mode or otherwise (SYNC mode) it's 02484For AMD IGP,for now this can be 02485ulMinSystemMemoryClock: For Intel IGP,it's 133MHz if memory runs in ASYNC mode or otherwise (SYNC mode) it's 02486For AMD IGP,for now this can be 024872488usFSBClock: For Intel IGP,it's FSB Freq2489For AMD IGP,it's HT Link Speed24902491usK8MemoryClock: For AMD IGP only. For RevF CPU, set it to 2002492usK8SyncStartDelay: For AMD IGP only. Memory access latency in K8, required for watermark calculation2493usK8DataReturnTime: For AMD IGP only. Memory access latency in K8, required for watermark calculation24942495VC:Voltage Control2496ucMaxNBVoltage: 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.2497ucMinNBVoltage: 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.24982499ucNumberOfCyclesInPeriod: Indicate how many cycles when PWM duty is 100%. low 8 bits of the value.2500ucNumberOfCyclesInPeriodHi: 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 025012502ucMaxNBVoltageHigh: 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.2503ucMinNBVoltageHigh: 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.250425052506usInterNBVoltageLow: 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.2507usInterNBVoltageHigh: 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.2508*/250925102511/*2512The following IGP table is introduced from RS780, which is supposed to be put by SBIOS in FB before IGP VBIOS starts VPOST;2513Then VBIOS will copy the whole structure to its image so all GPU SW components can access this data structure to get whatever they need.2514The enough reservation should allow us to never change table revisions. Whenever needed, a GPU SW component can use reserved portion for new data entries.25152516SW components can access the IGP system infor structure in the same way as before2517*/251825192520typedef struct _ATOM_INTEGRATED_SYSTEM_INFO_V22521{2522ATOM_COMMON_TABLE_HEADER sHeader;2523ULONG ulBootUpEngineClock; //in 10kHz unit2524ULONG ulReserved1[2]; //must be 0x0 for the reserved2525ULONG ulBootUpUMAClock; //in 10kHz unit2526ULONG ulBootUpSidePortClock; //in 10kHz unit2527ULONG ulMinSidePortClock; //in 10kHz unit2528ULONG ulReserved2[6]; //must be 0x0 for the reserved2529ULONG ulSystemConfig; //see explanation below2530ULONG ulBootUpReqDisplayVector;2531ULONG ulOtherDisplayMisc;2532ULONG ulDDISlot1Config;2533ULONG ulDDISlot2Config;2534UCHAR ucMemoryType; //[3:0]=1:DDR1;=2:DDR2;=3:DDR3.[7:4] is reserved2535UCHAR ucUMAChannelNumber;2536UCHAR ucDockingPinBit;2537UCHAR ucDockingPinPolarity;2538ULONG ulDockingPinCFGInfo;2539ULONG ulCPUCapInfo;2540USHORT usNumberOfCyclesInPeriod;2541USHORT usMaxNBVoltage;2542USHORT usMinNBVoltage;2543USHORT usBootUpNBVoltage;2544ULONG ulHTLinkFreq; //in 10Khz2545USHORT usMinHTLinkWidth;2546USHORT usMaxHTLinkWidth;2547USHORT usUMASyncStartDelay;2548USHORT usUMADataReturnTime;2549USHORT usLinkStatusZeroTime;2550USHORT usDACEfuse; //for storing badgap value (for RS880 only)2551ULONG ulHighVoltageHTLinkFreq; // in 10Khz2552ULONG ulLowVoltageHTLinkFreq; // in 10Khz2553USHORT usMaxUpStreamHTLinkWidth;2554USHORT usMaxDownStreamHTLinkWidth;2555USHORT usMinUpStreamHTLinkWidth;2556USHORT usMinDownStreamHTLinkWidth;2557USHORT usFirmwareVersion; //0 means FW is not supported. Otherwise it's the FW version loaded by SBIOS and driver should enable FW.2558USHORT usFullT0Time; // Input to calculate minimum HT link change time required by NB P-State. Unit is 0.01us.2559ULONG ulReserved3[96]; //must be 0x02560}ATOM_INTEGRATED_SYSTEM_INFO_V2;25612562/*2563ulBootUpEngineClock: Boot-up Engine Clock in 10Khz;2564ulBootUpUMAClock: Boot-up UMA Clock in 10Khz; it must be 0x0 when UMA is not present2565ulBootUpSidePortClock: 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 clock25662567ulSystemConfig:2568Bit[0]=1: PowerExpress mode =0 Non-PowerExpress mode;2569Bit[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 state2570=0: system boots up at driver control state. Power state depends on PowerPlay table.2571Bit[2]=1: PWM method is used on NB voltage control. =0: GPIO method is used.2572Bit[3]=1: Only one power state(Performance) will be supported.2573=0: Multiple power states supported from PowerPlay table.2574Bit[4]=1: CLMC is supported and enabled on current system.2575=0: CLMC is not supported or enabled on current system. SBIOS need to support HT link/freq change through ATIF interface.2576Bit[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.2577=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.2578Bit[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.2579=0: Voltage settings is determined by powerplay table.2580Bit[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.2581=0: Enable CLMC as regular mode, CDLD and CILR will be enabled.2582Bit[8]=1: CDLF is supported and enabled on current system.2583=0: CDLF is not supported or enabled on current system.2584Bit[9]=1: DLL Shut Down feature is enabled on current system.2585=0: DLL Shut Down feature is not enabled or supported on current system.25862587ulBootUpReqDisplayVector: 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.25882589ulOtherDisplayMisc: [15:8]- Bootup LCD Expansion selection; 0-center, 1-full panel size expansion;2590[7:0] - BootupTV standard selection; This is a bit vector to indicate what TV standards are supported by the system. Refer to ucTVSupportedStd definition;25912592ulDDISlot1Config: Describes the PCIE lane configuration on this DDI PCIE slot (ADD2 card) or connector (Mobile design).2593[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)2594[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)2595When a DDI connector is not "paired" (meaming two connections mutualexclusive on chassis or docking, only one of them can be connected at one time.2596in both chassis and docking, SBIOS has to duplicate the same PCIE lane info from chassis to docking or vice versa. For example:2597one 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.25982599[15:8] - Lane configuration attribute;2600[23:16]- Connector type, possible value:2601CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D2602CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D2603CONNECTOR_OBJECT_ID_HDMI_TYPE_A2604CONNECTOR_OBJECT_ID_DISPLAYPORT2605CONNECTOR_OBJECT_ID_eDP2606[31:24]- Reserved26072608ulDDISlot2Config: Same as Slot1.2609ucMemoryType: 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.2610For IGP, Hypermemory is the only memory type showed in CCC.26112612ucUMAChannelNumber: how many channels for the UMA;26132614ulDockingPinCFGInfo: [15:0]-Bus/Device/Function # to CFG to read this Docking Pin; [31:16]-reg offset in CFG to read this pin2615ucDockingPinBit: which bit in this register to read the pin status;2616ucDockingPinPolarity:Polarity of the pin when docked;26172618ulCPUCapInfo: [7:0]=1:Griffin;[7:0]=2:Greyhound;[7:0]=3:K8, [7:0]=4:Pharaoh, other bits reserved for now and must be 0x026192620usNumberOfCyclesInPeriod:Indicate how many cycles when PWM duty is 100%.26212622usMaxNBVoltage:Max. voltage control value in either PWM or GPIO mode.2623usMinNBVoltage:Min. voltage control value in either PWM or GPIO mode.2624GPIO mode: both usMaxNBVoltage & usMinNBVoltage have a valid value ulSystemConfig.SYSTEM_CONFIG_USE_PWM_ON_VOLTAGE=02625PWM mode: both usMaxNBVoltage & usMinNBVoltage have a valid value ulSystemConfig.SYSTEM_CONFIG_USE_PWM_ON_VOLTAGE=12626GPU SW don't control mode: usMaxNBVoltage & usMinNBVoltage=0 and no care about ulSystemConfig.SYSTEM_CONFIG_USE_PWM_ON_VOLTAGE26272628usBootUpNBVoltage:Boot-up voltage regulator dependent PWM value.26292630ulHTLinkFreq: Bootup HT link Frequency in 10Khz.2631usMinHTLinkWidth: Bootup minimum HT link width. If CDLW disabled, this is equal to usMaxHTLinkWidth.2632If CDLW enabled, both upstream and downstream width should be the same during bootup.2633usMaxHTLinkWidth: Bootup maximum HT link width. If CDLW disabled, this is equal to usMinHTLinkWidth.2634If CDLW enabled, both upstream and downstream width should be the same during bootup.26352636usUMASyncStartDelay: Memory access latency, required for watermark calculation2637usUMADataReturnTime: Memory access latency, required for watermark calculation2638usLinkStatusZeroTime:Memory access latency required for watermark calculation, set this to 0x0 for K8 CPU, set a proper value in 0.01 the unit of us2639for Griffin or Greyhound. SBIOS needs to convert to actual time by:2640if T0Ttime [5:4]=00b, then usLinkStatusZeroTime=T0Ttime [3:0]*0.1us (0.0 to 1.5us)2641if T0Ttime [5:4]=01b, then usLinkStatusZeroTime=T0Ttime [3:0]*0.5us (0.0 to 7.5us)2642if T0Ttime [5:4]=10b, then usLinkStatusZeroTime=T0Ttime [3:0]*2.0us (0.0 to 30us)2643if T0Ttime [5:4]=11b, and T0Ttime [3:0]=0x0 to 0xa, then usLinkStatusZeroTime=T0Ttime [3:0]*20us (0.0 to 200us)26442645ulHighVoltageHTLinkFreq: HT link frequency for power state with low voltage. If boot up runs in HT1, this must be 0.2646This must be less than or equal to ulHTLinkFreq(bootup frequency).2647ulLowVoltageHTLinkFreq: 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.2648This must be less than or equal to ulHighVoltageHTLinkFreq.26492650usMaxUpStreamHTLinkWidth: Asymmetric link width support in the future, to replace usMaxHTLinkWidth. Not used for now.2651usMaxDownStreamHTLinkWidth: same as above.2652usMinUpStreamHTLinkWidth: Asymmetric link width support in the future, to replace usMinHTLinkWidth. Not used for now.2653usMinDownStreamHTLinkWidth: same as above.2654*/26552656// ATOM_INTEGRATED_SYSTEM_INFO::ulCPUCapInfo - CPU type definition2657#define INTEGRATED_SYSTEM_INFO__UNKNOWN_CPU 02658#define INTEGRATED_SYSTEM_INFO__AMD_CPU__GRIFFIN 12659#define INTEGRATED_SYSTEM_INFO__AMD_CPU__GREYHOUND 22660#define INTEGRATED_SYSTEM_INFO__AMD_CPU__K8 32661#define INTEGRATED_SYSTEM_INFO__AMD_CPU__PHARAOH 426622663#define INTEGRATED_SYSTEM_INFO__AMD_CPU__MAX_CODE INTEGRATED_SYSTEM_INFO__AMD_CPU__PHARAOH // this deff reflects max defined CPU code26642665#define SYSTEM_CONFIG_POWEREXPRESS_ENABLE 0x000000012666#define SYSTEM_CONFIG_RUN_AT_OVERDRIVE_ENGINE 0x000000022667#define SYSTEM_CONFIG_USE_PWM_ON_VOLTAGE 0x000000042668#define SYSTEM_CONFIG_PERFORMANCE_POWERSTATE_ONLY 0x000000082669#define SYSTEM_CONFIG_CLMC_ENABLED 0x000000102670#define SYSTEM_CONFIG_CDLW_ENABLED 0x000000202671#define SYSTEM_CONFIG_HIGH_VOLTAGE_REQUESTED 0x000000402672#define SYSTEM_CONFIG_CLMC_HYBRID_MODE_ENABLED 0x000000802673#define SYSTEM_CONFIG_CDLF_ENABLED 0x000001002674#define SYSTEM_CONFIG_DLL_SHUTDOWN_ENABLED 0x0000020026752676#define IGP_DDI_SLOT_LANE_CONFIG_MASK 0x000000FF26772678#define b0IGP_DDI_SLOT_LANE_MAP_MASK 0x0F2679#define b0IGP_DDI_SLOT_DOCKING_LANE_MAP_MASK 0xF02680#define b0IGP_DDI_SLOT_CONFIG_LANE_0_3 0x012681#define b0IGP_DDI_SLOT_CONFIG_LANE_4_7 0x022682#define b0IGP_DDI_SLOT_CONFIG_LANE_8_11 0x042683#define b0IGP_DDI_SLOT_CONFIG_LANE_12_15 0x0826842685#define IGP_DDI_SLOT_ATTRIBUTE_MASK 0x0000FF002686#define IGP_DDI_SLOT_CONFIG_REVERSED 0x000001002687#define b1IGP_DDI_SLOT_CONFIG_REVERSED 0x0126882689#define IGP_DDI_SLOT_CONNECTOR_TYPE_MASK 0x00FF000026902691// IntegratedSystemInfoTable new Rev is V5 after V2, because of the real rev of V2 is v1.4. This rev is used for RR2692typedef struct _ATOM_INTEGRATED_SYSTEM_INFO_V52693{2694ATOM_COMMON_TABLE_HEADER sHeader;2695ULONG ulBootUpEngineClock; //in 10kHz unit2696ULONG ulDentistVCOFreq; //Dentist VCO clock in 10kHz unit, the source of GPU SCLK, LCLK, UCLK and VCLK.2697ULONG ulLClockFreq; //GPU Lclk freq in 10kHz unit, have relationship with NCLK in NorthBridge2698ULONG ulBootUpUMAClock; //in 10kHz unit2699ULONG ulReserved1[8]; //must be 0x0 for the reserved2700ULONG ulBootUpReqDisplayVector;2701ULONG ulOtherDisplayMisc;2702ULONG ulReserved2[4]; //must be 0x0 for the reserved2703ULONG ulSystemConfig; //TBD2704ULONG ulCPUCapInfo; //TBD2705USHORT usMaxNBVoltage; //high NB voltage, calculated using current VDDNB (D24F2xDC) and VDDNB offset fuse;2706USHORT usMinNBVoltage; //low NB voltage, calculated using current VDDNB (D24F2xDC) and VDDNB offset fuse;2707USHORT usBootUpNBVoltage; //boot up NB voltage2708UCHAR ucHtcTmpLmt; //bit [22:16] of D24F3x64 Hardware Thermal Control (HTC) Register, may not be needed, TBD2709UCHAR ucTjOffset; //bit [28:22] of D24F3xE4 Thermtrip Status Register,may not be needed, TBD2710ULONG ulReserved3[4]; //must be 0x0 for the reserved2711ULONG ulDDISlot1Config; //see above ulDDISlot1Config definition2712ULONG ulDDISlot2Config;2713ULONG ulDDISlot3Config;2714ULONG ulDDISlot4Config;2715ULONG ulReserved4[4]; //must be 0x0 for the reserved2716UCHAR ucMemoryType; //[3:0]=1:DDR1;=2:DDR2;=3:DDR3.[7:4] is reserved2717UCHAR ucUMAChannelNumber;2718USHORT usReserved;2719ULONG ulReserved5[4]; //must be 0x0 for the reserved2720ULONG ulCSR_M3_ARB_CNTL_DEFAULT[10];//arrays with values for CSR M3 arbiter for default2721ULONG ulCSR_M3_ARB_CNTL_UVD[10]; //arrays with values for CSR M3 arbiter for UVD playback2722ULONG ulCSR_M3_ARB_CNTL_FS3D[10];//arrays with values for CSR M3 arbiter for Full Screen 3D applications2723ULONG ulReserved6[61]; //must be 0x02724}ATOM_INTEGRATED_SYSTEM_INFO_V5;27252726#define ATOM_CRT_INT_ENCODER1_INDEX 0x000000002727#define ATOM_LCD_INT_ENCODER1_INDEX 0x000000012728#define ATOM_TV_INT_ENCODER1_INDEX 0x000000022729#define ATOM_DFP_INT_ENCODER1_INDEX 0x000000032730#define ATOM_CRT_INT_ENCODER2_INDEX 0x000000042731#define ATOM_LCD_EXT_ENCODER1_INDEX 0x000000052732#define ATOM_TV_EXT_ENCODER1_INDEX 0x000000062733#define ATOM_DFP_EXT_ENCODER1_INDEX 0x000000072734#define ATOM_CV_INT_ENCODER1_INDEX 0x000000082735#define ATOM_DFP_INT_ENCODER2_INDEX 0x000000092736#define ATOM_CRT_EXT_ENCODER1_INDEX 0x0000000A2737#define ATOM_CV_EXT_ENCODER1_INDEX 0x0000000B2738#define ATOM_DFP_INT_ENCODER3_INDEX 0x0000000C2739#define ATOM_DFP_INT_ENCODER4_INDEX 0x0000000D27402741// define ASIC internal encoder id ( bit vector ), used for CRTC_SourceSelTable2742#define ASIC_INT_DAC1_ENCODER_ID 0x002743#define ASIC_INT_TV_ENCODER_ID 0x022744#define ASIC_INT_DIG1_ENCODER_ID 0x032745#define ASIC_INT_DAC2_ENCODER_ID 0x042746#define ASIC_EXT_TV_ENCODER_ID 0x062747#define ASIC_INT_DVO_ENCODER_ID 0x072748#define ASIC_INT_DIG2_ENCODER_ID 0x092749#define ASIC_EXT_DIG_ENCODER_ID 0x052750#define ASIC_EXT_DIG2_ENCODER_ID 0x082751#define ASIC_INT_DIG3_ENCODER_ID 0x0a2752#define ASIC_INT_DIG4_ENCODER_ID 0x0b2753#define ASIC_INT_DIG5_ENCODER_ID 0x0c2754#define ASIC_INT_DIG6_ENCODER_ID 0x0d27552756//define Encoder attribute2757#define ATOM_ANALOG_ENCODER 02758#define ATOM_DIGITAL_ENCODER 12759#define ATOM_DP_ENCODER 227602761#define ATOM_ENCODER_ENUM_MASK 0x702762#define ATOM_ENCODER_ENUM_ID1 0x002763#define ATOM_ENCODER_ENUM_ID2 0x102764#define ATOM_ENCODER_ENUM_ID3 0x202765#define ATOM_ENCODER_ENUM_ID4 0x302766#define ATOM_ENCODER_ENUM_ID5 0x402767#define ATOM_ENCODER_ENUM_ID6 0x5027682769#define ATOM_DEVICE_CRT1_INDEX 0x000000002770#define ATOM_DEVICE_LCD1_INDEX 0x000000012771#define ATOM_DEVICE_TV1_INDEX 0x000000022772#define ATOM_DEVICE_DFP1_INDEX 0x000000032773#define ATOM_DEVICE_CRT2_INDEX 0x000000042774#define ATOM_DEVICE_LCD2_INDEX 0x000000052775#define ATOM_DEVICE_DFP6_INDEX 0x000000062776#define ATOM_DEVICE_DFP2_INDEX 0x000000072777#define ATOM_DEVICE_CV_INDEX 0x000000082778#define ATOM_DEVICE_DFP3_INDEX 0x000000092779#define ATOM_DEVICE_DFP4_INDEX 0x0000000A2780#define ATOM_DEVICE_DFP5_INDEX 0x0000000B27812782#define ATOM_DEVICE_RESERVEDC_INDEX 0x0000000C2783#define ATOM_DEVICE_RESERVEDD_INDEX 0x0000000D2784#define ATOM_DEVICE_RESERVEDE_INDEX 0x0000000E2785#define ATOM_DEVICE_RESERVEDF_INDEX 0x0000000F2786#define ATOM_MAX_SUPPORTED_DEVICE_INFO (ATOM_DEVICE_DFP3_INDEX+1)2787#define ATOM_MAX_SUPPORTED_DEVICE_INFO_2 ATOM_MAX_SUPPORTED_DEVICE_INFO2788#define ATOM_MAX_SUPPORTED_DEVICE_INFO_3 (ATOM_DEVICE_DFP5_INDEX + 1 )27892790#define ATOM_MAX_SUPPORTED_DEVICE (ATOM_DEVICE_RESERVEDF_INDEX+1)27912792#define ATOM_DEVICE_CRT1_SUPPORT (0x1L << ATOM_DEVICE_CRT1_INDEX )2793#define ATOM_DEVICE_LCD1_SUPPORT (0x1L << ATOM_DEVICE_LCD1_INDEX )2794#define ATOM_DEVICE_TV1_SUPPORT (0x1L << ATOM_DEVICE_TV1_INDEX )2795#define ATOM_DEVICE_DFP1_SUPPORT (0x1L << ATOM_DEVICE_DFP1_INDEX )2796#define ATOM_DEVICE_CRT2_SUPPORT (0x1L << ATOM_DEVICE_CRT2_INDEX )2797#define ATOM_DEVICE_LCD2_SUPPORT (0x1L << ATOM_DEVICE_LCD2_INDEX )2798#define ATOM_DEVICE_DFP6_SUPPORT (0x1L << ATOM_DEVICE_DFP6_INDEX )2799#define ATOM_DEVICE_DFP2_SUPPORT (0x1L << ATOM_DEVICE_DFP2_INDEX )2800#define ATOM_DEVICE_CV_SUPPORT (0x1L << ATOM_DEVICE_CV_INDEX )2801#define ATOM_DEVICE_DFP3_SUPPORT (0x1L << ATOM_DEVICE_DFP3_INDEX )2802#define ATOM_DEVICE_DFP4_SUPPORT (0x1L << ATOM_DEVICE_DFP4_INDEX )2803#define ATOM_DEVICE_DFP5_SUPPORT (0x1L << ATOM_DEVICE_DFP5_INDEX )28042805#define ATOM_DEVICE_CRT_SUPPORT (ATOM_DEVICE_CRT1_SUPPORT | ATOM_DEVICE_CRT2_SUPPORT)2806#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)2807#define ATOM_DEVICE_TV_SUPPORT (ATOM_DEVICE_TV1_SUPPORT)2808#define ATOM_DEVICE_LCD_SUPPORT (ATOM_DEVICE_LCD1_SUPPORT | ATOM_DEVICE_LCD2_SUPPORT)28092810#define ATOM_DEVICE_CONNECTOR_TYPE_MASK 0x000000F02811#define ATOM_DEVICE_CONNECTOR_TYPE_SHIFT 0x000000042812#define ATOM_DEVICE_CONNECTOR_VGA 0x000000012813#define ATOM_DEVICE_CONNECTOR_DVI_I 0x000000022814#define ATOM_DEVICE_CONNECTOR_DVI_D 0x000000032815#define ATOM_DEVICE_CONNECTOR_DVI_A 0x000000042816#define ATOM_DEVICE_CONNECTOR_SVIDEO 0x000000052817#define ATOM_DEVICE_CONNECTOR_COMPOSITE 0x000000062818#define ATOM_DEVICE_CONNECTOR_LVDS 0x000000072819#define ATOM_DEVICE_CONNECTOR_DIGI_LINK 0x000000082820#define ATOM_DEVICE_CONNECTOR_SCART 0x000000092821#define ATOM_DEVICE_CONNECTOR_HDMI_TYPE_A 0x0000000A2822#define ATOM_DEVICE_CONNECTOR_HDMI_TYPE_B 0x0000000B2823#define ATOM_DEVICE_CONNECTOR_CASE_1 0x0000000E2824#define ATOM_DEVICE_CONNECTOR_DISPLAYPORT 0x0000000F282528262827#define ATOM_DEVICE_DAC_INFO_MASK 0x0000000F2828#define ATOM_DEVICE_DAC_INFO_SHIFT 0x000000002829#define ATOM_DEVICE_DAC_INFO_NODAC 0x000000002830#define ATOM_DEVICE_DAC_INFO_DACA 0x000000012831#define ATOM_DEVICE_DAC_INFO_DACB 0x000000022832#define ATOM_DEVICE_DAC_INFO_EXDAC 0x0000000328332834#define ATOM_DEVICE_I2C_ID_NOI2C 0x0000000028352836#define ATOM_DEVICE_I2C_LINEMUX_MASK 0x0000000F2837#define ATOM_DEVICE_I2C_LINEMUX_SHIFT 0x0000000028382839#define ATOM_DEVICE_I2C_ID_MASK 0x000000702840#define ATOM_DEVICE_I2C_ID_SHIFT 0x000000042841#define ATOM_DEVICE_I2C_ID_IS_FOR_NON_MM_USE 0x000000012842#define ATOM_DEVICE_I2C_ID_IS_FOR_MM_USE 0x000000022843#define ATOM_DEVICE_I2C_ID_IS_FOR_SDVO_USE 0x00000003 //For IGP RS6002844#define ATOM_DEVICE_I2C_ID_IS_FOR_DAC_SCL 0x00000004 //For IGP RS69028452846#define ATOM_DEVICE_I2C_HARDWARE_CAP_MASK 0x000000802847#define ATOM_DEVICE_I2C_HARDWARE_CAP_SHIFT 0x000000072848#define ATOM_DEVICE_USES_SOFTWARE_ASSISTED_I2C 0x000000002849#define ATOM_DEVICE_USES_HARDWARE_ASSISTED_I2C 0x0000000128502851// usDeviceSupport:2852// Bits0 = 0 - no CRT1 support= 1- CRT1 is supported2853// Bit 1 = 0 - no LCD1 support= 1- LCD1 is supported2854// Bit 2 = 0 - no TV1 support= 1- TV1 is supported2855// Bit 3 = 0 - no DFP1 support= 1- DFP1 is supported2856// Bit 4 = 0 - no CRT2 support= 1- CRT2 is supported2857// Bit 5 = 0 - no LCD2 support= 1- LCD2 is supported2858// Bit 6 = 0 - no DFP6 support= 1- DFP6 is supported2859// Bit 7 = 0 - no DFP2 support= 1- DFP2 is supported2860// Bit 8 = 0 - no CV support= 1- CV is supported2861// Bit 9 = 0 - no DFP3 support= 1- DFP3 is supported2862// Bit 10 = 0 - no DFP4 support= 1- DFP4 is supported2863// Bit 11 = 0 - no DFP5 support= 1- DFP5 is supported2864//2865//28662867/****************************************************************************/2868/* Structure used in MclkSS_InfoTable */2869/****************************************************************************/2870// ucI2C_ConfigID2871// [7:0] - I2C LINE Associate ID2872// = 0 - no I2C2873// [7] - HW_Cap = 1, [6:0]=HW assisted I2C ID(HW line selection)2874// = 0, [6:0]=SW assisted I2C ID2875// [6-4] - HW_ENGINE_ID = 1, HW engine for NON multimedia use2876// = 2, HW engine for Multimedia use2877// = 3-7 Reserved for future I2C engines2878// [3-0] - I2C_LINE_MUX = A Mux number when it's HW assisted I2C or GPIO ID when it's SW I2C28792880typedef struct _ATOM_I2C_ID_CONFIG2881{2882#if ATOM_BIG_ENDIAN2883UCHAR bfHW_Capable:1;2884UCHAR bfHW_EngineID:3;2885UCHAR bfI2C_LineMux:4;2886#else2887UCHAR bfI2C_LineMux:4;2888UCHAR bfHW_EngineID:3;2889UCHAR bfHW_Capable:1;2890#endif2891}ATOM_I2C_ID_CONFIG;28922893typedef union _ATOM_I2C_ID_CONFIG_ACCESS2894{2895ATOM_I2C_ID_CONFIG sbfAccess;2896UCHAR ucAccess;2897}ATOM_I2C_ID_CONFIG_ACCESS;289828992900/****************************************************************************/2901// Structure used in GPIO_I2C_InfoTable2902/****************************************************************************/2903typedef struct _ATOM_GPIO_I2C_ASSIGMENT2904{2905USHORT usClkMaskRegisterIndex;2906USHORT usClkEnRegisterIndex;2907USHORT usClkY_RegisterIndex;2908USHORT usClkA_RegisterIndex;2909USHORT usDataMaskRegisterIndex;2910USHORT usDataEnRegisterIndex;2911USHORT usDataY_RegisterIndex;2912USHORT usDataA_RegisterIndex;2913ATOM_I2C_ID_CONFIG_ACCESS sucI2cId;2914UCHAR ucClkMaskShift;2915UCHAR ucClkEnShift;2916UCHAR ucClkY_Shift;2917UCHAR ucClkA_Shift;2918UCHAR ucDataMaskShift;2919UCHAR ucDataEnShift;2920UCHAR ucDataY_Shift;2921UCHAR ucDataA_Shift;2922UCHAR ucReserved1;2923UCHAR ucReserved2;2924}ATOM_GPIO_I2C_ASSIGMENT;29252926typedef struct _ATOM_GPIO_I2C_INFO2927{2928ATOM_COMMON_TABLE_HEADER sHeader;2929ATOM_GPIO_I2C_ASSIGMENT asGPIO_Info[ATOM_MAX_SUPPORTED_DEVICE];2930}ATOM_GPIO_I2C_INFO;29312932/****************************************************************************/2933// Common Structure used in other structures2934/****************************************************************************/29352936#ifndef _H2INC29372938//Please don't add or expand this bitfield structure below, this one will retire soon.!2939typedef struct _ATOM_MODE_MISC_INFO2940{2941#if ATOM_BIG_ENDIAN2942USHORT Reserved:6;2943USHORT RGB888:1;2944USHORT DoubleClock:1;2945USHORT Interlace:1;2946USHORT CompositeSync:1;2947USHORT V_ReplicationBy2:1;2948USHORT H_ReplicationBy2:1;2949USHORT VerticalCutOff:1;2950USHORT VSyncPolarity:1; //0=Active High, 1=Active Low2951USHORT HSyncPolarity:1; //0=Active High, 1=Active Low2952USHORT HorizontalCutOff:1;2953#else2954USHORT HorizontalCutOff:1;2955USHORT HSyncPolarity:1; //0=Active High, 1=Active Low2956USHORT VSyncPolarity:1; //0=Active High, 1=Active Low2957USHORT VerticalCutOff:1;2958USHORT H_ReplicationBy2:1;2959USHORT V_ReplicationBy2:1;2960USHORT CompositeSync:1;2961USHORT Interlace:1;2962USHORT DoubleClock:1;2963USHORT RGB888:1;2964USHORT Reserved:6;2965#endif2966}ATOM_MODE_MISC_INFO;29672968typedef union _ATOM_MODE_MISC_INFO_ACCESS2969{2970ATOM_MODE_MISC_INFO sbfAccess;2971USHORT usAccess;2972}ATOM_MODE_MISC_INFO_ACCESS;29732974#else29752976typedef union _ATOM_MODE_MISC_INFO_ACCESS2977{2978USHORT usAccess;2979}ATOM_MODE_MISC_INFO_ACCESS;29802981#endif29822983// usModeMiscInfo-2984#define ATOM_H_CUTOFF 0x012985#define ATOM_HSYNC_POLARITY 0x02 //0=Active High, 1=Active Low2986#define ATOM_VSYNC_POLARITY 0x04 //0=Active High, 1=Active Low2987#define ATOM_V_CUTOFF 0x082988#define ATOM_H_REPLICATIONBY2 0x102989#define ATOM_V_REPLICATIONBY2 0x202990#define ATOM_COMPOSITESYNC 0x402991#define ATOM_INTERLACE 0x802992#define ATOM_DOUBLE_CLOCK_MODE 0x1002993#define ATOM_RGB888_MODE 0x20029942995//usRefreshRate-2996#define ATOM_REFRESH_43 432997#define ATOM_REFRESH_47 472998#define ATOM_REFRESH_56 562999#define ATOM_REFRESH_60 603000#define ATOM_REFRESH_65 653001#define ATOM_REFRESH_70 703002#define ATOM_REFRESH_72 723003#define ATOM_REFRESH_75 753004#define ATOM_REFRESH_85 8530053006// ATOM_MODE_TIMING data are exactly the same as VESA timing data.3007// Translation from EDID to ATOM_MODE_TIMING, use the following formula.3008//3009// VESA_HTOTAL = VESA_ACTIVE + 2* VESA_BORDER + VESA_BLANK3010// = EDID_HA + EDID_HBL3011// VESA_HDISP = VESA_ACTIVE = EDID_HA3012// VESA_HSYNC_START = VESA_ACTIVE + VESA_BORDER + VESA_FRONT_PORCH3013// = EDID_HA + EDID_HSO3014// VESA_HSYNC_WIDTH = VESA_HSYNC_TIME = EDID_HSPW3015// VESA_BORDER = EDID_BORDER30163017/****************************************************************************/3018// Structure used in SetCRTC_UsingDTDTimingTable3019/****************************************************************************/3020typedef struct _SET_CRTC_USING_DTD_TIMING_PARAMETERS3021{3022USHORT usH_Size;3023USHORT usH_Blanking_Time;3024USHORT usV_Size;3025USHORT usV_Blanking_Time;3026USHORT usH_SyncOffset;3027USHORT usH_SyncWidth;3028USHORT usV_SyncOffset;3029USHORT usV_SyncWidth;3030ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo;3031UCHAR ucH_Border; // From DFP EDID3032UCHAR ucV_Border;3033UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC23034UCHAR ucPadding[3];3035}SET_CRTC_USING_DTD_TIMING_PARAMETERS;30363037/****************************************************************************/3038// Structure used in SetCRTC_TimingTable3039/****************************************************************************/3040typedef struct _SET_CRTC_TIMING_PARAMETERS3041{3042USHORT usH_Total; // horizontal total3043USHORT usH_Disp; // horizontal display3044USHORT usH_SyncStart; // horozontal Sync start3045USHORT usH_SyncWidth; // horizontal Sync width3046USHORT usV_Total; // vertical total3047USHORT usV_Disp; // vertical display3048USHORT usV_SyncStart; // vertical Sync start3049USHORT usV_SyncWidth; // vertical Sync width3050ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo;3051UCHAR ucCRTC; // ATOM_CRTC1 or ATOM_CRTC23052UCHAR ucOverscanRight; // right3053UCHAR ucOverscanLeft; // left3054UCHAR ucOverscanBottom; // bottom3055UCHAR ucOverscanTop; // top3056UCHAR ucReserved;3057}SET_CRTC_TIMING_PARAMETERS;3058#define SET_CRTC_TIMING_PARAMETERS_PS_ALLOCATION SET_CRTC_TIMING_PARAMETERS30593060/****************************************************************************/3061// Structure used in StandardVESA_TimingTable3062// AnalogTV_InfoTable3063// ComponentVideoInfoTable3064/****************************************************************************/3065typedef struct _ATOM_MODE_TIMING3066{3067USHORT usCRTC_H_Total;3068USHORT usCRTC_H_Disp;3069USHORT usCRTC_H_SyncStart;3070USHORT usCRTC_H_SyncWidth;3071USHORT usCRTC_V_Total;3072USHORT usCRTC_V_Disp;3073USHORT usCRTC_V_SyncStart;3074USHORT usCRTC_V_SyncWidth;3075USHORT usPixelClock; //in 10Khz unit3076ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo;3077USHORT usCRTC_OverscanRight;3078USHORT usCRTC_OverscanLeft;3079USHORT usCRTC_OverscanBottom;3080USHORT usCRTC_OverscanTop;3081USHORT usReserve;3082UCHAR ucInternalModeNumber;3083UCHAR ucRefreshRate;3084}ATOM_MODE_TIMING;30853086typedef struct _ATOM_DTD_FORMAT3087{3088USHORT usPixClk;3089USHORT usHActive;3090USHORT usHBlanking_Time;3091USHORT usVActive;3092USHORT usVBlanking_Time;3093USHORT usHSyncOffset;3094USHORT usHSyncWidth;3095USHORT usVSyncOffset;3096USHORT usVSyncWidth;3097USHORT usImageHSize;3098USHORT usImageVSize;3099UCHAR ucHBorder;3100UCHAR ucVBorder;3101ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo;3102UCHAR ucInternalModeNumber;3103UCHAR ucRefreshRate;3104}ATOM_DTD_FORMAT;31053106/****************************************************************************/3107// Structure used in LVDS_InfoTable3108// * Need a document to describe this table3109/****************************************************************************/3110#define SUPPORTED_LCD_REFRESHRATE_30Hz 0x00043111#define SUPPORTED_LCD_REFRESHRATE_40Hz 0x00083112#define SUPPORTED_LCD_REFRESHRATE_50Hz 0x00103113#define SUPPORTED_LCD_REFRESHRATE_60Hz 0x002031143115//ucTableFormatRevision=13116//ucTableContentRevision=13117typedef struct _ATOM_LVDS_INFO3118{3119ATOM_COMMON_TABLE_HEADER sHeader;3120ATOM_DTD_FORMAT sLCDTiming;3121USHORT usModePatchTableOffset;3122USHORT usSupportedRefreshRate; //Refer to panel info table in ATOMBIOS extension Spec.3123USHORT usOffDelayInMs;3124UCHAR ucPowerSequenceDigOntoDEin10Ms;3125UCHAR ucPowerSequenceDEtoBLOnin10Ms;3126UCHAR ucLVDS_Misc; // Bit0:{=0:single, =1:dual},Bit1 {=0:666RGB, =1:888RGB},Bit2:3:{Grey level}3127// Bit4:{=0:LDI format for RGB888, =1 FPDI format for RGB888}3128// Bit5:{=0:Spatial Dithering disabled;1 Spatial Dithering enabled}3129// Bit6:{=0:Temporal Dithering disabled;1 Temporal Dithering enabled}3130UCHAR ucPanelDefaultRefreshRate;3131UCHAR ucPanelIdentification;3132UCHAR ucSS_Id;3133}ATOM_LVDS_INFO;31343135//ucTableFormatRevision=13136//ucTableContentRevision=23137typedef struct _ATOM_LVDS_INFO_V123138{3139ATOM_COMMON_TABLE_HEADER sHeader;3140ATOM_DTD_FORMAT sLCDTiming;3141USHORT usExtInfoTableOffset;3142USHORT usSupportedRefreshRate; //Refer to panel info table in ATOMBIOS extension Spec.3143USHORT usOffDelayInMs;3144UCHAR ucPowerSequenceDigOntoDEin10Ms;3145UCHAR ucPowerSequenceDEtoBLOnin10Ms;3146UCHAR ucLVDS_Misc; // Bit0:{=0:single, =1:dual},Bit1 {=0:666RGB, =1:888RGB},Bit2:3:{Grey level}3147// Bit4:{=0:LDI format for RGB888, =1 FPDI format for RGB888}3148// Bit5:{=0:Spatial Dithering disabled;1 Spatial Dithering enabled}3149// Bit6:{=0:Temporal Dithering disabled;1 Temporal Dithering enabled}3150UCHAR ucPanelDefaultRefreshRate;3151UCHAR ucPanelIdentification;3152UCHAR ucSS_Id;3153USHORT usLCDVenderID;3154USHORT usLCDProductID;3155UCHAR ucLCDPanel_SpecialHandlingCap;3156UCHAR ucPanelInfoSize; // start from ATOM_DTD_FORMAT to end of panel info, include ExtInfoTable3157UCHAR ucReserved[2];3158}ATOM_LVDS_INFO_V12;31593160//Definitions for ucLCDPanel_SpecialHandlingCap:31613162//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.3163//Other entries in ATOM_LVDS_INFO_V12 are still valid/useful to DAL3164#define LCDPANEL_CAP_READ_EDID 0x131653166//If a design supports DRR (dynamic refresh rate) on internal panels (LVDS or EDP), this cap is set in ucLCDPanel_SpecialHandlingCap together3167//with multiple supported refresh rates@usSupportedRefreshRate. This cap should not be set when only slow refresh rate is supported (static3168//refresh rate switch by SW. This is only valid from ATOM_LVDS_INFO_V123169#define LCDPANEL_CAP_DRR_SUPPORTED 0x231703171//Use this cap bit for a quick reference whether an embadded panel (LCD1 ) is LVDS or eDP.3172#define LCDPANEL_CAP_eDP 0x4317331743175//Color Bit Depth definition in EDID V1.4 @BYTE 14h3176//Bit 6 5 43177// 0 0 0 - Color bit depth is undefined3178// 0 0 1 - 6 Bits per Primary Color3179// 0 1 0 - 8 Bits per Primary Color3180// 0 1 1 - 10 Bits per Primary Color3181// 1 0 0 - 12 Bits per Primary Color3182// 1 0 1 - 14 Bits per Primary Color3183// 1 1 0 - 16 Bits per Primary Color3184// 1 1 1 - Reserved31853186#define PANEL_COLOR_BIT_DEPTH_MASK 0x7031873188// Bit7:{=0:Random Dithering disabled;1 Random Dithering enabled}3189#define PANEL_RANDOM_DITHER 0x803190#define PANEL_RANDOM_DITHER_MASK 0x8031913192#define ATOM_LVDS_INFO_LAST ATOM_LVDS_INFO_V12 // no need to change this31933194/****************************************************************************/3195// Structures used by LCD_InfoTable V1.3 Note: previous version was called ATOM_LVDS_INFO_V123196// ASIC Families: NI3197// ucTableFormatRevision=13198// ucTableContentRevision=33199/****************************************************************************/3200typedef struct _ATOM_LCD_INFO_V133201{3202ATOM_COMMON_TABLE_HEADER sHeader;3203ATOM_DTD_FORMAT sLCDTiming;3204USHORT usExtInfoTableOffset;3205USHORT usSupportedRefreshRate; //Refer to panel info table in ATOMBIOS extension Spec.3206ULONG ulReserved0;3207UCHAR ucLCD_Misc; // Reorganized in V133208// Bit0: {=0:single, =1:dual},3209// Bit1: {=0:LDI format for RGB888, =1 FPDI format for RGB888} // was {=0:666RGB, =1:888RGB},3210// Bit3:2: {Grey level}3211// Bit6:4 Color Bit Depth definition (see below definition in EDID V1.4 @BYTE 14h)3212// Bit7 Reserved. was for ATOM_PANEL_MISC_API_ENABLED, still need it?3213UCHAR ucPanelDefaultRefreshRate;3214UCHAR ucPanelIdentification;3215UCHAR ucSS_Id;3216USHORT usLCDVenderID;3217USHORT usLCDProductID;3218UCHAR ucLCDPanel_SpecialHandlingCap; // Reorganized in V133219// Bit0: Once DAL sees this CAP is set, it will read EDID from LCD on its own3220// Bit1: See LCDPANEL_CAP_DRR_SUPPORTED3221// Bit2: a quick reference whether an embadded panel (LCD1 ) is LVDS (0) or eDP (1)3222// Bit7-3: Reserved3223UCHAR ucPanelInfoSize; // start from ATOM_DTD_FORMAT to end of panel info, include ExtInfoTable3224USHORT usBacklightPWM; // Backlight PWM in Hz. New in _V1332253226UCHAR ucPowerSequenceDIGONtoDE_in4Ms;3227UCHAR ucPowerSequenceDEtoVARY_BL_in4Ms;3228UCHAR ucPowerSequenceDEtoDIGON_in4Ms;3229UCHAR ucPowerSequenceVARY_BLtoDE_in4Ms;32303231UCHAR ucOffDelay_in4Ms;3232UCHAR ucPowerSequenceVARY_BLtoBLON_in4Ms;3233UCHAR ucPowerSequenceBLONtoVARY_BL_in4Ms;3234UCHAR ucReserved1;32353236ULONG ulReserved[4];3237}ATOM_LCD_INFO_V13;32383239#define ATOM_LCD_INFO_LAST ATOM_LCD_INFO_V1332403241//Definitions for ucLCD_Misc3242#define ATOM_PANEL_MISC_V13_DUAL 0x000000013243#define ATOM_PANEL_MISC_V13_FPDI 0x000000023244#define ATOM_PANEL_MISC_V13_GREY_LEVEL 0x0000000C3245#define ATOM_PANEL_MISC_V13_GREY_LEVEL_SHIFT 23246#define ATOM_PANEL_MISC_V13_COLOR_BIT_DEPTH_MASK 0x703247#define ATOM_PANEL_MISC_V13_6BIT_PER_COLOR 0x103248#define ATOM_PANEL_MISC_V13_8BIT_PER_COLOR 0x2032493250//Color Bit Depth definition in EDID V1.4 @BYTE 14h3251//Bit 6 5 43252// 0 0 0 - Color bit depth is undefined3253// 0 0 1 - 6 Bits per Primary Color3254// 0 1 0 - 8 Bits per Primary Color3255// 0 1 1 - 10 Bits per Primary Color3256// 1 0 0 - 12 Bits per Primary Color3257// 1 0 1 - 14 Bits per Primary Color3258// 1 1 0 - 16 Bits per Primary Color3259// 1 1 1 - Reserved32603261//Definitions for ucLCDPanel_SpecialHandlingCap:32623263//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.3264//Other entries in ATOM_LVDS_INFO_V12 are still valid/useful to DAL3265#define LCDPANEL_CAP_V13_READ_EDID 0x1 // = LCDPANEL_CAP_READ_EDID no change comparing to previous version32663267//If a design supports DRR (dynamic refresh rate) on internal panels (LVDS or EDP), this cap is set in ucLCDPanel_SpecialHandlingCap together3268//with multiple supported refresh rates@usSupportedRefreshRate. This cap should not be set when only slow refresh rate is supported (static3269//refresh rate switch by SW. This is only valid from ATOM_LVDS_INFO_V123270#define LCDPANEL_CAP_V13_DRR_SUPPORTED 0x2 // = LCDPANEL_CAP_DRR_SUPPORTED no change comparing to previous version32713272//Use this cap bit for a quick reference whether an embadded panel (LCD1 ) is LVDS or eDP.3273#define LCDPANEL_CAP_V13_eDP 0x4 // = LCDPANEL_CAP_eDP no change comparing to previous version32743275typedef struct _ATOM_PATCH_RECORD_MODE3276{3277UCHAR ucRecordType;3278USHORT usHDisp;3279USHORT usVDisp;3280}ATOM_PATCH_RECORD_MODE;32813282typedef struct _ATOM_LCD_RTS_RECORD3283{3284UCHAR ucRecordType;3285UCHAR ucRTSValue;3286}ATOM_LCD_RTS_RECORD;32873288//!! If the record below exits, it shoud always be the first record for easy use in command table!!!3289// The record below is only used when LVDS_Info is present. From ATOM_LVDS_INFO_V12, use ucLCDPanel_SpecialHandlingCap instead.3290typedef struct _ATOM_LCD_MODE_CONTROL_CAP3291{3292UCHAR ucRecordType;3293USHORT usLCDCap;3294}ATOM_LCD_MODE_CONTROL_CAP;32953296#define LCD_MODE_CAP_BL_OFF 13297#define LCD_MODE_CAP_CRTC_OFF 23298#define LCD_MODE_CAP_PANEL_OFF 432993300typedef struct _ATOM_FAKE_EDID_PATCH_RECORD3301{3302UCHAR ucRecordType;3303UCHAR ucFakeEDIDLength;3304UCHAR ucFakeEDIDString[1]; // This actually has ucFakeEdidLength elements.3305} ATOM_FAKE_EDID_PATCH_RECORD;33063307typedef struct _ATOM_PANEL_RESOLUTION_PATCH_RECORD3308{3309UCHAR ucRecordType;3310USHORT usHSize;3311USHORT usVSize;3312}ATOM_PANEL_RESOLUTION_PATCH_RECORD;33133314#define LCD_MODE_PATCH_RECORD_MODE_TYPE 13315#define LCD_RTS_RECORD_TYPE 23316#define LCD_CAP_RECORD_TYPE 33317#define LCD_FAKE_EDID_PATCH_RECORD_TYPE 43318#define LCD_PANEL_RESOLUTION_RECORD_TYPE 53319#define ATOM_RECORD_END_TYPE 0xFF33203321/****************************Spread Spectrum Info Table Definitions **********************/33223323//ucTableFormatRevision=13324//ucTableContentRevision=23325typedef struct _ATOM_SPREAD_SPECTRUM_ASSIGNMENT3326{3327USHORT usSpreadSpectrumPercentage;3328UCHAR ucSpreadSpectrumType; //Bit1=0 Down Spread,=1 Center Spread. Bit1=1 Ext. =0 Int. Bit2=1: PCIE REFCLK SS =0 iternal PPLL SS Others:TBD3329UCHAR ucSS_Step;3330UCHAR ucSS_Delay;3331UCHAR ucSS_Id;3332UCHAR ucRecommendedRef_Div;3333UCHAR ucSS_Range; //it was reserved for V113334}ATOM_SPREAD_SPECTRUM_ASSIGNMENT;33353336#define ATOM_MAX_SS_ENTRY 163337#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.3338#define ATOM_DP_SS_ID2 0x0f2 // SS ID for internal DP stream at 1.62Ghz, if it exists in SS_InfoTable.3339#define ATOM_LVLINK_2700MHz_SS_ID 0x0f3 // SS ID for LV link translator chip at 2.7Ghz3340#define ATOM_LVLINK_1620MHz_SS_ID 0x0f4 // SS ID for LV link translator chip at 1.62Ghz334133423343#define ATOM_SS_DOWN_SPREAD_MODE_MASK 0x000000003344#define ATOM_SS_DOWN_SPREAD_MODE 0x000000003345#define ATOM_SS_CENTRE_SPREAD_MODE_MASK 0x000000013346#define ATOM_SS_CENTRE_SPREAD_MODE 0x000000013347#define ATOM_INTERNAL_SS_MASK 0x000000003348#define ATOM_EXTERNAL_SS_MASK 0x000000023349#define EXEC_SS_STEP_SIZE_SHIFT 23350#define EXEC_SS_DELAY_SHIFT 43351#define ACTIVEDATA_TO_BLON_DELAY_SHIFT 433523353typedef struct _ATOM_SPREAD_SPECTRUM_INFO3354{3355ATOM_COMMON_TABLE_HEADER sHeader;3356ATOM_SPREAD_SPECTRUM_ASSIGNMENT asSS_Info[ATOM_MAX_SS_ENTRY];3357}ATOM_SPREAD_SPECTRUM_INFO;33583359/****************************************************************************/3360// Structure used in AnalogTV_InfoTable (Top level)3361/****************************************************************************/3362//ucTVBootUpDefaultStd definition:33633364//ATOM_TV_NTSC 13365//ATOM_TV_NTSCJ 23366//ATOM_TV_PAL 33367//ATOM_TV_PALM 43368//ATOM_TV_PALCN 53369//ATOM_TV_PALN 63370//ATOM_TV_PAL60 73371//ATOM_TV_SECAM 833723373//ucTVSupportedStd definition:3374#define NTSC_SUPPORT 0x13375#define NTSCJ_SUPPORT 0x233763377#define PAL_SUPPORT 0x43378#define PALM_SUPPORT 0x83379#define PALCN_SUPPORT 0x103380#define PALN_SUPPORT 0x203381#define PAL60_SUPPORT 0x403382#define SECAM_SUPPORT 0x8033833384#define MAX_SUPPORTED_TV_TIMING 233853386typedef struct _ATOM_ANALOG_TV_INFO3387{3388ATOM_COMMON_TABLE_HEADER sHeader;3389UCHAR ucTV_SupportedStandard;3390UCHAR ucTV_BootUpDefaultStandard;3391UCHAR ucExt_TV_ASIC_ID;3392UCHAR ucExt_TV_ASIC_SlaveAddr;3393/*ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_TV_TIMING];*/3394ATOM_MODE_TIMING aModeTimings[MAX_SUPPORTED_TV_TIMING];3395}ATOM_ANALOG_TV_INFO;33963397#define MAX_SUPPORTED_TV_TIMING_V1_2 333983399typedef struct _ATOM_ANALOG_TV_INFO_V1_23400{3401ATOM_COMMON_TABLE_HEADER sHeader;3402UCHAR ucTV_SupportedStandard;3403UCHAR ucTV_BootUpDefaultStandard;3404UCHAR ucExt_TV_ASIC_ID;3405UCHAR ucExt_TV_ASIC_SlaveAddr;3406ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_TV_TIMING_V1_2];3407}ATOM_ANALOG_TV_INFO_V1_2;34083409typedef struct _ATOM_DPCD_INFO3410{3411UCHAR ucRevisionNumber; //10h : Revision 1.0; 11h : Revision 1.13412UCHAR ucMaxLinkRate; //06h : 1.62Gbps per lane; 0Ah = 2.7Gbps per lane3413UCHAR ucMaxLane; //Bits 4:0 = MAX_LANE_COUNT (1/2/4). Bit 7 = ENHANCED_FRAME_CAP3414UCHAR ucMaxDownSpread; //Bit0 = 0: No Down spread; Bit0 = 1: 0.5% (Subject to change according to DP spec)3415}ATOM_DPCD_INFO;34163417#define ATOM_DPCD_MAX_LANE_MASK 0x1F34183419/**************************************************************************/3420// VRAM usage and their defintions34213422// One chunk of VRAM used by Bios are for HWICON surfaces,EDID data.3423// Current Mode timing and Dail Timing and/or STD timing data EACH device. They can be broken down as below.3424// All the addresses below are the offsets from the frame buffer start.They all MUST be Dword aligned!3425// To driver: The physical address of this memory portion=mmFB_START(4K aligned)+ATOMBIOS_VRAM_USAGE_START_ADDR+ATOM_x_ADDR3426// To Bios: ATOMBIOS_VRAM_USAGE_START_ADDR+ATOM_x_ADDR->MM_INDEX34273428#ifndef VESA_MEMORY_IN_64K_BLOCK3429#define VESA_MEMORY_IN_64K_BLOCK 0x100 //256*64K=16Mb (Max. VESA memory is 16Mb!)3430#endif34313432#define ATOM_EDID_RAW_DATASIZE 256 //In Bytes3433#define ATOM_HWICON_SURFACE_SIZE 4096 //In Bytes3434#define ATOM_HWICON_INFOTABLE_SIZE 323435#define MAX_DTD_MODE_IN_VRAM 63436#define ATOM_DTD_MODE_SUPPORT_TBL_SIZE (MAX_DTD_MODE_IN_VRAM*28) //28= (SIZEOF ATOM_DTD_FORMAT)3437#define ATOM_STD_MODE_SUPPORT_TBL_SIZE 32*8 //32 is a predefined number,8= (SIZEOF ATOM_STD_FORMAT)3438//20 bytes for Encoder Type and DPCD in STD EDID area3439#define DFP_ENCODER_TYPE_OFFSET (ATOM_EDID_RAW_DATASIZE + ATOM_DTD_MODE_SUPPORT_TBL_SIZE + ATOM_STD_MODE_SUPPORT_TBL_SIZE - 20)3440#define ATOM_DP_DPCD_OFFSET (DFP_ENCODER_TYPE_OFFSET + 4 )34413442#define ATOM_HWICON1_SURFACE_ADDR 03443#define ATOM_HWICON2_SURFACE_ADDR (ATOM_HWICON1_SURFACE_ADDR + ATOM_HWICON_SURFACE_SIZE)3444#define ATOM_HWICON_INFOTABLE_ADDR (ATOM_HWICON2_SURFACE_ADDR + ATOM_HWICON_SURFACE_SIZE)3445#define ATOM_CRT1_EDID_ADDR (ATOM_HWICON_INFOTABLE_ADDR + ATOM_HWICON_INFOTABLE_SIZE)3446#define ATOM_CRT1_DTD_MODE_TBL_ADDR (ATOM_CRT1_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3447#define ATOM_CRT1_STD_MODE_TBL_ADDR (ATOM_CRT1_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34483449#define ATOM_LCD1_EDID_ADDR (ATOM_CRT1_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)3450#define ATOM_LCD1_DTD_MODE_TBL_ADDR (ATOM_LCD1_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3451#define ATOM_LCD1_STD_MODE_TBL_ADDR (ATOM_LCD1_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34523453#define ATOM_TV1_DTD_MODE_TBL_ADDR (ATOM_LCD1_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)34543455#define ATOM_DFP1_EDID_ADDR (ATOM_TV1_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)3456#define ATOM_DFP1_DTD_MODE_TBL_ADDR (ATOM_DFP1_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3457#define ATOM_DFP1_STD_MODE_TBL_ADDR (ATOM_DFP1_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34583459#define ATOM_CRT2_EDID_ADDR (ATOM_DFP1_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)3460#define ATOM_CRT2_DTD_MODE_TBL_ADDR (ATOM_CRT2_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3461#define ATOM_CRT2_STD_MODE_TBL_ADDR (ATOM_CRT2_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34623463#define ATOM_LCD2_EDID_ADDR (ATOM_CRT2_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)3464#define ATOM_LCD2_DTD_MODE_TBL_ADDR (ATOM_LCD2_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3465#define ATOM_LCD2_STD_MODE_TBL_ADDR (ATOM_LCD2_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34663467#define ATOM_DFP6_EDID_ADDR (ATOM_LCD2_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)3468#define ATOM_DFP6_DTD_MODE_TBL_ADDR (ATOM_DFP6_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3469#define ATOM_DFP6_STD_MODE_TBL_ADDR (ATOM_DFP6_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34703471#define ATOM_DFP2_EDID_ADDR (ATOM_DFP6_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)3472#define ATOM_DFP2_DTD_MODE_TBL_ADDR (ATOM_DFP2_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3473#define ATOM_DFP2_STD_MODE_TBL_ADDR (ATOM_DFP2_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34743475#define ATOM_CV_EDID_ADDR (ATOM_DFP2_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)3476#define ATOM_CV_DTD_MODE_TBL_ADDR (ATOM_CV_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3477#define ATOM_CV_STD_MODE_TBL_ADDR (ATOM_CV_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34783479#define ATOM_DFP3_EDID_ADDR (ATOM_CV_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)3480#define ATOM_DFP3_DTD_MODE_TBL_ADDR (ATOM_DFP3_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3481#define ATOM_DFP3_STD_MODE_TBL_ADDR (ATOM_DFP3_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34823483#define ATOM_DFP4_EDID_ADDR (ATOM_DFP3_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)3484#define ATOM_DFP4_DTD_MODE_TBL_ADDR (ATOM_DFP4_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3485#define ATOM_DFP4_STD_MODE_TBL_ADDR (ATOM_DFP4_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34863487#define ATOM_DFP5_EDID_ADDR (ATOM_DFP4_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)3488#define ATOM_DFP5_DTD_MODE_TBL_ADDR (ATOM_DFP5_EDID_ADDR + ATOM_EDID_RAW_DATASIZE)3489#define ATOM_DFP5_STD_MODE_TBL_ADDR (ATOM_DFP5_DTD_MODE_TBL_ADDR + ATOM_DTD_MODE_SUPPORT_TBL_SIZE)34903491#define ATOM_DP_TRAINING_TBL_ADDR (ATOM_DFP5_STD_MODE_TBL_ADDR + ATOM_STD_MODE_SUPPORT_TBL_SIZE)34923493#define ATOM_STACK_STORAGE_START (ATOM_DP_TRAINING_TBL_ADDR + 1024)3494#define ATOM_STACK_STORAGE_END ATOM_STACK_STORAGE_START + 51234953496//The size below is in Kb!3497#define ATOM_VRAM_RESERVE_SIZE ((((ATOM_STACK_STORAGE_END - ATOM_HWICON1_SURFACE_ADDR)>>10)+4)&0xFFFC)34983499#define ATOM_VRAM_RESERVE_V2_SIZE 3235003501#define ATOM_VRAM_OPERATION_FLAGS_MASK 0xC0000000L3502#define ATOM_VRAM_OPERATION_FLAGS_SHIFT 303503#define ATOM_VRAM_BLOCK_NEEDS_NO_RESERVATION 0x13504#define ATOM_VRAM_BLOCK_NEEDS_RESERVATION 0x035053506/***********************************************************************************/3507// Structure used in VRAM_UsageByFirmwareTable3508// Note1: This table is filled by SetBiosReservationStartInFB in CoreCommSubs.asm3509// at running time.3510// note2: From RV770, the memory is more than 32bit addressable, so we will change3511// ucTableFormatRevision=1,ucTableContentRevision=4, the strcuture remains3512// exactly same as 1.1 and 1.2 (1.3 is never in use), but ulStartAddrUsedByFirmware3513// (in offset to start of memory address) is KB aligned instead of byte aligend.3514/***********************************************************************************/3515// Note3:3516/* If we change usReserved to "usFBUsedbyDrvInKB", then to VBIOS this usFBUsedbyDrvInKB is a predefined, unchanged constant across VGA or non VGA adapter,3517for CAIL, The size of FB access area is known, only thing missing is the Offset of FB Access area, so we can have:35183519If (ulStartAddrUsedByFirmware!=0)3520FBAccessAreaOffset= ulStartAddrUsedByFirmware - usFBUsedbyDrvInKB;3521Reserved area has been claimed by VBIOS including this FB access area; CAIL doesn't need to reserve any extra area for this purpose3522else //Non VGA case3523if (FB_Size<=2Gb)3524FBAccessAreaOffset= FB_Size - usFBUsedbyDrvInKB;3525else3526FBAccessAreaOffset= Aper_Size - usFBUsedbyDrvInKB35273528CAIL needs to claim an reserved area defined by FBAccessAreaOffset and usFBUsedbyDrvInKB in non VGA case.*/35293530#define ATOM_MAX_FIRMWARE_VRAM_USAGE_INFO 135313532typedef struct _ATOM_FIRMWARE_VRAM_RESERVE_INFO3533{3534ULONG ulStartAddrUsedByFirmware;3535USHORT usFirmwareUseInKb;3536USHORT usReserved;3537}ATOM_FIRMWARE_VRAM_RESERVE_INFO;35383539typedef struct _ATOM_VRAM_USAGE_BY_FIRMWARE3540{3541ATOM_COMMON_TABLE_HEADER sHeader;3542ATOM_FIRMWARE_VRAM_RESERVE_INFO asFirmwareVramReserveInfo[ATOM_MAX_FIRMWARE_VRAM_USAGE_INFO];3543}ATOM_VRAM_USAGE_BY_FIRMWARE;35443545// change verion to 1.5, when allow driver to allocate the vram area for command table access.3546typedef struct _ATOM_FIRMWARE_VRAM_RESERVE_INFO_V1_53547{3548ULONG ulStartAddrUsedByFirmware;3549USHORT usFirmwareUseInKb;3550USHORT usFBUsedByDrvInKb;3551}ATOM_FIRMWARE_VRAM_RESERVE_INFO_V1_5;35523553typedef struct _ATOM_VRAM_USAGE_BY_FIRMWARE_V1_53554{3555ATOM_COMMON_TABLE_HEADER sHeader;3556ATOM_FIRMWARE_VRAM_RESERVE_INFO_V1_5 asFirmwareVramReserveInfo[ATOM_MAX_FIRMWARE_VRAM_USAGE_INFO];3557}ATOM_VRAM_USAGE_BY_FIRMWARE_V1_5;35583559/****************************************************************************/3560// Structure used in GPIO_Pin_LUTTable3561/****************************************************************************/3562typedef struct _ATOM_GPIO_PIN_ASSIGNMENT3563{3564USHORT usGpioPin_AIndex;3565UCHAR ucGpioPinBitShift;3566UCHAR ucGPIO_ID;3567}ATOM_GPIO_PIN_ASSIGNMENT;35683569typedef struct _ATOM_GPIO_PIN_LUT3570{3571ATOM_COMMON_TABLE_HEADER sHeader;3572ATOM_GPIO_PIN_ASSIGNMENT asGPIO_Pin[1];3573}ATOM_GPIO_PIN_LUT;35743575/****************************************************************************/3576// Structure used in ComponentVideoInfoTable3577/****************************************************************************/3578#define GPIO_PIN_ACTIVE_HIGH 0x135793580#define MAX_SUPPORTED_CV_STANDARDS 535813582// definitions for ATOM_D_INFO.ucSettings3583#define ATOM_GPIO_SETTINGS_BITSHIFT_MASK 0x1F // [4:0]3584#define ATOM_GPIO_SETTINGS_RESERVED_MASK 0x60 // [6:5] = must be zeroed out3585#define ATOM_GPIO_SETTINGS_ACTIVE_MASK 0x80 // [7]35863587typedef struct _ATOM_GPIO_INFO3588{3589USHORT usAOffset;3590UCHAR ucSettings;3591UCHAR ucReserved;3592}ATOM_GPIO_INFO;35933594// definitions for ATOM_COMPONENT_VIDEO_INFO.ucMiscInfo (bit vector)3595#define ATOM_CV_RESTRICT_FORMAT_SELECTION 0x235963597// definitions for ATOM_COMPONENT_VIDEO_INFO.uc480i/uc480p/uc720p/uc1080i3598#define ATOM_GPIO_DEFAULT_MODE_EN 0x80 //[7];3599#define ATOM_GPIO_SETTING_PERMODE_MASK 0x7F //[6:0]36003601// definitions for ATOM_COMPONENT_VIDEO_INFO.ucLetterBoxMode3602//Line 3 out put 5V.3603#define ATOM_CV_LINE3_ASPECTRATIO_16_9_GPIO_A 0x01 //represent gpio 3 state for 16:93604#define ATOM_CV_LINE3_ASPECTRATIO_16_9_GPIO_B 0x02 //represent gpio 4 state for 16:93605#define ATOM_CV_LINE3_ASPECTRATIO_16_9_GPIO_SHIFT 0x036063607//Line 3 out put 2.2V3608#define ATOM_CV_LINE3_ASPECTRATIO_4_3_LETBOX_GPIO_A 0x04 //represent gpio 3 state for 4:3 Letter box3609#define ATOM_CV_LINE3_ASPECTRATIO_4_3_LETBOX_GPIO_B 0x08 //represent gpio 4 state for 4:3 Letter box3610#define ATOM_CV_LINE3_ASPECTRATIO_4_3_LETBOX_GPIO_SHIFT 0x236113612//Line 3 out put 0V3613#define ATOM_CV_LINE3_ASPECTRATIO_4_3_GPIO_A 0x10 //represent gpio 3 state for 4:33614#define ATOM_CV_LINE3_ASPECTRATIO_4_3_GPIO_B 0x20 //represent gpio 4 state for 4:33615#define ATOM_CV_LINE3_ASPECTRATIO_4_3_GPIO_SHIFT 0x436163617#define ATOM_CV_LINE3_ASPECTRATIO_MASK 0x3F // bit [5:0]36183619#define ATOM_CV_LINE3_ASPECTRATIO_EXIST 0x80 //bit 736203621//GPIO bit index in gpio setting per mode value, also represend the block no. in gpio blocks.3622#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.3623#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.362436253626typedef struct _ATOM_COMPONENT_VIDEO_INFO3627{3628ATOM_COMMON_TABLE_HEADER sHeader;3629USHORT usMask_PinRegisterIndex;3630USHORT usEN_PinRegisterIndex;3631USHORT usY_PinRegisterIndex;3632USHORT usA_PinRegisterIndex;3633UCHAR ucBitShift;3634UCHAR ucPinActiveState; //ucPinActiveState: Bit0=1 active high, =0 active low3635ATOM_DTD_FORMAT sReserved; // must be zeroed out3636UCHAR ucMiscInfo;3637UCHAR uc480i;3638UCHAR uc480p;3639UCHAR uc720p;3640UCHAR uc1080i;3641UCHAR ucLetterBoxMode;3642UCHAR ucReserved[3];3643UCHAR ucNumOfWbGpioBlocks; //For Component video D-Connector support. If zere, NTSC type connector3644ATOM_GPIO_INFO aWbGpioStateBlock[MAX_SUPPORTED_CV_STANDARDS];3645ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_CV_STANDARDS];3646}ATOM_COMPONENT_VIDEO_INFO;36473648//ucTableFormatRevision=23649//ucTableContentRevision=13650typedef struct _ATOM_COMPONENT_VIDEO_INFO_V213651{3652ATOM_COMMON_TABLE_HEADER sHeader;3653UCHAR ucMiscInfo;3654UCHAR uc480i;3655UCHAR uc480p;3656UCHAR uc720p;3657UCHAR uc1080i;3658UCHAR ucReserved;3659UCHAR ucLetterBoxMode;3660UCHAR ucNumOfWbGpioBlocks; //For Component video D-Connector support. If zere, NTSC type connector3661ATOM_GPIO_INFO aWbGpioStateBlock[MAX_SUPPORTED_CV_STANDARDS];3662ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_CV_STANDARDS];3663}ATOM_COMPONENT_VIDEO_INFO_V21;36643665#define ATOM_COMPONENT_VIDEO_INFO_LAST ATOM_COMPONENT_VIDEO_INFO_V2136663667/****************************************************************************/3668// Structure used in object_InfoTable3669/****************************************************************************/3670typedef struct _ATOM_OBJECT_HEADER3671{3672ATOM_COMMON_TABLE_HEADER sHeader;3673USHORT usDeviceSupport;3674USHORT usConnectorObjectTableOffset;3675USHORT usRouterObjectTableOffset;3676USHORT usEncoderObjectTableOffset;3677USHORT usProtectionObjectTableOffset; //only available when Protection block is independent.3678USHORT usDisplayPathTableOffset;3679}ATOM_OBJECT_HEADER;36803681typedef struct _ATOM_OBJECT_HEADER_V33682{3683ATOM_COMMON_TABLE_HEADER sHeader;3684USHORT usDeviceSupport;3685USHORT usConnectorObjectTableOffset;3686USHORT usRouterObjectTableOffset;3687USHORT usEncoderObjectTableOffset;3688USHORT usProtectionObjectTableOffset; //only available when Protection block is independent.3689USHORT usDisplayPathTableOffset;3690USHORT usMiscObjectTableOffset;3691}ATOM_OBJECT_HEADER_V3;36923693typedef struct _ATOM_DISPLAY_OBJECT_PATH3694{3695USHORT usDeviceTag; //supported device3696USHORT usSize; //the size of ATOM_DISPLAY_OBJECT_PATH3697USHORT usConnObjectId; //Connector Object ID3698USHORT usGPUObjectId; //GPU ID3699USHORT usGraphicObjIds[1]; //1st Encoder Obj source from GPU to last Graphic Obj destinate to connector.3700}ATOM_DISPLAY_OBJECT_PATH;37013702typedef struct _ATOM_DISPLAY_EXTERNAL_OBJECT_PATH3703{3704USHORT usDeviceTag; //supported device3705USHORT usSize; //the size of ATOM_DISPLAY_OBJECT_PATH3706USHORT usConnObjectId; //Connector Object ID3707USHORT usGPUObjectId; //GPU ID3708USHORT usGraphicObjIds[2]; //usGraphicObjIds[0]= GPU internal encoder, usGraphicObjIds[1]= external encoder3709}ATOM_DISPLAY_EXTERNAL_OBJECT_PATH;37103711typedef struct _ATOM_DISPLAY_OBJECT_PATH_TABLE3712{3713UCHAR ucNumOfDispPath;3714UCHAR ucVersion;3715UCHAR ucPadding[2];3716ATOM_DISPLAY_OBJECT_PATH asDispPath[1];3717}ATOM_DISPLAY_OBJECT_PATH_TABLE;371837193720typedef struct _ATOM_OBJECT //each object has this structure3721{3722USHORT usObjectID;3723USHORT usSrcDstTableOffset;3724USHORT usRecordOffset; //this pointing to a bunch of records defined below3725USHORT usReserved;3726}ATOM_OBJECT;37273728typedef struct _ATOM_OBJECT_TABLE //Above 4 object table offset pointing to a bunch of objects all have this structure3729{3730UCHAR ucNumberOfObjects;3731UCHAR ucPadding[3];3732ATOM_OBJECT asObjects[1];3733}ATOM_OBJECT_TABLE;37343735typedef struct _ATOM_SRC_DST_TABLE_FOR_ONE_OBJECT //usSrcDstTableOffset pointing to this structure3736{3737UCHAR ucNumberOfSrc;3738USHORT usSrcObjectID[1];3739UCHAR ucNumberOfDst;3740USHORT usDstObjectID[1];3741}ATOM_SRC_DST_TABLE_FOR_ONE_OBJECT;374237433744//Two definitions below are for OPM on MXM module designs37453746#define EXT_HPDPIN_LUTINDEX_0 03747#define EXT_HPDPIN_LUTINDEX_1 13748#define EXT_HPDPIN_LUTINDEX_2 23749#define EXT_HPDPIN_LUTINDEX_3 33750#define EXT_HPDPIN_LUTINDEX_4 43751#define EXT_HPDPIN_LUTINDEX_5 53752#define EXT_HPDPIN_LUTINDEX_6 63753#define EXT_HPDPIN_LUTINDEX_7 73754#define MAX_NUMBER_OF_EXT_HPDPIN_LUT_ENTRIES (EXT_HPDPIN_LUTINDEX_7+1)37553756#define EXT_AUXDDC_LUTINDEX_0 03757#define EXT_AUXDDC_LUTINDEX_1 13758#define EXT_AUXDDC_LUTINDEX_2 23759#define EXT_AUXDDC_LUTINDEX_3 33760#define EXT_AUXDDC_LUTINDEX_4 43761#define EXT_AUXDDC_LUTINDEX_5 53762#define EXT_AUXDDC_LUTINDEX_6 63763#define EXT_AUXDDC_LUTINDEX_7 73764#define MAX_NUMBER_OF_EXT_AUXDDC_LUT_ENTRIES (EXT_AUXDDC_LUTINDEX_7+1)37653766//ucChannelMapping are defined as following3767//for DP connector, eDP, DP to VGA/LVDS3768//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 TX33769//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 TX33770//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 TX33771//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 TX33772typedef struct _ATOM_DP_CONN_CHANNEL_MAPPING3773{3774#if ATOM_BIG_ENDIAN3775UCHAR ucDP_Lane3_Source:2;3776UCHAR ucDP_Lane2_Source:2;3777UCHAR ucDP_Lane1_Source:2;3778UCHAR ucDP_Lane0_Source:2;3779#else3780UCHAR ucDP_Lane0_Source:2;3781UCHAR ucDP_Lane1_Source:2;3782UCHAR ucDP_Lane2_Source:2;3783UCHAR ucDP_Lane3_Source:2;3784#endif3785}ATOM_DP_CONN_CHANNEL_MAPPING;37863787//for DVI/HDMI, in dual link case, both links have to have same mapping.3788//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 TX33789//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 TX33790//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 TX33791//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 TX33792typedef struct _ATOM_DVI_CONN_CHANNEL_MAPPING3793{3794#if ATOM_BIG_ENDIAN3795UCHAR ucDVI_CLK_Source:2;3796UCHAR ucDVI_DATA0_Source:2;3797UCHAR ucDVI_DATA1_Source:2;3798UCHAR ucDVI_DATA2_Source:2;3799#else3800UCHAR ucDVI_DATA2_Source:2;3801UCHAR ucDVI_DATA1_Source:2;3802UCHAR ucDVI_DATA0_Source:2;3803UCHAR ucDVI_CLK_Source:2;3804#endif3805}ATOM_DVI_CONN_CHANNEL_MAPPING;38063807typedef struct _EXT_DISPLAY_PATH3808{3809USHORT usDeviceTag; //A bit vector to show what devices are supported3810USHORT usDeviceACPIEnum; //16bit device ACPI id.3811USHORT usDeviceConnector; //A physical connector for displays to plug in, using object connector definitions3812UCHAR ucExtAUXDDCLutIndex; //An index into external AUX/DDC channel LUT3813UCHAR ucExtHPDPINLutIndex; //An index into external HPD pin LUT3814USHORT usExtEncoderObjId; //external encoder object id3815union{3816UCHAR ucChannelMapping; // if ucChannelMapping=0, using default one to one mapping3817ATOM_DP_CONN_CHANNEL_MAPPING asDPMapping;3818ATOM_DVI_CONN_CHANNEL_MAPPING asDVIMapping;3819};3820UCHAR ucReserved;3821USHORT usReserved[2];3822}EXT_DISPLAY_PATH;38233824#define NUMBER_OF_UCHAR_FOR_GUID 163825#define MAX_NUMBER_OF_EXT_DISPLAY_PATH 738263827typedef struct _ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO3828{3829ATOM_COMMON_TABLE_HEADER sHeader;3830UCHAR ucGuid [NUMBER_OF_UCHAR_FOR_GUID]; // a GUID is a 16 byte long string3831EXT_DISPLAY_PATH sPath[MAX_NUMBER_OF_EXT_DISPLAY_PATH]; // total of fixed 7 entries.3832UCHAR ucChecksum; // a simple Checksum of the sum of whole structure equal to 0x0.3833UCHAR uc3DStereoPinId; // use for eDP panel3834UCHAR Reserved [6]; // for potential expansion3835}ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO;38363837//Related definitions, all records are different but they have a commond header3838typedef struct _ATOM_COMMON_RECORD_HEADER3839{3840UCHAR ucRecordType; //An emun to indicate the record type3841UCHAR ucRecordSize; //The size of the whole record in byte3842}ATOM_COMMON_RECORD_HEADER;384338443845#define ATOM_I2C_RECORD_TYPE 13846#define ATOM_HPD_INT_RECORD_TYPE 23847#define ATOM_OUTPUT_PROTECTION_RECORD_TYPE 33848#define ATOM_CONNECTOR_DEVICE_TAG_RECORD_TYPE 43849#define ATOM_CONNECTOR_DVI_EXT_INPUT_RECORD_TYPE 5 //Obsolete, switch to use GPIO_CNTL_RECORD_TYPE3850#define ATOM_ENCODER_FPGA_CONTROL_RECORD_TYPE 6 //Obsolete, switch to use GPIO_CNTL_RECORD_TYPE3851#define ATOM_CONNECTOR_CVTV_SHARE_DIN_RECORD_TYPE 73852#define ATOM_JTAG_RECORD_TYPE 8 //Obsolete, switch to use GPIO_CNTL_RECORD_TYPE3853#define ATOM_OBJECT_GPIO_CNTL_RECORD_TYPE 93854#define ATOM_ENCODER_DVO_CF_RECORD_TYPE 103855#define ATOM_CONNECTOR_CF_RECORD_TYPE 113856#define ATOM_CONNECTOR_HARDCODE_DTD_RECORD_TYPE 123857#define ATOM_CONNECTOR_PCIE_SUBCONNECTOR_RECORD_TYPE 133858#define ATOM_ROUTER_DDC_PATH_SELECT_RECORD_TYPE 143859#define ATOM_ROUTER_DATA_CLOCK_PATH_SELECT_RECORD_TYPE 153860#define ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE 16 //This is for the case when connectors are not known to object table3861#define ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE 17 //This is for the case when connectors are not known to object table3862#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 record3863#define ATOM_CONNECTOR_REMOTE_CAP_RECORD_TYPE 193864#define ATOM_ENCODER_CAP_RECORD_TYPE 20386538663867//Must be updated when new record type is added,equal to that record definition!3868#define ATOM_MAX_OBJECT_RECORD_NUMBER ATOM_ENCODER_CAP_RECORD_TYPE38693870typedef struct _ATOM_I2C_RECORD3871{3872ATOM_COMMON_RECORD_HEADER sheader;3873ATOM_I2C_ID_CONFIG sucI2cId;3874UCHAR ucI2CAddr; //The slave address, it's 0 when the record is attached to connector for DDC3875}ATOM_I2C_RECORD;38763877typedef struct _ATOM_HPD_INT_RECORD3878{3879ATOM_COMMON_RECORD_HEADER sheader;3880UCHAR ucHPDIntGPIOID; //Corresponding block in GPIO_PIN_INFO table gives the pin info3881UCHAR ucPlugged_PinState;3882}ATOM_HPD_INT_RECORD;388338843885typedef struct _ATOM_OUTPUT_PROTECTION_RECORD3886{3887ATOM_COMMON_RECORD_HEADER sheader;3888UCHAR ucProtectionFlag;3889UCHAR ucReserved;3890}ATOM_OUTPUT_PROTECTION_RECORD;38913892typedef struct _ATOM_CONNECTOR_DEVICE_TAG3893{3894ULONG ulACPIDeviceEnum; //Reserved for now3895USHORT usDeviceID; //This Id is same as "ATOM_DEVICE_XXX_SUPPORT"3896USHORT usPadding;3897}ATOM_CONNECTOR_DEVICE_TAG;38983899typedef struct _ATOM_CONNECTOR_DEVICE_TAG_RECORD3900{3901ATOM_COMMON_RECORD_HEADER sheader;3902UCHAR ucNumberOfDevice;3903UCHAR ucReserved;3904ATOM_CONNECTOR_DEVICE_TAG asDeviceTag[1]; //This Id is same as "ATOM_DEVICE_XXX_SUPPORT", 1 is only for allocation3905}ATOM_CONNECTOR_DEVICE_TAG_RECORD;390639073908typedef struct _ATOM_CONNECTOR_DVI_EXT_INPUT_RECORD3909{3910ATOM_COMMON_RECORD_HEADER sheader;3911UCHAR ucConfigGPIOID;3912UCHAR ucConfigGPIOState; //Set to 1 when it's active high to enable external flow in3913UCHAR ucFlowinGPIPID;3914UCHAR ucExtInGPIPID;3915}ATOM_CONNECTOR_DVI_EXT_INPUT_RECORD;39163917typedef struct _ATOM_ENCODER_FPGA_CONTROL_RECORD3918{3919ATOM_COMMON_RECORD_HEADER sheader;3920UCHAR ucCTL1GPIO_ID;3921UCHAR ucCTL1GPIOState; //Set to 1 when it's active high3922UCHAR ucCTL2GPIO_ID;3923UCHAR ucCTL2GPIOState; //Set to 1 when it's active high3924UCHAR ucCTL3GPIO_ID;3925UCHAR ucCTL3GPIOState; //Set to 1 when it's active high3926UCHAR ucCTLFPGA_IN_ID;3927UCHAR ucPadding[3];3928}ATOM_ENCODER_FPGA_CONTROL_RECORD;39293930typedef struct _ATOM_CONNECTOR_CVTV_SHARE_DIN_RECORD3931{3932ATOM_COMMON_RECORD_HEADER sheader;3933UCHAR ucGPIOID; //Corresponding block in GPIO_PIN_INFO table gives the pin info3934UCHAR ucTVActiveState; //Indicating when the pin==0 or 1 when TV is connected3935}ATOM_CONNECTOR_CVTV_SHARE_DIN_RECORD;39363937typedef struct _ATOM_JTAG_RECORD3938{3939ATOM_COMMON_RECORD_HEADER sheader;3940UCHAR ucTMSGPIO_ID;3941UCHAR ucTMSGPIOState; //Set to 1 when it's active high3942UCHAR ucTCKGPIO_ID;3943UCHAR ucTCKGPIOState; //Set to 1 when it's active high3944UCHAR ucTDOGPIO_ID;3945UCHAR ucTDOGPIOState; //Set to 1 when it's active high3946UCHAR ucTDIGPIO_ID;3947UCHAR ucTDIGPIOState; //Set to 1 when it's active high3948UCHAR ucPadding[2];3949}ATOM_JTAG_RECORD;395039513952//The following generic object gpio pin control record type will replace JTAG_RECORD/FPGA_CONTROL_RECORD/DVI_EXT_INPUT_RECORD above gradually3953typedef struct _ATOM_GPIO_PIN_CONTROL_PAIR3954{3955UCHAR ucGPIOID; // GPIO_ID, find the corresponding ID in GPIO_LUT table3956UCHAR ucGPIO_PinState; // Pin state showing how to set-up the pin3957}ATOM_GPIO_PIN_CONTROL_PAIR;39583959typedef struct _ATOM_OBJECT_GPIO_CNTL_RECORD3960{3961ATOM_COMMON_RECORD_HEADER sheader;3962UCHAR ucFlags; // Future expnadibility3963UCHAR ucNumberOfPins; // Number of GPIO pins used to control the object3964ATOM_GPIO_PIN_CONTROL_PAIR asGpio[1]; // the real gpio pin pair determined by number of pins ucNumberOfPins3965}ATOM_OBJECT_GPIO_CNTL_RECORD;39663967//Definitions for GPIO pin state3968#define GPIO_PIN_TYPE_INPUT 0x003969#define GPIO_PIN_TYPE_OUTPUT 0x103970#define GPIO_PIN_TYPE_HW_CONTROL 0x2039713972//For GPIO_PIN_TYPE_OUTPUT the following is defined3973#define GPIO_PIN_OUTPUT_STATE_MASK 0x013974#define GPIO_PIN_OUTPUT_STATE_SHIFT 03975#define GPIO_PIN_STATE_ACTIVE_LOW 0x03976#define GPIO_PIN_STATE_ACTIVE_HIGH 0x139773978// Indexes to GPIO array in GLSync record3979#define ATOM_GPIO_INDEX_GLSYNC_REFCLK 03980#define ATOM_GPIO_INDEX_GLSYNC_HSYNC 13981#define ATOM_GPIO_INDEX_GLSYNC_VSYNC 23982#define ATOM_GPIO_INDEX_GLSYNC_SWAP_REQ 33983#define ATOM_GPIO_INDEX_GLSYNC_SWAP_GNT 43984#define ATOM_GPIO_INDEX_GLSYNC_INTERRUPT 53985#define ATOM_GPIO_INDEX_GLSYNC_V_RESET 63986#define ATOM_GPIO_INDEX_GLSYNC_MAX 739873988typedef struct _ATOM_ENCODER_DVO_CF_RECORD3989{3990ATOM_COMMON_RECORD_HEADER sheader;3991ULONG ulStrengthControl; // DVOA strength control for CF3992UCHAR ucPadding[2];3993}ATOM_ENCODER_DVO_CF_RECORD;39943995// Bit maps for ATOM_ENCODER_CAP_RECORD.ucEncoderCap3996#define ATOM_ENCODER_CAP_RECORD_HBR2 0x01 // DP1.2 HBR2 is supported by this path39973998typedef struct _ATOM_ENCODER_CAP_RECORD3999{4000ATOM_COMMON_RECORD_HEADER sheader;4001union {4002USHORT usEncoderCap;4003struct {4004#if ATOM_BIG_ENDIAN4005USHORT usReserved:15; // Bit1-15 may be defined for other capability in future4006USHORT usHBR2Cap:1; // Bit0 is for DP1.2 HBR2 capability.4007#else4008USHORT usHBR2Cap:1; // Bit0 is for DP1.2 HBR2 capability.4009USHORT usReserved:15; // Bit1-15 may be defined for other capability in future4010#endif4011};4012};4013}ATOM_ENCODER_CAP_RECORD;40144015// value for ATOM_CONNECTOR_CF_RECORD.ucConnectedDvoBundle4016#define ATOM_CONNECTOR_CF_RECORD_CONNECTED_UPPER12BITBUNDLEA 14017#define ATOM_CONNECTOR_CF_RECORD_CONNECTED_LOWER12BITBUNDLEB 240184019typedef struct _ATOM_CONNECTOR_CF_RECORD4020{4021ATOM_COMMON_RECORD_HEADER sheader;4022USHORT usMaxPixClk;4023UCHAR ucFlowCntlGpioId;4024UCHAR ucSwapCntlGpioId;4025UCHAR ucConnectedDvoBundle;4026UCHAR ucPadding;4027}ATOM_CONNECTOR_CF_RECORD;40284029typedef struct _ATOM_CONNECTOR_HARDCODE_DTD_RECORD4030{4031ATOM_COMMON_RECORD_HEADER sheader;4032ATOM_DTD_FORMAT asTiming;4033}ATOM_CONNECTOR_HARDCODE_DTD_RECORD;40344035typedef struct _ATOM_CONNECTOR_PCIE_SUBCONNECTOR_RECORD4036{4037ATOM_COMMON_RECORD_HEADER sheader; //ATOM_CONNECTOR_PCIE_SUBCONNECTOR_RECORD_TYPE4038UCHAR ucSubConnectorType; //CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D|X_ID_DUAL_LINK_DVI_D|HDMI_TYPE_A4039UCHAR ucReserved;4040}ATOM_CONNECTOR_PCIE_SUBCONNECTOR_RECORD;404140424043typedef struct _ATOM_ROUTER_DDC_PATH_SELECT_RECORD4044{4045ATOM_COMMON_RECORD_HEADER sheader;4046UCHAR ucMuxType; //decide the number of ucMuxState, =0, no pin state, =1: single state with complement, >1: multiple state4047UCHAR ucMuxControlPin;4048UCHAR ucMuxState[2]; //for alligment purpose4049}ATOM_ROUTER_DDC_PATH_SELECT_RECORD;40504051typedef struct _ATOM_ROUTER_DATA_CLOCK_PATH_SELECT_RECORD4052{4053ATOM_COMMON_RECORD_HEADER sheader;4054UCHAR ucMuxType;4055UCHAR ucMuxControlPin;4056UCHAR ucMuxState[2]; //for alligment purpose4057}ATOM_ROUTER_DATA_CLOCK_PATH_SELECT_RECORD;40584059// define ucMuxType4060#define ATOM_ROUTER_MUX_PIN_STATE_MASK 0x0f4061#define ATOM_ROUTER_MUX_PIN_SINGLE_STATE_COMPLEMENT 0x0140624063typedef struct _ATOM_CONNECTOR_HPDPIN_LUT_RECORD //record for ATOM_CONNECTOR_HPDPIN_LUT_RECORD_TYPE4064{4065ATOM_COMMON_RECORD_HEADER sheader;4066UCHAR ucHPDPINMap[MAX_NUMBER_OF_EXT_HPDPIN_LUT_ENTRIES]; //An fixed size array which maps external pins to internal GPIO_PIN_INFO table4067}ATOM_CONNECTOR_HPDPIN_LUT_RECORD;40684069typedef struct _ATOM_CONNECTOR_AUXDDC_LUT_RECORD //record for ATOM_CONNECTOR_AUXDDC_LUT_RECORD_TYPE4070{4071ATOM_COMMON_RECORD_HEADER sheader;4072ATOM_I2C_ID_CONFIG ucAUXDDCMap[MAX_NUMBER_OF_EXT_AUXDDC_LUT_ENTRIES]; //An fixed size array which maps external pins to internal DDC ID4073}ATOM_CONNECTOR_AUXDDC_LUT_RECORD;40744075typedef struct _ATOM_OBJECT_LINK_RECORD4076{4077ATOM_COMMON_RECORD_HEADER sheader;4078USHORT usObjectID; //could be connector, encorder or other object in object.h4079}ATOM_OBJECT_LINK_RECORD;40804081typedef struct _ATOM_CONNECTOR_REMOTE_CAP_RECORD4082{4083ATOM_COMMON_RECORD_HEADER sheader;4084USHORT usReserved;4085}ATOM_CONNECTOR_REMOTE_CAP_RECORD;40864087/****************************************************************************/4088// ASIC voltage data table4089/****************************************************************************/4090typedef struct _ATOM_VOLTAGE_INFO_HEADER4091{4092USHORT usVDDCBaseLevel; //In number of 50mv unit4093USHORT usReserved; //For possible extension table offset4094UCHAR ucNumOfVoltageEntries;4095UCHAR ucBytesPerVoltageEntry;4096UCHAR ucVoltageStep; //Indicating in how many mv increament is one step, 0.5mv unit4097UCHAR ucDefaultVoltageEntry;4098UCHAR ucVoltageControlI2cLine;4099UCHAR ucVoltageControlAddress;4100UCHAR ucVoltageControlOffset;4101}ATOM_VOLTAGE_INFO_HEADER;41024103typedef struct _ATOM_VOLTAGE_INFO4104{4105ATOM_COMMON_TABLE_HEADER sHeader;4106ATOM_VOLTAGE_INFO_HEADER viHeader;4107UCHAR ucVoltageEntries[64]; //64 is for allocation, the actual number of entry is present at ucNumOfVoltageEntries*ucBytesPerVoltageEntry4108}ATOM_VOLTAGE_INFO;410941104111typedef struct _ATOM_VOLTAGE_FORMULA4112{4113USHORT usVoltageBaseLevel; // In number of 1mv unit4114USHORT usVoltageStep; // Indicating in how many mv increament is one step, 1mv unit4115UCHAR ucNumOfVoltageEntries; // Number of Voltage Entry, which indicate max Voltage4116UCHAR ucFlag; // bit0=0 :step is 1mv =1 0.5mv4117UCHAR ucBaseVID; // if there is no lookup table, VID= BaseVID + ( Vol - BaseLevle ) /VoltageStep4118UCHAR ucReserved;4119UCHAR ucVIDAdjustEntries[32]; // 32 is for allocation, the actual number of entry is present at ucNumOfVoltageEntries4120}ATOM_VOLTAGE_FORMULA;41214122typedef struct _VOLTAGE_LUT_ENTRY4123{4124USHORT usVoltageCode; // The Voltage ID, either GPIO or I2C code4125USHORT usVoltageValue; // The corresponding Voltage Value, in mV4126}VOLTAGE_LUT_ENTRY;41274128typedef struct _ATOM_VOLTAGE_FORMULA_V24129{4130UCHAR ucNumOfVoltageEntries; // Number of Voltage Entry, which indicate max Voltage4131UCHAR ucReserved[3];4132VOLTAGE_LUT_ENTRY asVIDAdjustEntries[32];// 32 is for allocation, the actual number of entries is in ucNumOfVoltageEntries4133}ATOM_VOLTAGE_FORMULA_V2;41344135typedef struct _ATOM_VOLTAGE_CONTROL4136{4137UCHAR ucVoltageControlId; //Indicate it is controlled by I2C or GPIO or HW state machine4138UCHAR ucVoltageControlI2cLine;4139UCHAR ucVoltageControlAddress;4140UCHAR ucVoltageControlOffset;4141USHORT usGpioPin_AIndex; //GPIO_PAD register index4142UCHAR ucGpioPinBitShift[9]; //at most 8 pin support 255 VIDs, termintate with 0xff4143UCHAR ucReserved;4144}ATOM_VOLTAGE_CONTROL;41454146// Define ucVoltageControlId4147#define VOLTAGE_CONTROLLED_BY_HW 0x004148#define VOLTAGE_CONTROLLED_BY_I2C_MASK 0x7F4149#define VOLTAGE_CONTROLLED_BY_GPIO 0x804150#define VOLTAGE_CONTROL_ID_LM64 0x01 //I2C control, used for R5xx Core Voltage4151#define VOLTAGE_CONTROL_ID_DAC 0x02 //I2C control, used for R5xx/R6xx MVDDC,MVDDQ or VDDCI4152#define VOLTAGE_CONTROL_ID_VT116xM 0x03 //I2C control, used for R6xx Core Voltage4153#define VOLTAGE_CONTROL_ID_DS4402 0x044154#define VOLTAGE_CONTROL_ID_UP6266 0x054155#define VOLTAGE_CONTROL_ID_SCORPIO 0x064156#define VOLTAGE_CONTROL_ID_VT1556M 0x074157#define VOLTAGE_CONTROL_ID_CHL822x 0x084158#define VOLTAGE_CONTROL_ID_VT1586M 0x0941594160typedef struct _ATOM_VOLTAGE_OBJECT4161{4162UCHAR ucVoltageType; //Indicate Voltage Source: VDDC, MVDDC, MVDDQ or MVDDCI4163UCHAR ucSize; //Size of Object4164ATOM_VOLTAGE_CONTROL asControl; //describ how to control4165ATOM_VOLTAGE_FORMULA asFormula; //Indicate How to convert real Voltage to VID4166}ATOM_VOLTAGE_OBJECT;41674168typedef struct _ATOM_VOLTAGE_OBJECT_V24169{4170UCHAR ucVoltageType; //Indicate Voltage Source: VDDC, MVDDC, MVDDQ or MVDDCI4171UCHAR ucSize; //Size of Object4172ATOM_VOLTAGE_CONTROL asControl; //describ how to control4173ATOM_VOLTAGE_FORMULA_V2 asFormula; //Indicate How to convert real Voltage to VID4174}ATOM_VOLTAGE_OBJECT_V2;41754176typedef struct _ATOM_VOLTAGE_OBJECT_INFO4177{4178ATOM_COMMON_TABLE_HEADER sHeader;4179ATOM_VOLTAGE_OBJECT asVoltageObj[3]; //Info for Voltage control4180}ATOM_VOLTAGE_OBJECT_INFO;41814182typedef struct _ATOM_VOLTAGE_OBJECT_INFO_V24183{4184ATOM_COMMON_TABLE_HEADER sHeader;4185ATOM_VOLTAGE_OBJECT_V2 asVoltageObj[3]; //Info for Voltage control4186}ATOM_VOLTAGE_OBJECT_INFO_V2;41874188typedef struct _ATOM_LEAKID_VOLTAGE4189{4190UCHAR ucLeakageId;4191UCHAR ucReserved;4192USHORT usVoltage;4193}ATOM_LEAKID_VOLTAGE;41944195typedef struct _ATOM_ASIC_PROFILE_VOLTAGE4196{4197UCHAR ucProfileId;4198UCHAR ucReserved;4199USHORT usSize;4200USHORT usEfuseSpareStartAddr;4201USHORT usFuseIndex[8]; //from LSB to MSB, Max 8bit,end of 0xffff if less than 8 efuse id,4202ATOM_LEAKID_VOLTAGE asLeakVol[2]; //Leakid and relatd voltage4203}ATOM_ASIC_PROFILE_VOLTAGE;42044205//ucProfileId4206#define ATOM_ASIC_PROFILE_ID_EFUSE_VOLTAGE 14207#define ATOM_ASIC_PROFILE_ID_EFUSE_PERFORMANCE_VOLTAGE 14208#define ATOM_ASIC_PROFILE_ID_EFUSE_THERMAL_VOLTAGE 242094210typedef struct _ATOM_ASIC_PROFILING_INFO4211{4212ATOM_COMMON_TABLE_HEADER asHeader;4213ATOM_ASIC_PROFILE_VOLTAGE asVoltage;4214}ATOM_ASIC_PROFILING_INFO;42154216typedef struct _ATOM_POWER_SOURCE_OBJECT4217{4218UCHAR ucPwrSrcId; // Power source4219UCHAR ucPwrSensorType; // GPIO, I2C or none4220UCHAR ucPwrSensId; // if GPIO detect, it is GPIO id, if I2C detect, it is I2C id4221UCHAR ucPwrSensSlaveAddr; // Slave address if I2C detect4222UCHAR ucPwrSensRegIndex; // I2C register Index if I2C detect4223UCHAR ucPwrSensRegBitMask; // detect which bit is used if I2C detect4224UCHAR ucPwrSensActiveState; // high active or low active4225UCHAR ucReserve[3]; // reserve4226USHORT usSensPwr; // in unit of watt4227}ATOM_POWER_SOURCE_OBJECT;42284229typedef struct _ATOM_POWER_SOURCE_INFO4230{4231ATOM_COMMON_TABLE_HEADER asHeader;4232UCHAR asPwrbehave[16];4233ATOM_POWER_SOURCE_OBJECT asPwrObj[1];4234}ATOM_POWER_SOURCE_INFO;423542364237//Define ucPwrSrcId4238#define POWERSOURCE_PCIE_ID1 0x004239#define POWERSOURCE_6PIN_CONNECTOR_ID1 0x014240#define POWERSOURCE_8PIN_CONNECTOR_ID1 0x024241#define POWERSOURCE_6PIN_CONNECTOR_ID2 0x044242#define POWERSOURCE_8PIN_CONNECTOR_ID2 0x0842434244//define ucPwrSensorId4245#define POWER_SENSOR_ALWAYS 0x004246#define POWER_SENSOR_GPIO 0x014247#define POWER_SENSOR_I2C 0x0242484249typedef struct _ATOM_CLK_VOLT_CAPABILITY4250{4251ULONG ulVoltageIndex; // The Voltage Index indicated by FUSE, same voltage index shared with SCLK DPM fuse table4252ULONG ulMaximumSupportedCLK; // Maximum clock supported with specified voltage index, unit in 10kHz4253}ATOM_CLK_VOLT_CAPABILITY;42544255typedef struct _ATOM_AVAILABLE_SCLK_LIST4256{4257ULONG ulSupportedSCLK; // Maximum clock supported with specified voltage index, unit in 10kHz4258USHORT usVoltageIndex; // The Voltage Index indicated by FUSE for specified SCLK4259USHORT usVoltageID; // The Voltage ID indicated by FUSE for specified SCLK4260}ATOM_AVAILABLE_SCLK_LIST;42614262// ATOM_INTEGRATED_SYSTEM_INFO_V6 ulSystemConfig cap definition4263#define ATOM_IGP_INFO_V6_SYSTEM_CONFIG__PCIE_POWER_GATING_ENABLE 1 // refer to ulSystemConfig bit[0]42644265// this IntegrateSystemInfoTable is used for Liano/Ontario APU4266typedef struct _ATOM_INTEGRATED_SYSTEM_INFO_V64267{4268ATOM_COMMON_TABLE_HEADER sHeader;4269ULONG ulBootUpEngineClock;4270ULONG ulDentistVCOFreq;4271ULONG ulBootUpUMAClock;4272ATOM_CLK_VOLT_CAPABILITY sDISPCLK_Voltage[4];4273ULONG ulBootUpReqDisplayVector;4274ULONG ulOtherDisplayMisc;4275ULONG ulGPUCapInfo;4276ULONG ulSB_MMIO_Base_Addr;4277USHORT usRequestedPWMFreqInHz;4278UCHAR ucHtcTmpLmt;4279UCHAR ucHtcHystLmt;4280ULONG ulMinEngineClock;4281ULONG ulSystemConfig;4282ULONG ulCPUCapInfo;4283USHORT usNBP0Voltage;4284USHORT usNBP1Voltage;4285USHORT usBootUpNBVoltage;4286USHORT usExtDispConnInfoOffset;4287USHORT usPanelRefreshRateRange;4288UCHAR ucMemoryType;4289UCHAR ucUMAChannelNumber;4290ULONG ulCSR_M3_ARB_CNTL_DEFAULT[10];4291ULONG ulCSR_M3_ARB_CNTL_UVD[10];4292ULONG ulCSR_M3_ARB_CNTL_FS3D[10];4293ATOM_AVAILABLE_SCLK_LIST sAvail_SCLK[5];4294ULONG ulGMCRestoreResetTime;4295ULONG ulMinimumNClk;4296ULONG ulIdleNClk;4297ULONG ulDDR_DLL_PowerUpTime;4298ULONG ulDDR_PLL_PowerUpTime;4299USHORT usPCIEClkSSPercentage;4300USHORT usPCIEClkSSType;4301USHORT usLvdsSSPercentage;4302USHORT usLvdsSSpreadRateIn10Hz;4303USHORT usHDMISSPercentage;4304USHORT usHDMISSpreadRateIn10Hz;4305USHORT usDVISSPercentage;4306USHORT usDVISSpreadRateIn10Hz;4307ULONG ulReserved3[21];4308ATOM_EXTERNAL_DISPLAY_CONNECTION_INFO sExtDispConnInfo;4309}ATOM_INTEGRATED_SYSTEM_INFO_V6;43104311// ulGPUCapInfo4312#define INTEGRATED_SYSTEM_INFO_V6_GPUCAPINFO__TMDSHDMI_COHERENT_SINGLEPLL_MODE 0x014313#define INTEGRATED_SYSTEM_INFO_V6_GPUCAPINFO__DISABLE_AUX_HW_MODE_DETECTION 0x0843144315// ulOtherDisplayMisc4316#define INTEGRATED_SYSTEM_INFO__GET_EDID_CALLBACK_FUNC_SUPPORT 0x01431743184319/**********************************************************************************************************************4320ATOM_INTEGRATED_SYSTEM_INFO_V6 Description4321ulBootUpEngineClock: VBIOS bootup Engine clock frequency, in 10kHz unit. if it is equal 0, then VBIOS use pre-defined bootup engine clock4322ulDentistVCOFreq: Dentist VCO clock in 10kHz unit.4323ulBootUpUMAClock: System memory boot up clock frequency in 10Khz unit.4324sDISPCLK_Voltage: Report Display clock voltage requirement.43254326ulBootUpReqDisplayVector: VBIOS boot up display IDs, following are supported devices in Liano/Ontaio projects:4327ATOM_DEVICE_CRT1_SUPPORT 0x00014328ATOM_DEVICE_CRT2_SUPPORT 0x00104329ATOM_DEVICE_DFP1_SUPPORT 0x00084330ATOM_DEVICE_DFP6_SUPPORT 0x00404331ATOM_DEVICE_DFP2_SUPPORT 0x00804332ATOM_DEVICE_DFP3_SUPPORT 0x02004333ATOM_DEVICE_DFP4_SUPPORT 0x04004334ATOM_DEVICE_DFP5_SUPPORT 0x08004335ATOM_DEVICE_LCD1_SUPPORT 0x00024336ulOtherDisplayMisc: Other display related flags, not defined yet.4337ulGPUCapInfo: bit[0]=0: TMDS/HDMI Coherent Mode use cascade PLL mode.4338=1: TMDS/HDMI Coherent Mode use signel PLL mode.4339bit[3]=0: Enable HW AUX mode detection logic4340=1: Disable HW AUX mode dettion logic4341ulSB_MMIO_Base_Addr: Physical Base address to SB MMIO space. Driver needs to initialize it for SMU usage.43424343usRequestedPWMFreqInHz: When it's set to 0x0 by SBIOS: the LCD BackLight is not controlled by GPU(SW).4344Any 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;43454346When it's set to a non-zero frequency, the BackLight is controlled by GPU (SW) in one of two ways below:43471. SW uses the GPU BL PWM output to control the BL, in chis case, this non-zero frequency determines what freq GPU should use;4348VBIOS will set up proper PWM frequency and ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==1,as the result,4349Changing BL using VBIOS function is functional in both driver and non-driver present environment;4350and enabling VariBri under the driver environment from PP table is optional.435143522. SW uses other means to control BL (like DPCD),this non-zero frequency serves as a flag only indicating4353that BL control from GPU is expected.4354VBIOS will NOT set up PWM frequency but make ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU==14355Changing BL using VBIOS function could be functional in both driver and non-driver present environment,but4356it's per platform4357and enabling VariBri under the driver environment from PP table is optional.43584359ucHtcTmpLmt: Refer to D18F3x64 bit[22:16], HtcTmpLmt.4360Threshold on value to enter HTC_active state.4361ucHtcHystLmt: Refer to D18F3x64 bit[27:24], HtcHystLmt.4362To calculate threshold off value to exit HTC_active state, which is Threshold on vlaue minus ucHtcHystLmt.4363ulMinEngineClock: Minimum SCLK allowed in 10kHz unit. This is calculated based on WRCK Fuse settings.4364ulSystemConfig: Bit[0]=0: PCIE Power Gating Disabled4365=1: PCIE Power Gating Enabled4366Bit[1]=0: DDR-DLL shut-down feature disabled.43671: DDR-DLL shut-down feature enabled.4368Bit[2]=0: DDR-PLL Power down feature disabled.43691: DDR-PLL Power down feature enabled.4370ulCPUCapInfo: TBD4371usNBP0Voltage: VID for voltage on NB P0 State4372usNBP1Voltage: VID for voltage on NB P1 State4373usBootUpNBVoltage: Voltage Index of GNB voltage configured by SBIOS, which is suffcient to support VBIOS DISPCLK requirement.4374usExtDispConnInfoOffset: Offset to sExtDispConnInfo inside the structure4375usPanelRefreshRateRange: Bit vector for LCD supported refresh rate range. If DRR is requestd by the platform, at least two bits need to be set4376to indicate a range.4377SUPPORTED_LCD_REFRESHRATE_30Hz 0x00044378SUPPORTED_LCD_REFRESHRATE_40Hz 0x00084379SUPPORTED_LCD_REFRESHRATE_50Hz 0x00104380SUPPORTED_LCD_REFRESHRATE_60Hz 0x00204381ucMemoryType: [3:0]=1:DDR1;=2:DDR2;=3:DDR3.[7:4] is reserved.4382ucUMAChannelNumber: System memory channel numbers.4383ulCSR_M3_ARB_CNTL_DEFAULT[10]: Arrays with values for CSR M3 arbiter for default4384ulCSR_M3_ARB_CNTL_UVD[10]: Arrays with values for CSR M3 arbiter for UVD playback.4385ulCSR_M3_ARB_CNTL_FS3D[10]: Arrays with values for CSR M3 arbiter for Full Screen 3D applications.4386sAvail_SCLK[5]: Arrays to provide available list of SLCK and corresponding voltage, order from low to high4387ulGMCRestoreResetTime: GMC power restore and GMC reset time to calculate data reconnection latency. Unit in ns.4388ulMinimumNClk: Minimum NCLK speed among all NB-Pstates to calcualte data reconnection latency. Unit in 10kHz.4389ulIdleNClk: NCLK speed while memory runs in self-refresh state. Unit in 10kHz.4390ulDDR_DLL_PowerUpTime: DDR PHY DLL power up time. Unit in ns.4391ulDDR_PLL_PowerUpTime: DDR PHY PLL power up time. Unit in ns.4392usPCIEClkSSPercentage: PCIE Clock Spread Spectrum Percentage in unit 0.01%; 100 mean 1%.4393usPCIEClkSSType: PCIE Clock Spread Spectrum Type. 0 for Down spread(default); 1 for Center spread.4394usLvdsSSPercentage: LVDS panel ( not include eDP ) Spread Spectrum Percentage in unit of 0.01%, =0, use VBIOS default setting.4395usLvdsSSpreadRateIn10Hz: LVDS panel ( not include eDP ) Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting.4396usHDMISSPercentage: HDMI Spread Spectrum Percentage in unit 0.01%; 100 mean 1%, =0, use VBIOS default setting.4397usHDMISSpreadRateIn10Hz: HDMI Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting.4398usDVISSPercentage: DVI Spread Spectrum Percentage in unit 0.01%; 100 mean 1%, =0, use VBIOS default setting.4399usDVISSpreadRateIn10Hz: DVI Spread Spectrum frequency in unit of 10Hz, =0, use VBIOS default setting.4400**********************************************************************************************************************/44014402/**************************************************************************/4403// This portion is only used when ext thermal chip or engine/memory clock SS chip is populated on a design4404//Memory SS Info Table4405//Define Memory Clock SS chip ID4406#define ICS91719 14407#define ICS91720 244084409//Define one structure to inform SW a "block of data" writing to external SS chip via I2C protocol4410typedef struct _ATOM_I2C_DATA_RECORD4411{4412UCHAR ucNunberOfBytes; //Indicates how many bytes SW needs to write to the external ASIC for one block, besides to "Start" and "Stop"4413UCHAR ucI2CData[1]; //I2C data in bytes, should be less than 16 bytes usually4414}ATOM_I2C_DATA_RECORD;441544164417//Define one structure to inform SW how many blocks of data writing to external SS chip via I2C protocol, in addition to other information4418typedef struct _ATOM_I2C_DEVICE_SETUP_INFO4419{4420ATOM_I2C_ID_CONFIG_ACCESS sucI2cId; //I2C line and HW/SW assisted cap.4421UCHAR ucSSChipID; //SS chip being used4422UCHAR ucSSChipSlaveAddr; //Slave Address to set up this SS chip4423UCHAR ucNumOfI2CDataRecords; //number of data block4424ATOM_I2C_DATA_RECORD asI2CData[1];4425}ATOM_I2C_DEVICE_SETUP_INFO;44264427//==========================================================================================4428typedef struct _ATOM_ASIC_MVDD_INFO4429{4430ATOM_COMMON_TABLE_HEADER sHeader;4431ATOM_I2C_DEVICE_SETUP_INFO asI2CSetup[1];4432}ATOM_ASIC_MVDD_INFO;44334434//==========================================================================================4435#define ATOM_MCLK_SS_INFO ATOM_ASIC_MVDD_INFO44364437//==========================================================================================4438/**************************************************************************/44394440typedef struct _ATOM_ASIC_SS_ASSIGNMENT4441{4442ULONG ulTargetClockRange; //Clock Out frequence (VCO ), in unit of 10Khz4443USHORT usSpreadSpectrumPercentage; //in unit of 0.01%4444USHORT usSpreadRateInKhz; //in unit of kHz, modulation freq4445UCHAR ucClockIndication; //Indicate which clock source needs SS4446UCHAR ucSpreadSpectrumMode; //Bit1=0 Down Spread,=1 Center Spread.4447UCHAR ucReserved[2];4448}ATOM_ASIC_SS_ASSIGNMENT;44494450//Define ucClockIndication, SW uses the IDs below to search if the SS is required/enabled on a clock branch/signal type.4451//SS is not required or enabled if a match is not found.4452#define ASIC_INTERNAL_MEMORY_SS 14453#define ASIC_INTERNAL_ENGINE_SS 24454#define ASIC_INTERNAL_UVD_SS 34455#define ASIC_INTERNAL_SS_ON_TMDS 44456#define ASIC_INTERNAL_SS_ON_HDMI 54457#define ASIC_INTERNAL_SS_ON_LVDS 64458#define ASIC_INTERNAL_SS_ON_DP 74459#define ASIC_INTERNAL_SS_ON_DCPLL 84460#define ASIC_EXTERNAL_SS_ON_DP_CLOCK 944614462typedef struct _ATOM_ASIC_SS_ASSIGNMENT_V24463{4464ULONG ulTargetClockRange; //For mem/engine/uvd, Clock Out frequence (VCO ), in unit of 10Khz4465//For TMDS/HDMI/LVDS, it is pixel clock , for DP, it is link clock ( 27000 or 16200 )4466USHORT usSpreadSpectrumPercentage; //in unit of 0.01%4467USHORT usSpreadRateIn10Hz; //in unit of 10Hz, modulation freq4468UCHAR ucClockIndication; //Indicate which clock source needs SS4469UCHAR ucSpreadSpectrumMode; //Bit0=0 Down Spread,=1 Center Spread, bit1=0: internal SS bit1=1: external SS4470UCHAR ucReserved[2];4471}ATOM_ASIC_SS_ASSIGNMENT_V2;44724473//ucSpreadSpectrumMode4474//#define ATOM_SS_DOWN_SPREAD_MODE_MASK 0x000000004475//#define ATOM_SS_DOWN_SPREAD_MODE 0x000000004476//#define ATOM_SS_CENTRE_SPREAD_MODE_MASK 0x000000014477//#define ATOM_SS_CENTRE_SPREAD_MODE 0x000000014478//#define ATOM_INTERNAL_SS_MASK 0x000000004479//#define ATOM_EXTERNAL_SS_MASK 0x0000000244804481typedef struct _ATOM_ASIC_INTERNAL_SS_INFO4482{4483ATOM_COMMON_TABLE_HEADER sHeader;4484ATOM_ASIC_SS_ASSIGNMENT asSpreadSpectrum[4];4485}ATOM_ASIC_INTERNAL_SS_INFO;44864487typedef struct _ATOM_ASIC_INTERNAL_SS_INFO_V24488{4489ATOM_COMMON_TABLE_HEADER sHeader;4490ATOM_ASIC_SS_ASSIGNMENT_V2 asSpreadSpectrum[1]; //this is point only.4491}ATOM_ASIC_INTERNAL_SS_INFO_V2;44924493typedef struct _ATOM_ASIC_SS_ASSIGNMENT_V34494{4495ULONG ulTargetClockRange; //For mem/engine/uvd, Clock Out frequence (VCO ), in unit of 10Khz4496//For TMDS/HDMI/LVDS, it is pixel clock , for DP, it is link clock ( 27000 or 16200 )4497USHORT usSpreadSpectrumPercentage; //in unit of 0.01%4498USHORT usSpreadRateIn10Hz; //in unit of 10Hz, modulation freq4499UCHAR ucClockIndication; //Indicate which clock source needs SS4500UCHAR ucSpreadSpectrumMode; //Bit0=0 Down Spread,=1 Center Spread, bit1=0: internal SS bit1=1: external SS4501UCHAR ucReserved[2];4502}ATOM_ASIC_SS_ASSIGNMENT_V3;45034504typedef struct _ATOM_ASIC_INTERNAL_SS_INFO_V34505{4506ATOM_COMMON_TABLE_HEADER sHeader;4507ATOM_ASIC_SS_ASSIGNMENT_V3 asSpreadSpectrum[1]; //this is pointer only.4508}ATOM_ASIC_INTERNAL_SS_INFO_V3;450945104511//==============================Scratch Pad Definition Portion===============================4512#define ATOM_DEVICE_CONNECT_INFO_DEF 04513#define ATOM_ROM_LOCATION_DEF 14514#define ATOM_TV_STANDARD_DEF 24515#define ATOM_ACTIVE_INFO_DEF 34516#define ATOM_LCD_INFO_DEF 44517#define ATOM_DOS_REQ_INFO_DEF 54518#define ATOM_ACC_CHANGE_INFO_DEF 64519#define ATOM_DOS_MODE_INFO_DEF 74520#define ATOM_I2C_CHANNEL_STATUS_DEF 84521#define ATOM_I2C_CHANNEL_STATUS1_DEF 9452245234524// BIOS_0_SCRATCH Definition4525#define ATOM_S0_CRT1_MONO 0x00000001L4526#define ATOM_S0_CRT1_COLOR 0x00000002L4527#define ATOM_S0_CRT1_MASK (ATOM_S0_CRT1_MONO+ATOM_S0_CRT1_COLOR)45284529#define ATOM_S0_TV1_COMPOSITE_A 0x00000004L4530#define ATOM_S0_TV1_SVIDEO_A 0x00000008L4531#define ATOM_S0_TV1_MASK_A (ATOM_S0_TV1_COMPOSITE_A+ATOM_S0_TV1_SVIDEO_A)45324533#define ATOM_S0_CV_A 0x00000010L4534#define ATOM_S0_CV_DIN_A 0x00000020L4535#define ATOM_S0_CV_MASK_A (ATOM_S0_CV_A+ATOM_S0_CV_DIN_A)453645374538#define ATOM_S0_CRT2_MONO 0x00000100L4539#define ATOM_S0_CRT2_COLOR 0x00000200L4540#define ATOM_S0_CRT2_MASK (ATOM_S0_CRT2_MONO+ATOM_S0_CRT2_COLOR)45414542#define ATOM_S0_TV1_COMPOSITE 0x00000400L4543#define ATOM_S0_TV1_SVIDEO 0x00000800L4544#define ATOM_S0_TV1_SCART 0x00004000L4545#define ATOM_S0_TV1_MASK (ATOM_S0_TV1_COMPOSITE+ATOM_S0_TV1_SVIDEO+ATOM_S0_TV1_SCART)45464547#define ATOM_S0_CV 0x00001000L4548#define ATOM_S0_CV_DIN 0x00002000L4549#define ATOM_S0_CV_MASK (ATOM_S0_CV+ATOM_S0_CV_DIN)45504551#define ATOM_S0_DFP1 0x00010000L4552#define ATOM_S0_DFP2 0x00020000L4553#define ATOM_S0_LCD1 0x00040000L4554#define ATOM_S0_LCD2 0x00080000L4555#define ATOM_S0_DFP6 0x00100000L4556#define ATOM_S0_DFP3 0x00200000L4557#define ATOM_S0_DFP4 0x00400000L4558#define ATOM_S0_DFP5 0x00800000L45594560#define ATOM_S0_DFP_MASK ATOM_S0_DFP1 | ATOM_S0_DFP2 | ATOM_S0_DFP3 | ATOM_S0_DFP4 | ATOM_S0_DFP5 | ATOM_S0_DFP645614562#define ATOM_S0_FAD_REGISTER_BUG 0x02000000L // If set, indicates we are running a PCIE asic with4563// the FAD/HDP reg access bug. Bit is read by DAL, this is obsolete from RV5xx45644565#define ATOM_S0_THERMAL_STATE_MASK 0x1C000000L4566#define ATOM_S0_THERMAL_STATE_SHIFT 2645674568#define ATOM_S0_SYSTEM_POWER_STATE_MASK 0xE0000000L4569#define ATOM_S0_SYSTEM_POWER_STATE_SHIFT 2945704571#define ATOM_S0_SYSTEM_POWER_STATE_VALUE_AC 14572#define ATOM_S0_SYSTEM_POWER_STATE_VALUE_DC 24573#define ATOM_S0_SYSTEM_POWER_STATE_VALUE_LITEAC 34574#define ATOM_S0_SYSTEM_POWER_STATE_VALUE_LIT2AC 445754576//Byte aligned definition for BIOS usage4577#define ATOM_S0_CRT1_MONOb0 0x014578#define ATOM_S0_CRT1_COLORb0 0x024579#define ATOM_S0_CRT1_MASKb0 (ATOM_S0_CRT1_MONOb0+ATOM_S0_CRT1_COLORb0)45804581#define ATOM_S0_TV1_COMPOSITEb0 0x044582#define ATOM_S0_TV1_SVIDEOb0 0x084583#define ATOM_S0_TV1_MASKb0 (ATOM_S0_TV1_COMPOSITEb0+ATOM_S0_TV1_SVIDEOb0)45844585#define ATOM_S0_CVb0 0x104586#define ATOM_S0_CV_DINb0 0x204587#define ATOM_S0_CV_MASKb0 (ATOM_S0_CVb0+ATOM_S0_CV_DINb0)45884589#define ATOM_S0_CRT2_MONOb1 0x014590#define ATOM_S0_CRT2_COLORb1 0x024591#define ATOM_S0_CRT2_MASKb1 (ATOM_S0_CRT2_MONOb1+ATOM_S0_CRT2_COLORb1)45924593#define ATOM_S0_TV1_COMPOSITEb1 0x044594#define ATOM_S0_TV1_SVIDEOb1 0x084595#define ATOM_S0_TV1_SCARTb1 0x404596#define ATOM_S0_TV1_MASKb1 (ATOM_S0_TV1_COMPOSITEb1+ATOM_S0_TV1_SVIDEOb1+ATOM_S0_TV1_SCARTb1)45974598#define ATOM_S0_CVb1 0x104599#define ATOM_S0_CV_DINb1 0x204600#define ATOM_S0_CV_MASKb1 (ATOM_S0_CVb1+ATOM_S0_CV_DINb1)46014602#define ATOM_S0_DFP1b2 0x014603#define ATOM_S0_DFP2b2 0x024604#define ATOM_S0_LCD1b2 0x044605#define ATOM_S0_LCD2b2 0x084606#define ATOM_S0_DFP6b2 0x104607#define ATOM_S0_DFP3b2 0x204608#define ATOM_S0_DFP4b2 0x404609#define ATOM_S0_DFP5b2 0x80461046114612#define ATOM_S0_THERMAL_STATE_MASKb3 0x1C4613#define ATOM_S0_THERMAL_STATE_SHIFTb3 246144615#define ATOM_S0_SYSTEM_POWER_STATE_MASKb3 0xE04616#define ATOM_S0_LCD1_SHIFT 1846174618// BIOS_1_SCRATCH Definition4619#define ATOM_S1_ROM_LOCATION_MASK 0x0000FFFFL4620#define ATOM_S1_PCI_BUS_DEV_MASK 0xFFFF0000L46214622// BIOS_2_SCRATCH Definition4623#define ATOM_S2_TV1_STANDARD_MASK 0x0000000FL4624#define ATOM_S2_CURRENT_BL_LEVEL_MASK 0x0000FF00L4625#define ATOM_S2_CURRENT_BL_LEVEL_SHIFT 846264627#define ATOM_S2_FORCEDLOWPWRMODE_STATE_MASK 0x0C000000L4628#define ATOM_S2_FORCEDLOWPWRMODE_STATE_MASK_SHIFT 264629#define ATOM_S2_FORCEDLOWPWRMODE_STATE_CHANGE 0x10000000L46304631#define ATOM_S2_DEVICE_DPMS_STATE 0x00010000L4632#define ATOM_S2_VRI_BRIGHT_ENABLE 0x20000000L46334634#define ATOM_S2_DISPLAY_ROTATION_0_DEGREE 0x04635#define ATOM_S2_DISPLAY_ROTATION_90_DEGREE 0x14636#define ATOM_S2_DISPLAY_ROTATION_180_DEGREE 0x24637#define ATOM_S2_DISPLAY_ROTATION_270_DEGREE 0x34638#define ATOM_S2_DISPLAY_ROTATION_DEGREE_SHIFT 304639#define ATOM_S2_DISPLAY_ROTATION_ANGLE_MASK 0xC0000000L464046414642//Byte aligned definition for BIOS usage4643#define ATOM_S2_TV1_STANDARD_MASKb0 0x0F4644#define ATOM_S2_CURRENT_BL_LEVEL_MASKb1 0xFF4645#define ATOM_S2_DEVICE_DPMS_STATEb2 0x0146464647#define ATOM_S2_DEVICE_DPMS_MASKw1 0x3FF4648#define ATOM_S2_FORCEDLOWPWRMODE_STATE_MASKb3 0x0C4649#define ATOM_S2_FORCEDLOWPWRMODE_STATE_CHANGEb3 0x104650#define ATOM_S2_VRI_BRIGHT_ENABLEb3 0x204651#define ATOM_S2_ROTATION_STATE_MASKb3 0xC0465246534654// BIOS_3_SCRATCH Definition4655#define ATOM_S3_CRT1_ACTIVE 0x00000001L4656#define ATOM_S3_LCD1_ACTIVE 0x00000002L4657#define ATOM_S3_TV1_ACTIVE 0x00000004L4658#define ATOM_S3_DFP1_ACTIVE 0x00000008L4659#define ATOM_S3_CRT2_ACTIVE 0x00000010L4660#define ATOM_S3_LCD2_ACTIVE 0x00000020L4661#define ATOM_S3_DFP6_ACTIVE 0x00000040L4662#define ATOM_S3_DFP2_ACTIVE 0x00000080L4663#define ATOM_S3_CV_ACTIVE 0x00000100L4664#define ATOM_S3_DFP3_ACTIVE 0x00000200L4665#define ATOM_S3_DFP4_ACTIVE 0x00000400L4666#define ATOM_S3_DFP5_ACTIVE 0x00000800L46674668#define ATOM_S3_DEVICE_ACTIVE_MASK 0x00000FFFL46694670#define ATOM_S3_LCD_FULLEXPANSION_ACTIVE 0x00001000L4671#define ATOM_S3_LCD_EXPANSION_ASPEC_RATIO_ACTIVE 0x00002000L46724673#define ATOM_S3_CRT1_CRTC_ACTIVE 0x00010000L4674#define ATOM_S3_LCD1_CRTC_ACTIVE 0x00020000L4675#define ATOM_S3_TV1_CRTC_ACTIVE 0x00040000L4676#define ATOM_S3_DFP1_CRTC_ACTIVE 0x00080000L4677#define ATOM_S3_CRT2_CRTC_ACTIVE 0x00100000L4678#define ATOM_S3_LCD2_CRTC_ACTIVE 0x00200000L4679#define ATOM_S3_DFP6_CRTC_ACTIVE 0x00400000L4680#define ATOM_S3_DFP2_CRTC_ACTIVE 0x00800000L4681#define ATOM_S3_CV_CRTC_ACTIVE 0x01000000L4682#define ATOM_S3_DFP3_CRTC_ACTIVE 0x02000000L4683#define ATOM_S3_DFP4_CRTC_ACTIVE 0x04000000L4684#define ATOM_S3_DFP5_CRTC_ACTIVE 0x08000000L46854686#define ATOM_S3_DEVICE_CRTC_ACTIVE_MASK 0x0FFF0000L4687#define ATOM_S3_ASIC_GUI_ENGINE_HUNG 0x20000000L4688//Below two definitions are not supported in pplib, but in the old powerplay in DAL4689#define ATOM_S3_ALLOW_FAST_PWR_SWITCH 0x40000000L4690#define ATOM_S3_RQST_GPU_USE_MIN_PWR 0x80000000L46914692//Byte aligned definition for BIOS usage4693#define ATOM_S3_CRT1_ACTIVEb0 0x014694#define ATOM_S3_LCD1_ACTIVEb0 0x024695#define ATOM_S3_TV1_ACTIVEb0 0x044696#define ATOM_S3_DFP1_ACTIVEb0 0x084697#define ATOM_S3_CRT2_ACTIVEb0 0x104698#define ATOM_S3_LCD2_ACTIVEb0 0x204699#define ATOM_S3_DFP6_ACTIVEb0 0x404700#define ATOM_S3_DFP2_ACTIVEb0 0x804701#define ATOM_S3_CV_ACTIVEb1 0x014702#define ATOM_S3_DFP3_ACTIVEb1 0x024703#define ATOM_S3_DFP4_ACTIVEb1 0x044704#define ATOM_S3_DFP5_ACTIVEb1 0x0847054706#define ATOM_S3_ACTIVE_CRTC1w0 0xFFF47074708#define ATOM_S3_CRT1_CRTC_ACTIVEb2 0x014709#define ATOM_S3_LCD1_CRTC_ACTIVEb2 0x024710#define ATOM_S3_TV1_CRTC_ACTIVEb2 0x044711#define ATOM_S3_DFP1_CRTC_ACTIVEb2 0x084712#define ATOM_S3_CRT2_CRTC_ACTIVEb2 0x104713#define ATOM_S3_LCD2_CRTC_ACTIVEb2 0x204714#define ATOM_S3_DFP6_CRTC_ACTIVEb2 0x404715#define ATOM_S3_DFP2_CRTC_ACTIVEb2 0x804716#define ATOM_S3_CV_CRTC_ACTIVEb3 0x014717#define ATOM_S3_DFP3_CRTC_ACTIVEb3 0x024718#define ATOM_S3_DFP4_CRTC_ACTIVEb3 0x044719#define ATOM_S3_DFP5_CRTC_ACTIVEb3 0x0847204721#define ATOM_S3_ACTIVE_CRTC2w1 0xFFF47224723// BIOS_4_SCRATCH Definition4724#define ATOM_S4_LCD1_PANEL_ID_MASK 0x000000FFL4725#define ATOM_S4_LCD1_REFRESH_MASK 0x0000FF00L4726#define ATOM_S4_LCD1_REFRESH_SHIFT 847274728//Byte aligned definition for BIOS usage4729#define ATOM_S4_LCD1_PANEL_ID_MASKb0 0x0FF4730#define ATOM_S4_LCD1_REFRESH_MASKb1 ATOM_S4_LCD1_PANEL_ID_MASKb04731#define ATOM_S4_VRAM_INFO_MASKb2 ATOM_S4_LCD1_PANEL_ID_MASKb047324733// BIOS_5_SCRATCH Definition, BIOS_5_SCRATCH is used by Firmware only !!!!4734#define ATOM_S5_DOS_REQ_CRT1b0 0x014735#define ATOM_S5_DOS_REQ_LCD1b0 0x024736#define ATOM_S5_DOS_REQ_TV1b0 0x044737#define ATOM_S5_DOS_REQ_DFP1b0 0x084738#define ATOM_S5_DOS_REQ_CRT2b0 0x104739#define ATOM_S5_DOS_REQ_LCD2b0 0x204740#define ATOM_S5_DOS_REQ_DFP6b0 0x404741#define ATOM_S5_DOS_REQ_DFP2b0 0x804742#define ATOM_S5_DOS_REQ_CVb1 0x014743#define ATOM_S5_DOS_REQ_DFP3b1 0x024744#define ATOM_S5_DOS_REQ_DFP4b1 0x044745#define ATOM_S5_DOS_REQ_DFP5b1 0x0847464747#define ATOM_S5_DOS_REQ_DEVICEw0 0x0FFF47484749#define ATOM_S5_DOS_REQ_CRT1 0x00014750#define ATOM_S5_DOS_REQ_LCD1 0x00024751#define ATOM_S5_DOS_REQ_TV1 0x00044752#define ATOM_S5_DOS_REQ_DFP1 0x00084753#define ATOM_S5_DOS_REQ_CRT2 0x00104754#define ATOM_S5_DOS_REQ_LCD2 0x00204755#define ATOM_S5_DOS_REQ_DFP6 0x00404756#define ATOM_S5_DOS_REQ_DFP2 0x00804757#define ATOM_S5_DOS_REQ_CV 0x01004758#define ATOM_S5_DOS_REQ_DFP3 0x02004759#define ATOM_S5_DOS_REQ_DFP4 0x04004760#define ATOM_S5_DOS_REQ_DFP5 0x080047614762#define ATOM_S5_DOS_FORCE_CRT1b2 ATOM_S5_DOS_REQ_CRT1b04763#define ATOM_S5_DOS_FORCE_TV1b2 ATOM_S5_DOS_REQ_TV1b04764#define ATOM_S5_DOS_FORCE_CRT2b2 ATOM_S5_DOS_REQ_CRT2b04765#define ATOM_S5_DOS_FORCE_CVb3 ATOM_S5_DOS_REQ_CVb14766#define ATOM_S5_DOS_FORCE_DEVICEw1 (ATOM_S5_DOS_FORCE_CRT1b2+ATOM_S5_DOS_FORCE_TV1b2+ATOM_S5_DOS_FORCE_CRT2b2+\4767(ATOM_S5_DOS_FORCE_CVb3<<8))47684769// BIOS_6_SCRATCH Definition4770#define ATOM_S6_DEVICE_CHANGE 0x00000001L4771#define ATOM_S6_SCALER_CHANGE 0x00000002L4772#define ATOM_S6_LID_CHANGE 0x00000004L4773#define ATOM_S6_DOCKING_CHANGE 0x00000008L4774#define ATOM_S6_ACC_MODE 0x00000010L4775#define ATOM_S6_EXT_DESKTOP_MODE 0x00000020L4776#define ATOM_S6_LID_STATE 0x00000040L4777#define ATOM_S6_DOCK_STATE 0x00000080L4778#define ATOM_S6_CRITICAL_STATE 0x00000100L4779#define ATOM_S6_HW_I2C_BUSY_STATE 0x00000200L4780#define ATOM_S6_THERMAL_STATE_CHANGE 0x00000400L4781#define ATOM_S6_INTERRUPT_SET_BY_BIOS 0x00000800L4782#define ATOM_S6_REQ_LCD_EXPANSION_FULL 0x00001000L //Normal expansion Request bit for LCD4783#define ATOM_S6_REQ_LCD_EXPANSION_ASPEC_RATIO 0x00002000L //Aspect ratio expansion Request bit for LCD47844785#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_expansion4786#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_expansion47874788#define ATOM_S6_ACC_REQ_CRT1 0x00010000L4789#define ATOM_S6_ACC_REQ_LCD1 0x00020000L4790#define ATOM_S6_ACC_REQ_TV1 0x00040000L4791#define ATOM_S6_ACC_REQ_DFP1 0x00080000L4792#define ATOM_S6_ACC_REQ_CRT2 0x00100000L4793#define ATOM_S6_ACC_REQ_LCD2 0x00200000L4794#define ATOM_S6_ACC_REQ_DFP6 0x00400000L4795#define ATOM_S6_ACC_REQ_DFP2 0x00800000L4796#define ATOM_S6_ACC_REQ_CV 0x01000000L4797#define ATOM_S6_ACC_REQ_DFP3 0x02000000L4798#define ATOM_S6_ACC_REQ_DFP4 0x04000000L4799#define ATOM_S6_ACC_REQ_DFP5 0x08000000L48004801#define ATOM_S6_ACC_REQ_MASK 0x0FFF0000L4802#define ATOM_S6_SYSTEM_POWER_MODE_CHANGE 0x10000000L4803#define ATOM_S6_ACC_BLOCK_DISPLAY_SWITCH 0x20000000L4804#define ATOM_S6_VRI_BRIGHTNESS_CHANGE 0x40000000L4805#define ATOM_S6_CONFIG_DISPLAY_CHANGE_MASK 0x80000000L48064807//Byte aligned definition for BIOS usage4808#define ATOM_S6_DEVICE_CHANGEb0 0x014809#define ATOM_S6_SCALER_CHANGEb0 0x024810#define ATOM_S6_LID_CHANGEb0 0x044811#define ATOM_S6_DOCKING_CHANGEb0 0x084812#define ATOM_S6_ACC_MODEb0 0x104813#define ATOM_S6_EXT_DESKTOP_MODEb0 0x204814#define ATOM_S6_LID_STATEb0 0x404815#define ATOM_S6_DOCK_STATEb0 0x804816#define ATOM_S6_CRITICAL_STATEb1 0x014817#define ATOM_S6_HW_I2C_BUSY_STATEb1 0x024818#define ATOM_S6_THERMAL_STATE_CHANGEb1 0x044819#define ATOM_S6_INTERRUPT_SET_BY_BIOSb1 0x084820#define ATOM_S6_REQ_LCD_EXPANSION_FULLb1 0x104821#define ATOM_S6_REQ_LCD_EXPANSION_ASPEC_RATIOb1 0x2048224823#define ATOM_S6_ACC_REQ_CRT1b2 0x014824#define ATOM_S6_ACC_REQ_LCD1b2 0x024825#define ATOM_S6_ACC_REQ_TV1b2 0x044826#define ATOM_S6_ACC_REQ_DFP1b2 0x084827#define ATOM_S6_ACC_REQ_CRT2b2 0x104828#define ATOM_S6_ACC_REQ_LCD2b2 0x204829#define ATOM_S6_ACC_REQ_DFP6b2 0x404830#define ATOM_S6_ACC_REQ_DFP2b2 0x804831#define ATOM_S6_ACC_REQ_CVb3 0x014832#define ATOM_S6_ACC_REQ_DFP3b3 0x024833#define ATOM_S6_ACC_REQ_DFP4b3 0x044834#define ATOM_S6_ACC_REQ_DFP5b3 0x0848354836#define ATOM_S6_ACC_REQ_DEVICEw1 ATOM_S5_DOS_REQ_DEVICEw04837#define ATOM_S6_SYSTEM_POWER_MODE_CHANGEb3 0x104838#define ATOM_S6_ACC_BLOCK_DISPLAY_SWITCHb3 0x204839#define ATOM_S6_VRI_BRIGHTNESS_CHANGEb3 0x404840#define ATOM_S6_CONFIG_DISPLAY_CHANGEb3 0x8048414842#define ATOM_S6_DEVICE_CHANGE_SHIFT 04843#define ATOM_S6_SCALER_CHANGE_SHIFT 14844#define ATOM_S6_LID_CHANGE_SHIFT 24845#define ATOM_S6_DOCKING_CHANGE_SHIFT 34846#define ATOM_S6_ACC_MODE_SHIFT 44847#define ATOM_S6_EXT_DESKTOP_MODE_SHIFT 54848#define ATOM_S6_LID_STATE_SHIFT 64849#define ATOM_S6_DOCK_STATE_SHIFT 74850#define ATOM_S6_CRITICAL_STATE_SHIFT 84851#define ATOM_S6_HW_I2C_BUSY_STATE_SHIFT 94852#define ATOM_S6_THERMAL_STATE_CHANGE_SHIFT 104853#define ATOM_S6_INTERRUPT_SET_BY_BIOS_SHIFT 114854#define ATOM_S6_REQ_SCALER_SHIFT 124855#define ATOM_S6_REQ_SCALER_ARATIO_SHIFT 134856#define ATOM_S6_DISPLAY_STATE_CHANGE_SHIFT 144857#define ATOM_S6_I2C_STATE_CHANGE_SHIFT 154858#define ATOM_S6_SYSTEM_POWER_MODE_CHANGE_SHIFT 284859#define ATOM_S6_ACC_BLOCK_DISPLAY_SWITCH_SHIFT 294860#define ATOM_S6_VRI_BRIGHTNESS_CHANGE_SHIFT 304861#define ATOM_S6_CONFIG_DISPLAY_CHANGE_SHIFT 3148624863// BIOS_7_SCRATCH Definition, BIOS_7_SCRATCH is used by Firmware only !!!!4864#define ATOM_S7_DOS_MODE_TYPEb0 0x034865#define ATOM_S7_DOS_MODE_VGAb0 0x004866#define ATOM_S7_DOS_MODE_VESAb0 0x014867#define ATOM_S7_DOS_MODE_EXTb0 0x024868#define ATOM_S7_DOS_MODE_PIXEL_DEPTHb0 0x0C4869#define ATOM_S7_DOS_MODE_PIXEL_FORMATb0 0xF04870#define ATOM_S7_DOS_8BIT_DAC_ENb1 0x014871#define ATOM_S7_DOS_MODE_NUMBERw1 0x0FFFF48724873#define ATOM_S7_DOS_8BIT_DAC_EN_SHIFT 848744875// BIOS_8_SCRATCH Definition4876#define ATOM_S8_I2C_CHANNEL_BUSY_MASK 0x00000FFFF4877#define ATOM_S8_I2C_HW_ENGINE_BUSY_MASK 0x0FFFF000048784879#define ATOM_S8_I2C_CHANNEL_BUSY_SHIFT 04880#define ATOM_S8_I2C_ENGINE_BUSY_SHIFT 1648814882// BIOS_9_SCRATCH Definition4883#ifndef ATOM_S9_I2C_CHANNEL_COMPLETED_MASK4884#define ATOM_S9_I2C_CHANNEL_COMPLETED_MASK 0x0000FFFF4885#endif4886#ifndef ATOM_S9_I2C_CHANNEL_ABORTED_MASK4887#define ATOM_S9_I2C_CHANNEL_ABORTED_MASK 0xFFFF00004888#endif4889#ifndef ATOM_S9_I2C_CHANNEL_COMPLETED_SHIFT4890#define ATOM_S9_I2C_CHANNEL_COMPLETED_SHIFT 04891#endif4892#ifndef ATOM_S9_I2C_CHANNEL_ABORTED_SHIFT4893#define ATOM_S9_I2C_CHANNEL_ABORTED_SHIFT 164894#endif489548964897#define ATOM_FLAG_SET 0x204898#define ATOM_FLAG_CLEAR 04899#define CLEAR_ATOM_S6_ACC_MODE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_ACC_MODE_SHIFT | ATOM_FLAG_CLEAR)4900#define SET_ATOM_S6_DEVICE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DEVICE_CHANGE_SHIFT | ATOM_FLAG_SET)4901#define SET_ATOM_S6_VRI_BRIGHTNESS_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_VRI_BRIGHTNESS_CHANGE_SHIFT | ATOM_FLAG_SET)4902#define SET_ATOM_S6_SCALER_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_SCALER_CHANGE_SHIFT | ATOM_FLAG_SET)4903#define SET_ATOM_S6_LID_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_LID_CHANGE_SHIFT | ATOM_FLAG_SET)49044905#define SET_ATOM_S6_LID_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_LID_STATE_SHIFT | ATOM_FLAG_SET)4906#define CLEAR_ATOM_S6_LID_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_LID_STATE_SHIFT | ATOM_FLAG_CLEAR)49074908#define SET_ATOM_S6_DOCK_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DOCKING_CHANGE_SHIFT | ATOM_FLAG_SET)4909#define SET_ATOM_S6_DOCK_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DOCK_STATE_SHIFT | ATOM_FLAG_SET)4910#define CLEAR_ATOM_S6_DOCK_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DOCK_STATE_SHIFT | ATOM_FLAG_CLEAR)49114912#define SET_ATOM_S6_THERMAL_STATE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_THERMAL_STATE_CHANGE_SHIFT | ATOM_FLAG_SET)4913#define SET_ATOM_S6_SYSTEM_POWER_MODE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_SYSTEM_POWER_MODE_CHANGE_SHIFT | ATOM_FLAG_SET)4914#define SET_ATOM_S6_INTERRUPT_SET_BY_BIOS ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_INTERRUPT_SET_BY_BIOS_SHIFT | ATOM_FLAG_SET)49154916#define SET_ATOM_S6_CRITICAL_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_CRITICAL_STATE_SHIFT | ATOM_FLAG_SET)4917#define CLEAR_ATOM_S6_CRITICAL_STATE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_CRITICAL_STATE_SHIFT | ATOM_FLAG_CLEAR)49184919#define SET_ATOM_S6_REQ_SCALER ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_REQ_SCALER_SHIFT | ATOM_FLAG_SET)4920#define CLEAR_ATOM_S6_REQ_SCALER ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_REQ_SCALER_SHIFT | ATOM_FLAG_CLEAR )49214922#define SET_ATOM_S6_REQ_SCALER_ARATIO ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_REQ_SCALER_ARATIO_SHIFT | ATOM_FLAG_SET )4923#define CLEAR_ATOM_S6_REQ_SCALER_ARATIO ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_REQ_SCALER_ARATIO_SHIFT | ATOM_FLAG_CLEAR )49244925#define SET_ATOM_S6_I2C_STATE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_I2C_STATE_CHANGE_SHIFT | ATOM_FLAG_SET )49264927#define SET_ATOM_S6_DISPLAY_STATE_CHANGE ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_DISPLAY_STATE_CHANGE_SHIFT | ATOM_FLAG_SET )49284929#define SET_ATOM_S6_DEVICE_RECONFIG ((ATOM_ACC_CHANGE_INFO_DEF << 8 )|ATOM_S6_CONFIG_DISPLAY_CHANGE_SHIFT | ATOM_FLAG_SET)4930#define CLEAR_ATOM_S0_LCD1 ((ATOM_DEVICE_CONNECT_INFO_DEF << 8 )| ATOM_S0_LCD1_SHIFT | ATOM_FLAG_CLEAR )4931#define SET_ATOM_S7_DOS_8BIT_DAC_EN ((ATOM_DOS_MODE_INFO_DEF << 8 )|ATOM_S7_DOS_8BIT_DAC_EN_SHIFT | ATOM_FLAG_SET )4932#define CLEAR_ATOM_S7_DOS_8BIT_DAC_EN ((ATOM_DOS_MODE_INFO_DEF << 8 )|ATOM_S7_DOS_8BIT_DAC_EN_SHIFT | ATOM_FLAG_CLEAR )49334934/****************************************************************************/4935//Portion II: Definitinos only used in Driver4936/****************************************************************************/49374938// Macros used by driver4939#ifdef __cplusplus4940#define GetIndexIntoMasterTable(MasterOrData, FieldName) ((reinterpret_cast<char*>(&(static_cast<ATOM_MASTER_LIST_OF_##MasterOrData##_TABLES*>(0))->FieldName)-static_cast<char*>(0))/sizeof(USHORT))49414942#define GET_COMMAND_TABLE_COMMANDSET_REVISION(TABLE_HEADER_OFFSET) (((static_cast<ATOM_COMMON_TABLE_HEADER*>(TABLE_HEADER_OFFSET))->ucTableFormatRevision )&0x3F)4943#define GET_COMMAND_TABLE_PARAMETER_REVISION(TABLE_HEADER_OFFSET) (((static_cast<ATOM_COMMON_TABLE_HEADER*>(TABLE_HEADER_OFFSET))->ucTableContentRevision)&0x3F)4944#else // not __cplusplus4945#define GetIndexIntoMasterTable(MasterOrData, FieldName) (((char*)(&((ATOM_MASTER_LIST_OF_##MasterOrData##_TABLES*)0)->FieldName)-(char*)0)/sizeof(USHORT))49464947#define GET_COMMAND_TABLE_COMMANDSET_REVISION(TABLE_HEADER_OFFSET) ((((ATOM_COMMON_TABLE_HEADER*)TABLE_HEADER_OFFSET)->ucTableFormatRevision)&0x3F)4948#define GET_COMMAND_TABLE_PARAMETER_REVISION(TABLE_HEADER_OFFSET) ((((ATOM_COMMON_TABLE_HEADER*)TABLE_HEADER_OFFSET)->ucTableContentRevision)&0x3F)4949#endif // __cplusplus49504951#define GET_DATA_TABLE_MAJOR_REVISION GET_COMMAND_TABLE_COMMANDSET_REVISION4952#define GET_DATA_TABLE_MINOR_REVISION GET_COMMAND_TABLE_PARAMETER_REVISION49534954/****************************************************************************/4955//Portion III: Definitinos only used in VBIOS4956/****************************************************************************/4957#define ATOM_DAC_SRC 0x804958#define ATOM_SRC_DAC1 04959#define ATOM_SRC_DAC2 0x8049604961typedef struct _MEMORY_PLLINIT_PARAMETERS4962{4963ULONG ulTargetMemoryClock; //In 10Khz unit4964UCHAR ucAction; //not define yet4965UCHAR ucFbDiv_Hi; //Fbdiv Hi byte4966UCHAR ucFbDiv; //FB value4967UCHAR ucPostDiv; //Post div4968}MEMORY_PLLINIT_PARAMETERS;49694970#define MEMORY_PLLINIT_PS_ALLOCATION MEMORY_PLLINIT_PARAMETERS497149724973#define GPIO_PIN_WRITE 0x014974#define GPIO_PIN_READ 0x0049754976typedef struct _GPIO_PIN_CONTROL_PARAMETERS4977{4978UCHAR ucGPIO_ID; //return value, read from GPIO pins4979UCHAR ucGPIOBitShift; //define which bit in uGPIOBitVal need to be update4980UCHAR ucGPIOBitVal; //Set/Reset corresponding bit defined in ucGPIOBitMask4981UCHAR ucAction; //=GPIO_PIN_WRITE: Read; =GPIO_PIN_READ: Write4982}GPIO_PIN_CONTROL_PARAMETERS;49834984typedef struct _ENABLE_SCALER_PARAMETERS4985{4986UCHAR ucScaler; // ATOM_SCALER1, ATOM_SCALER24987UCHAR ucEnable; // ATOM_SCALER_DISABLE or ATOM_SCALER_CENTER or ATOM_SCALER_EXPANSION4988UCHAR ucTVStandard; //4989UCHAR ucPadding[1];4990}ENABLE_SCALER_PARAMETERS;4991#define ENABLE_SCALER_PS_ALLOCATION ENABLE_SCALER_PARAMETERS49924993//ucEnable:4994#define SCALER_BYPASS_AUTO_CENTER_NO_REPLICATION 04995#define SCALER_BYPASS_AUTO_CENTER_AUTO_REPLICATION 14996#define SCALER_ENABLE_2TAP_ALPHA_MODE 24997#define SCALER_ENABLE_MULTITAP_MODE 349984999typedef struct _ENABLE_HARDWARE_ICON_CURSOR_PARAMETERS5000{5001ULONG usHWIconHorzVertPosn; // Hardware Icon Vertical position5002UCHAR ucHWIconVertOffset; // Hardware Icon Vertical offset5003UCHAR ucHWIconHorzOffset; // Hardware Icon Horizontal offset5004UCHAR ucSelection; // ATOM_CURSOR1 or ATOM_ICON1 or ATOM_CURSOR2 or ATOM_ICON25005UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE5006}ENABLE_HARDWARE_ICON_CURSOR_PARAMETERS;50075008typedef struct _ENABLE_HARDWARE_ICON_CURSOR_PS_ALLOCATION5009{5010ENABLE_HARDWARE_ICON_CURSOR_PARAMETERS sEnableIcon;5011ENABLE_CRTC_PARAMETERS sReserved;5012}ENABLE_HARDWARE_ICON_CURSOR_PS_ALLOCATION;50135014typedef struct _ENABLE_GRAPH_SURFACE_PARAMETERS5015{5016USHORT usHight; // Image Hight5017USHORT usWidth; // Image Width5018UCHAR ucSurface; // Surface 1 or 25019UCHAR ucPadding[3];5020}ENABLE_GRAPH_SURFACE_PARAMETERS;50215022typedef struct _ENABLE_GRAPH_SURFACE_PARAMETERS_V1_25023{5024USHORT usHight; // Image Hight5025USHORT usWidth; // Image Width5026UCHAR ucSurface; // Surface 1 or 25027UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE5028UCHAR ucPadding[2];5029}ENABLE_GRAPH_SURFACE_PARAMETERS_V1_2;50305031typedef struct _ENABLE_GRAPH_SURFACE_PARAMETERS_V1_35032{5033USHORT usHight; // Image Hight5034USHORT usWidth; // Image Width5035UCHAR ucSurface; // Surface 1 or 25036UCHAR ucEnable; // ATOM_ENABLE or ATOM_DISABLE5037USHORT usDeviceId; // Active Device Id for this surface. If no device, set to 0.5038}ENABLE_GRAPH_SURFACE_PARAMETERS_V1_3;50395040typedef struct _ENABLE_GRAPH_SURFACE_PS_ALLOCATION5041{5042ENABLE_GRAPH_SURFACE_PARAMETERS sSetSurface;5043ENABLE_YUV_PS_ALLOCATION sReserved; // Don't set this one5044}ENABLE_GRAPH_SURFACE_PS_ALLOCATION;50455046typedef struct _MEMORY_CLEAN_UP_PARAMETERS5047{5048USHORT usMemoryStart; //in 8Kb boundary, offset from memory base address5049USHORT usMemorySize; //8Kb blocks aligned5050}MEMORY_CLEAN_UP_PARAMETERS;5051#define MEMORY_CLEAN_UP_PS_ALLOCATION MEMORY_CLEAN_UP_PARAMETERS50525053typedef struct _GET_DISPLAY_SURFACE_SIZE_PARAMETERS5054{5055USHORT usX_Size; //When use as input parameter, usX_Size indicates which CRTC5056USHORT usY_Size;5057}GET_DISPLAY_SURFACE_SIZE_PARAMETERS;50585059typedef struct _INDIRECT_IO_ACCESS5060{5061ATOM_COMMON_TABLE_HEADER sHeader;5062UCHAR IOAccessSequence[256];5063} INDIRECT_IO_ACCESS;50645065#define INDIRECT_READ 0x005066#define INDIRECT_WRITE 0x8050675068#define INDIRECT_IO_MM 05069#define INDIRECT_IO_PLL 15070#define INDIRECT_IO_MC 25071#define INDIRECT_IO_PCIE 35072#define INDIRECT_IO_PCIEP 45073#define INDIRECT_IO_NBMISC 550745075#define INDIRECT_IO_PLL_READ INDIRECT_IO_PLL | INDIRECT_READ5076#define INDIRECT_IO_PLL_WRITE INDIRECT_IO_PLL | INDIRECT_WRITE5077#define INDIRECT_IO_MC_READ INDIRECT_IO_MC | INDIRECT_READ5078#define INDIRECT_IO_MC_WRITE INDIRECT_IO_MC | INDIRECT_WRITE5079#define INDIRECT_IO_PCIE_READ INDIRECT_IO_PCIE | INDIRECT_READ5080#define INDIRECT_IO_PCIE_WRITE INDIRECT_IO_PCIE | INDIRECT_WRITE5081#define INDIRECT_IO_PCIEP_READ INDIRECT_IO_PCIEP | INDIRECT_READ5082#define INDIRECT_IO_PCIEP_WRITE INDIRECT_IO_PCIEP | INDIRECT_WRITE5083#define INDIRECT_IO_NBMISC_READ INDIRECT_IO_NBMISC | INDIRECT_READ5084#define INDIRECT_IO_NBMISC_WRITE INDIRECT_IO_NBMISC | INDIRECT_WRITE50855086typedef struct _ATOM_OEM_INFO5087{5088ATOM_COMMON_TABLE_HEADER sHeader;5089ATOM_I2C_ID_CONFIG_ACCESS sucI2cId;5090}ATOM_OEM_INFO;50915092typedef struct _ATOM_TV_MODE5093{5094UCHAR ucVMode_Num; //Video mode number5095UCHAR ucTV_Mode_Num; //Internal TV mode number5096}ATOM_TV_MODE;50975098typedef struct _ATOM_BIOS_INT_TVSTD_MODE5099{5100ATOM_COMMON_TABLE_HEADER sHeader;5101USHORT usTV_Mode_LUT_Offset; // Pointer to standard to internal number conversion table5102USHORT usTV_FIFO_Offset; // Pointer to FIFO entry table5103USHORT usNTSC_Tbl_Offset; // Pointer to SDTV_Mode_NTSC table5104USHORT usPAL_Tbl_Offset; // Pointer to SDTV_Mode_PAL table5105USHORT usCV_Tbl_Offset; // Pointer to SDTV_Mode_PAL table5106}ATOM_BIOS_INT_TVSTD_MODE;510751085109typedef struct _ATOM_TV_MODE_SCALER_PTR5110{5111USHORT ucFilter0_Offset; //Pointer to filter format 0 coefficients5112USHORT usFilter1_Offset; //Pointer to filter format 0 coefficients5113UCHAR ucTV_Mode_Num;5114}ATOM_TV_MODE_SCALER_PTR;51155116typedef struct _ATOM_STANDARD_VESA_TIMING5117{5118ATOM_COMMON_TABLE_HEADER sHeader;5119ATOM_DTD_FORMAT aModeTimings[16]; // 16 is not the real array number, just for initial allocation5120}ATOM_STANDARD_VESA_TIMING;512151225123typedef struct _ATOM_STD_FORMAT5124{5125USHORT usSTD_HDisp;5126USHORT usSTD_VDisp;5127USHORT usSTD_RefreshRate;5128USHORT usReserved;5129}ATOM_STD_FORMAT;51305131typedef struct _ATOM_VESA_TO_EXTENDED_MODE5132{5133USHORT usVESA_ModeNumber;5134USHORT usExtendedModeNumber;5135}ATOM_VESA_TO_EXTENDED_MODE;51365137typedef struct _ATOM_VESA_TO_INTENAL_MODE_LUT5138{5139ATOM_COMMON_TABLE_HEADER sHeader;5140ATOM_VESA_TO_EXTENDED_MODE asVESA_ToExtendedModeInfo[76];5141}ATOM_VESA_TO_INTENAL_MODE_LUT;51425143/*************** ATOM Memory Related Data Structure ***********************/5144typedef struct _ATOM_MEMORY_VENDOR_BLOCK{5145UCHAR ucMemoryType;5146UCHAR ucMemoryVendor;5147UCHAR ucAdjMCId;5148UCHAR ucDynClkId;5149ULONG ulDllResetClkRange;5150}ATOM_MEMORY_VENDOR_BLOCK;515151525153typedef struct _ATOM_MEMORY_SETTING_ID_CONFIG{5154#if ATOM_BIG_ENDIAN5155ULONG ucMemBlkId:8;5156ULONG ulMemClockRange:24;5157#else5158ULONG ulMemClockRange:24;5159ULONG ucMemBlkId:8;5160#endif5161}ATOM_MEMORY_SETTING_ID_CONFIG;51625163typedef union _ATOM_MEMORY_SETTING_ID_CONFIG_ACCESS5164{5165ATOM_MEMORY_SETTING_ID_CONFIG slAccess;5166ULONG ulAccess;5167}ATOM_MEMORY_SETTING_ID_CONFIG_ACCESS;516851695170typedef struct _ATOM_MEMORY_SETTING_DATA_BLOCK{5171ATOM_MEMORY_SETTING_ID_CONFIG_ACCESS ulMemoryID;5172ULONG aulMemData[1];5173}ATOM_MEMORY_SETTING_DATA_BLOCK;517451755176typedef struct _ATOM_INIT_REG_INDEX_FORMAT{5177USHORT usRegIndex; // MC register index5178UCHAR ucPreRegDataLength; // offset in ATOM_INIT_REG_DATA_BLOCK.saRegDataBuf5179}ATOM_INIT_REG_INDEX_FORMAT;518051815182typedef struct _ATOM_INIT_REG_BLOCK{5183USHORT usRegIndexTblSize; //size of asRegIndexBuf5184USHORT usRegDataBlkSize; //size of ATOM_MEMORY_SETTING_DATA_BLOCK5185ATOM_INIT_REG_INDEX_FORMAT asRegIndexBuf[1];5186ATOM_MEMORY_SETTING_DATA_BLOCK asRegDataBuf[1];5187}ATOM_INIT_REG_BLOCK;51885189#define END_OF_REG_INDEX_BLOCK 0x0ffff5190#define END_OF_REG_DATA_BLOCK 0x000000005191#define ATOM_INIT_REG_MASK_FLAG 0x805192#define CLOCK_RANGE_HIGHEST 0x00ffffff51935194#define VALUE_DWORD SIZEOF ULONG5195#define VALUE_SAME_AS_ABOVE 05196#define VALUE_MASK_DWORD 0x8451975198#define INDEX_ACCESS_RANGE_BEGIN (VALUE_DWORD + 1)5199#define INDEX_ACCESS_RANGE_END (INDEX_ACCESS_RANGE_BEGIN + 1)5200#define VALUE_INDEX_ACCESS_SINGLE (INDEX_ACCESS_RANGE_END + 1)5201//#define ACCESS_MCIODEBUGIND 0x40 //defined in BIOS code5202#define ACCESS_PLACEHOLDER 0x8052035204typedef struct _ATOM_MC_INIT_PARAM_TABLE5205{5206ATOM_COMMON_TABLE_HEADER sHeader;5207USHORT usAdjustARB_SEQDataOffset;5208USHORT usMCInitMemTypeTblOffset;5209USHORT usMCInitCommonTblOffset;5210USHORT usMCInitPowerDownTblOffset;5211ULONG ulARB_SEQDataBuf[32];5212ATOM_INIT_REG_BLOCK asMCInitMemType;5213ATOM_INIT_REG_BLOCK asMCInitCommon;5214}ATOM_MC_INIT_PARAM_TABLE;521552165217#define _4Mx16 0x25218#define _4Mx32 0x35219#define _8Mx16 0x125220#define _8Mx32 0x135221#define _16Mx16 0x225222#define _16Mx32 0x235223#define _32Mx16 0x325224#define _32Mx32 0x335225#define _64Mx8 0x415226#define _64Mx16 0x425227#define _64Mx32 0x435228#define _128Mx8 0x515229#define _128Mx16 0x525230#define _256Mx8 0x6152315232#define SAMSUNG 0x15233#define INFINEON 0x25234#define ELPIDA 0x35235#define ETRON 0x45236#define NANYA 0x55237#define HYNIX 0x65238#define MOSEL 0x75239#define WINBOND 0x85240#define ESMT 0x95241#define MICRON 0xF52425243#define QIMONDA INFINEON5244#define PROMOS MOSEL5245#define KRETON INFINEON5246#define ELIXIR NANYA52475248/////////////Support for GDDR5 MC uCode to reside in upper 64K of ROM/////////////52495250#define UCODE_ROM_START_ADDRESS 0x1b8005251#define UCODE_SIGNATURE 0x4375434d // 'MCuC' - MC uCode52525253//uCode block header for reference52545255typedef struct _MCuCodeHeader5256{5257ULONG ulSignature;5258UCHAR ucRevision;5259UCHAR ucChecksum;5260UCHAR ucReserved1;5261UCHAR ucReserved2;5262USHORT usParametersLength;5263USHORT usUCodeLength;5264USHORT usReserved1;5265USHORT usReserved2;5266} MCuCodeHeader;52675268//////////////////////////////////////////////////////////////////////////////////52695270#define ATOM_MAX_NUMBER_OF_VRAM_MODULE 1652715272#define ATOM_VRAM_MODULE_MEMORY_VENDOR_ID_MASK 0xF5273typedef struct _ATOM_VRAM_MODULE_V15274{5275ULONG ulReserved;5276USHORT usEMRSValue;5277USHORT usMRSValue;5278USHORT usReserved;5279UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module5280UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4;[3:0] reserved;5281UCHAR ucMemoryVenderID; // Predefined,never change across designs or memory type/vender5282UCHAR ucMemoryDeviceCfg; // [7:4]=0x0:4M;=0x1:8M;=0x2:16M;0x3:32M....[3:0]=0x0:x4;=0x1:x8;=0x2:x16;=0x3:x32...5283UCHAR ucRow; // Number of Row,in power of 2;5284UCHAR ucColumn; // Number of Column,in power of 2;5285UCHAR ucBank; // Nunber of Bank;5286UCHAR ucRank; // Number of Rank, in power of 25287UCHAR ucChannelNum; // Number of channel;5288UCHAR ucChannelConfig; // [3:0]=Indication of what channel combination;[4:7]=Channel bit width, in number of 25289UCHAR ucDefaultMVDDQ_ID; // Default MVDDQ setting for this memory block, ID linking to MVDDQ info table to find real set-up data;5290UCHAR ucDefaultMVDDC_ID; // Default MVDDC setting for this memory block, ID linking to MVDDC info table to find real set-up data;5291UCHAR ucReserved[2];5292}ATOM_VRAM_MODULE_V1;529352945295typedef struct _ATOM_VRAM_MODULE_V25296{5297ULONG ulReserved;5298ULONG ulFlags; // To enable/disable functionalities based on memory type5299ULONG ulEngineClock; // Override of default engine clock for particular memory type5300ULONG ulMemoryClock; // Override of default memory clock for particular memory type5301USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type5302USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type5303USHORT usEMRSValue;5304USHORT usMRSValue;5305USHORT usReserved;5306UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module5307UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4;[3:0] - must not be used for now;5308UCHAR ucMemoryVenderID; // Predefined,never change across designs or memory type/vender. If not predefined, vendor detection table gets executed5309UCHAR ucMemoryDeviceCfg; // [7:4]=0x0:4M;=0x1:8M;=0x2:16M;0x3:32M....[3:0]=0x0:x4;=0x1:x8;=0x2:x16;=0x3:x32...5310UCHAR ucRow; // Number of Row,in power of 2;5311UCHAR ucColumn; // Number of Column,in power of 2;5312UCHAR ucBank; // Nunber of Bank;5313UCHAR ucRank; // Number of Rank, in power of 25314UCHAR ucChannelNum; // Number of channel;5315UCHAR ucChannelConfig; // [3:0]=Indication of what channel combination;[4:7]=Channel bit width, in number of 25316UCHAR ucDefaultMVDDQ_ID; // Default MVDDQ setting for this memory block, ID linking to MVDDQ info table to find real set-up data;5317UCHAR ucDefaultMVDDC_ID; // Default MVDDC setting for this memory block, ID linking to MVDDC info table to find real set-up data;5318UCHAR ucRefreshRateFactor;5319UCHAR ucReserved[3];5320}ATOM_VRAM_MODULE_V2;532153225323typedef struct _ATOM_MEMORY_TIMING_FORMAT5324{5325ULONG ulClkRange; // memory clock in 10kHz unit, when target memory clock is below this clock, use this memory timing5326union{5327USHORT usMRS; // mode register5328USHORT usDDR3_MR0;5329};5330union{5331USHORT usEMRS; // extended mode register5332USHORT usDDR3_MR1;5333};5334UCHAR ucCL; // CAS latency5335UCHAR ucWL; // WRITE Latency5336UCHAR uctRAS; // tRAS5337UCHAR uctRC; // tRC5338UCHAR uctRFC; // tRFC5339UCHAR uctRCDR; // tRCDR5340UCHAR uctRCDW; // tRCDW5341UCHAR uctRP; // tRP5342UCHAR uctRRD; // tRRD5343UCHAR uctWR; // tWR5344UCHAR uctWTR; // tWTR5345UCHAR uctPDIX; // tPDIX5346UCHAR uctFAW; // tFAW5347UCHAR uctAOND; // tAOND5348union5349{5350struct {5351UCHAR ucflag; // flag to control memory timing calculation. bit0= control EMRS2 Infineon5352UCHAR ucReserved;5353};5354USHORT usDDR3_MR2;5355};5356}ATOM_MEMORY_TIMING_FORMAT;535753585359typedef struct _ATOM_MEMORY_TIMING_FORMAT_V15360{5361ULONG ulClkRange; // memory clock in 10kHz unit, when target memory clock is below this clock, use this memory timing5362USHORT usMRS; // mode register5363USHORT usEMRS; // extended mode register5364UCHAR ucCL; // CAS latency5365UCHAR ucWL; // WRITE Latency5366UCHAR uctRAS; // tRAS5367UCHAR uctRC; // tRC5368UCHAR uctRFC; // tRFC5369UCHAR uctRCDR; // tRCDR5370UCHAR uctRCDW; // tRCDW5371UCHAR uctRP; // tRP5372UCHAR uctRRD; // tRRD5373UCHAR uctWR; // tWR5374UCHAR uctWTR; // tWTR5375UCHAR uctPDIX; // tPDIX5376UCHAR uctFAW; // tFAW5377UCHAR uctAOND; // tAOND5378UCHAR ucflag; // flag to control memory timing calculation. bit0= control EMRS2 Infineon5379////////////////////////////////////GDDR parameters///////////////////////////////////5380UCHAR uctCCDL; //5381UCHAR uctCRCRL; //5382UCHAR uctCRCWL; //5383UCHAR uctCKE; //5384UCHAR uctCKRSE; //5385UCHAR uctCKRSX; //5386UCHAR uctFAW32; //5387UCHAR ucMR5lo; //5388UCHAR ucMR5hi; //5389UCHAR ucTerminator;5390}ATOM_MEMORY_TIMING_FORMAT_V1;53915392typedef struct _ATOM_MEMORY_TIMING_FORMAT_V25393{5394ULONG ulClkRange; // memory clock in 10kHz unit, when target memory clock is below this clock, use this memory timing5395USHORT usMRS; // mode register5396USHORT usEMRS; // extended mode register5397UCHAR ucCL; // CAS latency5398UCHAR ucWL; // WRITE Latency5399UCHAR uctRAS; // tRAS5400UCHAR uctRC; // tRC5401UCHAR uctRFC; // tRFC5402UCHAR uctRCDR; // tRCDR5403UCHAR uctRCDW; // tRCDW5404UCHAR uctRP; // tRP5405UCHAR uctRRD; // tRRD5406UCHAR uctWR; // tWR5407UCHAR uctWTR; // tWTR5408UCHAR uctPDIX; // tPDIX5409UCHAR uctFAW; // tFAW5410UCHAR uctAOND; // tAOND5411UCHAR ucflag; // flag to control memory timing calculation. bit0= control EMRS2 Infineon5412////////////////////////////////////GDDR parameters///////////////////////////////////5413UCHAR uctCCDL; //5414UCHAR uctCRCRL; //5415UCHAR uctCRCWL; //5416UCHAR uctCKE; //5417UCHAR uctCKRSE; //5418UCHAR uctCKRSX; //5419UCHAR uctFAW32; //5420UCHAR ucMR4lo; //5421UCHAR ucMR4hi; //5422UCHAR ucMR5lo; //5423UCHAR ucMR5hi; //5424UCHAR ucTerminator;5425UCHAR ucReserved;5426}ATOM_MEMORY_TIMING_FORMAT_V2;54275428typedef struct _ATOM_MEMORY_FORMAT5429{5430ULONG ulDllDisClock; // memory DLL will be disable when target memory clock is below this clock5431union{5432USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type5433USHORT usDDR3_Reserved; // Not used for DDR3 memory5434};5435union{5436USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type5437USHORT usDDR3_MR3; // Used for DDR3 memory5438};5439UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4;[3:0] - must not be used for now;5440UCHAR ucMemoryVenderID; // Predefined,never change across designs or memory type/vender. If not predefined, vendor detection table gets executed5441UCHAR ucRow; // Number of Row,in power of 2;5442UCHAR ucColumn; // Number of Column,in power of 2;5443UCHAR ucBank; // Nunber of Bank;5444UCHAR ucRank; // Number of Rank, in power of 25445UCHAR ucBurstSize; // burst size, 0= burst size=4 1= burst size=85446UCHAR ucDllDisBit; // position of DLL Enable/Disable bit in EMRS ( Extended Mode Register )5447UCHAR ucRefreshRateFactor; // memory refresh rate in unit of ms5448UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx165449UCHAR ucPreamble; //[7:4] Write Preamble, [3:0] Read Preamble5450UCHAR ucMemAttrib; // Memory Device Addribute, like RDBI/WDBI etc5451ATOM_MEMORY_TIMING_FORMAT asMemTiming[5]; //Memory Timing block sort from lower clock to higher clock5452}ATOM_MEMORY_FORMAT;545354545455typedef struct _ATOM_VRAM_MODULE_V35456{5457ULONG ulChannelMapCfg; // board dependent paramenter:Channel combination5458USHORT usSize; // size of ATOM_VRAM_MODULE_V35459USHORT usDefaultMVDDQ; // board dependent parameter:Default Memory Core Voltage5460USHORT usDefaultMVDDC; // board dependent parameter:Default Memory IO Voltage5461UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module5462UCHAR ucChannelNum; // board dependent parameter:Number of channel;5463UCHAR ucChannelSize; // board dependent parameter:32bit or 64bit5464UCHAR ucVREFI; // board dependnt parameter: EXT or INT +160mv to -140mv5465UCHAR ucNPL_RT; // board dependent parameter:NPL round trip delay, used for calculate memory timing parameters5466UCHAR ucFlag; // To enable/disable functionalities based on memory type5467ATOM_MEMORY_FORMAT asMemory; // describ all of video memory parameters from memory spec5468}ATOM_VRAM_MODULE_V3;546954705471//ATOM_VRAM_MODULE_V3.ucNPL_RT5472#define NPL_RT_MASK 0x0f5473#define BATTERY_ODT_MASK 0xc054745475#define ATOM_VRAM_MODULE ATOM_VRAM_MODULE_V354765477typedef struct _ATOM_VRAM_MODULE_V45478{5479ULONG ulChannelMapCfg; // board dependent parameter: Channel combination5480USHORT usModuleSize; // size of ATOM_VRAM_MODULE_V4, make it easy for VBIOS to look for next entry of VRAM_MODULE5481USHORT usPrivateReserved; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!!5482// MC_ARB_RAMCFG (includes NOOFBANK,NOOFRANKS,NOOFROWS,NOOFCOLS)5483USHORT usReserved;5484UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module5485UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4; 0x5:DDR5 [3:0] - Must be 0x0 for now;5486UCHAR ucChannelNum; // Number of channels present in this module config5487UCHAR ucChannelWidth; // 0 - 32 bits; 1 - 64 bits5488UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx165489UCHAR ucFlag; // To enable/disable functionalities based on memory type5490UCHAR ucMisc; // bit0: 0 - single rank; 1 - dual rank; bit2: 0 - burstlength 4, 1 - burstlength 85491UCHAR ucVREFI; // board dependent parameter5492UCHAR ucNPL_RT; // board dependent parameter:NPL round trip delay, used for calculate memory timing parameters5493UCHAR ucPreamble; // [7:4] Write Preamble, [3:0] Read Preamble5494UCHAR ucMemorySize; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!!5495// Total memory size in unit of 16MB for CONFIG_MEMSIZE - bit[23:0] zeros5496UCHAR ucReserved[3];54975498//compare with V3, we flat the struct by merging ATOM_MEMORY_FORMAT (as is) into V4 as the same level5499union{5500USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type5501USHORT usDDR3_Reserved;5502};5503union{5504USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type5505USHORT usDDR3_MR3; // Used for DDR3 memory5506};5507UCHAR ucMemoryVenderID; // Predefined, If not predefined, vendor detection table gets executed5508UCHAR ucRefreshRateFactor; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)5509UCHAR ucReserved2[2];5510ATOM_MEMORY_TIMING_FORMAT asMemTiming[5];//Memory Timing block sort from lower clock to higher clock5511}ATOM_VRAM_MODULE_V4;55125513#define VRAM_MODULE_V4_MISC_RANK_MASK 0x35514#define VRAM_MODULE_V4_MISC_DUAL_RANK 0x15515#define VRAM_MODULE_V4_MISC_BL_MASK 0x45516#define VRAM_MODULE_V4_MISC_BL8 0x45517#define VRAM_MODULE_V4_MISC_DUAL_CS 0x1055185519typedef struct _ATOM_VRAM_MODULE_V55520{5521ULONG ulChannelMapCfg; // board dependent parameter: Channel combination5522USHORT usModuleSize; // size of ATOM_VRAM_MODULE_V4, make it easy for VBIOS to look for next entry of VRAM_MODULE5523USHORT usPrivateReserved; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!!5524// MC_ARB_RAMCFG (includes NOOFBANK,NOOFRANKS,NOOFROWS,NOOFCOLS)5525USHORT usReserved;5526UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module5527UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4; 0x5:DDR5 [3:0] - Must be 0x0 for now;5528UCHAR ucChannelNum; // Number of channels present in this module config5529UCHAR ucChannelWidth; // 0 - 32 bits; 1 - 64 bits5530UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx165531UCHAR ucFlag; // To enable/disable functionalities based on memory type5532UCHAR ucMisc; // bit0: 0 - single rank; 1 - dual rank; bit2: 0 - burstlength 4, 1 - burstlength 85533UCHAR ucVREFI; // board dependent parameter5534UCHAR ucNPL_RT; // board dependent parameter:NPL round trip delay, used for calculate memory timing parameters5535UCHAR ucPreamble; // [7:4] Write Preamble, [3:0] Read Preamble5536UCHAR ucMemorySize; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!!5537// Total memory size in unit of 16MB for CONFIG_MEMSIZE - bit[23:0] zeros5538UCHAR ucReserved[3];55395540//compare with V3, we flat the struct by merging ATOM_MEMORY_FORMAT (as is) into V4 as the same level5541USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type5542USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type5543UCHAR ucMemoryVenderID; // Predefined, If not predefined, vendor detection table gets executed5544UCHAR ucRefreshRateFactor; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)5545UCHAR ucFIFODepth; // FIFO depth supposes to be detected during vendor detection, but if we dont do vendor detection we have to hardcode FIFO Depth5546UCHAR ucCDR_Bandwidth; // [0:3]=Read CDR bandwidth, [4:7] - Write CDR Bandwidth5547ATOM_MEMORY_TIMING_FORMAT_V1 asMemTiming[5];//Memory Timing block sort from lower clock to higher clock5548}ATOM_VRAM_MODULE_V5;55495550typedef struct _ATOM_VRAM_MODULE_V65551{5552ULONG ulChannelMapCfg; // board dependent parameter: Channel combination5553USHORT usModuleSize; // size of ATOM_VRAM_MODULE_V4, make it easy for VBIOS to look for next entry of VRAM_MODULE5554USHORT usPrivateReserved; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!!5555// MC_ARB_RAMCFG (includes NOOFBANK,NOOFRANKS,NOOFROWS,NOOFCOLS)5556USHORT usReserved;5557UCHAR ucExtMemoryID; // An external indicator (by hardcode, callback or pin) to tell what is the current memory module5558UCHAR ucMemoryType; // [7:4]=0x1:DDR1;=0x2:DDR2;=0x3:DDR3;=0x4:DDR4; 0x5:DDR5 [3:0] - Must be 0x0 for now;5559UCHAR ucChannelNum; // Number of channels present in this module config5560UCHAR ucChannelWidth; // 0 - 32 bits; 1 - 64 bits5561UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx165562UCHAR ucFlag; // To enable/disable functionalities based on memory type5563UCHAR ucMisc; // bit0: 0 - single rank; 1 - dual rank; bit2: 0 - burstlength 4, 1 - burstlength 85564UCHAR ucVREFI; // board dependent parameter5565UCHAR ucNPL_RT; // board dependent parameter:NPL round trip delay, used for calculate memory timing parameters5566UCHAR ucPreamble; // [7:4] Write Preamble, [3:0] Read Preamble5567UCHAR ucMemorySize; // BIOS internal reserved space to optimize code size, updated by the compiler, shouldn't be modified manually!!5568// Total memory size in unit of 16MB for CONFIG_MEMSIZE - bit[23:0] zeros5569UCHAR ucReserved[3];55705571//compare with V3, we flat the struct by merging ATOM_MEMORY_FORMAT (as is) into V4 as the same level5572USHORT usEMRS2Value; // EMRS2 Value is used for GDDR2 and GDDR4 memory type5573USHORT usEMRS3Value; // EMRS3 Value is used for GDDR2 and GDDR4 memory type5574UCHAR ucMemoryVenderID; // Predefined, If not predefined, vendor detection table gets executed5575UCHAR ucRefreshRateFactor; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)5576UCHAR ucFIFODepth; // FIFO depth supposes to be detected during vendor detection, but if we dont do vendor detection we have to hardcode FIFO Depth5577UCHAR ucCDR_Bandwidth; // [0:3]=Read CDR bandwidth, [4:7] - Write CDR Bandwidth5578ATOM_MEMORY_TIMING_FORMAT_V2 asMemTiming[5];//Memory Timing block sort from lower clock to higher clock5579}ATOM_VRAM_MODULE_V6;55805581typedef struct _ATOM_VRAM_MODULE_V75582{5583// Design Specific Values5584ULONG ulChannelMapCfg; // mmMC_SHARED_CHREMAP5585USHORT usModuleSize; // Size of ATOM_VRAM_MODULE_V75586USHORT usPrivateReserved; // MC_ARB_RAMCFG (includes NOOFBANK,NOOFRANKS,NOOFROWS,NOOFCOLS)5587USHORT usReserved;5588UCHAR ucExtMemoryID; // Current memory module ID5589UCHAR ucMemoryType; // MEM_TYPE_DDR2/DDR3/GDDR3/GDDR55590UCHAR ucChannelNum; // Number of mem. channels supported in this module5591UCHAR ucChannelWidth; // CHANNEL_16BIT/CHANNEL_32BIT/CHANNEL_64BIT5592UCHAR ucDensity; // _8Mx32, _16Mx32, _16Mx16, _32Mx165593UCHAR ucReserve; // Former container for Mx_FLAGS like DBI_AC_MODE_ENABLE_ASIC for GDDR4. Not used now.5594UCHAR ucMisc; // RANK_OF_THISMEMORY etc.5595UCHAR ucVREFI; // Not used.5596UCHAR ucNPL_RT; // Round trip delay (MC_SEQ_CAS_TIMING [28:24]:TCL=CL+NPL_RT-2). Always 2.5597UCHAR ucPreamble; // [7:4] Write Preamble, [3:0] Read Preamble5598UCHAR ucMemorySize; // Total memory size in unit of 16MB for CONFIG_MEMSIZE - bit[23:0] zeros5599UCHAR ucReserved[3];5600// Memory Module specific values5601USHORT usEMRS2Value; // EMRS2/MR2 Value.5602USHORT usEMRS3Value; // EMRS3/MR3 Value.5603UCHAR ucMemoryVenderID; // [7:4] Revision, [3:0] Vendor code5604UCHAR ucRefreshRateFactor; // [1:0]=RefreshFactor (00=8ms, 01=16ms, 10=32ms,11=64ms)5605UCHAR ucFIFODepth; // FIFO depth can be detected during vendor detection, here is hardcoded per memory5606UCHAR ucCDR_Bandwidth; // [0:3]=Read CDR bandwidth, [4:7] - Write CDR Bandwidth5607char strMemPNString[20]; // part number end with '0'.5608}ATOM_VRAM_MODULE_V7;56095610typedef struct _ATOM_VRAM_INFO_V25611{5612ATOM_COMMON_TABLE_HEADER sHeader;5613UCHAR ucNumOfVRAMModule;5614ATOM_VRAM_MODULE aVramInfo[ATOM_MAX_NUMBER_OF_VRAM_MODULE]; // just for allocation, real number of blocks is in ucNumOfVRAMModule;5615}ATOM_VRAM_INFO_V2;56165617typedef struct _ATOM_VRAM_INFO_V35618{5619ATOM_COMMON_TABLE_HEADER sHeader;5620USHORT usMemAdjustTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory vendor specific MC adjust setting5621USHORT usMemClkPatchTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory clock specific MC setting5622USHORT usRerseved;5623UCHAR aVID_PinsShift[9]; // 8 bit strap maximum+terminator5624UCHAR ucNumOfVRAMModule;5625ATOM_VRAM_MODULE aVramInfo[ATOM_MAX_NUMBER_OF_VRAM_MODULE]; // just for allocation, real number of blocks is in ucNumOfVRAMModule;5626ATOM_INIT_REG_BLOCK asMemPatch; // for allocation5627// ATOM_INIT_REG_BLOCK aMemAdjust;5628}ATOM_VRAM_INFO_V3;56295630#define ATOM_VRAM_INFO_LAST ATOM_VRAM_INFO_V356315632typedef struct _ATOM_VRAM_INFO_V45633{5634ATOM_COMMON_TABLE_HEADER sHeader;5635USHORT usMemAdjustTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory vendor specific MC adjust setting5636USHORT usMemClkPatchTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory clock specific MC setting5637USHORT usRerseved;5638UCHAR ucMemDQ7_0ByteRemap; // DQ line byte remap, =0: Memory Data line BYTE0, =1: BYTE1, =2: BYTE2, =3: BYTE35639ULONG ulMemDQ7_0BitRemap; // each DQ line ( 7~0) use 3bits, like: DQ0=Bit[2:0], DQ1:[5:3], ... DQ7:[23:21]5640UCHAR ucReservde[4];5641UCHAR ucNumOfVRAMModule;5642ATOM_VRAM_MODULE_V4 aVramInfo[ATOM_MAX_NUMBER_OF_VRAM_MODULE]; // just for allocation, real number of blocks is in ucNumOfVRAMModule;5643ATOM_INIT_REG_BLOCK asMemPatch; // for allocation5644// ATOM_INIT_REG_BLOCK aMemAdjust;5645}ATOM_VRAM_INFO_V4;56465647typedef struct _ATOM_VRAM_INFO_HEADER_V2_15648{5649ATOM_COMMON_TABLE_HEADER sHeader;5650USHORT usMemAdjustTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory vendor specific MC adjust setting5651USHORT usMemClkPatchTblOffset; // offset of ATOM_INIT_REG_BLOCK structure for memory clock specific MC setting5652USHORT usReserved[4];5653UCHAR ucNumOfVRAMModule; // indicate number of VRAM module5654UCHAR ucMemoryClkPatchTblVer; // version of memory AC timing register list5655UCHAR ucVramModuleVer; // indicate ATOM_VRAM_MODUE version5656UCHAR ucReserved;5657ATOM_VRAM_MODULE_V7 aVramInfo[ATOM_MAX_NUMBER_OF_VRAM_MODULE]; // just for allocation, real number of blocks is in ucNumOfVRAMModule;5658}ATOM_VRAM_INFO_HEADER_V2_1;565956605661typedef struct _ATOM_VRAM_GPIO_DETECTION_INFO5662{5663ATOM_COMMON_TABLE_HEADER sHeader;5664UCHAR aVID_PinsShift[9]; //8 bit strap maximum+terminator5665}ATOM_VRAM_GPIO_DETECTION_INFO;566656675668typedef struct _ATOM_MEMORY_TRAINING_INFO5669{5670ATOM_COMMON_TABLE_HEADER sHeader;5671UCHAR ucTrainingLoop;5672UCHAR ucReserved[3];5673ATOM_INIT_REG_BLOCK asMemTrainingSetting;5674}ATOM_MEMORY_TRAINING_INFO;567556765677typedef struct SW_I2C_CNTL_DATA_PARAMETERS5678{5679UCHAR ucControl;5680UCHAR ucData;5681UCHAR ucSatus;5682UCHAR ucTemp;5683} SW_I2C_CNTL_DATA_PARAMETERS;56845685#define SW_I2C_CNTL_DATA_PS_ALLOCATION SW_I2C_CNTL_DATA_PARAMETERS56865687typedef struct _SW_I2C_IO_DATA_PARAMETERS5688{5689USHORT GPIO_Info;5690UCHAR ucAct;5691UCHAR ucData;5692} SW_I2C_IO_DATA_PARAMETERS;56935694#define SW_I2C_IO_DATA_PS_ALLOCATION SW_I2C_IO_DATA_PARAMETERS56955696/****************************SW I2C CNTL DEFINITIONS**********************/5697#define SW_I2C_IO_RESET 05698#define SW_I2C_IO_GET 15699#define SW_I2C_IO_DRIVE 25700#define SW_I2C_IO_SET 35701#define SW_I2C_IO_START 457025703#define SW_I2C_IO_CLOCK 05704#define SW_I2C_IO_DATA 0x8057055706#define SW_I2C_IO_ZERO 05707#define SW_I2C_IO_ONE 0x10057085709#define SW_I2C_CNTL_READ 05710#define SW_I2C_CNTL_WRITE 15711#define SW_I2C_CNTL_START 25712#define SW_I2C_CNTL_STOP 35713#define SW_I2C_CNTL_OPEN 45714#define SW_I2C_CNTL_CLOSE 55715#define SW_I2C_CNTL_WRITE1BIT 657165717//==============================VESA definition Portion===============================5718#define VESA_OEM_PRODUCT_REV "01.00"5719#define VESA_MODE_ATTRIBUTE_MODE_SUPPORT 0xBB //refer to VBE spec p.32, no TTY support5720#define VESA_MODE_WIN_ATTRIBUTE 75721#define VESA_WIN_SIZE 6457225723typedef struct _PTR_32_BIT_STRUCTURE5724{5725USHORT Offset16;5726USHORT Segment16;5727} PTR_32_BIT_STRUCTURE;57285729typedef union _PTR_32_BIT_UNION5730{5731PTR_32_BIT_STRUCTURE SegmentOffset;5732ULONG Ptr32_Bit;5733} PTR_32_BIT_UNION;57345735typedef struct _VBE_1_2_INFO_BLOCK_UPDATABLE5736{5737UCHAR VbeSignature[4];5738USHORT VbeVersion;5739PTR_32_BIT_UNION OemStringPtr;5740UCHAR Capabilities[4];5741PTR_32_BIT_UNION VideoModePtr;5742USHORT TotalMemory;5743} VBE_1_2_INFO_BLOCK_UPDATABLE;574457455746typedef struct _VBE_2_0_INFO_BLOCK_UPDATABLE5747{5748VBE_1_2_INFO_BLOCK_UPDATABLE CommonBlock;5749USHORT OemSoftRev;5750PTR_32_BIT_UNION OemVendorNamePtr;5751PTR_32_BIT_UNION OemProductNamePtr;5752PTR_32_BIT_UNION OemProductRevPtr;5753} VBE_2_0_INFO_BLOCK_UPDATABLE;57545755typedef union _VBE_VERSION_UNION5756{5757VBE_2_0_INFO_BLOCK_UPDATABLE VBE_2_0_InfoBlock;5758VBE_1_2_INFO_BLOCK_UPDATABLE VBE_1_2_InfoBlock;5759} VBE_VERSION_UNION;57605761typedef struct _VBE_INFO_BLOCK5762{5763VBE_VERSION_UNION UpdatableVBE_Info;5764UCHAR Reserved[222];5765UCHAR OemData[256];5766} VBE_INFO_BLOCK;57675768typedef struct _VBE_FP_INFO5769{5770USHORT HSize;5771USHORT VSize;5772USHORT FPType;5773UCHAR RedBPP;5774UCHAR GreenBPP;5775UCHAR BlueBPP;5776UCHAR ReservedBPP;5777ULONG RsvdOffScrnMemSize;5778ULONG RsvdOffScrnMEmPtr;5779UCHAR Reserved[14];5780} VBE_FP_INFO;57815782typedef struct _VESA_MODE_INFO_BLOCK5783{5784// Mandatory information for all VBE revisions5785USHORT ModeAttributes; // dw ? ; mode attributes5786UCHAR WinAAttributes; // db ? ; window A attributes5787UCHAR WinBAttributes; // db ? ; window B attributes5788USHORT WinGranularity; // dw ? ; window granularity5789USHORT WinSize; // dw ? ; window size5790USHORT WinASegment; // dw ? ; window A start segment5791USHORT WinBSegment; // dw ? ; window B start segment5792ULONG WinFuncPtr; // dd ? ; real mode pointer to window function5793USHORT BytesPerScanLine;// dw ? ; bytes per scan line57945795//; Mandatory information for VBE 1.2 and above5796USHORT XResolution; // dw ? ; horizontal resolution in pixels or characters5797USHORT YResolution; // dw ? ; vertical resolution in pixels or characters5798UCHAR XCharSize; // db ? ; character cell width in pixels5799UCHAR YCharSize; // db ? ; character cell height in pixels5800UCHAR NumberOfPlanes; // db ? ; number of memory planes5801UCHAR BitsPerPixel; // db ? ; bits per pixel5802UCHAR NumberOfBanks; // db ? ; number of banks5803UCHAR MemoryModel; // db ? ; memory model type5804UCHAR BankSize; // db ? ; bank size in KB5805UCHAR NumberOfImagePages;// db ? ; number of images5806UCHAR ReservedForPageFunction;//db 1 ; reserved for page function58075808//; Direct Color fields(required for direct/6 and YUV/7 memory models)5809UCHAR RedMaskSize; // db ? ; size of direct color red mask in bits5810UCHAR RedFieldPosition; // db ? ; bit position of lsb of red mask5811UCHAR GreenMaskSize; // db ? ; size of direct color green mask in bits5812UCHAR GreenFieldPosition; // db ? ; bit position of lsb of green mask5813UCHAR BlueMaskSize; // db ? ; size of direct color blue mask in bits5814UCHAR BlueFieldPosition; // db ? ; bit position of lsb of blue mask5815UCHAR RsvdMaskSize; // db ? ; size of direct color reserved mask in bits5816UCHAR RsvdFieldPosition; // db ? ; bit position of lsb of reserved mask5817UCHAR DirectColorModeInfo;// db ? ; direct color mode attributes58185819//; Mandatory information for VBE 2.0 and above5820ULONG PhysBasePtr; // dd ? ; physical address for flat memory frame buffer5821ULONG Reserved_1; // dd 0 ; reserved - always set to 05822USHORT Reserved_2; // dw 0 ; reserved - always set to 058235824//; Mandatory information for VBE 3.0 and above5825USHORT LinBytesPerScanLine; // dw ? ; bytes per scan line for linear modes5826UCHAR BnkNumberOfImagePages;// db ? ; number of images for banked modes5827UCHAR LinNumberOfImagPages; // db ? ; number of images for linear modes5828UCHAR LinRedMaskSize; // db ? ; size of direct color red mask(linear modes)5829UCHAR LinRedFieldPosition; // db ? ; bit position of lsb of red mask(linear modes)5830UCHAR LinGreenMaskSize; // db ? ; size of direct color green mask(linear modes)5831UCHAR LinGreenFieldPosition;// db ? ; bit position of lsb of green mask(linear modes)5832UCHAR LinBlueMaskSize; // db ? ; size of direct color blue mask(linear modes)5833UCHAR LinBlueFieldPosition; // db ? ; bit position of lsb of blue mask(linear modes)5834UCHAR LinRsvdMaskSize; // db ? ; size of direct color reserved mask(linear modes)5835UCHAR LinRsvdFieldPosition; // db ? ; bit position of lsb of reserved mask(linear modes)5836ULONG MaxPixelClock; // dd ? ; maximum pixel clock(in Hz) for graphics mode5837UCHAR Reserved; // db 190 dup (0)5838} VESA_MODE_INFO_BLOCK;58395840// BIOS function CALLS5841#define ATOM_BIOS_EXTENDED_FUNCTION_CODE 0xA0 // ATI Extended Function code5842#define ATOM_BIOS_FUNCTION_COP_MODE 0x005843#define ATOM_BIOS_FUNCTION_SHORT_QUERY1 0x045844#define ATOM_BIOS_FUNCTION_SHORT_QUERY2 0x055845#define ATOM_BIOS_FUNCTION_SHORT_QUERY3 0x065846#define ATOM_BIOS_FUNCTION_GET_DDC 0x0B5847#define ATOM_BIOS_FUNCTION_ASIC_DSTATE 0x0E5848#define ATOM_BIOS_FUNCTION_DEBUG_PLAY 0x0F5849#define ATOM_BIOS_FUNCTION_STV_STD 0x165850#define ATOM_BIOS_FUNCTION_DEVICE_DET 0x175851#define ATOM_BIOS_FUNCTION_DEVICE_SWITCH 0x1858525853#define ATOM_BIOS_FUNCTION_PANEL_CONTROL 0x825854#define ATOM_BIOS_FUNCTION_OLD_DEVICE_DET 0x835855#define ATOM_BIOS_FUNCTION_OLD_DEVICE_SWITCH 0x845856#define ATOM_BIOS_FUNCTION_HW_ICON 0x8A5857#define ATOM_BIOS_FUNCTION_SET_CMOS 0x8B5858#define SUB_FUNCTION_UPDATE_DISPLAY_INFO 0x8000 // Sub function 805859#define SUB_FUNCTION_UPDATE_EXPANSION_INFO 0x8100 // Sub function 8058605861#define ATOM_BIOS_FUNCTION_DISPLAY_INFO 0x8D5862#define ATOM_BIOS_FUNCTION_DEVICE_ON_OFF 0x8E5863#define ATOM_BIOS_FUNCTION_VIDEO_STATE 0x8F5864#define ATOM_SUB_FUNCTION_GET_CRITICAL_STATE 0x0300 // Sub function 035865#define ATOM_SUB_FUNCTION_GET_LIDSTATE 0x0700 // Sub function 75866#define ATOM_SUB_FUNCTION_THERMAL_STATE_NOTICE 0x1400 // Notify caller the current thermal state5867#define ATOM_SUB_FUNCTION_CRITICAL_STATE_NOTICE 0x8300 // Notify caller the current critical state5868#define ATOM_SUB_FUNCTION_SET_LIDSTATE 0x8500 // Sub function 855869#define ATOM_SUB_FUNCTION_GET_REQ_DISPLAY_FROM_SBIOS_MODE 0x8900// Sub function 895870#define ATOM_SUB_FUNCTION_INFORM_ADC_SUPPORT 0x9400 // Notify caller that ADC is supported587158725873#define ATOM_BIOS_FUNCTION_VESA_DPMS 0x4F10 // Set DPMS5874#define ATOM_SUB_FUNCTION_SET_DPMS 0x0001 // BL: Sub function 015875#define ATOM_SUB_FUNCTION_GET_DPMS 0x0002 // BL: Sub function 025876#define ATOM_PARAMETER_VESA_DPMS_ON 0x0000 // BH Parameter for DPMS ON.5877#define ATOM_PARAMETER_VESA_DPMS_STANDBY 0x0100 // BH Parameter for DPMS STANDBY5878#define ATOM_PARAMETER_VESA_DPMS_SUSPEND 0x0200 // BH Parameter for DPMS SUSPEND5879#define ATOM_PARAMETER_VESA_DPMS_OFF 0x0400 // BH Parameter for DPMS OFF5880#define ATOM_PARAMETER_VESA_DPMS_REDUCE_ON 0x0800 // BH Parameter for DPMS REDUCE ON (NOT SUPPORTED)58815882#define ATOM_BIOS_RETURN_CODE_MASK 0x0000FF00L5883#define ATOM_BIOS_REG_HIGH_MASK 0x0000FF00L5884#define ATOM_BIOS_REG_LOW_MASK 0x000000FFL58855886// structure used for VBIOS only58875888//DispOutInfoTable5889typedef struct _ASIC_TRANSMITTER_INFO5890{5891USHORT usTransmitterObjId;5892USHORT usSupportDevice;5893UCHAR ucTransmitterCmdTblId;5894UCHAR ucConfig;5895UCHAR ucEncoderID; //available 1st encoder ( default )5896UCHAR ucOptionEncoderID; //available 2nd encoder ( optional )5897UCHAR uc2ndEncoderID;5898UCHAR ucReserved;5899}ASIC_TRANSMITTER_INFO;59005901#define ASIC_TRANSMITTER_INFO_CONFIG__DVO_SDR_MODE 0x015902#define ASIC_TRANSMITTER_INFO_CONFIG__COHERENT_MODE 0x025903#define ASIC_TRANSMITTER_INFO_CONFIG__ENCODEROBJ_ID_MASK 0xc45904#define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_A 0x005905#define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_B 0x045906#define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_C 0x405907#define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_D 0x445908#define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_E 0x805909#define ASIC_TRANSMITTER_INFO_CONFIG__ENCODER_F 0x8459105911typedef struct _ASIC_ENCODER_INFO5912{5913UCHAR ucEncoderID;5914UCHAR ucEncoderConfig;5915USHORT usEncoderCmdTblId;5916}ASIC_ENCODER_INFO;59175918typedef struct _ATOM_DISP_OUT_INFO5919{5920ATOM_COMMON_TABLE_HEADER sHeader;5921USHORT ptrTransmitterInfo;5922USHORT ptrEncoderInfo;5923ASIC_TRANSMITTER_INFO asTransmitterInfo[1];5924ASIC_ENCODER_INFO asEncoderInfo[1];5925}ATOM_DISP_OUT_INFO;59265927typedef struct _ATOM_DISP_OUT_INFO_V25928{5929ATOM_COMMON_TABLE_HEADER sHeader;5930USHORT ptrTransmitterInfo;5931USHORT ptrEncoderInfo;5932USHORT ptrMainCallParserFar; // direct address of main parser call in VBIOS binary.5933ASIC_TRANSMITTER_INFO asTransmitterInfo[1];5934ASIC_ENCODER_INFO asEncoderInfo[1];5935}ATOM_DISP_OUT_INFO_V2;59365937// DispDevicePriorityInfo5938typedef struct _ATOM_DISPLAY_DEVICE_PRIORITY_INFO5939{5940ATOM_COMMON_TABLE_HEADER sHeader;5941USHORT asDevicePriority[16];5942}ATOM_DISPLAY_DEVICE_PRIORITY_INFO;59435944//ProcessAuxChannelTransactionTable5945typedef struct _PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS5946{5947USHORT lpAuxRequest;5948USHORT lpDataOut;5949UCHAR ucChannelID;5950union5951{5952UCHAR ucReplyStatus;5953UCHAR ucDelay;5954};5955UCHAR ucDataOutLen;5956UCHAR ucReserved;5957}PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS;59585959//ProcessAuxChannelTransactionTable5960typedef struct _PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS_V25961{5962USHORT lpAuxRequest;5963USHORT lpDataOut;5964UCHAR ucChannelID;5965union5966{5967UCHAR ucReplyStatus;5968UCHAR ucDelay;5969};5970UCHAR ucDataOutLen;5971UCHAR ucHPD_ID; //=0: HPD1, =1: HPD2, =2: HPD3, =3: HPD4, =4: HPD5, =5: HPD65972}PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS_V2;59735974#define PROCESS_AUX_CHANNEL_TRANSACTION_PS_ALLOCATION PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS59755976//GetSinkType59775978typedef struct _DP_ENCODER_SERVICE_PARAMETERS5979{5980USHORT ucLinkClock;5981union5982{5983UCHAR ucConfig; // for DP training command5984UCHAR ucI2cId; // use for GET_SINK_TYPE command5985};5986UCHAR ucAction;5987UCHAR ucStatus;5988UCHAR ucLaneNum;5989UCHAR ucReserved[2];5990}DP_ENCODER_SERVICE_PARAMETERS;59915992// ucAction5993#define ATOM_DP_ACTION_GET_SINK_TYPE 0x015994/* obselete */5995#define ATOM_DP_ACTION_TRAINING_START 0x025996#define ATOM_DP_ACTION_TRAINING_COMPLETE 0x035997#define ATOM_DP_ACTION_TRAINING_PATTERN_SEL 0x045998#define ATOM_DP_ACTION_SET_VSWING_PREEMP 0x055999#define ATOM_DP_ACTION_GET_VSWING_PREEMP 0x066000#define ATOM_DP_ACTION_BLANKING 0x0760016002// ucConfig6003#define ATOM_DP_CONFIG_ENCODER_SEL_MASK 0x036004#define ATOM_DP_CONFIG_DIG1_ENCODER 0x006005#define ATOM_DP_CONFIG_DIG2_ENCODER 0x016006#define ATOM_DP_CONFIG_EXTERNAL_ENCODER 0x026007#define ATOM_DP_CONFIG_LINK_SEL_MASK 0x046008#define ATOM_DP_CONFIG_LINK_A 0x006009#define ATOM_DP_CONFIG_LINK_B 0x046010/* /obselete */6011#define DP_ENCODER_SERVICE_PS_ALLOCATION WRITE_ONE_BYTE_HW_I2C_DATA_PARAMETERS601260136014typedef struct _DP_ENCODER_SERVICE_PARAMETERS_V26015{6016USHORT usExtEncoderObjId; // External Encoder Object Id, output parameter only, use when ucAction = DP_SERVICE_V2_ACTION_DET_EXT_CONNECTION6017UCHAR ucAuxId;6018UCHAR ucAction;6019UCHAR ucSinkType; // Iput and Output parameters.6020UCHAR ucHPDId; // Input parameter, used when ucAction = DP_SERVICE_V2_ACTION_DET_EXT_CONNECTION6021UCHAR ucReserved[2];6022}DP_ENCODER_SERVICE_PARAMETERS_V2;60236024typedef struct _DP_ENCODER_SERVICE_PS_ALLOCATION_V26025{6026DP_ENCODER_SERVICE_PARAMETERS_V2 asDPServiceParam;6027PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS_V2 asAuxParam;6028}DP_ENCODER_SERVICE_PS_ALLOCATION_V2;60296030// ucAction6031#define DP_SERVICE_V2_ACTION_GET_SINK_TYPE 0x016032#define DP_SERVICE_V2_ACTION_DET_LCD_CONNECTION 0x02603360346035// DP_TRAINING_TABLE6036#define DPCD_SET_LINKRATE_LANENUM_PATTERN1_TBL_ADDR ATOM_DP_TRAINING_TBL_ADDR6037#define DPCD_SET_SS_CNTL_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 8 )6038#define DPCD_SET_LANE_VSWING_PREEMP_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 16 )6039#define DPCD_SET_TRAINING_PATTERN0_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 24 )6040#define DPCD_SET_TRAINING_PATTERN2_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 32)6041#define DPCD_GET_LINKRATE_LANENUM_SS_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 40)6042#define DPCD_GET_LANE_STATUS_ADJUST_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 48)6043#define DP_I2C_AUX_DDC_WRITE_START_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 60)6044#define DP_I2C_AUX_DDC_WRITE_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 64)6045#define DP_I2C_AUX_DDC_READ_START_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 72)6046#define DP_I2C_AUX_DDC_READ_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 76)6047#define DP_I2C_AUX_DDC_WRITE_END_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 80)6048#define DP_I2C_AUX_DDC_READ_END_TBL_ADDR (ATOM_DP_TRAINING_TBL_ADDR + 84)60496050typedef struct _PROCESS_I2C_CHANNEL_TRANSACTION_PARAMETERS6051{6052UCHAR ucI2CSpeed;6053union6054{6055UCHAR ucRegIndex;6056UCHAR ucStatus;6057};6058USHORT lpI2CDataOut;6059UCHAR ucFlag;6060UCHAR ucTransBytes;6061UCHAR ucSlaveAddr;6062UCHAR ucLineNumber;6063}PROCESS_I2C_CHANNEL_TRANSACTION_PARAMETERS;60646065#define PROCESS_I2C_CHANNEL_TRANSACTION_PS_ALLOCATION PROCESS_I2C_CHANNEL_TRANSACTION_PARAMETERS60666067//ucFlag6068#define HW_I2C_WRITE 16069#define HW_I2C_READ 06070#define I2C_2BYTE_ADDR 0x0260716072typedef struct _SET_HWBLOCK_INSTANCE_PARAMETER_V26073{6074UCHAR ucHWBlkInst; // HW block instance, 0, 1, 2, ...6075UCHAR ucReserved[3];6076}SET_HWBLOCK_INSTANCE_PARAMETER_V2;60776078#define HWBLKINST_INSTANCE_MASK 0x076079#define HWBLKINST_HWBLK_MASK 0xF06080#define HWBLKINST_HWBLK_SHIFT 0x0460816082//ucHWBlock6083#define SELECT_DISP_ENGINE 06084#define SELECT_DISP_PLL 16085#define SELECT_DCIO_UNIPHY_LINK0 26086#define SELECT_DCIO_UNIPHY_LINK1 36087#define SELECT_DCIO_IMPCAL 46088#define SELECT_DCIO_DIG 66089#define SELECT_CRTC_PIXEL_RATE 76090#define SELECT_VGA_BLK 860916092/****************************************************************************/6093//Portion VI: Definitinos for vbios MC scratch registers that driver used6094/****************************************************************************/60956096#define MC_MISC0__MEMORY_TYPE_MASK 0xF00000006097#define MC_MISC0__MEMORY_TYPE__GDDR1 0x100000006098#define MC_MISC0__MEMORY_TYPE__DDR2 0x200000006099#define MC_MISC0__MEMORY_TYPE__GDDR3 0x300000006100#define MC_MISC0__MEMORY_TYPE__GDDR4 0x400000006101#define MC_MISC0__MEMORY_TYPE__GDDR5 0x500000006102#define MC_MISC0__MEMORY_TYPE__DDR3 0xB000000061036104/****************************************************************************/6105//Portion VI: Definitinos being oboselete6106/****************************************************************************/61076108//==========================================================================================6109//Remove the definitions below when driver is ready!6110typedef struct _ATOM_DAC_INFO6111{6112ATOM_COMMON_TABLE_HEADER sHeader;6113USHORT usMaxFrequency; // in 10kHz unit6114USHORT usReserved;6115}ATOM_DAC_INFO;611661176118typedef struct _COMPASSIONATE_DATA6119{6120ATOM_COMMON_TABLE_HEADER sHeader;61216122//============================== DAC1 portion6123UCHAR ucDAC1_BG_Adjustment;6124UCHAR ucDAC1_DAC_Adjustment;6125USHORT usDAC1_FORCE_Data;6126//============================== DAC2 portion6127UCHAR ucDAC2_CRT2_BG_Adjustment;6128UCHAR ucDAC2_CRT2_DAC_Adjustment;6129USHORT usDAC2_CRT2_FORCE_Data;6130USHORT usDAC2_CRT2_MUX_RegisterIndex;6131UCHAR ucDAC2_CRT2_MUX_RegisterInfo; //Bit[4:0]=Bit position,Bit[7]=1:Active High;=0 Active Low6132UCHAR ucDAC2_NTSC_BG_Adjustment;6133UCHAR ucDAC2_NTSC_DAC_Adjustment;6134USHORT usDAC2_TV1_FORCE_Data;6135USHORT usDAC2_TV1_MUX_RegisterIndex;6136UCHAR ucDAC2_TV1_MUX_RegisterInfo; //Bit[4:0]=Bit position,Bit[7]=1:Active High;=0 Active Low6137UCHAR ucDAC2_CV_BG_Adjustment;6138UCHAR ucDAC2_CV_DAC_Adjustment;6139USHORT usDAC2_CV_FORCE_Data;6140USHORT usDAC2_CV_MUX_RegisterIndex;6141UCHAR ucDAC2_CV_MUX_RegisterInfo; //Bit[4:0]=Bit position,Bit[7]=1:Active High;=0 Active Low6142UCHAR ucDAC2_PAL_BG_Adjustment;6143UCHAR ucDAC2_PAL_DAC_Adjustment;6144USHORT usDAC2_TV2_FORCE_Data;6145}COMPASSIONATE_DATA;61466147/****************************Supported Device Info Table Definitions**********************/6148// ucConnectInfo:6149// [7:4] - connector type6150// = 1 - VGA connector6151// = 2 - DVI-I6152// = 3 - DVI-D6153// = 4 - DVI-A6154// = 5 - SVIDEO6155// = 6 - COMPOSITE6156// = 7 - LVDS6157// = 8 - DIGITAL LINK6158// = 9 - SCART6159// = 0xA - HDMI_type A6160// = 0xB - HDMI_type B6161// = 0xE - Special case1 (DVI+DIN)6162// Others=TBD6163// [3:0] - DAC Associated6164// = 0 - no DAC6165// = 1 - DACA6166// = 2 - DACB6167// = 3 - External DAC6168// Others=TBD6169//61706171typedef struct _ATOM_CONNECTOR_INFO6172{6173#if ATOM_BIG_ENDIAN6174UCHAR bfConnectorType:4;6175UCHAR bfAssociatedDAC:4;6176#else6177UCHAR bfAssociatedDAC:4;6178UCHAR bfConnectorType:4;6179#endif6180}ATOM_CONNECTOR_INFO;61816182typedef union _ATOM_CONNECTOR_INFO_ACCESS6183{6184ATOM_CONNECTOR_INFO sbfAccess;6185UCHAR ucAccess;6186}ATOM_CONNECTOR_INFO_ACCESS;61876188typedef struct _ATOM_CONNECTOR_INFO_I2C6189{6190ATOM_CONNECTOR_INFO_ACCESS sucConnectorInfo;6191ATOM_I2C_ID_CONFIG_ACCESS sucI2cId;6192}ATOM_CONNECTOR_INFO_I2C;619361946195typedef struct _ATOM_SUPPORTED_DEVICES_INFO6196{6197ATOM_COMMON_TABLE_HEADER sHeader;6198USHORT usDeviceSupport;6199ATOM_CONNECTOR_INFO_I2C asConnInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO];6200}ATOM_SUPPORTED_DEVICES_INFO;62016202#define NO_INT_SRC_MAPPED 0xFF62036204typedef struct _ATOM_CONNECTOR_INC_SRC_BITMAP6205{6206UCHAR ucIntSrcBitmap;6207}ATOM_CONNECTOR_INC_SRC_BITMAP;62086209typedef struct _ATOM_SUPPORTED_DEVICES_INFO_26210{6211ATOM_COMMON_TABLE_HEADER sHeader;6212USHORT usDeviceSupport;6213ATOM_CONNECTOR_INFO_I2C asConnInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_2];6214ATOM_CONNECTOR_INC_SRC_BITMAP asIntSrcInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_2];6215}ATOM_SUPPORTED_DEVICES_INFO_2;62166217typedef struct _ATOM_SUPPORTED_DEVICES_INFO_2d16218{6219ATOM_COMMON_TABLE_HEADER sHeader;6220USHORT usDeviceSupport;6221ATOM_CONNECTOR_INFO_I2C asConnInfo[ATOM_MAX_SUPPORTED_DEVICE];6222ATOM_CONNECTOR_INC_SRC_BITMAP asIntSrcInfo[ATOM_MAX_SUPPORTED_DEVICE];6223}ATOM_SUPPORTED_DEVICES_INFO_2d1;62246225#define ATOM_SUPPORTED_DEVICES_INFO_LAST ATOM_SUPPORTED_DEVICES_INFO_2d16226622762286229typedef struct _ATOM_MISC_CONTROL_INFO6230{6231USHORT usFrequency;6232UCHAR ucPLL_ChargePump; // PLL charge-pump gain control6233UCHAR ucPLL_DutyCycle; // PLL duty cycle control6234UCHAR ucPLL_VCO_Gain; // PLL VCO gain control6235UCHAR ucPLL_VoltageSwing; // PLL driver voltage swing control6236}ATOM_MISC_CONTROL_INFO;623762386239#define ATOM_MAX_MISC_INFO 462406241typedef struct _ATOM_TMDS_INFO6242{6243ATOM_COMMON_TABLE_HEADER sHeader;6244USHORT usMaxFrequency; // in 10Khz6245ATOM_MISC_CONTROL_INFO asMiscInfo[ATOM_MAX_MISC_INFO];6246}ATOM_TMDS_INFO;624762486249typedef struct _ATOM_ENCODER_ANALOG_ATTRIBUTE6250{6251UCHAR ucTVStandard; //Same as TV standards defined above,6252UCHAR ucPadding[1];6253}ATOM_ENCODER_ANALOG_ATTRIBUTE;62546255typedef struct _ATOM_ENCODER_DIGITAL_ATTRIBUTE6256{6257UCHAR ucAttribute; //Same as other digital encoder attributes defined above6258UCHAR ucPadding[1];6259}ATOM_ENCODER_DIGITAL_ATTRIBUTE;62606261typedef union _ATOM_ENCODER_ATTRIBUTE6262{6263ATOM_ENCODER_ANALOG_ATTRIBUTE sAlgAttrib;6264ATOM_ENCODER_DIGITAL_ATTRIBUTE sDigAttrib;6265}ATOM_ENCODER_ATTRIBUTE;626662676268typedef struct _DVO_ENCODER_CONTROL_PARAMETERS6269{6270USHORT usPixelClock;6271USHORT usEncoderID;6272UCHAR ucDeviceType; //Use ATOM_DEVICE_xxx1_Index to indicate device type only.6273UCHAR ucAction; //ATOM_ENABLE/ATOM_DISABLE/ATOM_HPD_INIT6274ATOM_ENCODER_ATTRIBUTE usDevAttr;6275}DVO_ENCODER_CONTROL_PARAMETERS;62766277typedef struct _DVO_ENCODER_CONTROL_PS_ALLOCATION6278{6279DVO_ENCODER_CONTROL_PARAMETERS sDVOEncoder;6280WRITE_ONE_BYTE_HW_I2C_DATA_PS_ALLOCATION sReserved; //Caller doesn't need to init this portion6281}DVO_ENCODER_CONTROL_PS_ALLOCATION;628262836284#define ATOM_XTMDS_ASIC_SI164_ID 16285#define ATOM_XTMDS_ASIC_SI178_ID 26286#define ATOM_XTMDS_ASIC_TFP513_ID 36287#define ATOM_XTMDS_SUPPORTED_SINGLELINK 0x000000016288#define ATOM_XTMDS_SUPPORTED_DUALLINK 0x000000026289#define ATOM_XTMDS_MVPU_FPGA 0x00000004629062916292typedef struct _ATOM_XTMDS_INFO6293{6294ATOM_COMMON_TABLE_HEADER sHeader;6295USHORT usSingleLinkMaxFrequency;6296ATOM_I2C_ID_CONFIG_ACCESS sucI2cId; //Point the ID on which I2C is used to control external chip6297UCHAR ucXtransimitterID;6298UCHAR ucSupportedLink; // Bit field, bit0=1, single link supported;bit1=1,dual link supported6299UCHAR ucSequnceAlterID; // Even with the same external TMDS asic, it's possible that the program seqence alters6300// due to design. This ID is used to alert driver that the sequence is not "standard"!6301UCHAR ucMasterAddress; // Address to control Master xTMDS Chip6302UCHAR ucSlaveAddress; // Address to control Slave xTMDS Chip6303}ATOM_XTMDS_INFO;63046305typedef struct _DFP_DPMS_STATUS_CHANGE_PARAMETERS6306{6307UCHAR ucEnable; // ATOM_ENABLE=On or ATOM_DISABLE=Off6308UCHAR ucDevice; // ATOM_DEVICE_DFP1_INDEX....6309UCHAR ucPadding[2];6310}DFP_DPMS_STATUS_CHANGE_PARAMETERS;63116312/****************************Legacy Power Play Table Definitions **********************/63136314//Definitions for ulPowerPlayMiscInfo6315#define ATOM_PM_MISCINFO_SPLIT_CLOCK 0x00000000L6316#define ATOM_PM_MISCINFO_USING_MCLK_SRC 0x00000001L6317#define ATOM_PM_MISCINFO_USING_SCLK_SRC 0x00000002L63186319#define ATOM_PM_MISCINFO_VOLTAGE_DROP_SUPPORT 0x00000004L6320#define ATOM_PM_MISCINFO_VOLTAGE_DROP_ACTIVE_HIGH 0x00000008L63216322#define ATOM_PM_MISCINFO_LOAD_PERFORMANCE_EN 0x00000010L63236324#define ATOM_PM_MISCINFO_ENGINE_CLOCK_CONTRL_EN 0x00000020L6325#define ATOM_PM_MISCINFO_MEMORY_CLOCK_CONTRL_EN 0x00000040L6326#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 program63276328#define ATOM_PM_MISCINFO_ASIC_REDUCED_SPEED_SCLK_EN 0x00000100L6329#define ATOM_PM_MISCINFO_ASIC_DYNAMIC_VOLTAGE_EN 0x00000200L6330#define ATOM_PM_MISCINFO_ASIC_SLEEP_MODE_EN 0x00000400L6331#define ATOM_PM_MISCINFO_LOAD_BALANCE_EN 0x00000800L6332#define ATOM_PM_MISCINFO_DEFAULT_DC_STATE_ENTRY_TRUE 0x00001000L6333#define ATOM_PM_MISCINFO_DEFAULT_LOW_DC_STATE_ENTRY_TRUE 0x00002000L6334#define ATOM_PM_MISCINFO_LOW_LCD_REFRESH_RATE 0x00004000L63356336#define ATOM_PM_MISCINFO_DRIVER_DEFAULT_MODE 0x00008000L6337#define ATOM_PM_MISCINFO_OVER_CLOCK_MODE 0x00010000L6338#define ATOM_PM_MISCINFO_OVER_DRIVE_MODE 0x00020000L6339#define ATOM_PM_MISCINFO_POWER_SAVING_MODE 0x00040000L6340#define ATOM_PM_MISCINFO_THERMAL_DIODE_MODE 0x00080000L63416342#define ATOM_PM_MISCINFO_FRAME_MODULATION_MASK 0x00300000L //0-FM Disable, 1-2 level FM, 2-4 level FM, 3-Reserved6343#define ATOM_PM_MISCINFO_FRAME_MODULATION_SHIFT 2063446345#define ATOM_PM_MISCINFO_DYN_CLK_3D_IDLE 0x00400000L6346#define ATOM_PM_MISCINFO_DYNAMIC_CLOCK_DIVIDER_BY_2 0x00800000L6347#define ATOM_PM_MISCINFO_DYNAMIC_CLOCK_DIVIDER_BY_4 0x01000000L6348#define ATOM_PM_MISCINFO_DYNAMIC_HDP_BLOCK_EN 0x02000000L //When set, Dynamic6349#define ATOM_PM_MISCINFO_DYNAMIC_MC_HOST_BLOCK_EN 0x04000000L //When set, Dynamic6350#define ATOM_PM_MISCINFO_3D_ACCELERATION_EN 0x08000000L //When set, This mode is for acceleated 3D mode63516352#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)6353#define ATOM_PM_MISCINFO_POWERPLAY_SETTINGS_GROUP_SHIFT 286354#define ATOM_PM_MISCINFO_ENABLE_BACK_BIAS 0x80000000L63556356#define ATOM_PM_MISCINFO2_SYSTEM_AC_LITE_MODE 0x00000001L6357#define ATOM_PM_MISCINFO2_MULTI_DISPLAY_SUPPORT 0x00000002L6358#define ATOM_PM_MISCINFO2_DYNAMIC_BACK_BIAS_EN 0x00000004L6359#define ATOM_PM_MISCINFO2_FS3D_OVERDRIVE_INFO 0x00000008L6360#define ATOM_PM_MISCINFO2_FORCEDLOWPWR_MODE 0x00000010L6361#define ATOM_PM_MISCINFO2_VDDCI_DYNAMIC_VOLTAGE_EN 0x00000020L6362#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.6363//If it's not set in any pp mode, driver will use its default logic to pick a pp mode in video playback6364#define ATOM_PM_MISCINFO2_NOT_VALID_ON_DC 0x00000080L6365#define ATOM_PM_MISCINFO2_STUTTER_MODE_EN 0x00000100L6366#define ATOM_PM_MISCINFO2_UVD_SUPPORT_MODE 0x00000200L63676368//ucTableFormatRevision=16369//ucTableContentRevision=16370typedef struct _ATOM_POWERMODE_INFO6371{6372ULONG ulMiscInfo; //The power level should be arranged in ascending order6373ULONG ulReserved1; // must set to 06374ULONG ulReserved2; // must set to 06375USHORT usEngineClock;6376USHORT usMemoryClock;6377UCHAR ucVoltageDropIndex; // index to GPIO table6378UCHAR ucSelectedPanel_RefreshRate;// panel refresh rate6379UCHAR ucMinTemperature;6380UCHAR ucMaxTemperature;6381UCHAR ucNumPciELanes; // number of PCIE lanes6382}ATOM_POWERMODE_INFO;63836384//ucTableFormatRevision=26385//ucTableContentRevision=16386typedef struct _ATOM_POWERMODE_INFO_V26387{6388ULONG ulMiscInfo; //The power level should be arranged in ascending order6389ULONG ulMiscInfo2;6390ULONG ulEngineClock;6391ULONG ulMemoryClock;6392UCHAR ucVoltageDropIndex; // index to GPIO table6393UCHAR ucSelectedPanel_RefreshRate;// panel refresh rate6394UCHAR ucMinTemperature;6395UCHAR ucMaxTemperature;6396UCHAR ucNumPciELanes; // number of PCIE lanes6397}ATOM_POWERMODE_INFO_V2;63986399//ucTableFormatRevision=26400//ucTableContentRevision=26401typedef struct _ATOM_POWERMODE_INFO_V36402{6403ULONG ulMiscInfo; //The power level should be arranged in ascending order6404ULONG ulMiscInfo2;6405ULONG ulEngineClock;6406ULONG ulMemoryClock;6407UCHAR ucVoltageDropIndex; // index to Core (VDDC) votage table6408UCHAR ucSelectedPanel_RefreshRate;// panel refresh rate6409UCHAR ucMinTemperature;6410UCHAR ucMaxTemperature;6411UCHAR ucNumPciELanes; // number of PCIE lanes6412UCHAR ucVDDCI_VoltageDropIndex; // index to VDDCI votage table6413}ATOM_POWERMODE_INFO_V3;641464156416#define ATOM_MAX_NUMBEROF_POWER_BLOCK 864176418#define ATOM_PP_OVERDRIVE_INTBITMAP_AUXWIN 0x016419#define ATOM_PP_OVERDRIVE_INTBITMAP_OVERDRIVE 0x0264206421#define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_LM63 0x016422#define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_ADM1032 0x026423#define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_ADM1030 0x036424#define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_MUA6649 0x046425#define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_LM64 0x056426#define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_F75375 0x066427#define ATOM_PP_OVERDRIVE_THERMALCONTROLLER_ASC7512 0x07 // Andigilog642864296430typedef struct _ATOM_POWERPLAY_INFO6431{6432ATOM_COMMON_TABLE_HEADER sHeader;6433UCHAR ucOverdriveThermalController;6434UCHAR ucOverdriveI2cLine;6435UCHAR ucOverdriveIntBitmap;6436UCHAR ucOverdriveControllerAddress;6437UCHAR ucSizeOfPowerModeEntry;6438UCHAR ucNumOfPowerModeEntries;6439ATOM_POWERMODE_INFO asPowerPlayInfo[ATOM_MAX_NUMBEROF_POWER_BLOCK];6440}ATOM_POWERPLAY_INFO;64416442typedef struct _ATOM_POWERPLAY_INFO_V26443{6444ATOM_COMMON_TABLE_HEADER sHeader;6445UCHAR ucOverdriveThermalController;6446UCHAR ucOverdriveI2cLine;6447UCHAR ucOverdriveIntBitmap;6448UCHAR ucOverdriveControllerAddress;6449UCHAR ucSizeOfPowerModeEntry;6450UCHAR ucNumOfPowerModeEntries;6451ATOM_POWERMODE_INFO_V2 asPowerPlayInfo[ATOM_MAX_NUMBEROF_POWER_BLOCK];6452}ATOM_POWERPLAY_INFO_V2;64536454typedef struct _ATOM_POWERPLAY_INFO_V36455{6456ATOM_COMMON_TABLE_HEADER sHeader;6457UCHAR ucOverdriveThermalController;6458UCHAR ucOverdriveI2cLine;6459UCHAR ucOverdriveIntBitmap;6460UCHAR ucOverdriveControllerAddress;6461UCHAR ucSizeOfPowerModeEntry;6462UCHAR ucNumOfPowerModeEntries;6463ATOM_POWERMODE_INFO_V3 asPowerPlayInfo[ATOM_MAX_NUMBEROF_POWER_BLOCK];6464}ATOM_POWERPLAY_INFO_V3;64656466/* New PPlib */6467/**************************************************************************/6468typedef struct _ATOM_PPLIB_THERMALCONTROLLER64696470{6471UCHAR ucType; // one of ATOM_PP_THERMALCONTROLLER_*6472UCHAR ucI2cLine; // as interpreted by DAL I2C6473UCHAR ucI2cAddress;6474UCHAR ucFanParameters; // Fan Control Parameters.6475UCHAR ucFanMinRPM; // Fan Minimum RPM (hundreds) -- for display purposes only.6476UCHAR ucFanMaxRPM; // Fan Maximum RPM (hundreds) -- for display purposes only.6477UCHAR ucReserved; // ----6478UCHAR ucFlags; // to be defined6479} ATOM_PPLIB_THERMALCONTROLLER;64806481#define ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK 0x0f6482#define ATOM_PP_FANPARAMETERS_NOFAN 0x80 // No fan is connected to this controller.64836484#define ATOM_PP_THERMALCONTROLLER_NONE 06485#define ATOM_PP_THERMALCONTROLLER_LM63 1 // Not used by PPLib6486#define ATOM_PP_THERMALCONTROLLER_ADM1032 2 // Not used by PPLib6487#define ATOM_PP_THERMALCONTROLLER_ADM1030 3 // Not used by PPLib6488#define ATOM_PP_THERMALCONTROLLER_MUA6649 4 // Not used by PPLib6489#define ATOM_PP_THERMALCONTROLLER_LM64 56490#define ATOM_PP_THERMALCONTROLLER_F75375 6 // Not used by PPLib6491#define ATOM_PP_THERMALCONTROLLER_RV6xx 76492#define ATOM_PP_THERMALCONTROLLER_RV770 86493#define ATOM_PP_THERMALCONTROLLER_ADT7473 96494#define ATOM_PP_THERMALCONTROLLER_EXTERNAL_GPIO 116495#define ATOM_PP_THERMALCONTROLLER_EVERGREEN 126496#define ATOM_PP_THERMALCONTROLLER_EMC2103 13 /* 0x0D */ // Only fan control will be implemented, do NOT show this in PPGen.6497#define ATOM_PP_THERMALCONTROLLER_SUMO 14 /* 0x0E */ // Sumo type, used internally6498#define ATOM_PP_THERMALCONTROLLER_NISLANDS 1564996500// Thermal controller 'combo type' to use an external controller for Fan control and an internal controller for thermal.6501// We probably should reserve the bit 0x80 for this use.6502// To keep the number of these types low we should also use the same code for all ASICs (i.e. do not distinguish RV6xx and RV7xx Internal here).6503// The driver can pick the correct internal controller based on the ASIC.65046505#define ATOM_PP_THERMALCONTROLLER_ADT7473_WITH_INTERNAL 0x89 // ADT7473 Fan Control + Internal Thermal Controller6506#define ATOM_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL 0x8D // EMC2103 Fan Control + Internal Thermal Controller65076508typedef struct _ATOM_PPLIB_STATE6509{6510UCHAR ucNonClockStateIndex;6511UCHAR ucClockStateIndices[1]; // variable-sized6512} ATOM_PPLIB_STATE;65136514typedef struct _ATOM_PPLIB_FANTABLE6515{6516UCHAR ucFanTableFormat; // Change this if the table format changes or version changes so that the other fields are not the same.6517UCHAR ucTHyst; // Temperature hysteresis. Integer.6518USHORT usTMin; // The temperature, in 0.01 centigrades, below which we just run at a minimal PWM.6519USHORT usTMed; // The middle temperature where we change slopes.6520USHORT usTHigh; // The high point above TMed for adjusting the second slope.6521USHORT usPWMMin; // The minimum PWM value in percent (0.01% increments).6522USHORT usPWMMed; // The PWM value (in percent) at TMed.6523USHORT usPWMHigh; // The PWM value at THigh.6524} ATOM_PPLIB_FANTABLE;65256526typedef struct _ATOM_PPLIB_EXTENDEDHEADER6527{6528USHORT usSize;6529ULONG ulMaxEngineClock; // For Overdrive.6530ULONG ulMaxMemoryClock; // For Overdrive.6531// Add extra system parameters here, always adjust size to include all fields.6532} ATOM_PPLIB_EXTENDEDHEADER;65336534//// ATOM_PPLIB_POWERPLAYTABLE::ulPlatformCaps6535#define ATOM_PP_PLATFORM_CAP_BACKBIAS 16536#define ATOM_PP_PLATFORM_CAP_POWERPLAY 26537#define ATOM_PP_PLATFORM_CAP_SBIOSPOWERSOURCE 46538#define ATOM_PP_PLATFORM_CAP_ASPM_L0s 86539#define ATOM_PP_PLATFORM_CAP_ASPM_L1 166540#define ATOM_PP_PLATFORM_CAP_HARDWAREDC 326541#define ATOM_PP_PLATFORM_CAP_GEMINIPRIMARY 646542#define ATOM_PP_PLATFORM_CAP_STEPVDDC 1286543#define ATOM_PP_PLATFORM_CAP_VOLTAGECONTROL 2566544#define ATOM_PP_PLATFORM_CAP_SIDEPORTCONTROL 5126545#define ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1 10246546#define ATOM_PP_PLATFORM_CAP_HTLINKCONTROL 20486547#define ATOM_PP_PLATFORM_CAP_MVDDCONTROL 40966548#define ATOM_PP_PLATFORM_CAP_GOTO_BOOT_ON_ALERT 0x2000 // Go to boot state on alerts, e.g. on an AC->DC transition.6549#define ATOM_PP_PLATFORM_CAP_DONT_WAIT_FOR_VBLANK_ON_ALERT 0x4000 // Do NOT wait for VBLANK during an alert (e.g. AC->DC transition).6550#define ATOM_PP_PLATFORM_CAP_VDDCI_CONTROL 0x8000 // Does the driver control VDDCI independently from VDDC.6551#define ATOM_PP_PLATFORM_CAP_REGULATOR_HOT 0x00010000 // Enable the 'regulator hot' feature.6552#define ATOM_PP_PLATFORM_CAP_BACO 0x00020000 // Does the driver supports BACO state.65536554typedef struct _ATOM_PPLIB_POWERPLAYTABLE6555{6556ATOM_COMMON_TABLE_HEADER sHeader;65576558UCHAR ucDataRevision;65596560UCHAR ucNumStates;6561UCHAR ucStateEntrySize;6562UCHAR ucClockInfoSize;6563UCHAR ucNonClockSize;65646565// offset from start of this table to array of ucNumStates ATOM_PPLIB_STATE structures6566USHORT usStateArrayOffset;65676568// offset from start of this table to array of ASIC-specific structures,6569// currently ATOM_PPLIB_CLOCK_INFO.6570USHORT usClockInfoArrayOffset;65716572// offset from start of this table to array of ATOM_PPLIB_NONCLOCK_INFO6573USHORT usNonClockInfoArrayOffset;65746575USHORT usBackbiasTime; // in microseconds6576USHORT usVoltageTime; // in microseconds6577USHORT usTableSize; //the size of this structure, or the extended structure65786579ULONG ulPlatformCaps; // See ATOM_PPLIB_CAPS_*65806581ATOM_PPLIB_THERMALCONTROLLER sThermalController;65826583USHORT usBootClockInfoOffset;6584USHORT usBootNonClockInfoOffset;65856586} ATOM_PPLIB_POWERPLAYTABLE;65876588typedef struct _ATOM_PPLIB_POWERPLAYTABLE26589{6590ATOM_PPLIB_POWERPLAYTABLE basicTable;6591UCHAR ucNumCustomThermalPolicy;6592USHORT usCustomThermalPolicyArrayOffset;6593}ATOM_PPLIB_POWERPLAYTABLE2, *LPATOM_PPLIB_POWERPLAYTABLE2;65946595typedef struct _ATOM_PPLIB_POWERPLAYTABLE36596{6597ATOM_PPLIB_POWERPLAYTABLE2 basicTable2;6598USHORT usFormatID; // To be used ONLY by PPGen.6599USHORT usFanTableOffset;6600USHORT usExtendendedHeaderOffset;6601} ATOM_PPLIB_POWERPLAYTABLE3, *LPATOM_PPLIB_POWERPLAYTABLE3;66026603typedef struct _ATOM_PPLIB_POWERPLAYTABLE46604{6605ATOM_PPLIB_POWERPLAYTABLE3 basicTable3;6606ULONG ulGoldenPPID; // PPGen use only6607ULONG ulGoldenRevision; // PPGen use only6608USHORT usVddcDependencyOnSCLKOffset;6609USHORT usVddciDependencyOnMCLKOffset;6610USHORT usVddcDependencyOnMCLKOffset;6611USHORT usMaxClockVoltageOnDCOffset;6612USHORT usReserved[2];6613} ATOM_PPLIB_POWERPLAYTABLE4, *LPATOM_PPLIB_POWERPLAYTABLE4;66146615typedef struct _ATOM_PPLIB_POWERPLAYTABLE56616{6617ATOM_PPLIB_POWERPLAYTABLE4 basicTable4;6618ULONG ulTDPLimit;6619ULONG ulNearTDPLimit;6620ULONG ulSQRampingThreshold;6621USHORT usCACLeakageTableOffset; // Points to ATOM_PPLIB_CAC_Leakage_Table6622ULONG ulCACLeakage; // TBD, this parameter is still under discussion. Change to ulReserved if not needed.6623ULONG ulReserved;6624} ATOM_PPLIB_POWERPLAYTABLE5, *LPATOM_PPLIB_POWERPLAYTABLE5;66256626//// ATOM_PPLIB_NONCLOCK_INFO::usClassification6627#define ATOM_PPLIB_CLASSIFICATION_UI_MASK 0x00076628#define ATOM_PPLIB_CLASSIFICATION_UI_SHIFT 06629#define ATOM_PPLIB_CLASSIFICATION_UI_NONE 06630#define ATOM_PPLIB_CLASSIFICATION_UI_BATTERY 16631#define ATOM_PPLIB_CLASSIFICATION_UI_BALANCED 36632#define ATOM_PPLIB_CLASSIFICATION_UI_PERFORMANCE 56633// 2, 4, 6, 7 are reserved66346635#define ATOM_PPLIB_CLASSIFICATION_BOOT 0x00086636#define ATOM_PPLIB_CLASSIFICATION_THERMAL 0x00106637#define ATOM_PPLIB_CLASSIFICATION_LIMITEDPOWERSOURCE 0x00206638#define ATOM_PPLIB_CLASSIFICATION_REST 0x00406639#define ATOM_PPLIB_CLASSIFICATION_FORCED 0x00806640#define ATOM_PPLIB_CLASSIFICATION_3DPERFORMANCE 0x01006641#define ATOM_PPLIB_CLASSIFICATION_OVERDRIVETEMPLATE 0x02006642#define ATOM_PPLIB_CLASSIFICATION_UVDSTATE 0x04006643#define ATOM_PPLIB_CLASSIFICATION_3DLOW 0x08006644#define ATOM_PPLIB_CLASSIFICATION_ACPI 0x10006645#define ATOM_PPLIB_CLASSIFICATION_HD2STATE 0x20006646#define ATOM_PPLIB_CLASSIFICATION_HDSTATE 0x40006647#define ATOM_PPLIB_CLASSIFICATION_SDSTATE 0x800066486649//// ATOM_PPLIB_NONCLOCK_INFO::usClassification26650#define ATOM_PPLIB_CLASSIFICATION2_LIMITEDPOWERSOURCE_2 0x00016651#define ATOM_PPLIB_CLASSIFICATION2_ULV 0x000266526653//// ATOM_PPLIB_NONCLOCK_INFO::ulCapsAndSettings6654#define ATOM_PPLIB_SINGLE_DISPLAY_ONLY 0x000000016655#define ATOM_PPLIB_SUPPORTS_VIDEO_PLAYBACK 0x0000000266566657// 0 is 2.5Gb/s, 1 is 5Gb/s6658#define ATOM_PPLIB_PCIE_LINK_SPEED_MASK 0x000000046659#define ATOM_PPLIB_PCIE_LINK_SPEED_SHIFT 266606661// lanes - 1: 1, 2, 4, 8, 12, 16 permitted by PCIE spec6662#define ATOM_PPLIB_PCIE_LINK_WIDTH_MASK 0x000000F86663#define ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT 366646665// lookup into reduced refresh-rate table6666#define ATOM_PPLIB_LIMITED_REFRESHRATE_VALUE_MASK 0x00000F006667#define ATOM_PPLIB_LIMITED_REFRESHRATE_VALUE_SHIFT 866686669#define ATOM_PPLIB_LIMITED_REFRESHRATE_UNLIMITED 06670#define ATOM_PPLIB_LIMITED_REFRESHRATE_50HZ 16671// 2-15 TBD as needed.66726673#define ATOM_PPLIB_SOFTWARE_DISABLE_LOADBALANCING 0x000010006674#define ATOM_PPLIB_SOFTWARE_ENABLE_SLEEP_FOR_TIMESTAMPS 0x000020006675#define ATOM_PPLIB_DISALLOW_ON_DC 0x000040006676#define ATOM_PPLIB_ENABLE_VARIBRIGHT 0x0000800066776678//memory related flags6679#define ATOM_PPLIB_SWSTATE_MEMORY_DLL_OFF 0x00001000066806681//M3 Arb //2bits, current 3 sets of parameters in total6682#define ATOM_PPLIB_M3ARB_MASK 0x000600006683#define ATOM_PPLIB_M3ARB_SHIFT 1766846685#define ATOM_PPLIB_ENABLE_DRR 0x0008000066866687// remaining 16 bits are reserved6688typedef struct _ATOM_PPLIB_THERMAL_STATE6689{6690UCHAR ucMinTemperature;6691UCHAR ucMaxTemperature;6692UCHAR ucThermalAction;6693}ATOM_PPLIB_THERMAL_STATE, *LPATOM_PPLIB_THERMAL_STATE;66946695// Contained in an array starting at the offset6696// in ATOM_PPLIB_POWERPLAYTABLE::usNonClockInfoArrayOffset.6697// referenced from ATOM_PPLIB_STATE_INFO::ucNonClockStateIndex6698#define ATOM_PPLIB_NONCLOCKINFO_VER1 126699#define ATOM_PPLIB_NONCLOCKINFO_VER2 246700typedef struct _ATOM_PPLIB_NONCLOCK_INFO6701{6702USHORT usClassification;6703UCHAR ucMinTemperature;6704UCHAR ucMaxTemperature;6705ULONG ulCapsAndSettings;6706UCHAR ucRequiredPower;6707USHORT usClassification2;6708ULONG ulVCLK;6709ULONG ulDCLK;6710UCHAR ucUnused[5];6711} ATOM_PPLIB_NONCLOCK_INFO;67126713// Contained in an array starting at the offset6714// in ATOM_PPLIB_POWERPLAYTABLE::usClockInfoArrayOffset.6715// referenced from ATOM_PPLIB_STATE::ucClockStateIndices6716typedef struct _ATOM_PPLIB_R600_CLOCK_INFO6717{6718USHORT usEngineClockLow;6719UCHAR ucEngineClockHigh;67206721USHORT usMemoryClockLow;6722UCHAR ucMemoryClockHigh;67236724USHORT usVDDC;6725USHORT usUnused1;6726USHORT usUnused2;67276728ULONG ulFlags; // ATOM_PPLIB_R600_FLAGS_*67296730} ATOM_PPLIB_R600_CLOCK_INFO;67316732// ulFlags in ATOM_PPLIB_R600_CLOCK_INFO6733#define ATOM_PPLIB_R600_FLAGS_PCIEGEN2 16734#define ATOM_PPLIB_R600_FLAGS_UVDSAFE 26735#define ATOM_PPLIB_R600_FLAGS_BACKBIASENABLE 46736#define ATOM_PPLIB_R600_FLAGS_MEMORY_ODT_OFF 86737#define ATOM_PPLIB_R600_FLAGS_MEMORY_DLL_OFF 166738#define ATOM_PPLIB_R600_FLAGS_LOWPOWER 32 // On the RV770 use 'low power' setting (sequencer S0).67396740typedef struct _ATOM_PPLIB_EVERGREEN_CLOCK_INFO6741{6742USHORT usEngineClockLow;6743UCHAR ucEngineClockHigh;67446745USHORT usMemoryClockLow;6746UCHAR ucMemoryClockHigh;67476748USHORT usVDDC;6749USHORT usVDDCI;6750USHORT usUnused;67516752ULONG ulFlags; // ATOM_PPLIB_R600_FLAGS_*67536754} ATOM_PPLIB_EVERGREEN_CLOCK_INFO;67556756typedef struct _ATOM_PPLIB_RS780_CLOCK_INFO67576758{6759USHORT usLowEngineClockLow; // Low Engine clock in MHz (the same way as on the R600).6760UCHAR ucLowEngineClockHigh;6761USHORT usHighEngineClockLow; // High Engine clock in MHz.6762UCHAR ucHighEngineClockHigh;6763USHORT usMemoryClockLow; // For now one of the ATOM_PPLIB_RS780_SPMCLK_XXXX constants.6764UCHAR ucMemoryClockHigh; // Currentyl unused.6765UCHAR ucPadding; // For proper alignment and size.6766USHORT usVDDC; // For the 780, use: None, Low, High, Variable6767UCHAR ucMaxHTLinkWidth; // From SBIOS - {2, 4, 8, 16}6768UCHAR ucMinHTLinkWidth; // From SBIOS - {2, 4, 8, 16}. Effective only if CDLW enabled. Minimum down stream width could be bigger as display BW requirement.6769USHORT usHTLinkFreq; // See definition ATOM_PPLIB_RS780_HTLINKFREQ_xxx or in MHz(>=200).6770ULONG ulFlags;6771} ATOM_PPLIB_RS780_CLOCK_INFO;67726773#define ATOM_PPLIB_RS780_VOLTAGE_NONE 06774#define ATOM_PPLIB_RS780_VOLTAGE_LOW 16775#define ATOM_PPLIB_RS780_VOLTAGE_HIGH 26776#define ATOM_PPLIB_RS780_VOLTAGE_VARIABLE 367776778#define ATOM_PPLIB_RS780_SPMCLK_NONE 0 // We cannot change the side port memory clock, leave it as it is.6779#define ATOM_PPLIB_RS780_SPMCLK_LOW 16780#define ATOM_PPLIB_RS780_SPMCLK_HIGH 267816782#define ATOM_PPLIB_RS780_HTLINKFREQ_NONE 06783#define ATOM_PPLIB_RS780_HTLINKFREQ_LOW 16784#define ATOM_PPLIB_RS780_HTLINKFREQ_HIGH 267856786typedef struct _ATOM_PPLIB_SUMO_CLOCK_INFO{6787USHORT usEngineClockLow; //clockfrequency & 0xFFFF. The unit is in 10khz6788UCHAR ucEngineClockHigh; //clockfrequency >> 16.6789UCHAR vddcIndex; //2-bit vddc index;6790UCHAR leakage; //please use 8-bit absolute value, not the 6-bit % value6791//please initalize to 06792UCHAR rsv;6793//please initalize to 06794USHORT rsv1;6795//please initialize to 0s6796ULONG rsv2[2];6797}ATOM_PPLIB_SUMO_CLOCK_INFO;6798679968006801typedef struct _ATOM_PPLIB_STATE_V26802{6803//number of valid dpm levels in this state; Driver uses it to calculate the whole6804//size of the state: sizeof(ATOM_PPLIB_STATE_V2) + (ucNumDPMLevels - 1) * sizeof(UCHAR)6805UCHAR ucNumDPMLevels;68066807//a index to the array of nonClockInfos6808UCHAR nonClockInfoIndex;6809/**6810* Driver will read the first ucNumDPMLevels in this array6811*/6812UCHAR clockInfoIndex[1];6813} ATOM_PPLIB_STATE_V2;68146815typedef struct StateArray{6816//how many states we have6817UCHAR ucNumEntries;68186819ATOM_PPLIB_STATE_V2 states[1];6820}StateArray;682168226823typedef struct ClockInfoArray{6824//how many clock levels we have6825UCHAR ucNumEntries;68266827//sizeof(ATOM_PPLIB_SUMO_CLOCK_INFO)6828UCHAR ucEntrySize;68296830//this is for Sumo6831ATOM_PPLIB_SUMO_CLOCK_INFO clockInfo[1];6832}ClockInfoArray;68336834typedef struct NonClockInfoArray{68356836//how many non-clock levels we have. normally should be same as number of states6837UCHAR ucNumEntries;6838//sizeof(ATOM_PPLIB_NONCLOCK_INFO)6839UCHAR ucEntrySize;68406841ATOM_PPLIB_NONCLOCK_INFO nonClockInfo[1];6842}NonClockInfoArray;68436844typedef struct _ATOM_PPLIB_Clock_Voltage_Dependency_Record6845{6846USHORT usClockLow;6847UCHAR ucClockHigh;6848USHORT usVoltage;6849}ATOM_PPLIB_Clock_Voltage_Dependency_Record;68506851typedef struct _ATOM_PPLIB_Clock_Voltage_Dependency_Table6852{6853UCHAR ucNumEntries; // Number of entries.6854ATOM_PPLIB_Clock_Voltage_Dependency_Record entries[1]; // Dynamically allocate entries.6855}ATOM_PPLIB_Clock_Voltage_Dependency_Table;68566857typedef struct _ATOM_PPLIB_Clock_Voltage_Limit_Record6858{6859USHORT usSclkLow;6860UCHAR ucSclkHigh;6861USHORT usMclkLow;6862UCHAR ucMclkHigh;6863USHORT usVddc;6864USHORT usVddci;6865}ATOM_PPLIB_Clock_Voltage_Limit_Record;68666867typedef struct _ATOM_PPLIB_Clock_Voltage_Limit_Table6868{6869UCHAR ucNumEntries; // Number of entries.6870ATOM_PPLIB_Clock_Voltage_Limit_Record entries[1]; // Dynamically allocate entries.6871}ATOM_PPLIB_Clock_Voltage_Limit_Table;68726873/**************************************************************************/687468756876// Following definitions are for compatibility issue in different SW components.6877#define ATOM_MASTER_DATA_TABLE_REVISION 0x016878#define Object_Info Object_Header6879#define AdjustARB_SEQ MC_InitParameter6880#define VRAM_GPIO_DetectionInfo VoltageObjectInfo6881#define ASIC_VDDCI_Info ASIC_ProfilingInfo6882#define ASIC_MVDDQ_Info MemoryTrainingInfo6883#define SS_Info PPLL_SS_Info6884#define ASIC_MVDDC_Info ASIC_InternalSS_Info6885#define DispDevicePriorityInfo SaveRestoreInfo6886#define DispOutInfo TV_VideoMode688768886889#define ATOM_ENCODER_OBJECT_TABLE ATOM_OBJECT_TABLE6890#define ATOM_CONNECTOR_OBJECT_TABLE ATOM_OBJECT_TABLE68916892//New device naming, remove them when both DAL/VBIOS is ready6893#define DFP2I_OUTPUT_CONTROL_PARAMETERS CRT1_OUTPUT_CONTROL_PARAMETERS6894#define DFP2I_OUTPUT_CONTROL_PS_ALLOCATION DFP2I_OUTPUT_CONTROL_PARAMETERS68956896#define DFP1X_OUTPUT_CONTROL_PARAMETERS CRT1_OUTPUT_CONTROL_PARAMETERS6897#define DFP1X_OUTPUT_CONTROL_PS_ALLOCATION DFP1X_OUTPUT_CONTROL_PARAMETERS68986899#define DFP1I_OUTPUT_CONTROL_PARAMETERS DFP1_OUTPUT_CONTROL_PARAMETERS6900#define DFP1I_OUTPUT_CONTROL_PS_ALLOCATION DFP1_OUTPUT_CONTROL_PS_ALLOCATION69016902#define ATOM_DEVICE_DFP1I_SUPPORT ATOM_DEVICE_DFP1_SUPPORT6903#define ATOM_DEVICE_DFP1X_SUPPORT ATOM_DEVICE_DFP2_SUPPORT69046905#define ATOM_DEVICE_DFP1I_INDEX ATOM_DEVICE_DFP1_INDEX6906#define ATOM_DEVICE_DFP1X_INDEX ATOM_DEVICE_DFP2_INDEX69076908#define ATOM_DEVICE_DFP2I_INDEX 0x000000096909#define ATOM_DEVICE_DFP2I_SUPPORT (0x1L << ATOM_DEVICE_DFP2I_INDEX)69106911#define ATOM_S0_DFP1I ATOM_S0_DFP16912#define ATOM_S0_DFP1X ATOM_S0_DFP269136914#define ATOM_S0_DFP2I 0x00200000L6915#define ATOM_S0_DFP2Ib2 0x2069166917#define ATOM_S2_DFP1I_DPMS_STATE ATOM_S2_DFP1_DPMS_STATE6918#define ATOM_S2_DFP1X_DPMS_STATE ATOM_S2_DFP2_DPMS_STATE69196920#define ATOM_S2_DFP2I_DPMS_STATE 0x02000000L6921#define ATOM_S2_DFP2I_DPMS_STATEb3 0x0269226923#define ATOM_S3_DFP2I_ACTIVEb1 0x0269246925#define ATOM_S3_DFP1I_ACTIVE ATOM_S3_DFP1_ACTIVE6926#define ATOM_S3_DFP1X_ACTIVE ATOM_S3_DFP2_ACTIVE69276928#define ATOM_S3_DFP2I_ACTIVE 0x00000200L69296930#define ATOM_S3_DFP1I_CRTC_ACTIVE ATOM_S3_DFP1_CRTC_ACTIVE6931#define ATOM_S3_DFP1X_CRTC_ACTIVE ATOM_S3_DFP2_CRTC_ACTIVE6932#define ATOM_S3_DFP2I_CRTC_ACTIVE 0x02000000L69336934#define ATOM_S3_DFP2I_CRTC_ACTIVEb3 0x026935#define ATOM_S5_DOS_REQ_DFP2Ib1 0x0269366937#define ATOM_S5_DOS_REQ_DFP2I 0x02006938#define ATOM_S6_ACC_REQ_DFP1I ATOM_S6_ACC_REQ_DFP16939#define ATOM_S6_ACC_REQ_DFP1X ATOM_S6_ACC_REQ_DFP269406941#define ATOM_S6_ACC_REQ_DFP2Ib3 0x026942#define ATOM_S6_ACC_REQ_DFP2I 0x02000000L69436944#define TMDS1XEncoderControl DVOEncoderControl6945#define DFP1XOutputControl DVOOutputControl69466947#define ExternalDFPOutputControl DFP1XOutputControl6948#define EnableExternalTMDS_Encoder TMDS1XEncoderControl69496950#define DFP1IOutputControl TMDSAOutputControl6951#define DFP2IOutputControl LVTMAOutputControl69526953#define DAC1_ENCODER_CONTROL_PARAMETERS DAC_ENCODER_CONTROL_PARAMETERS6954#define DAC1_ENCODER_CONTROL_PS_ALLOCATION DAC_ENCODER_CONTROL_PS_ALLOCATION69556956#define DAC2_ENCODER_CONTROL_PARAMETERS DAC_ENCODER_CONTROL_PARAMETERS6957#define DAC2_ENCODER_CONTROL_PS_ALLOCATION DAC_ENCODER_CONTROL_PS_ALLOCATION69586959#define ucDac1Standard ucDacStandard6960#define ucDac2Standard ucDacStandard69616962#define TMDS1EncoderControl TMDSAEncoderControl6963#define TMDS2EncoderControl LVTMAEncoderControl69646965#define DFP1OutputControl TMDSAOutputControl6966#define DFP2OutputControl LVTMAOutputControl6967#define CRT1OutputControl DAC1OutputControl6968#define CRT2OutputControl DAC2OutputControl69696970//These two lines will be removed for sure in a few days, will follow up with Michael V.6971#define EnableLVDS_SS EnableSpreadSpectrumOnPPLL6972#define ENABLE_LVDS_SS_PARAMETERS_V3 ENABLE_SPREAD_SPECTRUM_ON_PPLL69736974//#define ATOM_S2_CRT1_DPMS_STATE 0x00010000L6975//#define ATOM_S2_LCD1_DPMS_STATE ATOM_S2_CRT1_DPMS_STATE6976//#define ATOM_S2_TV1_DPMS_STATE ATOM_S2_CRT1_DPMS_STATE6977//#define ATOM_S2_DFP1_DPMS_STATE ATOM_S2_CRT1_DPMS_STATE6978//#define ATOM_S2_CRT2_DPMS_STATE ATOM_S2_CRT1_DPMS_STATE69796980#define ATOM_S6_ACC_REQ_TV2 0x00400000L6981#define ATOM_DEVICE_TV2_INDEX 0x000000066982#define ATOM_DEVICE_TV2_SUPPORT (0x1L << ATOM_DEVICE_TV2_INDEX)6983#define ATOM_S0_TV2 0x00100000L6984#define ATOM_S3_TV2_ACTIVE ATOM_S3_DFP6_ACTIVE6985#define ATOM_S3_TV2_CRTC_ACTIVE ATOM_S3_DFP6_CRTC_ACTIVE69866987//6988#define ATOM_S2_CRT1_DPMS_STATE 0x00010000L6989#define ATOM_S2_LCD1_DPMS_STATE 0x00020000L6990#define ATOM_S2_TV1_DPMS_STATE 0x00040000L6991#define ATOM_S2_DFP1_DPMS_STATE 0x00080000L6992#define ATOM_S2_CRT2_DPMS_STATE 0x00100000L6993#define ATOM_S2_LCD2_DPMS_STATE 0x00200000L6994#define ATOM_S2_TV2_DPMS_STATE 0x00400000L6995#define ATOM_S2_DFP2_DPMS_STATE 0x00800000L6996#define ATOM_S2_CV_DPMS_STATE 0x01000000L6997#define ATOM_S2_DFP3_DPMS_STATE 0x02000000L6998#define ATOM_S2_DFP4_DPMS_STATE 0x04000000L6999#define ATOM_S2_DFP5_DPMS_STATE 0x08000000L70007001#define ATOM_S2_CRT1_DPMS_STATEb2 0x017002#define ATOM_S2_LCD1_DPMS_STATEb2 0x027003#define ATOM_S2_TV1_DPMS_STATEb2 0x047004#define ATOM_S2_DFP1_DPMS_STATEb2 0x087005#define ATOM_S2_CRT2_DPMS_STATEb2 0x107006#define ATOM_S2_LCD2_DPMS_STATEb2 0x207007#define ATOM_S2_TV2_DPMS_STATEb2 0x407008#define ATOM_S2_DFP2_DPMS_STATEb2 0x807009#define ATOM_S2_CV_DPMS_STATEb3 0x017010#define ATOM_S2_DFP3_DPMS_STATEb3 0x027011#define ATOM_S2_DFP4_DPMS_STATEb3 0x047012#define ATOM_S2_DFP5_DPMS_STATEb3 0x0870137014#define ATOM_S3_ASIC_GUI_ENGINE_HUNGb3 0x207015#define ATOM_S3_ALLOW_FAST_PWR_SWITCHb3 0x407016#define ATOM_S3_RQST_GPU_USE_MIN_PWRb3 0x8070177018/*********************************************************************************/70197020#pragma pack() // BIOS data must use byte aligment70217022#endif /* _ATOMBIOS_H */702370247025