CloverBootloader/Include/IndustryStandard/AtomBios.h

182 lines
8.5 KiB
C

/****************************************************************************/
/*Portion I: Definitions shared between VBIOS and Driver */
/****************************************************************************/
#ifndef _SHORT_ATOMBIOS_H
#define _SHORT_ATOMBIOS_H
#define ATOM_VERSION_MAJOR 0x00020000
#define ATOM_VERSION_MINOR 0x00000002
#define ATOM_HEADER_VERSION (ATOM_VERSION_MAJOR | ATOM_VERSION_MINOR)
#pragma pack(1) /* BIOS data must use byte aligment */
/* Define offset to location of ROM header. */
#define OFFSET_TO_POINTER_TO_ATOM_ROM_HEADER 0x00000048L
#define OFFSET_TO_ATOM_ROM_IMAGE_SIZE 0x00000002L
typedef struct _ATOM_COMMON_TABLE_HEADER
{
UINT16 usStructureSize;
UINT8 ucTableFormatRevision; /*Change it when the Parser is not backward compatible */
UINT8 ucTableContentRevision; /*Change it only when the table needs to change but the firmware */
/*Image can't be updated, while Driver needs to carry the new table! */
} ATOM_COMMON_TABLE_HEADER;
typedef struct _ATOM_ROM_HEADER
{
ATOM_COMMON_TABLE_HEADER sHeader;
UINT8 uaFirmWareSignature[4]; /*Signature to distinguish between Atombios and non-atombios,
+ atombios should init it as "ATOM", don't change the position */
UINT16 usBiosRuntimeSegmentAddress;
UINT16 usProtectedModeInfoOffset;
UINT16 usConfigFilenameOffset;
UINT16 usCRC_BlockOffset;
UINT16 usBIOS_BootupMessageOffset;
UINT16 usInt10Offset;
UINT16 usPciBusDevInitCode;
UINT16 usIoBaseAddress;
UINT16 usSubsystemVendorID;
UINT16 usSubsystemID;
UINT16 usPCI_InfoOffset;
UINT16 usMasterCommandTableOffset; /*Offset for SW to get all command table offsets, Don't change the position */
UINT16 usMasterDataTableOffset; /*Offset for SW to get all data table offsets, Don't change the position */
UINT8 ucExtendedFunctionCode;
UINT8 ucReserved;
} ATOM_ROM_HEADER;
/****************************************************************************/
// Structure used in Data.mtb
/****************************************************************************/
typedef struct _ATOM_MASTER_LIST_OF_DATA_TABLES
{
UINT16 UtilityPipeLine; // Offest for the utility to get parser info,Don't change this position!
UINT16 MultimediaCapabilityInfo; // Only used by MM Lib,latest version 1.1, not configuable from Bios, need to include the table to build Bios
UINT16 MultimediaConfigInfo; // Only used by MM Lib,latest version 2.1, not configuable from Bios, need to include the table to build Bios
UINT16 StandardVESA_Timing; // Only used by Bios
UINT16 FirmwareInfo; // Shared by various SW components,latest version 1.4
UINT16 DAC_Info; // Will be obsolete from R600
UINT16 LVDS_Info; // Shared by various SW components,latest version 1.1
UINT16 TMDS_Info; // Will be obsolete from R600
UINT16 AnalogTV_Info; // Shared by various SW components,latest version 1.1
UINT16 SupportedDevicesInfo; // Will be obsolete from R600
UINT16 GPIO_I2C_Info; // Shared by various SW components,latest version 1.2 will be used from R600
UINT16 VRAM_UsageByFirmware; // Shared by various SW components,latest version 1.3 will be used from R600
UINT16 GPIO_Pin_LUT; // Shared by various SW components,latest version 1.1
UINT16 VESA_ToInternalModeLUT; // Only used by Bios
UINT16 ComponentVideoInfo; // Shared by various SW components,latest version 2.1 will be used from R600
UINT16 PowerPlayInfo; // Shared by various SW components,latest version 2.1,new design from R600
UINT16 CompassionateData; // Will be obsolete from R600
UINT16 SaveRestoreInfo; // Only used by Bios
UINT16 PPLL_SS_Info; // Shared by various SW components,latest version 1.2, used to call SS_Info, change to new name because of int ASIC SS info
UINT16 OemInfo; // Defined and used by external SW, should be obsolete soon
UINT16 XTMDS_Info; // Will be obsolete from R600
UINT16 MclkSS_Info; // Shared by various SW components,latest version 1.1, only enabled when ext SS chip is used
UINT16 Object_Header; // Shared by various SW components,latest version 1.1
UINT16 IndirectIOAccess; // Only used by Bios,this table position can't change at all!!
UINT16 MC_InitParameter; // Only used by command table
UINT16 ASIC_VDDC_Info; // Will be obsolete from R600
UINT16 ASIC_InternalSS_Info; // New tabel name from R600, used to be called "ASIC_MVDDC_Info"
UINT16 TV_VideoMode; // Only used by command table
UINT16 VRAM_Info; // Only used by command table, latest version 1.3
UINT16 MemoryTrainingInfo; // Used for VBIOS and Diag utility for memory training purpose since R600. the new table rev start from 2.1
UINT16 IntegratedSystemInfo; // Shared by various SW components
UINT16 ASIC_ProfilingInfo; // New table name from R600, used to be called "ASIC_VDDCI_Info" for pre-R600
UINT16 VoltageObjectInfo; // Shared by various SW components, latest version 1.1
UINT16 PowerSourceInfo; // Shared by various SW components, latest versoin 1.1
} ATOM_MASTER_LIST_OF_DATA_TABLES;
typedef struct _ATOM_MASTER_DATA_TABLE
{
ATOM_COMMON_TABLE_HEADER sHeader;
ATOM_MASTER_LIST_OF_DATA_TABLES ListOfDataTables;
} ATOM_MASTER_DATA_TABLE;
typedef union _ATOM_MODE_MISC_INFO_ACCESS
{
UINT16 usAccess;
} ATOM_MODE_MISC_INFO_ACCESS;
/****************************************************************************/
// Structure used in StandardVESA_TimingTable
// AnalogTV_InfoTable
// ComponentVideoInfoTable
/****************************************************************************/
typedef struct _ATOM_MODE_TIMING
{
UINT16 usCRTC_H_Total;
UINT16 usCRTC_H_Disp;
UINT16 usCRTC_H_SyncStart;
UINT16 usCRTC_H_SyncWidth;
UINT16 usCRTC_V_Total;
UINT16 usCRTC_V_Disp;
UINT16 usCRTC_V_SyncStart;
UINT16 usCRTC_V_SyncWidth;
UINT16 usPixelClock; //in 10Khz unit
ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo;
UINT16 usCRTC_OverscanRight;
UINT16 usCRTC_OverscanLeft;
UINT16 usCRTC_OverscanBottom;
UINT16 usCRTC_OverscanTop;
UINT16 usReserve;
UINT8 ucInternalModeNumber;
UINT8 ucRefreshRate;
} ATOM_MODE_TIMING;
typedef struct _ATOM_DTD_FORMAT
{
UINT16 usPixClk;
UINT16 usHActive;
UINT16 usHBlanking_Time;
UINT16 usVActive;
UINT16 usVBlanking_Time;
UINT16 usHSyncOffset;
UINT16 usHSyncWidth;
UINT16 usVSyncOffset;
UINT16 usVSyncWidth;
UINT16 usImageHSize;
UINT16 usImageVSize;
UINT8 ucHBorder;
UINT8 ucVBorder;
ATOM_MODE_MISC_INFO_ACCESS susModeMiscInfo;
UINT8 ucInternalModeNumber;
UINT8 ucRefreshRate;
} ATOM_DTD_FORMAT;
typedef struct _ATOM_LVDS_INFO_V12
{
ATOM_COMMON_TABLE_HEADER sHeader;
ATOM_DTD_FORMAT sLCDTiming;
UINT16 usExtInfoTableOffset;
UINT16 usSupportedRefreshRate; //Refer to panel info table in ATOMBIOS extension Spec.
UINT16 usOffDelayInMs;
UINT8 ucPowerSequenceDigOntoDEin10Ms;
UINT8 ucPowerSequenceDEtoBLOnin10Ms;
UINT8 ucLVDS_Misc; // Bit0:{=0:single, =1:dual},Bit1 {=0:666RGB, =1:888RGB},Bit2:3:{Grey level}
// Bit4:{=0:LDI format for RGB888, =1 FPDI format for RGB888}
// Bit5:{=0:Spatial Dithering disabled;1 Spatial Dithering enabled}
// Bit6:{=0:Temporal Dithering disabled;1 Temporal Dithering enabled}
UINT8 ucPanelDefaultRefreshRate;
UINT8 ucPanelIdentification;
UINT8 ucSS_Id;
UINT16 usLCDVenderID;
UINT16 usLCDProductID;
UINT8 ucLCDPanel_SpecialHandlingCap;
UINT8 ucPanelInfoSize; // start from ATOM_DTD_FORMAT to end of panel info, include ExtInfoTable
UINT8 ucReserved[2];
} ATOM_LVDS_INFO_V12;
typedef struct _ATOM_STANDARD_VESA_TIMING
{
ATOM_COMMON_TABLE_HEADER sHeader;
char * aModeTimings; // 16 is not the real array number, just for initial allocation
} ATOM_STANDARD_VESA_TIMING;
#pragma pack()
#endif