3 Copyright (c) 2004 - 2014, 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 <Protocol/GlobalNvsArea.h>
49 #include <Protocol/PciRootBridgeIo.h>
50 #include <Protocol/IsaAcpi.h>
51 #include <Framework/FrameworkInternalFormRepresentation.h>
52 #include <Protocol/FrameworkHii.h>
53 #include <Protocol/FrameworkFormCallback.h>
54 #include <Protocol/CpuIo.h>
55 #include <Protocol/BootScriptSave.h>
56 #include <Framework/BootScript.h>
57 #include <Guid/GlobalVariable.h>
58 #include <Guid/BoardFeatures.h>
59 #include <Guid/DataHubRecords.h>
60 #include <Protocol/DataHub.h>
61 #include <Protocol/PciIo.h>
62 #include <Protocol/Speaker.h>
63 #include <IndustryStandard/Pci22.h>
64 #include <Guid/SetupVariable.h>
65 #include <Guid/PlatformInfo.h>
66 #include "Configuration.h"
67 #define _EFI_H_ //skip efi.h
68 #include "PchAccess.h"
69 #include "VlvAccess.h"
70 #include "BoardIdDecode.h"
71 #include "PlatformBaseAddresses.h"
72 #include "SetupMode.h"
73 #include "PlatformBootMode.h"
76 #define PCAT_RTC_ADDRESS_REGISTER 0x74
77 #define PCAT_RTC_DATA_REGISTER 0x75
79 #define RTC_ADDRESS_SECOND_ALARM 0x01
80 #define RTC_ADDRESS_MINUTE_ALARM 0x03
81 #define RTC_ADDRESS_HOUR_ALARM 0x05
83 #define RTC_ADDRESS_REGISTER_A 0x0A
84 #define RTC_ADDRESS_REGISTER_B 0x0B
85 #define RTC_ADDRESS_REGISTER_C 0x0C
86 #define RTC_ADDRESS_REGISTER_D 0x0D
88 #define B_RTC_ALARM_INT_ENABLE 0x20
89 #define B_RTC_ALARM_INT_STATUS 0x20
91 #define B_RTC_DATE_ALARM_MASK 0x3F
94 // Default CPU Alternate Duty Cycle (255=100%, 0=0%)
96 #define DEF_CPU_ALT_DUTY_CYCLE 0xFF
98 #define MAX_ONBOARD_SATA_DEVICE 2
100 #define DXE_DEVICE_ENABLED 1
101 #define DXE_DEVICE_DISABLED 0
103 #define AZALIA_MAX_LOOP_TIME 0x10000
106 // Platform driver GUID
108 #define EFI_PLATFORM_DRIVER_GUID \
109 { 0x056E7324, 0xA718, 0x465b, 0x9A, 0x84, 0x22, 0x8F, 0x06, 0x64, 0x2B, 0x4F }
111 #define PASSWORD_MAX_SIZE 20
112 #define PLATFORM_NORMAL_MODE 0x01
113 #define PLATFORM_SAFE_MODE 0x02
114 #define PLATFORM_RECOVERY_MODE 0x04
115 #define PLATFORM_MANUFACTURING_MODE 0x08
116 #define PLATFORM_BACK_TO_BIOS_MODE 0x10
118 #define EFI_OEM_SPECIFIC 0x8000
119 #define EFI_CU_PLATFORM_DXE_INIT (EFI_OEM_SPECIFIC | 0x00000011)
120 #define EFI_CU_PLATFORM_DXE_STEP1 (EFI_OEM_SPECIFIC | 0x00000012)
121 #define EFI_CU_PLATFORM_DXE_STEP2 (EFI_OEM_SPECIFIC | 0x00000013)
122 #define EFI_CU_PLATFORM_DXE_STEP3 (EFI_OEM_SPECIFIC | 0x00000014)
123 #define EFI_CU_PLATFORM_DXE_STEP4 (EFI_OEM_SPECIFIC | 0x00000015)
124 #define EFI_CU_PLATFORM_DXE_INIT_DONE (EFI_OEM_SPECIFIC | 0x00000016)
127 #define EFI_SECTION_STRING 0x1C
128 #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
129 #define PREFIX_BLANK 0x04
133 typedef UINT64 EFI_BOARD_FEATURES
;
136 //BUGBUG: should remove these EDK hii definition once Hii transtion is done
138 typedef UINT16 STRING_REF
;
139 typedef UINT16 EFI_FORM_LABEL
;
147 CHAR16 TempPassword
[PASSWORD_MAX_SIZE
];
148 CHAR16 EncodedPassword
[PASSWORD_MAX_SIZE
];
149 VOID
*PasswordLocation
;
150 EFI_PASSWORD_TYPE PasswordType
;
156 EFI_BOARD_FEATURES Features
;
157 UINT16 SubsystemDeviceId
;
158 UINT16 AudioSubsystemDeviceId
;
159 UINT64 AcpiOemTableId
;
164 (EFIAPI
*EFI_FORM_ROUTINE
) (
165 SYSTEM_CONFIGURATION
*SetupBuffer
170 UINT16 FunctionNumber
;
171 }PCI_DEVICE_FUNC_INFO
;
174 CHAR16 PortNumber
[4];
175 STRING_REF SataDeviceInfoStringId
;
176 }SATA_DEVICE_STRING_INFO
;
185 } PNP_OPTION_ROM_HEADER
;
195 UINT16 ManufactureStrOff
;
196 UINT16 ProductStrOff
;
197 } PNP_EXPANSION_HEADER
;
203 EFI_PHYSICAL_ADDRESS HDABar
;
204 EFI_PHYSICAL_ADDRESS UpperHDABar
;
207 BOOLEAN LegacyFrontPanelAudio
;
208 BOOLEAN HighDefinitionFrontPanelAudio
;
212 //following structs are from R8. Remove them once R8->R9 transition is done
215 CHAR16
*OptionString
; // Passed in string to generate a token for in a truly dynamic form creation
216 STRING_REF StringToken
; // This is used when creating a single op-code without generating a StringToken (have one already)
226 UINT32 HorizontalResolution
;
227 UINT32 VerticalResolution
;
238 IN EFI_HANDLE ImageHandle
,
239 IN EFI_SYSTEM_TABLE
*SystemTable
261 IN OUT CHAR16
*Buffer
,
269 ReadyToBootFunction (
275 InstallHiiDataAndGetSettings(
276 IN EFI_HII_STRING_PACK
*StringPack
,
278 ... // 0 or more of => IN EFI_HII_IFR_PACK *IfrPack,
279 // Terminate list with NULL
284 ReadOrInitSetupVariable(
285 IN UINTN RequiredVariableSize
,
286 IN UINTN RequiredPasswordSize
,
287 IN VOID
*DefaultData
,
288 IN VOID
*MfgDefaultData
,
289 OUT VOID
*SetupVariableData
,
290 OUT VOID
*SystemPassword
295 IN VOID
*Destination
,
302 IN EFI_GUID
*ProducerGuid
,
309 IN EFI_EXP_BASE2_DATA
*Data
);
313 IN EFI_EXP_BASE10_DATA
*Data
);
318 EFI_HII_HANDLE StringPackHandle
337 UpdateAhciRaidDiskInfo (
356 IN CHAR8
*AsciiString
,
357 IN CHAR16
*UnicodeString
361 ConfigModeStateGet();
370 SecurityDriverCallback (
371 IN EFI_FORM_CALLBACK_PROTOCOL
*This
,
373 IN EFI_IFR_DATA_ARRAY
*Data
,
374 OUT EFI_HII_CALLBACK_PACKET
**Packet
402 IN EFI_CPU_IO_PROTOCOL
*CpuIo
,
408 IN EFI_CPU_IO_PROTOCOL
*CpuIo
,
418 InstallBootCallbackRoutine(
422 InstallConfigurationCallbackRoutine(
426 InstallPerformanceCallbackRoutine(
430 InstallSecurityCallbackRoutine (
434 InstallMainCallbackRoutine (
438 MemoryConfigurationUpdate (
440 EFI_FORM_LABEL
*Label
,
443 EFI_FORM_ROUTINE
*Routine
447 MemoryConfigurationCallbackRoutine (
448 SYSTEM_CONFIGURATION
*SetupBuffer
452 MemoryConfigurationCalculateSpeed(
453 SYSTEM_CONFIGURATION
*SetupBuffer
458 IN STRING_REF TokenToUpdate
,
464 IN EFI_PLATFORM_INFO_HOB
*PlatformInfo
468 InitializeSetupVarHide (
472 PreparePCIePCISlotInformation(
478 BootConfigurationUpdate (
479 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
483 InitializeBootConfiguration(
489 IN CHAR16
*ThisString
494 IN STRING_REF
*BootMap
504 BootCfgCreateTwoOptionOneOf(
505 IN UINT16 QuestionId
,
506 IN EFI_FORM_LABEL Label
,
507 IN STRING_REF OptionPrompt
,
508 IN STRING_REF OptionHelp
,
509 IN STRING_REF OptionOneString
,
510 IN STRING_REF OptionTwoString
,
511 IN UINT8 OptionOneFlags
,
512 IN UINT8 OptionTwoFlags
,
513 IN UINT16 KeyValueOne
,
514 IN UINT16 KeyValueTwo
518 ReplaceOpcodeWithText(
519 IN STRING_REF OptionPrompt
,
520 IN STRING_REF OptionHelp
,
521 IN STRING_REF OptionOneString
,
522 IN EFI_FORM_LABEL Label
526 CreateDriveBootOrderOpcode(
528 IN STRING_REF
*BootMap
,
529 IN EFI_FORM_LABEL Label
,
530 IN UINT16 QuestionId
,
531 IN STRING_REF OptionOneString
,
532 IN STRING_REF OptionTwoString
536 SetHyperBootCfgFlags(
537 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
541 GetHyperBootCfgFlags(
542 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
546 PrepareBootCfgForHyperBoot(
547 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
552 IN SYSTEM_CONFIGURATION
*SystemConfiguration
557 IN SYSTEM_CONFIGURATION
*SystemConfiguration
,
558 IN OUT IFR_OPTION
*OptionList
,
559 IN IFR_OPTION IfrOption
,
560 IN UINT16 OptionCount
564 ConfigureBootOrderStrings(
565 IN SYSTEM_CONFIGURATION
*SystemConfiguration
569 InitializeAllBootStrings(
575 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
579 RestoreUsbCfgSettings(
580 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
584 UpdateBootDevicePriority(
585 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
590 IN OUT SYSTEM_CONFIGURATION
*SystemConfiguration
594 CheckForUserPassword(
600 HyperBootPasswordCallback(
606 HyperBootF9Callback (
617 ProgramToneFrequency (
618 IN EFI_SPEAKER_IF_PROTOCOL
*This
,
625 IN EFI_SPEAKER_IF_PROTOCOL
*This
,
626 IN UINTN NumberOfBeeps
,
627 IN UINTN BeepDuration
,
628 IN UINTN TimeInterval
632 InitializeObservableProtocol();
637 typedef struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL GOP_DISPLAY_BRIGHTNESS_PROTOCOL
;
641 (EFIAPI
*GET_MAXIMUM_BRIGHTNESS_LEVEL
) (
642 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL
*This
,
643 OUT UINT32
*MaxBrightnessLevel
649 (EFIAPI
*GET_CURRENT_BRIGHTNESS_LEVEL
) (
650 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL
*This
,
651 OUT UINT32
*MaxBrightnessLevel
656 (EFIAPI
*SET_BRIGHTNESS_LEVEL
) (
657 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL
*This
,
658 IN UINT32 BrightnessLevel
661 struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL
{
663 GET_MAXIMUM_BRIGHTNESS_LEVEL GetMaxBrightnessLevel
;
664 GET_CURRENT_BRIGHTNESS_LEVEL GetCurrentBrightnessLevel
;
665 SET_BRIGHTNESS_LEVEL SetBrightnessLevel
;
671 extern UINT8 MaintenanceBin
[];
672 extern UINT8 MainBin
[];
673 extern UINT8 ConfigurationBin
[];
674 extern UINT8 MemoryConfigurationBin
[];
675 extern UINT8 PerformanceBin
[];
676 extern UINT8 SecurityBin
[];
677 extern UINT8 BootBin
[];
678 extern UINT8 PowerBin
[];
679 extern UINT8 SystemSetupBin
[];
681 extern VOID
*mDxePlatformStringPack
;
682 extern EFI_HII_PROTOCOL
*mHii
;
683 extern SYSTEM_CONFIGURATION mSystemConfiguration
;
684 extern FRAMEWORK_EFI_HII_HANDLE mMaintenanceHiiHandle
;
685 extern FRAMEWORK_EFI_HII_HANDLE mMainHiiHandle
;
686 extern FRAMEWORK_EFI_HII_HANDLE mConfigurationHiiHandle
;
687 extern FRAMEWORK_EFI_HII_HANDLE mPerformanceHiiHandle
;
688 extern FRAMEWORK_EFI_HII_HANDLE mPowerHiiHandle
;
689 extern FRAMEWORK_EFI_HII_HANDLE mBootHiiHandle
;
690 extern FRAMEWORK_EFI_HII_HANDLE mSecurityHiiHandle
;
692 extern SYSTEM_PASSWORDS mSystemPassword
;
693 extern EFI_PASSWORD_DATA mAdminPassword
;
694 extern EFI_PASSWORD_DATA mUserPassword
;
696 extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*mPciRootBridgeIo
;
699 //extern EFI_REG_TABLE mSubsystemIdRegs[];
701 extern UINT32 mSubsystemVidDid
;
702 extern UINT32 mSubsystemAudioVidDid
;
704 extern UINT8 mBoardIdIndex
;
705 extern BOOLEAN mFoundAANum
;
706 extern EFI_BOARD_FEATURES mBoardFeatures
;
707 extern UINT16 mSubsystemDeviceId
;
708 extern UINT16 mSubsystemAudioDeviceId
;
709 extern BOARD_ID_DECODE mBoardIdDecodeTable
[];
710 extern UINTN mBoardIdDecodeTableSize
;
712 extern UINT8 mSmbusRsvdAddresses
[];
713 extern UINT8 mNumberSmbusAddress
;
714 extern BOOLEAN mMfgMode
;
715 extern UINT32 mPlatformBootMode
;
716 extern CHAR8 BoardAaNumber
[];
718 extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid
;