3 Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
15 Header file for Platform Initialization Driver.
21 #ifndef _PLATFORM_DRIVER_H
22 #define _PLATFORM_DRIVER_H
25 #include <Library/BaseLib.h>
26 #include <Library/DebugLib.h>
27 #include <Library/UefiLib.h>
28 #include <Library/UefiDriverEntryPoint.h>
29 #include <Library/PcdLib.h>
30 #include <Library/HobLib.h>
31 #include <Library/MemoryAllocationLib.h>
32 #include <Library/UefiBootServicesTableLib.h>
33 #include <Library/BaseMemoryLib.h>
34 #include <Library/UefiRuntimeServicesTableLib.h>
35 #include <Library/IoLib.h>
36 #include <Library/ReportStatusCodeLib.h>
37 #include <Library/HobLib.h>
38 #include <Library/EfiRegTableLib.h>
39 #include <Library/Tpm2CommandLib.h>
40 #include <Library/Tpm2DeviceLib.h>
41 #include <Library/BaseCryptLib.h>
42 #include <Library/BiosIdLib.h>
43 #include <Protocol/GlobalNvsArea.h>
44 #include <Protocol/PciRootBridgeIo.h>
45 #include <Protocol/IsaAcpi.h>
46 #include <Framework/FrameworkInternalFormRepresentation.h>
47 #include <Protocol/FrameworkHii.h>
48 #include <Protocol/FrameworkFormCallback.h>
49 #include <Protocol/CpuIo.h>
50 #include <Protocol/BootScriptSave.h>
51 #include <Framework/BootScript.h>
52 #include <Guid/GlobalVariable.h>
53 #include <Guid/BoardFeatures.h>
54 #include <Guid/DataHubRecords.h>
55 #include <Protocol/DataHub.h>
56 #include <Protocol/PciIo.h>
57 #include <Protocol/Speaker.h>
58 #include <Protocol/ExitPmAuth.h>
59 #include <IndustryStandard/Pci22.h>
60 #include <Guid/SetupVariable.h>
61 #include <Guid/PlatformInfo.h>
62 #include "Configuration.h"
63 #define _EFI_H_ //skip efi.h
64 #include "PchAccess.h"
65 #include "VlvAccess.h"
66 #include "BoardIdDecode.h"
67 #include "PlatformBaseAddresses.h"
68 #include "SetupMode.h"
69 #include "PlatformBootMode.h"
72 #define PCAT_RTC_ADDRESS_REGISTER 0x74
73 #define PCAT_RTC_DATA_REGISTER 0x75
75 #define RTC_ADDRESS_SECOND_ALARM 0x01
76 #define RTC_ADDRESS_MINUTE_ALARM 0x03
77 #define RTC_ADDRESS_HOUR_ALARM 0x05
79 #define RTC_ADDRESS_REGISTER_A 0x0A
80 #define RTC_ADDRESS_REGISTER_B 0x0B
81 #define RTC_ADDRESS_REGISTER_C 0x0C
82 #define RTC_ADDRESS_REGISTER_D 0x0D
84 #define B_RTC_ALARM_INT_ENABLE 0x20
85 #define B_RTC_ALARM_INT_STATUS 0x20
87 #define B_RTC_DATE_ALARM_MASK 0x3F
90 // Default CPU Alternate Duty Cycle (255=100%, 0=0%)
92 #define DEF_CPU_ALT_DUTY_CYCLE 0xFF
94 #define MAX_ONBOARD_SATA_DEVICE 2
96 #define DXE_DEVICE_ENABLED 1
97 #define DXE_DEVICE_DISABLED 0
99 #define AZALIA_MAX_LOOP_TIME 0x10000
102 // Platform driver GUID
104 #define EFI_PLATFORM_DRIVER_GUID \
105 { 0x056E7324, 0xA718, 0x465b, 0x9A, 0x84, 0x22, 0x8F, 0x06, 0x64, 0x2B, 0x4F }
107 #define PASSWORD_MAX_SIZE 20
108 #define PLATFORM_NORMAL_MODE 0x01
109 #define PLATFORM_SAFE_MODE 0x02
110 #define PLATFORM_RECOVERY_MODE 0x04
111 #define PLATFORM_MANUFACTURING_MODE 0x08
112 #define PLATFORM_BACK_TO_BIOS_MODE 0x10
114 #define EFI_OEM_SPECIFIC 0x8000
115 #define EFI_CU_PLATFORM_DXE_INIT (EFI_OEM_SPECIFIC | 0x00000011)
116 #define EFI_CU_PLATFORM_DXE_STEP1 (EFI_OEM_SPECIFIC | 0x00000012)
117 #define EFI_CU_PLATFORM_DXE_STEP2 (EFI_OEM_SPECIFIC | 0x00000013)
118 #define EFI_CU_PLATFORM_DXE_STEP3 (EFI_OEM_SPECIFIC | 0x00000014)
119 #define EFI_CU_PLATFORM_DXE_STEP4 (EFI_OEM_SPECIFIC | 0x00000015)
120 #define EFI_CU_PLATFORM_DXE_INIT_DONE (EFI_OEM_SPECIFIC | 0x00000016)
123 #define EFI_SECTION_STRING 0x1C
124 #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
125 #define PREFIX_BLANK 0x04
129 typedef UINT64 EFI_BOARD_FEATURES
;
132 //BUGBUG: should remove these EDK hii definition once Hii transtion is done
134 typedef UINT16 STRING_REF
;
135 typedef UINT16 EFI_FORM_LABEL
;
143 CHAR16 TempPassword
[PASSWORD_MAX_SIZE
];
144 CHAR16 EncodedPassword
[PASSWORD_MAX_SIZE
];
145 VOID
*PasswordLocation
;
146 EFI_PASSWORD_TYPE PasswordType
;
152 EFI_BOARD_FEATURES Features
;
153 UINT16 SubsystemDeviceId
;
154 UINT16 AudioSubsystemDeviceId
;
155 UINT64 AcpiOemTableId
;
160 (EFIAPI
*EFI_FORM_ROUTINE
) (
161 SYSTEM_CONFIGURATION
*SetupBuffer
166 UINT16 FunctionNumber
;
167 }PCI_DEVICE_FUNC_INFO
;
170 CHAR16 PortNumber
[4];
171 STRING_REF SataDeviceInfoStringId
;
172 }SATA_DEVICE_STRING_INFO
;
181 } PNP_OPTION_ROM_HEADER
;
191 UINT16 ManufactureStrOff
;
192 UINT16 ProductStrOff
;
193 } PNP_EXPANSION_HEADER
;
199 EFI_PHYSICAL_ADDRESS HDABar
;
200 EFI_PHYSICAL_ADDRESS UpperHDABar
;
203 BOOLEAN LegacyFrontPanelAudio
;
204 BOOLEAN HighDefinitionFrontPanelAudio
;
208 //following structs are from R8. Remove them once R8->R9 transition is done
211 CHAR16
*OptionString
; // Passed in string to generate a token for in a truly dynamic form creation
212 STRING_REF StringToken
; // This is used when creating a single op-code without generating a StringToken (have one already)
222 UINT32 HorizontalResolution
;
223 UINT32 VerticalResolution
;
234 IN EFI_HANDLE ImageHandle
,
235 IN EFI_SYSTEM_TABLE
*SystemTable
257 IN OUT CHAR16
*Buffer
,
265 ReadyToBootFunction (
271 InstallHiiDataAndGetSettings(
272 IN EFI_HII_STRING_PACK
*StringPack
,
274 ... // 0 or more of => IN EFI_HII_IFR_PACK *IfrPack,
275 // Terminate list with NULL
280 ReadOrInitSetupVariable(
281 IN UINTN RequiredVariableSize
,
282 IN UINTN RequiredPasswordSize
,
283 IN VOID
*DefaultData
,
284 IN VOID
*MfgDefaultData
,
285 OUT VOID
*SetupVariableData
,
286 OUT VOID
*SystemPassword
291 IN VOID
*Destination
,
298 IN EFI_GUID
*ProducerGuid
,
305 IN EFI_EXP_BASE2_DATA
*Data
);
309 IN EFI_EXP_BASE10_DATA
*Data
);
314 EFI_HII_HANDLE StringPackHandle
333 UpdateAhciRaidDiskInfo (
352 IN CHAR8
*AsciiString
,
353 IN CHAR16
*UnicodeString
357 ConfigModeStateGet();
366 SecurityDriverCallback (
367 IN EFI_FORM_CALLBACK_PROTOCOL
*This
,
369 IN EFI_IFR_DATA_ARRAY
*Data
,
370 OUT EFI_HII_CALLBACK_PACKET
**Packet
398 IN EFI_CPU_IO_PROTOCOL
*CpuIo
,
404 IN EFI_CPU_IO_PROTOCOL
*CpuIo
,
414 InstallBootCallbackRoutine(
418 InstallConfigurationCallbackRoutine(
422 InstallPerformanceCallbackRoutine(
426 InstallSecurityCallbackRoutine (
430 InstallMainCallbackRoutine (
434 MemoryConfigurationUpdate (
436 EFI_FORM_LABEL
*Label
,
439 EFI_FORM_ROUTINE
*Routine
443 MemoryConfigurationCallbackRoutine (
444 SYSTEM_CONFIGURATION
*SetupBuffer
448 MemoryConfigurationCalculateSpeed(
449 SYSTEM_CONFIGURATION
*SetupBuffer
454 IN STRING_REF TokenToUpdate
,
460 IN EFI_PLATFORM_INFO_HOB
*PlatformInfo
464 InitializeSetupVarHide (
468 PreparePCIePCISlotInformation(
474 BootConfigurationUpdate (
475 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
479 InitializeBootConfiguration(
485 IN CHAR16
*ThisString
490 IN STRING_REF
*BootMap
500 BootCfgCreateTwoOptionOneOf(
501 IN UINT16 QuestionId
,
502 IN EFI_FORM_LABEL Label
,
503 IN STRING_REF OptionPrompt
,
504 IN STRING_REF OptionHelp
,
505 IN STRING_REF OptionOneString
,
506 IN STRING_REF OptionTwoString
,
507 IN UINT8 OptionOneFlags
,
508 IN UINT8 OptionTwoFlags
,
509 IN UINT16 KeyValueOne
,
510 IN UINT16 KeyValueTwo
514 ReplaceOpcodeWithText(
515 IN STRING_REF OptionPrompt
,
516 IN STRING_REF OptionHelp
,
517 IN STRING_REF OptionOneString
,
518 IN EFI_FORM_LABEL Label
522 CreateDriveBootOrderOpcode(
524 IN STRING_REF
*BootMap
,
525 IN EFI_FORM_LABEL Label
,
526 IN UINT16 QuestionId
,
527 IN STRING_REF OptionOneString
,
528 IN STRING_REF OptionTwoString
532 SetHyperBootCfgFlags(
533 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
537 GetHyperBootCfgFlags(
538 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
542 PrepareBootCfgForHyperBoot(
543 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
548 IN SYSTEM_CONFIGURATION
*SystemConfiguration
553 IN SYSTEM_CONFIGURATION
*SystemConfiguration
,
554 IN OUT IFR_OPTION
*OptionList
,
555 IN IFR_OPTION IfrOption
,
556 IN UINT16 OptionCount
560 ConfigureBootOrderStrings(
561 IN SYSTEM_CONFIGURATION
*SystemConfiguration
565 InitializeAllBootStrings(
571 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
575 RestoreUsbCfgSettings(
576 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
580 UpdateBootDevicePriority(
581 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
586 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
590 CheckForUserPassword(
596 HyperBootPasswordCallback(
602 HyperBootF9Callback (
613 ProgramToneFrequency (
614 IN EFI_SPEAKER_IF_PROTOCOL
*This
,
621 IN EFI_SPEAKER_IF_PROTOCOL
*This
,
622 IN UINTN NumberOfBeeps
,
623 IN UINTN BeepDuration
,
624 IN UINTN TimeInterval
628 InitializeObservableProtocol();
635 AdjustDefaultRtcTimeCallback (
640 typedef struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL GOP_DISPLAY_BRIGHTNESS_PROTOCOL
;
644 (EFIAPI
*GET_MAXIMUM_BRIGHTNESS_LEVEL
) (
645 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL
*This
,
646 OUT UINT32
*MaxBrightnessLevel
652 (EFIAPI
*GET_CURRENT_BRIGHTNESS_LEVEL
) (
653 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL
*This
,
654 OUT UINT32
*MaxBrightnessLevel
659 (EFIAPI
*SET_BRIGHTNESS_LEVEL
) (
660 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL
*This
,
661 IN UINT32 BrightnessLevel
664 struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL
{
666 GET_MAXIMUM_BRIGHTNESS_LEVEL GetMaxBrightnessLevel
;
667 GET_CURRENT_BRIGHTNESS_LEVEL GetCurrentBrightnessLevel
;
668 SET_BRIGHTNESS_LEVEL SetBrightnessLevel
;
674 extern UINT8 MaintenanceBin
[];
675 extern UINT8 MainBin
[];
676 extern UINT8 ConfigurationBin
[];
677 extern UINT8 MemoryConfigurationBin
[];
678 extern UINT8 PerformanceBin
[];
679 extern UINT8 SecurityBin
[];
680 extern UINT8 BootBin
[];
681 extern UINT8 PowerBin
[];
682 extern UINT8 SystemSetupBin
[];
684 extern VOID
*mDxePlatformStringPack
;
685 extern EFI_HII_PROTOCOL
*mHii
;
686 extern SYSTEM_CONFIGURATION mSystemConfiguration
;
687 extern FRAMEWORK_EFI_HII_HANDLE mMaintenanceHiiHandle
;
688 extern FRAMEWORK_EFI_HII_HANDLE mMainHiiHandle
;
689 extern FRAMEWORK_EFI_HII_HANDLE mConfigurationHiiHandle
;
690 extern FRAMEWORK_EFI_HII_HANDLE mPerformanceHiiHandle
;
691 extern FRAMEWORK_EFI_HII_HANDLE mPowerHiiHandle
;
692 extern FRAMEWORK_EFI_HII_HANDLE mBootHiiHandle
;
693 extern FRAMEWORK_EFI_HII_HANDLE mSecurityHiiHandle
;
695 extern SYSTEM_PASSWORDS mSystemPassword
;
696 extern EFI_PASSWORD_DATA mAdminPassword
;
697 extern EFI_PASSWORD_DATA mUserPassword
;
699 extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*mPciRootBridgeIo
;
702 //extern EFI_REG_TABLE mSubsystemIdRegs[];
704 extern UINT32 mSubsystemVidDid
;
705 extern UINT32 mSubsystemAudioVidDid
;
707 extern UINT8 mBoardIdIndex
;
708 extern BOOLEAN mFoundAANum
;
709 extern EFI_BOARD_FEATURES mBoardFeatures
;
710 extern UINT16 mSubsystemDeviceId
;
711 extern UINT16 mSubsystemAudioDeviceId
;
712 extern BOARD_ID_DECODE mBoardIdDecodeTable
[];
713 extern UINTN mBoardIdDecodeTableSize
;
715 extern UINT8 mSmbusRsvdAddresses
[];
716 extern UINT8 mNumberSmbusAddress
;
717 extern BOOLEAN mMfgMode
;
718 extern UINT32 mPlatformBootMode
;
719 extern CHAR8 BoardAaNumber
[];
721 extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid
;