/*++ | |
Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials are licensed and made available under | |
the terms and conditions of the BSD License that accompanies this distribution. | |
The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php. | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
Module Name: | |
PlatformDxe.h | |
Abstract: | |
Header file for Platform Initialization Driver. | |
++*/ | |
#ifndef _PLATFORM_DRIVER_H | |
#define _PLATFORM_DRIVER_H | |
#include <PiDxe.h> | |
#include <Library/BaseLib.h> | |
#include <Library/DebugLib.h> | |
#include <Library/UefiLib.h> | |
#include <Library/UefiDriverEntryPoint.h> | |
#include <Library/PcdLib.h> | |
#include <Library/HobLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/UefiRuntimeServicesTableLib.h> | |
#include <Library/IoLib.h> | |
#include <Library/ReportStatusCodeLib.h> | |
#include <Library/HobLib.h> | |
#include <Library/EfiRegTableLib.h> | |
#include <Library/Tpm2CommandLib.h> | |
#include <Library/Tpm2DeviceLib.h> | |
#include <Library/BaseCryptLib.h> | |
#include <Library/BiosIdLib.h> | |
#include <Protocol/GlobalNvsArea.h> | |
#include <Protocol/PciRootBridgeIo.h> | |
#include <Protocol/IsaAcpi.h> | |
#include <Framework/FrameworkInternalFormRepresentation.h> | |
#include <Protocol/FrameworkHii.h> | |
#include <Protocol/FrameworkFormCallback.h> | |
#include <Protocol/CpuIo.h> | |
#include <Protocol/BootScriptSave.h> | |
#include <Framework/BootScript.h> | |
#include <Guid/GlobalVariable.h> | |
#include <Guid/BoardFeatures.h> | |
#include <Guid/DataHubRecords.h> | |
#include <Protocol/DataHub.h> | |
#include <Protocol/PciIo.h> | |
#include <Protocol/Speaker.h> | |
#include <Protocol/ExitPmAuth.h> | |
#include <IndustryStandard/Pci22.h> | |
#include <Guid/SetupVariable.h> | |
#include <Guid/PlatformInfo.h> | |
#include "Configuration.h" | |
#define _EFI_H_ //skip efi.h | |
#include "PchAccess.h" | |
#include "VlvAccess.h" | |
#include "BoardIdDecode.h" | |
#include "PlatformBaseAddresses.h" | |
#include "SetupMode.h" | |
#include "PlatformBootMode.h" | |
#include "CpuType.h" | |
#define PCAT_RTC_ADDRESS_REGISTER 0x74 | |
#define PCAT_RTC_DATA_REGISTER 0x75 | |
#define RTC_ADDRESS_SECOND_ALARM 0x01 | |
#define RTC_ADDRESS_MINUTE_ALARM 0x03 | |
#define RTC_ADDRESS_HOUR_ALARM 0x05 | |
#define RTC_ADDRESS_REGISTER_A 0x0A | |
#define RTC_ADDRESS_REGISTER_B 0x0B | |
#define RTC_ADDRESS_REGISTER_C 0x0C | |
#define RTC_ADDRESS_REGISTER_D 0x0D | |
#define B_RTC_ALARM_INT_ENABLE 0x20 | |
#define B_RTC_ALARM_INT_STATUS 0x20 | |
#define B_RTC_DATE_ALARM_MASK 0x3F | |
// | |
// Default CPU Alternate Duty Cycle (255=100%, 0=0%) | |
// | |
#define DEF_CPU_ALT_DUTY_CYCLE 0xFF | |
#define MAX_ONBOARD_SATA_DEVICE 2 | |
#define DXE_DEVICE_ENABLED 1 | |
#define DXE_DEVICE_DISABLED 0 | |
#define AZALIA_MAX_LOOP_TIME 0x10000 | |
// | |
// Platform driver GUID | |
// | |
#define EFI_PLATFORM_DRIVER_GUID \ | |
{ 0x056E7324, 0xA718, 0x465b, 0x9A, 0x84, 0x22, 0x8F, 0x06, 0x64, 0x2B, 0x4F } | |
#define PASSWORD_MAX_SIZE 20 | |
#define PLATFORM_NORMAL_MODE 0x01 | |
#define PLATFORM_SAFE_MODE 0x02 | |
#define PLATFORM_RECOVERY_MODE 0x04 | |
#define PLATFORM_MANUFACTURING_MODE 0x08 | |
#define PLATFORM_BACK_TO_BIOS_MODE 0x10 | |
#define EFI_OEM_SPECIFIC 0x8000 | |
#define EFI_CU_PLATFORM_DXE_INIT (EFI_OEM_SPECIFIC | 0x00000011) | |
#define EFI_CU_PLATFORM_DXE_STEP1 (EFI_OEM_SPECIFIC | 0x00000012) | |
#define EFI_CU_PLATFORM_DXE_STEP2 (EFI_OEM_SPECIFIC | 0x00000013) | |
#define EFI_CU_PLATFORM_DXE_STEP3 (EFI_OEM_SPECIFIC | 0x00000014) | |
#define EFI_CU_PLATFORM_DXE_STEP4 (EFI_OEM_SPECIFIC | 0x00000015) | |
#define EFI_CU_PLATFORM_DXE_INIT_DONE (EFI_OEM_SPECIFIC | 0x00000016) | |
#define EFI_SECTION_STRING 0x1C | |
#define EFI_FORWARD_DECLARATION(x) typedef struct _##x x | |
#define PREFIX_BLANK 0x04 | |
#pragma pack(1) | |
typedef UINT64 EFI_BOARD_FEATURES; | |
// | |
//BUGBUG: should remove these EDK hii definition once Hii transtion is done | |
// | |
typedef UINT16 STRING_REF; | |
typedef UINT16 EFI_FORM_LABEL; | |
typedef enum { | |
EfiUserPassword, | |
EfiAdminPassword | |
} EFI_PASSWORD_TYPE; | |
typedef struct { | |
CHAR16 TempPassword[PASSWORD_MAX_SIZE]; | |
CHAR16 EncodedPassword[PASSWORD_MAX_SIZE]; | |
VOID *PasswordLocation; | |
EFI_PASSWORD_TYPE PasswordType; | |
} EFI_PASSWORD_DATA; | |
typedef struct { | |
CHAR8 AaNumber[7]; | |
UINT8 BoardId; | |
EFI_BOARD_FEATURES Features; | |
UINT16 SubsystemDeviceId; | |
UINT16 AudioSubsystemDeviceId; | |
UINT64 AcpiOemTableId; | |
} BOARD_ID_DECODE; | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_FORM_ROUTINE) ( | |
SYSTEM_CONFIGURATION *SetupBuffer | |
); | |
typedef struct{ | |
UINT16 DeviceNumber; | |
UINT16 FunctionNumber; | |
}PCI_DEVICE_FUNC_INFO; | |
typedef struct{ | |
CHAR16 PortNumber[4]; | |
STRING_REF SataDeviceInfoStringId; | |
}SATA_DEVICE_STRING_INFO; | |
typedef struct { | |
UINT16 Signature; | |
UINT8 Size; | |
UINT32 EntryPoint; | |
UINT8 Reserve[17]; | |
UINT16 PciDataOff; | |
UINT16 ExpansionOff; | |
} PNP_OPTION_ROM_HEADER; | |
typedef struct { | |
UINT32 Signature; | |
UINT8 Revision; | |
UINT8 Length; | |
UINT16 NextHeader; | |
UINT8 Reserve; | |
UINT8 CheckSum; | |
UINT32 DeviceId; | |
UINT16 ManufactureStrOff; | |
UINT16 ProductStrOff; | |
} PNP_EXPANSION_HEADER; | |
typedef struct { | |
BOOLEAN Enable; | |
UINT8 VerbTableNum; | |
UINT16 CodecSSID; | |
EFI_PHYSICAL_ADDRESS HDABar; | |
EFI_PHYSICAL_ADDRESS UpperHDABar; | |
UINT8 SDIPresent; | |
BOOLEAN Pme; | |
BOOLEAN LegacyFrontPanelAudio; | |
BOOLEAN HighDefinitionFrontPanelAudio; | |
} EFI_AZALIA_S3; | |
// | |
//following structs are from R8. Remove them once R8->R9 transition is done | |
// | |
typedef struct { | |
CHAR16 *OptionString; // Passed in string to generate a token for in a truly dynamic form creation | |
STRING_REF StringToken; // This is used when creating a single op-code without generating a StringToken (have one already) | |
UINT16 Value; | |
UINT8 Flags; | |
UINT16 Key; | |
} IFR_OPTION; | |
typedef struct { | |
UINT8 Number; | |
UINT32 HorizontalResolution; | |
UINT32 VerticalResolution; | |
} PANEL_RESOLUTION; | |
#pragma pack() | |
// | |
// Prototypes | |
// | |
EFI_STATUS | |
EFIAPI | |
EfiMain ( | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_SYSTEM_TABLE *SystemTable | |
); | |
EFI_STATUS | |
ProcessEventLog ( | |
); | |
EFI_STATUS | |
FindDataRecords ( | |
); | |
EFI_STATUS | |
ProcessPasswords( | |
); | |
VOID | |
MemorySetup( | |
); | |
UINTN | |
EfiValueToString ( | |
IN OUT CHAR16 *Buffer, | |
IN INT64 Value, | |
IN UINTN Flags, | |
IN UINTN Width | |
); | |
VOID | |
EFIAPI | |
ReadyToBootFunction ( | |
EFI_EVENT Event, | |
VOID *Context | |
); | |
VOID | |
InstallHiiDataAndGetSettings( | |
IN EFI_HII_STRING_PACK *StringPack, | |
// | |
... // 0 or more of => IN EFI_HII_IFR_PACK *IfrPack, | |
// Terminate list with NULL | |
// | |
); | |
EFI_STATUS | |
ReadOrInitSetupVariable( | |
IN UINTN RequiredVariableSize, | |
IN UINTN RequiredPasswordSize, | |
IN VOID *DefaultData, | |
IN VOID *MfgDefaultData, | |
OUT VOID *SetupVariableData, | |
OUT VOID *SystemPassword | |
); | |
VOID | |
EfiLogicalOrMem( | |
IN VOID *Destination, | |
IN VOID *Source, | |
IN UINTN Length | |
); | |
EFI_STATUS | |
GetStringFromToken ( | |
IN EFI_GUID *ProducerGuid, | |
IN STRING_REF Token, | |
OUT CHAR16 **String | |
); | |
UINT32 | |
ConvertBase2ToRaw ( | |
IN EFI_EXP_BASE2_DATA *Data); | |
UINT32 | |
ConvertBase10ToRaw ( | |
IN EFI_EXP_BASE10_DATA *Data); | |
CHAR16 * | |
GetStringById ( | |
IN STRING_REF Id, | |
EFI_HII_HANDLE StringPackHandle | |
); | |
VOID | |
EFIAPI | |
SetupDataFilter ( | |
IN EFI_EVENT Event, | |
IN VOID* Context | |
); | |
VOID | |
EFIAPI | |
IdeDataFilter ( | |
IN EFI_EVENT Event, | |
IN VOID* Context | |
); | |
VOID | |
EFIAPI | |
UpdateAhciRaidDiskInfo ( | |
IN EFI_EVENT Event, | |
IN VOID* Context | |
); | |
VOID | |
EFIAPI | |
EventLogFilter ( | |
IN EFI_EVENT Event, | |
IN VOID* Context | |
); | |
VOID | |
SwapEntries ( | |
IN CHAR8 *Data | |
); | |
VOID | |
AsciiToUnicode ( | |
IN CHAR8 *AsciiString, | |
IN CHAR16 *UnicodeString | |
); | |
UINT16 | |
ConfigModeStateGet(); | |
VOID | |
SetSkus(); | |
VOID | |
CPUSetupItems(); | |
EFI_STATUS | |
SecurityDriverCallback ( | |
IN EFI_FORM_CALLBACK_PROTOCOL *This, | |
IN UINT16 KeyValue, | |
IN EFI_IFR_DATA_ARRAY *Data, | |
OUT EFI_HII_CALLBACK_PACKET **Packet | |
); | |
VOID | |
SetPasswordState ( | |
); | |
VOID | |
EncodePassword ( | |
IN CHAR16 *Password | |
); | |
VOID | |
EFIAPI | |
PciBusEvent ( | |
IN EFI_EVENT Event, | |
IN VOID* Context | |
); | |
VOID | |
AsfInitialize( | |
); | |
VOID | |
InitializeAsf ( | |
); | |
UINT8 | |
ReadCmosBank1Byte ( | |
IN EFI_CPU_IO_PROTOCOL *CpuIo, | |
IN UINT8 Index | |
); | |
VOID | |
WriteCmosBank1Byte ( | |
IN EFI_CPU_IO_PROTOCOL *CpuIo, | |
IN UINT8 Index, | |
IN UINT8 Data | |
); | |
VOID | |
InitializeBoardId ( | |
); | |
EFI_STATUS | |
InstallBootCallbackRoutine( | |
); | |
EFI_STATUS | |
InstallConfigurationCallbackRoutine( | |
); | |
EFI_STATUS | |
InstallPerformanceCallbackRoutine( | |
); | |
EFI_STATUS | |
InstallSecurityCallbackRoutine ( | |
); | |
EFI_STATUS | |
InstallMainCallbackRoutine ( | |
); | |
EFI_STATUS | |
MemoryConfigurationUpdate ( | |
UINT16 *Key, | |
EFI_FORM_LABEL *Label, | |
UINT16 *OpcodeCount, | |
UINT8 **OpcodeData, | |
EFI_FORM_ROUTINE *Routine | |
); | |
EFI_STATUS | |
MemoryConfigurationCallbackRoutine ( | |
SYSTEM_CONFIGURATION *SetupBuffer | |
); | |
EFI_STATUS | |
MemoryConfigurationCalculateSpeed( | |
SYSTEM_CONFIGURATION *SetupBuffer | |
); | |
VOID | |
UpdateMemoryString( | |
IN STRING_REF TokenToUpdate, | |
IN CHAR16 *NewString | |
); | |
VOID | |
InitFeaturePolicy ( | |
IN EFI_PLATFORM_INFO_HOB *PlatformInfo | |
); | |
VOID | |
InitializeSetupVarHide ( | |
); | |
VOID | |
PreparePCIePCISlotInformation( | |
VOID | |
); | |
EFI_STATUS | |
BootConfigurationUpdate ( | |
IN OUT SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
EFI_STATUS | |
InitializeBootConfiguration( | |
VOID | |
); | |
UINT16 | |
GetStringSize( | |
IN CHAR16 *ThisString | |
); | |
UINT16 | |
GetDriveCount ( | |
IN STRING_REF *BootMap | |
); | |
CHAR16 * | |
GetBootString ( | |
IN STRING_REF Id, | |
OUT UINTN *Length | |
); | |
EFI_STATUS | |
BootCfgCreateTwoOptionOneOf( | |
IN UINT16 QuestionId, | |
IN EFI_FORM_LABEL Label, | |
IN STRING_REF OptionPrompt, | |
IN STRING_REF OptionHelp, | |
IN STRING_REF OptionOneString, | |
IN STRING_REF OptionTwoString, | |
IN UINT8 OptionOneFlags, | |
IN UINT8 OptionTwoFlags, | |
IN UINT16 KeyValueOne, | |
IN UINT16 KeyValueTwo | |
); | |
EFI_STATUS | |
ReplaceOpcodeWithText( | |
IN STRING_REF OptionPrompt, | |
IN STRING_REF OptionHelp, | |
IN STRING_REF OptionOneString, | |
IN EFI_FORM_LABEL Label | |
); | |
EFI_STATUS | |
CreateDriveBootOrderOpcode( | |
IN VOID *Data, | |
IN STRING_REF *BootMap, | |
IN EFI_FORM_LABEL Label, | |
IN UINT16 QuestionId, | |
IN STRING_REF OptionOneString, | |
IN STRING_REF OptionTwoString | |
); | |
VOID | |
SetHyperBootCfgFlags( | |
IN OUT SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
VOID | |
GetHyperBootCfgFlags( | |
IN OUT SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
VOID | |
PrepareBootCfgForHyperBoot( | |
IN OUT SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
BOOLEAN | |
BootCfgChanged( | |
IN SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
EFI_STATUS | |
InsertOpcodeAtIndex( | |
IN SYSTEM_CONFIGURATION *SystemConfiguration, | |
IN OUT IFR_OPTION *OptionList, | |
IN IFR_OPTION IfrOption, | |
IN UINT16 OptionCount | |
); | |
VOID | |
ConfigureBootOrderStrings( | |
IN SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
VOID | |
InitializeAllBootStrings( | |
VOID | |
); | |
VOID | |
SaveUsbCfgSettings( | |
IN OUT SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
VOID | |
RestoreUsbCfgSettings( | |
IN OUT SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
EFI_STATUS | |
UpdateBootDevicePriority( | |
IN OUT SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
EFI_STATUS | |
DisableHyperBoot( | |
IN OUT SYSTEM_CONFIGURATION *SystemConfiguration | |
); | |
BOOLEAN | |
CheckForUserPassword( | |
VOID | |
); | |
EFI_STATUS | |
EFIAPI | |
HyperBootPasswordCallback( | |
IN OUT VOID* Data | |
); | |
EFI_STATUS | |
EFIAPI | |
HyperBootF9Callback ( | |
IN VOID* Data | |
); | |
EFI_STATUS | |
InstallHiiEvents( | |
VOID | |
); | |
EFI_STATUS | |
EFIAPI | |
ProgramToneFrequency ( | |
IN EFI_SPEAKER_IF_PROTOCOL *This, | |
IN UINT16 Frequency | |
); | |
EFI_STATUS | |
EFIAPI | |
GenerateBeepTone ( | |
IN EFI_SPEAKER_IF_PROTOCOL *This, | |
IN UINTN NumberOfBeeps, | |
IN UINTN BeepDuration, | |
IN UINTN TimeInterval | |
); | |
EFI_STATUS | |
InitializeObservableProtocol(); | |
EFI_STATUS | |
PciBusDriverHook(); | |
VOID | |
EFIAPI | |
AdjustDefaultRtcTimeCallback ( | |
IN EFI_EVENT Event, | |
IN VOID *Context | |
); | |
typedef struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL GOP_DISPLAY_BRIGHTNESS_PROTOCOL; | |
typedef | |
EFI_STATUS | |
(EFIAPI *GET_MAXIMUM_BRIGHTNESS_LEVEL) ( | |
IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This, | |
OUT UINT32 *MaxBrightnessLevel | |
); | |
typedef | |
EFI_STATUS | |
(EFIAPI *GET_CURRENT_BRIGHTNESS_LEVEL) ( | |
IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This, | |
OUT UINT32 *MaxBrightnessLevel | |
); | |
typedef | |
EFI_STATUS | |
(EFIAPI *SET_BRIGHTNESS_LEVEL) ( | |
IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This, | |
IN UINT32 BrightnessLevel | |
); | |
struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL { | |
UINT32 Revision; | |
GET_MAXIMUM_BRIGHTNESS_LEVEL GetMaxBrightnessLevel; | |
GET_CURRENT_BRIGHTNESS_LEVEL GetCurrentBrightnessLevel; | |
SET_BRIGHTNESS_LEVEL SetBrightnessLevel; | |
}; | |
// | |
// Global externs | |
// | |
extern UINT8 MaintenanceBin[]; | |
extern UINT8 MainBin[]; | |
extern UINT8 ConfigurationBin[]; | |
extern UINT8 MemoryConfigurationBin[]; | |
extern UINT8 PerformanceBin[]; | |
extern UINT8 SecurityBin[]; | |
extern UINT8 BootBin[]; | |
extern UINT8 PowerBin[]; | |
extern UINT8 SystemSetupBin[]; | |
extern VOID *mDxePlatformStringPack; | |
extern EFI_HII_PROTOCOL *mHii; | |
extern SYSTEM_CONFIGURATION mSystemConfiguration; | |
extern FRAMEWORK_EFI_HII_HANDLE mMaintenanceHiiHandle; | |
extern FRAMEWORK_EFI_HII_HANDLE mMainHiiHandle; | |
extern FRAMEWORK_EFI_HII_HANDLE mConfigurationHiiHandle; | |
extern FRAMEWORK_EFI_HII_HANDLE mPerformanceHiiHandle; | |
extern FRAMEWORK_EFI_HII_HANDLE mPowerHiiHandle; | |
extern FRAMEWORK_EFI_HII_HANDLE mBootHiiHandle; | |
extern FRAMEWORK_EFI_HII_HANDLE mSecurityHiiHandle; | |
extern SYSTEM_PASSWORDS mSystemPassword; | |
extern EFI_PASSWORD_DATA mAdminPassword; | |
extern EFI_PASSWORD_DATA mUserPassword; | |
extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *mPciRootBridgeIo; | |
// | |
//extern EFI_REG_TABLE mSubsystemIdRegs[]; | |
// | |
extern UINT32 mSubsystemVidDid; | |
extern UINT32 mSubsystemAudioVidDid; | |
extern UINT8 mBoardIdIndex; | |
extern BOOLEAN mFoundAANum; | |
extern EFI_BOARD_FEATURES mBoardFeatures; | |
extern UINT16 mSubsystemDeviceId; | |
extern UINT16 mSubsystemAudioDeviceId; | |
extern BOARD_ID_DECODE mBoardIdDecodeTable[]; | |
extern UINTN mBoardIdDecodeTableSize; | |
extern UINT8 mSmbusRsvdAddresses[]; | |
extern UINT8 mNumberSmbusAddress; | |
extern BOOLEAN mMfgMode; | |
extern UINT32 mPlatformBootMode; | |
extern CHAR8 BoardAaNumber[]; | |
extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid; | |
#endif |