]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2TbltDevicePkg/PlatformDxe/PlatformDxe.h
Add TpmInitializationDonePpi to TPM PEI module.
[mirror_edk2.git] / Vlv2TbltDevicePkg / PlatformDxe / PlatformDxe.h
1 /*++
2
3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
4
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.
9
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.
12
13
14
15 Module Name:
16
17 PlatformDxe.h
18
19 Abstract:
20
21 Header file for Platform Initialization Driver.
22
23
24
25 ++*/
26
27 #ifndef _PLATFORM_DRIVER_H
28 #define _PLATFORM_DRIVER_H
29
30 #include <PiDxe.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"
74 #include "CpuType.h"
75
76 #define PCAT_RTC_ADDRESS_REGISTER 0x74
77 #define PCAT_RTC_DATA_REGISTER 0x75
78
79 #define RTC_ADDRESS_SECOND_ALARM 0x01
80 #define RTC_ADDRESS_MINUTE_ALARM 0x03
81 #define RTC_ADDRESS_HOUR_ALARM 0x05
82
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
87
88 #define B_RTC_ALARM_INT_ENABLE 0x20
89 #define B_RTC_ALARM_INT_STATUS 0x20
90
91 #define B_RTC_DATE_ALARM_MASK 0x3F
92
93 //
94 // Default CPU Alternate Duty Cycle (255=100%, 0=0%)
95 //
96 #define DEF_CPU_ALT_DUTY_CYCLE 0xFF
97
98 #define MAX_ONBOARD_SATA_DEVICE 2
99
100 #define DXE_DEVICE_ENABLED 1
101 #define DXE_DEVICE_DISABLED 0
102
103 #define AZALIA_MAX_LOOP_TIME 0x10000
104
105 //
106 // Platform driver GUID
107 //
108 #define EFI_PLATFORM_DRIVER_GUID \
109 { 0x056E7324, 0xA718, 0x465b, 0x9A, 0x84, 0x22, 0x8F, 0x06, 0x64, 0x2B, 0x4F }
110
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
117
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)
125
126
127 #define EFI_SECTION_STRING 0x1C
128 #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
129 #define PREFIX_BLANK 0x04
130
131 #pragma pack(1)
132
133 typedef UINT64 EFI_BOARD_FEATURES;
134
135 //
136 //BUGBUG: should remove these EDK hii definition once Hii transtion is done
137 //
138 typedef UINT16 STRING_REF;
139 typedef UINT16 EFI_FORM_LABEL;
140
141 typedef enum {
142 EfiUserPassword,
143 EfiAdminPassword
144 } EFI_PASSWORD_TYPE;
145
146 typedef struct {
147 CHAR16 TempPassword[PASSWORD_MAX_SIZE];
148 CHAR16 EncodedPassword[PASSWORD_MAX_SIZE];
149 VOID *PasswordLocation;
150 EFI_PASSWORD_TYPE PasswordType;
151 } EFI_PASSWORD_DATA;
152
153 typedef struct {
154 CHAR8 AaNumber[7];
155 UINT8 BoardId;
156 EFI_BOARD_FEATURES Features;
157 UINT16 SubsystemDeviceId;
158 UINT16 AudioSubsystemDeviceId;
159 UINT64 AcpiOemTableId;
160 } BOARD_ID_DECODE;
161
162 typedef
163 EFI_STATUS
164 (EFIAPI *EFI_FORM_ROUTINE) (
165 SYSTEM_CONFIGURATION *SetupBuffer
166 );
167
168 typedef struct{
169 UINT16 DeviceNumber;
170 UINT16 FunctionNumber;
171 }PCI_DEVICE_FUNC_INFO;
172
173 typedef struct{
174 CHAR16 PortNumber[4];
175 STRING_REF SataDeviceInfoStringId;
176 }SATA_DEVICE_STRING_INFO;
177
178 typedef struct {
179 UINT16 Signature;
180 UINT8 Size;
181 UINT32 EntryPoint;
182 UINT8 Reserve[17];
183 UINT16 PciDataOff;
184 UINT16 ExpansionOff;
185 } PNP_OPTION_ROM_HEADER;
186
187 typedef struct {
188 UINT32 Signature;
189 UINT8 Revision;
190 UINT8 Length;
191 UINT16 NextHeader;
192 UINT8 Reserve;
193 UINT8 CheckSum;
194 UINT32 DeviceId;
195 UINT16 ManufactureStrOff;
196 UINT16 ProductStrOff;
197 } PNP_EXPANSION_HEADER;
198
199 typedef struct {
200 BOOLEAN Enable;
201 UINT8 VerbTableNum;
202 UINT16 CodecSSID;
203 EFI_PHYSICAL_ADDRESS HDABar;
204 EFI_PHYSICAL_ADDRESS UpperHDABar;
205 UINT8 SDIPresent;
206 BOOLEAN Pme;
207 BOOLEAN LegacyFrontPanelAudio;
208 BOOLEAN HighDefinitionFrontPanelAudio;
209 } EFI_AZALIA_S3;
210
211 //
212 //following structs are from R8. Remove them once R8->R9 transition is done
213 //
214 typedef struct {
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)
217 UINT16 Value;
218 UINT8 Flags;
219 UINT16 Key;
220 } IFR_OPTION;
221
222
223
224 typedef struct {
225 UINT8 Number;
226 UINT32 HorizontalResolution;
227 UINT32 VerticalResolution;
228 } PANEL_RESOLUTION;
229
230 #pragma pack()
231
232 //
233 // Prototypes
234 //
235 EFI_STATUS
236 EFIAPI
237 EfiMain (
238 IN EFI_HANDLE ImageHandle,
239 IN EFI_SYSTEM_TABLE *SystemTable
240 );
241
242 EFI_STATUS
243 ProcessEventLog (
244 );
245
246 EFI_STATUS
247 FindDataRecords (
248 );
249
250 EFI_STATUS
251 ProcessPasswords(
252 );
253
254 VOID
255 MemorySetup(
256 );
257
258
259 UINTN
260 EfiValueToString (
261 IN OUT CHAR16 *Buffer,
262 IN INT64 Value,
263 IN UINTN Flags,
264 IN UINTN Width
265 );
266
267 VOID
268 EFIAPI
269 ReadyToBootFunction (
270 EFI_EVENT Event,
271 VOID *Context
272 );
273
274 VOID
275 InstallHiiDataAndGetSettings(
276 IN EFI_HII_STRING_PACK *StringPack,
277 //
278 ... // 0 or more of => IN EFI_HII_IFR_PACK *IfrPack,
279 // Terminate list with NULL
280 //
281 );
282
283 EFI_STATUS
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
291 );
292
293 VOID
294 EfiLogicalOrMem(
295 IN VOID *Destination,
296 IN VOID *Source,
297 IN UINTN Length
298 );
299
300 EFI_STATUS
301 GetStringFromToken (
302 IN EFI_GUID *ProducerGuid,
303 IN STRING_REF Token,
304 OUT CHAR16 **String
305 );
306
307 UINT32
308 ConvertBase2ToRaw (
309 IN EFI_EXP_BASE2_DATA *Data);
310
311 UINT32
312 ConvertBase10ToRaw (
313 IN EFI_EXP_BASE10_DATA *Data);
314
315 CHAR16 *
316 GetStringById (
317 IN STRING_REF Id,
318 EFI_HII_HANDLE StringPackHandle
319 );
320
321 VOID
322 EFIAPI
323 SetupDataFilter (
324 IN EFI_EVENT Event,
325 IN VOID* Context
326 );
327
328 VOID
329 EFIAPI
330 IdeDataFilter (
331 IN EFI_EVENT Event,
332 IN VOID* Context
333 );
334
335 VOID
336 EFIAPI
337 UpdateAhciRaidDiskInfo (
338 IN EFI_EVENT Event,
339 IN VOID* Context
340 );
341
342 VOID
343 EFIAPI
344 EventLogFilter (
345 IN EFI_EVENT Event,
346 IN VOID* Context
347 );
348
349 VOID
350 SwapEntries (
351 IN CHAR8 *Data
352 );
353
354 VOID
355 AsciiToUnicode (
356 IN CHAR8 *AsciiString,
357 IN CHAR16 *UnicodeString
358 );
359
360 UINT16
361 ConfigModeStateGet();
362
363 VOID
364 SetSkus();
365
366 VOID
367 CPUSetupItems();
368
369 EFI_STATUS
370 SecurityDriverCallback (
371 IN EFI_FORM_CALLBACK_PROTOCOL *This,
372 IN UINT16 KeyValue,
373 IN EFI_IFR_DATA_ARRAY *Data,
374 OUT EFI_HII_CALLBACK_PACKET **Packet
375 );
376
377 VOID
378 SetPasswordState (
379 );
380
381 VOID
382 EncodePassword (
383 IN CHAR16 *Password
384 );
385
386 VOID
387 EFIAPI
388 PciBusEvent (
389 IN EFI_EVENT Event,
390 IN VOID* Context
391 );
392 VOID
393 AsfInitialize(
394 );
395
396 VOID
397 InitializeAsf (
398 );
399
400 UINT8
401 ReadCmosBank1Byte (
402 IN EFI_CPU_IO_PROTOCOL *CpuIo,
403 IN UINT8 Index
404 );
405
406 VOID
407 WriteCmosBank1Byte (
408 IN EFI_CPU_IO_PROTOCOL *CpuIo,
409 IN UINT8 Index,
410 IN UINT8 Data
411 );
412
413 VOID
414 InitializeBoardId (
415 );
416
417 EFI_STATUS
418 InstallBootCallbackRoutine(
419 );
420
421 EFI_STATUS
422 InstallConfigurationCallbackRoutine(
423 );
424
425 EFI_STATUS
426 InstallPerformanceCallbackRoutine(
427 );
428
429 EFI_STATUS
430 InstallSecurityCallbackRoutine (
431 );
432
433 EFI_STATUS
434 InstallMainCallbackRoutine (
435 );
436
437 EFI_STATUS
438 MemoryConfigurationUpdate (
439 UINT16 *Key,
440 EFI_FORM_LABEL *Label,
441 UINT16 *OpcodeCount,
442 UINT8 **OpcodeData,
443 EFI_FORM_ROUTINE *Routine
444 );
445
446 EFI_STATUS
447 MemoryConfigurationCallbackRoutine (
448 SYSTEM_CONFIGURATION *SetupBuffer
449 );
450
451 EFI_STATUS
452 MemoryConfigurationCalculateSpeed(
453 SYSTEM_CONFIGURATION *SetupBuffer
454 );
455
456 VOID
457 UpdateMemoryString(
458 IN STRING_REF TokenToUpdate,
459 IN CHAR16 *NewString
460 );
461
462 VOID
463 InitFeaturePolicy (
464 IN EFI_PLATFORM_INFO_HOB *PlatformInfo
465 );
466
467 VOID
468 InitializeSetupVarHide (
469 );
470
471 VOID
472 PreparePCIePCISlotInformation(
473 VOID
474 );
475
476
477 EFI_STATUS
478 BootConfigurationUpdate (
479 IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
480 );
481
482 EFI_STATUS
483 InitializeBootConfiguration(
484 VOID
485 );
486
487 UINT16
488 GetStringSize(
489 IN CHAR16 *ThisString
490 );
491
492 UINT16
493 GetDriveCount (
494 IN STRING_REF *BootMap
495 );
496
497 CHAR16 *
498 GetBootString (
499 IN STRING_REF Id,
500 OUT UINTN *Length
501 );
502
503 EFI_STATUS
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
515 );
516
517 EFI_STATUS
518 ReplaceOpcodeWithText(
519 IN STRING_REF OptionPrompt,
520 IN STRING_REF OptionHelp,
521 IN STRING_REF OptionOneString,
522 IN EFI_FORM_LABEL Label
523 );
524
525 EFI_STATUS
526 CreateDriveBootOrderOpcode(
527 IN VOID *Data,
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
533 );
534
535 VOID
536 SetHyperBootCfgFlags(
537 IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
538 );
539
540 VOID
541 GetHyperBootCfgFlags(
542 IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
543 );
544
545 VOID
546 PrepareBootCfgForHyperBoot(
547 IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
548 );
549
550 BOOLEAN
551 BootCfgChanged(
552 IN SYSTEM_CONFIGURATION *SystemConfiguration
553 );
554
555 EFI_STATUS
556 InsertOpcodeAtIndex(
557 IN SYSTEM_CONFIGURATION *SystemConfiguration,
558 IN OUT IFR_OPTION *OptionList,
559 IN IFR_OPTION IfrOption,
560 IN UINT16 OptionCount
561 );
562
563 VOID
564 ConfigureBootOrderStrings(
565 IN SYSTEM_CONFIGURATION *SystemConfiguration
566 );
567
568 VOID
569 InitializeAllBootStrings(
570 VOID
571 );
572
573 VOID
574 SaveUsbCfgSettings(
575 IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
576 );
577
578 VOID
579 RestoreUsbCfgSettings(
580 IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
581 );
582
583 EFI_STATUS
584 UpdateBootDevicePriority(
585 IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
586 );
587
588 EFI_STATUS
589 DisableHyperBoot(
590 IN OUT SYSTEM_CONFIGURATION *SystemConfiguration
591 );
592
593 BOOLEAN
594 CheckForUserPassword(
595 VOID
596 );
597
598 EFI_STATUS
599 EFIAPI
600 HyperBootPasswordCallback(
601 IN OUT VOID* Data
602 );
603
604 EFI_STATUS
605 EFIAPI
606 HyperBootF9Callback (
607 IN VOID* Data
608 );
609
610 EFI_STATUS
611 InstallHiiEvents(
612 VOID
613 );
614
615 EFI_STATUS
616 EFIAPI
617 ProgramToneFrequency (
618 IN EFI_SPEAKER_IF_PROTOCOL *This,
619 IN UINT16 Frequency
620 );
621
622 EFI_STATUS
623 EFIAPI
624 GenerateBeepTone (
625 IN EFI_SPEAKER_IF_PROTOCOL *This,
626 IN UINTN NumberOfBeeps,
627 IN UINTN BeepDuration,
628 IN UINTN TimeInterval
629 );
630
631 EFI_STATUS
632 InitializeObservableProtocol();
633
634 EFI_STATUS
635 PciBusDriverHook();
636
637 typedef struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL GOP_DISPLAY_BRIGHTNESS_PROTOCOL;
638
639 typedef
640 EFI_STATUS
641 (EFIAPI *GET_MAXIMUM_BRIGHTNESS_LEVEL) (
642 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This,
643 OUT UINT32 *MaxBrightnessLevel
644 );
645
646
647 typedef
648 EFI_STATUS
649 (EFIAPI *GET_CURRENT_BRIGHTNESS_LEVEL) (
650 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This,
651 OUT UINT32 *MaxBrightnessLevel
652 );
653
654 typedef
655 EFI_STATUS
656 (EFIAPI *SET_BRIGHTNESS_LEVEL) (
657 IN GOP_DISPLAY_BRIGHTNESS_PROTOCOL *This,
658 IN UINT32 BrightnessLevel
659 );
660
661 struct _GOP_DISPLAY_BRIGHTNESS_PROTOCOL {
662 UINT32 Revision;
663 GET_MAXIMUM_BRIGHTNESS_LEVEL GetMaxBrightnessLevel;
664 GET_CURRENT_BRIGHTNESS_LEVEL GetCurrentBrightnessLevel;
665 SET_BRIGHTNESS_LEVEL SetBrightnessLevel;
666 };
667
668 //
669 // Global externs
670 //
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[];
680
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;
691
692 extern SYSTEM_PASSWORDS mSystemPassword;
693 extern EFI_PASSWORD_DATA mAdminPassword;
694 extern EFI_PASSWORD_DATA mUserPassword;
695
696 extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *mPciRootBridgeIo;
697
698 //
699 //extern EFI_REG_TABLE mSubsystemIdRegs[];
700 //
701 extern UINT32 mSubsystemVidDid;
702 extern UINT32 mSubsystemAudioVidDid;
703
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;
711
712 extern UINT8 mSmbusRsvdAddresses[];
713 extern UINT8 mNumberSmbusAddress;
714 extern BOOLEAN mMfgMode;
715 extern UINT32 mPlatformBootMode;
716 extern CHAR8 BoardAaNumber[];
717
718 extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid;
719 #endif