51#define TCG_DXE_DATA_FROM_THIS(this) \
52 BASE_CR (this, TCG_DXE_DATA, TcgProtocol)
66 sizeof (mTcgClientAcpiTemplate),
87 sizeof (mTcgServerAcpiTemplate),
105 EFI_ACPI_3_0_SYSTEM_MEMORY,
119UINTN mBootAttempts = 0;
120CHAR16 mBootVarName[] = L
"BootOrder";
142 UINTN EnabledProcessorNum;
147 Status =
gBS->LocateProtocol (&gEfiMpServiceProtocolGuid,
NULL, (VOID **)&MpProtocol);
148 if (EFI_ERROR (Status)) {
152 return EFI_UNSUPPORTED;
155 Status = MpProtocol->GetNumberOfProcessors (
160 if (EFI_ERROR (Status)) {
164 Status =
gBS->AllocatePool (
167 (VOID **)&ProcessorLocBuf
169 if (EFI_ERROR (Status)) {
176 for (Index = 0; Index < ProcessorNum; Index++) {
177 Status = MpProtocol->GetProcessorInfo (
182 if (EFI_ERROR (Status)) {
191 &ProcessorLocBuf[Index],
197 *LocationBuf = ProcessorLocBuf;
230 OUT UINT32 *TCGFeatureFlags,
237 TcgData = TCG_DXE_DATA_FROM_THIS (This);
239 if (ProtocolCapability !=
NULL) {
240 *ProtocolCapability = TcgData->BsCap;
243 if (TCGFeatureFlags !=
NULL) {
244 *TCGFeatureFlags = 0;
247 if (EventLogLocation !=
NULL) {
248 if (
PcdGet8 (PcdTpmPlatformClass) == TCG_PLATFORM_TYPE_CLIENT) {
249 *EventLogLocation = TcgData->TcgClientAcpiTable->Lasa;
251 *EventLogLocation = TcgData->TcgServerAcpiTable->Lasa;
255 if (EventLogLastEntry !=
NULL) {
256 if (TcgData->BsCap.TPMDeactivatedFlag || (!TcgData->BsCap.TPMPresentFlag)) {
289 ASSERT (Sha1Ctx !=
NULL);
323 IN UINT64 HashDataLen,
324 IN TCG_ALGORITHM_ID AlgorithmId,
325 IN OUT UINT64 *HashedDataLen,
326 IN OUT UINT8 **HashedDataResult
329 if ((HashedDataLen ==
NULL) || (HashedDataResult ==
NULL)) {
330 return EFI_INVALID_PARAMETER;
333 switch (AlgorithmId) {
335 if (*HashedDataLen == 0) {
338 if (*HashedDataResult ==
NULL) {
339 return EFI_OUT_OF_RESOURCES;
345 return EFI_BUFFER_TOO_SMALL;
350 if (*HashedDataResult ==
NULL) {
360 return EFI_UNSUPPORTED;
379 IN OUT UINT8 **EventLogPtr,
383 IN UINT8 *NewEventData
391 if ((
UINTN)NewEventHdr->EventSize > MAX_UINTN - sizeof (*NewEventHdr)) {
392 return EFI_OUT_OF_RESOURCES;
395 NewLogSize =
sizeof (*NewEventHdr) + NewEventHdr->EventSize;
396 if (NewLogSize > MaxSize - *LogSize) {
397 return EFI_OUT_OF_RESOURCES;
400 *EventLogPtr += *LogSize;
401 *LogSize += NewLogSize;
402 CopyMem (*EventLogPtr, NewEventHdr,
sizeof (*NewEventHdr));
404 *EventLogPtr +
sizeof (*NewEventHdr),
406 NewEventHdr->EventSize
427 IN UINT8 *NewEventData
430 if (
PcdGet8 (PcdTpmPlatformClass) == TCG_PLATFORM_TYPE_CLIENT) {
431 TcgData->LastEvent = (UINT8 *)(
UINTN)TcgData->TcgClientAcpiTable->Lasa;
434 &TcgData->EventLogSize,
435 (
UINTN)TcgData->TcgClientAcpiTable->Laml,
440 TcgData->LastEvent = (UINT8 *)(
UINTN)TcgData->TcgServerAcpiTable->Lasa;
443 &TcgData->EventLogSize,
444 (
UINTN)TcgData->TcgServerAcpiTable->Laml,
473 IN OUT UINT32 *EventNumber,
479 if (TCGLogData ==
NULL) {
480 return EFI_INVALID_PARAMETER;
483 TcgData = TCG_DXE_DATA_FROM_THIS (This);
485 if (TcgData->BsCap.TPMDeactivatedFlag || (!TcgData->BsCap.TPMPresentFlag)) {
486 return EFI_DEVICE_ERROR;
515 IN UINT32 TpmInputParameterBlockSize,
516 IN UINT8 *TpmInputParameterBlock,
517 IN UINT32 TpmOutputParameterBlockSize,
518 IN UINT8 *TpmOutputParameterBlock
521 if ((TpmInputParameterBlock ==
NULL) ||
522 (TpmOutputParameterBlock ==
NULL) ||
523 (TpmInputParameterBlockSize == 0) ||
524 (TpmOutputParameterBlockSize == 0))
526 return EFI_INVALID_PARAMETER;
530 TpmInputParameterBlockSize,
531 TpmInputParameterBlock,
532 &TpmOutputParameterBlockSize,
533 TpmOutputParameterBlock
558 IN UINT64 HashDataLen,
560 IN UINT8 *NewEventData
565 if (!TcgData->BsCap.TPMPresentFlag) {
566 return EFI_DEVICE_ERROR;
569 if ((HashDataLen > 0) || (HashData !=
NULL)) {
575 if (EFI_ERROR (Status)) {
576 DEBUG ((DEBUG_ERROR,
"TpmCommHashAll Failed. %x\n", Status));
582 &NewEventHdr->Digest,
583 NewEventHdr->PCRIndex,
586 if (!EFI_ERROR (Status)) {
591 if ((Status == EFI_DEVICE_ERROR) || (Status == EFI_TIMEOUT)) {
592 DEBUG ((DEBUG_ERROR,
"TcgDxeHashLogExtendEventI - %r. Disable TPM.\n", Status));
593 TcgData->BsCap.TPMPresentFlag =
FALSE;
596 (
PcdGet32 (PcdStatusCodeSubClassTpmDevice) | EFI_P_EC_INTERFACE_ERROR)
598 Status = EFI_DEVICE_ERROR;
633 IN UINT64 HashDataLen,
636 IN OUT UINT32 *EventNumber,
643 if ((TCGLogData ==
NULL) || (EventLogLastEntry ==
NULL)) {
644 return EFI_INVALID_PARAMETER;
647 TcgData = TCG_DXE_DATA_FROM_THIS (This);
649 if (TcgData->BsCap.TPMDeactivatedFlag || (!TcgData->BsCap.TPMPresentFlag)) {
650 return EFI_DEVICE_ERROR;
654 return EFI_UNSUPPORTED;
657 if ((HashData == 0) && (HashDataLen > 0)) {
658 return EFI_INVALID_PARAMETER;
663 (UINT8 *)(
UINTN)HashData,
669 if (!EFI_ERROR (Status)) {
685 sizeof (mTcgDxeData.BsCap),
692 &mTcgClientAcpiTemplate,
693 &mTcgServerAcpiTemplate,
716 if (
PcdGet8 (PcdTpmPlatformClass) == TCG_PLATFORM_TYPE_CLIENT) {
717 Lasa = mTcgClientAcpiTemplate.Lasa;
719 Status =
gBS->AllocatePages (
725 if (EFI_ERROR (Status)) {
729 mTcgClientAcpiTemplate.Lasa = Lasa;
735 mTcgClientAcpiTemplate.Laml =
PcdGet32 (PcdTcgLogAreaMinLen);
737 Lasa = mTcgServerAcpiTemplate.Lasa;
739 Status =
gBS->AllocatePages (
745 if (EFI_ERROR (Status)) {
749 mTcgServerAcpiTemplate.Lasa = Lasa;
755 mTcgServerAcpiTemplate.Laml =
PcdGet32 (PcdTcgLogAreaMinLen);
759 while (!EFI_ERROR (Status) &&
762 TcgEvent = GET_GUID_HOB_DATA (GuidHob.Guid);
763 GuidHob.Raw = GET_NEXT_HOB (GuidHob);
791 TcgEvent.PCRIndex = 5;
792 TcgEvent.EventType = EV_EFI_ACTION;
822 ProcessorLocBuf =
NULL;
825 if (
PcdGet8 (PcdTpmPlatformClass) == TCG_PLATFORM_TYPE_SERVER) {
832 if (!EFI_ERROR (Status)) {
833 TcgEvent.PCRIndex = 1;
834 TcgEvent.EventType = EV_TABLE_OF_DEVICES;
835 TcgEvent.EventSize =
sizeof (HandoffTables);
837 HandoffTables.NumberOfTables = 1;
838 HandoffTables.TableEntry[0].
VendorGuid = gEfiMpServiceProtocolGuid;
839 HandoffTables.TableEntry[0].
VendorTable = ProcessorLocBuf;
843 (UINT8 *)(
UINTN)ProcessorLocBuf,
846 (UINT8 *)&HandoffTables
875 TcgEvent.PCRIndex = PCRIndex;
876 TcgEvent.EventType = EV_SEPARATOR;
877 TcgEvent.EventSize = (UINT32)
sizeof (EventData);
912 Status =
gRT->GetVariable (
919 if (Status != EFI_BUFFER_TOO_SMALL) {
924 if (VarData !=
NULL) {
925 Status =
gRT->GetVariable (
932 if (EFI_ERROR (Status)) {
961 IN TCG_EVENTTYPE EventType,
973 VarNameLength =
StrLen (VarName);
974 TcgEvent.PCRIndex = PCRIndex;
975 TcgEvent.EventType = EventType;
976 TcgEvent.EventSize = (UINT32)(
sizeof (*VarLog) + VarNameLength *
sizeof (*VarName) + VarSize
977 -
sizeof (VarLog->UnicodeName) -
sizeof (VarLog->
VariableData));
980 if (VarLog ==
NULL) {
981 return EFI_OUT_OF_RESOURCES;
984 VarLog->VariableName = *VendorGuid;
985 VarLog->UnicodeNameLength = VarNameLength;
986 VarLog->VariableDataLength = VarSize;
990 VarNameLength * sizeof (*VarName)
993 (CHAR16 *)VarLog->UnicodeName + VarNameLength,
1033 *VarData =
ReadVariable (VarName, VendorGuid, VarSize);
1034 if (*VarData ==
NULL) {
1035 return EFI_NOT_FOUND;
1040 EV_EFI_VARIABLE_BOOT,
1074 &gEfiGlobalVariableGuid,
1078 if ((Status == EFI_NOT_FOUND) || (BootOrder ==
NULL)) {
1082 if (EFI_ERROR (Status)) {
1090 BootCount /=
sizeof (*BootOrder);
1091 for (Index = 0; Index < BootCount; Index++) {
1092 UnicodeSPrint (mBootVarName,
sizeof (mBootVarName), L
"Boot%04x", BootOrder[Index]);
1095 &gEfiGlobalVariableGuid,
1099 if (!EFI_ERROR (Status)) {
1127 if (mBootAttempts == 0) {
1132 if (EFI_ERROR (Status)) {
1133 DEBUG ((DEBUG_ERROR,
"HOBs not Measured. Error!\n"));
1140 if (EFI_ERROR (Status)) {
1141 DEBUG ((DEBUG_ERROR,
"Boot Variables not Measured. Error!\n"));
1148 EFI_CALLING_EFI_APPLICATION
1150 if (EFI_ERROR (Status)) {
1151 DEBUG ((DEBUG_ERROR,
"%a not Measured. Error!\n", EFI_CALLING_EFI_APPLICATION));
1157 for (PcrIndex = 0; PcrIndex < 8; PcrIndex++) {
1159 if (EFI_ERROR (Status)) {
1160 DEBUG ((DEBUG_ERROR,
"Separator Event not Measured. Error!\n"));
1180 EFI_RETURNING_FROM_EFI_APPLICATION
1182 if (EFI_ERROR (Status)) {
1183 DEBUG ((DEBUG_ERROR,
"%a not Measured. Error!\n", EFI_RETURNING_FROM_EFI_APPLICATION));
1187 DEBUG ((DEBUG_INFO,
"TPM TcgDxe Measure Data when ReadyToBoot\n"));
1217 Status =
gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid,
NULL, (VOID **)&AcpiTable);
1218 if (EFI_ERROR (Status)) {
1222 if (
PcdGet8 (PcdTpmPlatformClass) == TCG_PLATFORM_TYPE_CLIENT) {
1223 CopyMem (mTcgClientAcpiTemplate.Header.OemId,
PcdGetPtr (PcdAcpiDefaultOemId),
sizeof (mTcgClientAcpiTemplate.Header.OemId));
1224 OemTableId =
PcdGet64 (PcdAcpiDefaultOemTableId);
1225 CopyMem (&mTcgClientAcpiTemplate.Header.OemTableId, &OemTableId, sizeof (UINT64));
1226 mTcgClientAcpiTemplate.Header.OemRevision =
PcdGet32 (PcdAcpiDefaultOemRevision);
1227 mTcgClientAcpiTemplate.Header.CreatorId =
PcdGet32 (PcdAcpiDefaultCreatorId);
1228 mTcgClientAcpiTemplate.Header.CreatorRevision =
PcdGet32 (PcdAcpiDefaultCreatorRevision);
1233 Checksum =
CalculateCheckSum8 ((UINT8 *)&mTcgClientAcpiTemplate,
sizeof (mTcgClientAcpiTemplate));
1234 mTcgClientAcpiTemplate.Header.Checksum = Checksum;
1236 Status = AcpiTable->InstallAcpiTable (
1238 &mTcgClientAcpiTemplate,
1239 sizeof (mTcgClientAcpiTemplate),
1243 CopyMem (mTcgServerAcpiTemplate.Header.OemId,
PcdGetPtr (PcdAcpiDefaultOemId),
sizeof (mTcgServerAcpiTemplate.Header.OemId));
1244 OemTableId =
PcdGet64 (PcdAcpiDefaultOemTableId);
1245 CopyMem (&mTcgServerAcpiTemplate.Header.OemTableId, &OemTableId, sizeof (UINT64));
1246 mTcgServerAcpiTemplate.Header.OemRevision =
PcdGet32 (PcdAcpiDefaultOemRevision);
1247 mTcgServerAcpiTemplate.Header.CreatorId =
PcdGet32 (PcdAcpiDefaultCreatorId);
1248 mTcgServerAcpiTemplate.Header.CreatorRevision =
PcdGet32 (PcdAcpiDefaultCreatorRevision);
1253 Checksum =
CalculateCheckSum8 ((UINT8 *)&mTcgServerAcpiTemplate,
sizeof (mTcgServerAcpiTemplate));
1254 mTcgServerAcpiTemplate.Header.Checksum = Checksum;
1256 mTcgServerAcpiTemplate.BaseAddress.Address =
PcdGet64 (PcdTpmBaseAddress);
1257 Status = AcpiTable->InstallAcpiTable (
1259 &mTcgServerAcpiTemplate,
1260 sizeof (mTcgServerAcpiTemplate),
1265 if (EFI_ERROR (Status)) {
1266 DEBUG ((DEBUG_ERROR,
"Tcg Acpi Table installation failure"));
1292 EFI_EXIT_BOOT_SERVICES_INVOCATION
1294 if (EFI_ERROR (Status)) {
1295 DEBUG ((DEBUG_ERROR,
"%a not Measured. Error!\n", EFI_EXIT_BOOT_SERVICES_INVOCATION));
1302 EFI_EXIT_BOOT_SERVICES_SUCCEEDED
1304 if (EFI_ERROR (Status)) {
1305 DEBUG ((DEBUG_ERROR,
"%a not Measured. Error!\n", EFI_EXIT_BOOT_SERVICES_SUCCEEDED));
1331 EFI_EXIT_BOOT_SERVICES_FAILED
1333 if (EFI_ERROR (Status)) {
1334 DEBUG ((DEBUG_ERROR,
"%a not Measured. Error!\n", EFI_EXIT_BOOT_SERVICES_FAILED));
1349 OUT BOOLEAN *TPMDeactivatedFlag
1356 if (!EFI_ERROR (Status)) {
1357 *TPMDeactivatedFlag = VolatileFlags.deactivated;
1387 DEBUG ((DEBUG_ERROR,
"No TPM12 instance required!\n"));
1388 return EFI_UNSUPPORTED;
1392 DEBUG ((DEBUG_ERROR,
"TPM error!\n"));
1393 return EFI_DEVICE_ERROR;
1397 if (EFI_ERROR (Status)) {
1398 DEBUG ((DEBUG_ERROR,
"TPM not detected!\n"));
1402 Status =
GetTpmStatus (&mTcgDxeData.BsCap.TPMDeactivatedFlag);
1403 if (EFI_ERROR (Status)) {
1406 "DriverEntry: TPM not working properly\n"
1411 Status =
gBS->InstallProtocolInterface (
1413 &gEfiTcgProtocolGuid,
1415 &mTcgDxeData.TcgProtocol
1417 if (!EFI_ERROR (Status) && (!mTcgDxeData.BsCap.TPMDeactivatedFlag) && mTcgDxeData.BsCap.TPMPresentFlag) {
1434 Status =
gBS->CreateEventEx (
1439 &gEfiEventExitBootServicesGuid,
1446 Status =
gBS->CreateEventEx (
1451 &gEventExitBootServicesFailedGuid,
#define EFI_ACPI_3_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE
VOID *EFIAPI GetFirstGuidHob(IN CONST EFI_GUID *Guid)
VOID *EFIAPI GetNextGuidHob(IN CONST EFI_GUID *Guid, IN CONST VOID *HobStart)
VOID *EFIAPI GetHobList(VOID)
BOOLEAN EFIAPI Sha1Final(IN OUT VOID *Sha1Context, OUT UINT8 *HashValue)
BOOLEAN EFIAPI Sha1Init(OUT VOID *Sha1Context)
UINTN EFIAPI Sha1GetContextSize(VOID)
BOOLEAN EFIAPI Sha1Update(IN OUT VOID *Sha1Context, IN CONST VOID *Data, IN UINTN DataSize)
UINTN EFIAPI AsciiStrLen(IN CONST CHAR8 *String)
UINT8 EFIAPI CalculateCheckSum8(IN CONST UINT8 *Buffer, IN UINTN Length)
UINTN EFIAPI StrLen(IN CONST CHAR16 *String)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI SetMem(OUT VOID *Buffer, IN UINTN Length, IN UINT8 Value)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
VOID EFIAPI FreePool(IN VOID *Buffer)
UINTN EFIAPI UnicodeSPrint(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString,...)
EFI_RUNTIME_SERVICES * gRT
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG(Expression)
#define REPORT_STATUS_CODE(Type, Value)
#define PcdGet64(TokenName)
#define PcdGet8(TokenName)
#define PcdGet32(TokenName)
#define PcdGetPtr(TokenName)
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
EFI_STATUS EFIAPI TcgDxeHashLogExtendEvent(IN EFI_TCG_PROTOCOL *This, IN EFI_PHYSICAL_ADDRESS HashData, IN UINT64 HashDataLen, IN TPM_ALGORITHM_ID AlgorithmId, IN OUT TCG_PCR_EVENT *TCGLogData, IN OUT UINT32 *EventNumber, OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry)
EFI_STATUS EFIAPI SetupEventLog(VOID)
VOID EFIAPI OnExitBootServicesFailed(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI TcgMeasureAction(IN CHAR8 *String)
EFI_STATUS EFIAPI TcgDxeStatusCheck(IN EFI_TCG_PROTOCOL *This, OUT TCG_EFI_BOOT_SERVICE_CAPABILITY *ProtocolCapability, OUT UINT32 *TCGFeatureFlags, OUT EFI_PHYSICAL_ADDRESS *EventLogLocation, OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry)
EFI_STATUS EFIAPI TcgDxeLogEvent(IN EFI_TCG_PROTOCOL *This, IN TCG_PCR_EVENT *TCGLogData, IN OUT UINT32 *EventNumber, IN UINT32 Flags)
EFI_STATUS GetProcessorsCpuLocation(OUT EFI_CPU_PHYSICAL_LOCATION **LocationBuf, OUT UINTN *Num)
VOID EFIAPI OnReadyToBoot(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI TcgDxePassThroughToTpm(IN EFI_TCG_PROTOCOL *This, IN UINT32 TpmInputParameterBlockSize, IN UINT8 *TpmInputParameterBlock, IN UINT32 TpmOutputParameterBlockSize, IN UINT8 *TpmOutputParameterBlock)
VOID EFIAPI OnExitBootServices(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI MeasureSeparatorEvent(IN TPM_PCRINDEX PCRIndex)
EFI_STATUS EFIAPI TpmCommHashAll(IN CONST UINT8 *Data, IN UINTN DataLen, OUT TPM_DIGEST *Digest)
EFI_STATUS EFIAPI MeasureVariable(IN TPM_PCRINDEX PCRIndex, IN TCG_EVENTTYPE EventType, IN CHAR16 *VarName, IN EFI_GUID *VendorGuid, IN VOID *VarData, IN UINTN VarSize)
VOID EFIAPI InstallAcpiTable(IN EFI_EVENT Event, IN VOID *Context)
EFI_STATUS EFIAPI TcgDxeHashLogExtendEventI(IN TCG_DXE_DATA *TcgData, IN UINT8 *HashData, IN UINT64 HashDataLen, IN OUT TCG_PCR_EVENT_HDR *NewEventHdr, IN UINT8 *NewEventData)
EFI_STATUS EFIAPI MeasureHandoffTables(VOID)
EFI_STATUS GetTpmStatus(OUT BOOLEAN *TPMDeactivatedFlag)
EFI_STATUS EFIAPI ReadAndMeasureBootVariable(IN CHAR16 *VarName, IN EFI_GUID *VendorGuid, OUT UINTN *VarSize, OUT VOID **VarData)
EFI_STATUS TpmCommLogEvent(IN OUT UINT8 **EventLogPtr, IN OUT UINTN *LogSize, IN UINTN MaxSize, IN TCG_PCR_EVENT_HDR *NewEventHdr, IN UINT8 *NewEventData)
EFI_STATUS EFIAPI TcgDxeLogEventI(IN TCG_DXE_DATA *TcgData, IN TCG_PCR_EVENT_HDR *NewEventHdr, IN UINT8 *NewEventData)
EFI_STATUS EFIAPI MeasureAllBootVariables(VOID)
EFI_STATUS EFIAPI DriverEntry(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
VOID *EFIAPI ReadVariable(IN CHAR16 *VarName, IN EFI_GUID *VendorGuid, OUT UINTN *VarSize)
EFI_STATUS EFIAPI TcgDxeHashAll(IN EFI_TCG_PROTOCOL *This, IN UINT8 *HashData, IN UINT64 HashDataLen, IN TCG_ALGORITHM_ID AlgorithmId, IN OUT UINT64 *HashedDataLen, IN OUT UINT8 **HashedDataResult)
struct tdTPM_DIGEST TPM_DIGEST
#define TPM_ALG_SHA
The SHA1 algorithm.
EFI_STATUS EFIAPI Tpm12Extend(IN TPM_DIGEST *DigestToExtend, IN TPM_PCRINDEX PcrIndex, OUT TPM_DIGEST *NewPcrValue)
EFI_STATUS EFIAPI Tpm12GetCapabilityFlagVolatile(OUT TPM_STCLEAR_FLAGS *VolatileFlags)
EFI_STATUS EFIAPI Tpm12RequestUseTpm(VOID)
EFI_STATUS EFIAPI Tpm12SubmitCommand(IN UINT32 InputParameterBlockSize, IN UINT8 *InputParameterBlock, IN OUT UINT32 *OutputParameterBlockSize, IN UINT8 *OutputParameterBlock)
UINT64 EFI_PHYSICAL_ADDRESS
#define EFI_SIZE_TO_PAGES(Size)
EFI_STATUS EFIAPI EfiCreateEventReadyToBootEx(IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, IN VOID *NotifyContext OPTIONAL, OUT EFI_EVENT *ReadyToBootEvent)
EFI_EVENT EFIAPI EfiCreateProtocolNotifyEvent(IN EFI_GUID *ProtocolGuid, IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction, IN VOID *NotifyContext OPTIONAL, OUT VOID **Registration)
EFI_CPU_PHYSICAL_LOCATION Location
INT8 VariableData[1]
Driver or platform-specific data.