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