3 Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
21 Header file for Platform Initialization Driver.
27 #ifndef _PLATFORM_DRIVER_H
28 #define _PLATFORM_DRIVER_H
31 #include <Library/BaseLib.h>
32 #include <Library/DebugLib.h>
33 #include <Library/UefiLib.h>
34 #include <Library/UefiDriverEntryPoint.h>
35 #include <Library/PcdLib.h>
36 #include <Library/HobLib.h>
37 #include <Library/MemoryAllocationLib.h>
38 #include <Library/UefiBootServicesTableLib.h>
39 #include <Library/BaseMemoryLib.h>
40 #include <Library/UefiRuntimeServicesTableLib.h>
41 #include <Library/IoLib.h>
42 #include <Library/ReportStatusCodeLib.h>
43 #include <Library/HobLib.h>
44 #include <Library/EfiRegTableLib.h>
45 #include <Library/Tpm2CommandLib.h>
46 #include <Library/Tpm2DeviceLib.h>
47 #include <Library/BaseCryptLib.h>
48 #include <Library/BiosIdLib.h>
49 #include <Protocol/GlobalNvsArea.h>
50 #include <Protocol/PciRootBridgeIo.h>
51 #include <Protocol/IsaAcpi.h>
52 #include <Framework/FrameworkInternalFormRepresentation.h>
53 #include <Protocol/FrameworkHii.h>
54 #include <Protocol/FrameworkFormCallback.h>
55 #include <Protocol/CpuIo.h>
56 #include <Protocol/BootScriptSave.h>
57 #include <Framework/BootScript.h>
58 #include <Guid/GlobalVariable.h>
59 #include <Guid/BoardFeatures.h>
60 #include <Guid/DataHubRecords.h>
61 #include <Protocol/DataHub.h>
62 #include <Protocol/PciIo.h>
63 #include <Protocol/Speaker.h>
64 #include <Protocol/ExitPmAuth.h>
65 #include <IndustryStandard/Pci22.h>
66 #include <Guid/SetupVariable.h>
67 #include <Guid/PlatformInfo.h>
68 #include "Configuration.h"
69 #define _EFI_H_ //skip efi.h
70 #include "PchAccess.h"
71 #include "VlvAccess.h"
72 #include "BoardIdDecode.h"
73 #include "PlatformBaseAddresses.h"
74 #include "SetupMode.h"
75 #include "PlatformBootMode.h"
78 #define PCAT_RTC_ADDRESS_REGISTER 0x74
79 #define PCAT_RTC_DATA_REGISTER 0x75
81 #define RTC_ADDRESS_SECOND_ALARM 0x01
82 #define RTC_ADDRESS_MINUTE_ALARM 0x03
83 #define RTC_ADDRESS_HOUR_ALARM 0x05
85 #define RTC_ADDRESS_REGISTER_A 0x0A
86 #define RTC_ADDRESS_REGISTER_B 0x0B
87 #define RTC_ADDRESS_REGISTER_C 0x0C
88 #define RTC_ADDRESS_REGISTER_D 0x0D
90 #define B_RTC_ALARM_INT_ENABLE 0x20
91 #define B_RTC_ALARM_INT_STATUS 0x20
93 #define B_RTC_DATE_ALARM_MASK 0x3F
96 // Default CPU Alternate Duty Cycle (255=100%, 0=0%)
98 #define DEF_CPU_ALT_DUTY_CYCLE 0xFF
100 #define MAX_ONBOARD_SATA_DEVICE 2
102 #define DXE_DEVICE_ENABLED 1
103 #define DXE_DEVICE_DISABLED 0
105 #define AZALIA_MAX_LOOP_TIME 0x10000
108 // Platform driver GUID
110 #define EFI_PLATFORM_DRIVER_GUID \
111 { 0x056E7324, 0xA718, 0x465b, 0x9A, 0x84, 0x22, 0x8F, 0x06, 0x64, 0x2B, 0x4F }
113 #define PASSWORD_MAX_SIZE 20
114 #define PLATFORM_NORMAL_MODE 0x01
115 #define PLATFORM_SAFE_MODE 0x02
116 #define PLATFORM_RECOVERY_MODE 0x04
117 #define PLATFORM_MANUFACTURING_MODE 0x08
118 #define PLATFORM_BACK_TO_BIOS_MODE 0x10
120 #define EFI_OEM_SPECIFIC 0x8000
121 #define EFI_CU_PLATFORM_DXE_INIT (EFI_OEM_SPECIFIC | 0x00000011)
122 #define EFI_CU_PLATFORM_DXE_STEP1 (EFI_OEM_SPECIFIC | 0x00000012)
123 #define EFI_CU_PLATFORM_DXE_STEP2 (EFI_OEM_SPECIFIC | 0x00000013)
124 #define EFI_CU_PLATFORM_DXE_STEP3 (EFI_OEM_SPECIFIC | 0x00000014)
125 #define EFI_CU_PLATFORM_DXE_STEP4 (EFI_OEM_SPECIFIC | 0x00000015)
126 #define EFI_CU_PLATFORM_DXE_INIT_DONE (EFI_OEM_SPECIFIC | 0x00000016)
129 #define EFI_SECTION_STRING 0x1C
130 #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
131 #define PREFIX_BLANK 0x04
135 typedef UINT64 EFI_BOARD_FEATURES
;
138 //BUGBUG: should remove these EDK hii definition once Hii transtion is done
140 typedef UINT16 STRING_REF
;
141 typedef UINT16 EFI_FORM_LABEL
;
149 CHAR16 TempPassword
[PASSWORD_MAX_SIZE
];
150 CHAR16 EncodedPassword
[PASSWORD_MAX_SIZE
];
151 VOID
*PasswordLocation
;
152 EFI_PASSWORD_TYPE PasswordType
;
158 EFI_BOARD_FEATURES Features
;
159 UINT16 SubsystemDeviceId
;
160 UINT16 AudioSubsystemDeviceId
;
161 UINT64 AcpiOemTableId
;
166 (EFIAPI
*EFI_FORM_ROUTINE
) (
167 SYSTEM_CONFIGURATION
*SetupBuffer
172 UINT16 FunctionNumber
;
173 }PCI_DEVICE_FUNC_INFO
;
176 CHAR16 PortNumber
[4];
177 STRING_REF SataDeviceInfoStringId
;
178 }SATA_DEVICE_STRING_INFO
;
187 } PNP_OPTION_ROM_HEADER
;
197 UINT16 ManufactureStrOff
;
198 UINT16 ProductStrOff
;
199 } PNP_EXPANSION_HEADER
;
205 EFI_PHYSICAL_ADDRESS HDABar
;
206 EFI_PHYSICAL_ADDRESS UpperHDABar
;
209 BOOLEAN LegacyFrontPanelAudio
;
210 BOOLEAN HighDefinitionFrontPanelAudio
;
214 //following structs are from R8. Remove them once R8->R9 transition is done
217 CHAR16
*OptionString
; // Passed in string to generate a token for in a truly dynamic form creation
218 STRING_REF StringToken
; // This is used when creating a single op-code without generating a StringToken (have one already)
228 UINT32 HorizontalResolution
;
229 UINT32 VerticalResolution
;
240 IN EFI_HANDLE ImageHandle
,
241 IN EFI_SYSTEM_TABLE
*SystemTable
263 IN OUT CHAR16
*Buffer
,
271 ReadyToBootFunction (
277 InstallHiiDataAndGetSettings(
278 IN EFI_HII_STRING_PACK
*StringPack
,
280 ... // 0 or more of => IN EFI_HII_IFR_PACK *IfrPack,
281 // Terminate list with NULL
286 ReadOrInitSetupVariable(
287 IN UINTN RequiredVariableSize
,
288 IN UINTN RequiredPasswordSize
,
289 IN VOID
*DefaultData
,
290 IN VOID
*MfgDefaultData
,
291 OUT VOID
*SetupVariableData
,
292 OUT VOID
*SystemPassword
297 IN VOID
*Destination
,
304 IN EFI_GUID
*ProducerGuid
,
311 IN EFI_EXP_BASE2_DATA
*Data
);
315 IN EFI_EXP_BASE10_DATA
*Data
);
320 EFI_HII_HANDLE StringPackHandle
339 UpdateAhciRaidDiskInfo (
358 IN CHAR8
*AsciiString
,
359 IN CHAR16
*UnicodeString
363 ConfigModeStateGet();
372 SecurityDriverCallback (
373 IN EFI_FORM_CALLBACK_PROTOCOL
*This
,
375 IN EFI_IFR_DATA_ARRAY
*Data
,
376 OUT EFI_HII_CALLBACK_PACKET
**Packet
404 IN EFI_CPU_IO_PROTOCOL
*CpuIo
,
410 IN EFI_CPU_IO_PROTOCOL
*CpuIo
,
420 InstallBootCallbackRoutine(
424 InstallConfigurationCallbackRoutine(
428 InstallPerformanceCallbackRoutine(
432 InstallSecurityCallbackRoutine (
436 InstallMainCallbackRoutine (
440 MemoryConfigurationUpdate (
442 EFI_FORM_LABEL
*Label
,
445 EFI_FORM_ROUTINE
*Routine
449 MemoryConfigurationCallbackRoutine (
450 SYSTEM_CONFIGURATION
*SetupBuffer
454 MemoryConfigurationCalculateSpeed(
455 SYSTEM_CONFIGURATION
*SetupBuffer
460 IN STRING_REF TokenToUpdate
,
466 IN EFI_PLATFORM_INFO_HOB
*PlatformInfo
470 InitializeSetupVarHide (
474 PreparePCIePCISlotInformation(
480 BootConfigurationUpdate (
481 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
485 InitializeBootConfiguration(
491 IN CHAR16
*ThisString
496 IN STRING_REF
*BootMap
506 BootCfgCreateTwoOptionOneOf(
507 IN UINT16 QuestionId
,
508 IN EFI_FORM_LABEL Label
,
509 IN STRING_REF OptionPrompt
,
510 IN STRING_REF OptionHelp
,
511 IN STRING_REF OptionOneString
,
512 IN STRING_REF OptionTwoString
,
513 IN UINT8 OptionOneFlags
,
514 IN UINT8 OptionTwoFlags
,
515 IN UINT16 KeyValueOne
,
516 IN UINT16 KeyValueTwo
520 ReplaceOpcodeWithText(
521 IN STRING_REF OptionPrompt
,
522 IN STRING_REF OptionHelp
,
523 IN STRING_REF OptionOneString
,
524 IN EFI_FORM_LABEL Label
528 CreateDriveBootOrderOpcode(
530 IN STRING_REF
*BootMap
,
531 IN EFI_FORM_LABEL Label
,
532 IN UINT16 QuestionId
,
533 IN STRING_REF OptionOneString
,
534 IN STRING_REF OptionTwoString
538 SetHyperBootCfgFlags(
539 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
543 GetHyperBootCfgFlags(
544 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
548 PrepareBootCfgForHyperBoot(
549 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
554 IN SYSTEM_CONFIGURATION
*SystemConfiguration
559 IN SYSTEM_CONFIGURATION
*SystemConfiguration
,
560 IN OUT IFR_OPTION
*OptionList
,
561 IN IFR_OPTION IfrOption
,
562 IN UINT16 OptionCount
566 ConfigureBootOrderStrings(
567 IN SYSTEM_CONFIGURATION
*SystemConfiguration
571 InitializeAllBootStrings(
577 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
581 RestoreUsbCfgSettings(
582 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
586 UpdateBootDevicePriority(
587 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
592 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
596 CheckForUserPassword(
602 HyperBootPasswordCallback(
608 HyperBootF9Callback (
619 ProgramToneFrequency (
620 IN EFI_SPEAKER_IF_PROTOCOL
*This
,
627 IN EFI_SPEAKER_IF_PROTOCOL
*This
,
628 IN UINTN NumberOfBeeps
,
629 IN UINTN BeepDuration
,
630 IN UINTN TimeInterval
634 InitializeObservableProtocol();
641 AdjustDefaultRtcTimeCallback (
646 typedef struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL GOP_DISPLAY_BRIGHTNESS_PROTOCOL
;
650 (EFIAPI
*GET_MAXIMUM_BRIGHTNESS_LEVEL
) (
651 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL
*This
,
652 OUT UINT32
*MaxBrightnessLevel
658 (EFIAPI
*GET_CURRENT_BRIGHTNESS_LEVEL
) (
659 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL
*This
,
660 OUT UINT32
*MaxBrightnessLevel
665 (EFIAPI
*SET_BRIGHTNESS_LEVEL
) (
666 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL
*This
,
667 IN UINT32 BrightnessLevel
670 struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL
{
672 GET_MAXIMUM_BRIGHTNESS_LEVEL GetMaxBrightnessLevel
;
673 GET_CURRENT_BRIGHTNESS_LEVEL GetCurrentBrightnessLevel
;
674 SET_BRIGHTNESS_LEVEL SetBrightnessLevel
;
680 extern UINT8 MaintenanceBin
[];
681 extern UINT8 MainBin
[];
682 extern UINT8 ConfigurationBin
[];
683 extern UINT8 MemoryConfigurationBin
[];
684 extern UINT8 PerformanceBin
[];
685 extern UINT8 SecurityBin
[];
686 extern UINT8 BootBin
[];
687 extern UINT8 PowerBin
[];
688 extern UINT8 SystemSetupBin
[];
690 extern VOID
*mDxePlatformStringPack
;
691 extern EFI_HII_PROTOCOL
*mHii
;
692 extern SYSTEM_CONFIGURATION mSystemConfiguration
;
693 extern FRAMEWORK_EFI_HII_HANDLE mMaintenanceHiiHandle
;
694 extern FRAMEWORK_EFI_HII_HANDLE mMainHiiHandle
;
695 extern FRAMEWORK_EFI_HII_HANDLE mConfigurationHiiHandle
;
696 extern FRAMEWORK_EFI_HII_HANDLE mPerformanceHiiHandle
;
697 extern FRAMEWORK_EFI_HII_HANDLE mPowerHiiHandle
;
698 extern FRAMEWORK_EFI_HII_HANDLE mBootHiiHandle
;
699 extern FRAMEWORK_EFI_HII_HANDLE mSecurityHiiHandle
;
701 extern SYSTEM_PASSWORDS mSystemPassword
;
702 extern EFI_PASSWORD_DATA mAdminPassword
;
703 extern EFI_PASSWORD_DATA mUserPassword
;
705 extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*mPciRootBridgeIo
;
708 //extern EFI_REG_TABLE mSubsystemIdRegs[];
710 extern UINT32 mSubsystemVidDid
;
711 extern UINT32 mSubsystemAudioVidDid
;
713 extern UINT8 mBoardIdIndex
;
714 extern BOOLEAN mFoundAANum
;
715 extern EFI_BOARD_FEATURES mBoardFeatures
;
716 extern UINT16 mSubsystemDeviceId
;
717 extern UINT16 mSubsystemAudioDeviceId
;
718 extern BOARD_ID_DECODE mBoardIdDecodeTable
[];
719 extern UINTN mBoardIdDecodeTableSize
;
721 extern UINT8 mSmbusRsvdAddresses
[];
722 extern UINT8 mNumberSmbusAddress
;
723 extern BOOLEAN mMfgMode
;
724 extern UINT32 mPlatformBootMode
;
725 extern CHAR8 BoardAaNumber
[];
727 extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid
;