summaryrefslogtreecommitdiff
path: root/EDK/Foundation/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'EDK/Foundation/Framework')
-rw-r--r--EDK/Foundation/Framework/Guid/AcpiTableStorage/AcpiTableStorage.c28
-rw-r--r--EDK/Foundation/Framework/Guid/AcpiTableStorage/AcpiTableStorage.h32
-rw-r--r--EDK/Foundation/Framework/Guid/Apriori/Apriori.c29
-rw-r--r--EDK/Foundation/Framework/Guid/Apriori/Apriori.h34
-rw-r--r--EDK/Foundation/Framework/Guid/DataHubRecords/DataHubRecords.c51
-rw-r--r--EDK/Foundation/Framework/Guid/DataHubRecords/DataHubRecords.h112
-rw-r--r--EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClass.h73
-rw-r--r--EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassCache.h161
-rw-r--r--EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMemory.h431
-rw-r--r--EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMisc.h1260
-rw-r--r--EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassProcessor.h492
-rw-r--r--EDK/Foundation/Framework/Guid/DxeServices/DxeServices.c27
-rw-r--r--EDK/Foundation/Framework/Guid/DxeServices/DxeServices.h32
-rw-r--r--EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.cif39
-rw-r--r--EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.inf64
-rw-r--r--EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.mak73
-rw-r--r--EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.sdl26
-rw-r--r--EDK/Foundation/Framework/Guid/FirmwareFileSystem/FirmwareFileSystem.c30
-rw-r--r--EDK/Foundation/Framework/Guid/FirmwareFileSystem/FirmwareFileSystem.h34
-rw-r--r--EDK/Foundation/Framework/Guid/FirmwareFileSystem2/FirmwareFileSystem2.c27
-rw-r--r--EDK/Foundation/Framework/Guid/FirmwareFileSystem2/FirmwareFileSystem2.h33
-rw-r--r--EDK/Foundation/Framework/Guid/FrameworkDevicePath/FrameworkDevicePath.c27
-rw-r--r--EDK/Foundation/Framework/Guid/FrameworkDevicePath/FrameworkDevicePath.h29
-rw-r--r--EDK/Foundation/Framework/Guid/Hob/Hob.c29
-rw-r--r--EDK/Foundation/Framework/Guid/Hob/Hob.h34
-rw-r--r--EDK/Foundation/Framework/Guid/MemoryAllocationHob/MemoryAllocationHob.c31
-rw-r--r--EDK/Foundation/Framework/Guid/MemoryAllocationHob/MemoryAllocationHob.h38
-rw-r--r--EDK/Foundation/Framework/Guid/PeiApriori/PeiApriori.c26
-rw-r--r--EDK/Foundation/Framework/Guid/PeiApriori/PeiApriori.h36
-rw-r--r--EDK/Foundation/Framework/Guid/SmramMemoryReserve/SmramMemoryReserve.c28
-rw-r--r--EDK/Foundation/Framework/Guid/SmramMemoryReserve/SmramMemoryReserve.h70
-rw-r--r--EDK/Foundation/Framework/Guid/StatusCodeDataTypeId/StatusCodeDataTypeId.c47
-rw-r--r--EDK/Foundation/Framework/Guid/StatusCodeDataTypeId/StatusCodeDataTypeId.h389
-rw-r--r--EDK/Foundation/Framework/Include/BootMode.h38
-rw-r--r--EDK/Foundation/Framework/Include/EfiBootScript.h234
-rw-r--r--EDK/Foundation/Framework/Include/EfiCapsule.h142
-rw-r--r--EDK/Foundation/Framework/Include/EfiDependency.h52
-rw-r--r--EDK/Foundation/Framework/Include/EfiFirmwareFileSystem.h131
-rw-r--r--EDK/Foundation/Framework/Include/EfiFirmwareVolume.h47
-rw-r--r--EDK/Foundation/Framework/Include/EfiFirmwareVolumeHeader.h215
-rw-r--r--EDK/Foundation/Framework/Include/EfiImageFormat.h279
-rw-r--r--EDK/Foundation/Framework/Include/EfiInternalFormRepresentation.h431
-rw-r--r--EDK/Foundation/Framework/Include/EfiPciCfg.h81
-rw-r--r--EDK/Foundation/Framework/Include/EfiSmbus.h70
-rw-r--r--EDK/Foundation/Framework/Include/EfiStatusCode.h961
-rw-r--r--EDK/Foundation/Framework/Include/EfiVariable.h34
-rw-r--r--EDK/Foundation/Framework/Include/PeiApi.h632
-rw-r--r--EDK/Foundation/Framework/Include/PeiHob.h253
-rw-r--r--EDK/Foundation/Framework/Include/TianoSpecApi.h590
-rw-r--r--EDK/Foundation/Framework/Include/TianoSpecDevicePath.h32
-rw-r--r--EDK/Foundation/Framework/Include/TianoSpecError.h41
-rw-r--r--EDK/Foundation/Framework/Include/TianoSpecTypes.h75
-rw-r--r--EDK/Foundation/Framework/Ppi/BlockIo/BlockIo.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/BlockIo/BlockIo.h88
-rw-r--r--EDK/Foundation/Framework/Ppi/BootInRecoveryMode/BootInRecoveryMode.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/BootInRecoveryMode/BootInRecoveryMode.h34
-rw-r--r--EDK/Foundation/Framework/Ppi/BootMode/BootMode.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/BootMode/BootMode.h34
-rw-r--r--EDK/Foundation/Framework/Ppi/BootScriptExecuter/BootScriptExecuter.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/BootScriptExecuter/BootScriptExecuter.h50
-rw-r--r--EDK/Foundation/Framework/Ppi/CpuIo/CpuIo.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/CpuIo/CpuIo.h250
-rw-r--r--EDK/Foundation/Framework/Ppi/Decompress/Decompress.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/Decompress/Decompress.h49
-rw-r--r--EDK/Foundation/Framework/Ppi/DeviceRecoveryModule/DeviceRecoveryModule.c30
-rw-r--r--EDK/Foundation/Framework/Ppi/DeviceRecoveryModule/DeviceRecoveryModule.h68
-rw-r--r--EDK/Foundation/Framework/Ppi/DxeIpl/DxeIpl.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/DxeIpl/DxeIpl.h51
-rw-r--r--EDK/Foundation/Framework/Ppi/EcpPciCfg/EcpPciCfg.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/EcpPciCfg/EcpPciCfg.h50
-rw-r--r--EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.cif74
-rw-r--r--EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.inf91
-rw-r--r--EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.mak70
-rw-r--r--EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.sdl26
-rw-r--r--EDK/Foundation/Framework/Ppi/EndOfPeiSignal/EndOfPeiSignal.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/EndOfPeiSignal/EndOfPeiSignal.h35
-rw-r--r--EDK/Foundation/Framework/Ppi/FindFv/FindFv.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/FindFv/FindFv.h51
-rw-r--r--EDK/Foundation/Framework/Ppi/FirmwareVolume/FirmwareVolume.c30
-rw-r--r--EDK/Foundation/Framework/Ppi/FirmwareVolume/FirmwareVolume.h112
-rw-r--r--EDK/Foundation/Framework/Ppi/FirmwareVolumeInfo/FirmwareVolumeInfo.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/FirmwareVolumeInfo/FirmwareVolumeInfo.h46
-rw-r--r--EDK/Foundation/Framework/Ppi/GuidedSectionExtraction/GuidedSectionExtraction.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/GuidedSectionExtraction/GuidedSectionExtraction.h42
-rw-r--r--EDK/Foundation/Framework/Ppi/LoadFile/LoadFile.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/LoadFile/LoadFile.h48
-rw-r--r--EDK/Foundation/Framework/Ppi/LoadFile2/LoadFile2.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/LoadFile2/LoadFile2.h49
-rw-r--r--EDK/Foundation/Framework/Ppi/MemoryDiscovered/MemoryDiscovered.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/MemoryDiscovered/MemoryDiscovered.h34
-rw-r--r--EDK/Foundation/Framework/Ppi/PciCfg/PciCfg.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/PciCfg/PciCfg.h65
-rw-r--r--EDK/Foundation/Framework/Ppi/PciCfg2/PciCfg2.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/PciCfg2/PciCfg2.h67
-rw-r--r--EDK/Foundation/Framework/Ppi/RecoveryModule/RecoveryModule.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/RecoveryModule/RecoveryModule.h45
-rw-r--r--EDK/Foundation/Framework/Ppi/Reset/Reset.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/Reset/Reset.h54
-rw-r--r--EDK/Foundation/Framework/Ppi/S3Resume/S3Resume.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/S3Resume/S3Resume.h44
-rw-r--r--EDK/Foundation/Framework/Ppi/SecPlatformInformation/SecPlatformInformation.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/SecPlatformInformation/SecPlatformInformation.h57
-rw-r--r--EDK/Foundation/Framework/Ppi/SectionExtraction/SectionExtraction.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/SectionExtraction/SectionExtraction.h59
-rw-r--r--EDK/Foundation/Framework/Ppi/Security/Security.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/Security/Security.h48
-rw-r--r--EDK/Foundation/Framework/Ppi/Security2/Security2.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/Security2/Security2.h50
-rw-r--r--EDK/Foundation/Framework/Ppi/Smbus/Smbus.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/Smbus/Smbus.h115
-rw-r--r--EDK/Foundation/Framework/Ppi/Smbus2/Smbus2.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/Smbus2/Smbus2.h96
-rw-r--r--EDK/Foundation/Framework/Ppi/Stall/Stall.c28
-rw-r--r--EDK/Foundation/Framework/Ppi/Stall/Stall.h47
-rw-r--r--EDK/Foundation/Framework/Ppi/StatusCode/StatusCode.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/StatusCode/StatusCode.h49
-rw-r--r--EDK/Foundation/Framework/Ppi/Variable/Variable.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/Variable/Variable.h69
-rw-r--r--EDK/Foundation/Framework/Ppi/Variable2/Variable2.c29
-rw-r--r--EDK/Foundation/Framework/Ppi/Variable2/Variable2.h61
-rw-r--r--EDK/Foundation/Framework/Protocol/AcpiS3Save/AcpiS3Save.c28
-rw-r--r--EDK/Foundation/Framework/Protocol/AcpiS3Save/AcpiS3Save.h68
-rw-r--r--EDK/Foundation/Framework/Protocol/AcpiSupport/AcpiSupport.c29
-rw-r--r--EDK/Foundation/Framework/Protocol/AcpiSupport/AcpiSupport.h128
-rw-r--r--EDK/Foundation/Framework/Protocol/BootScriptSave/BootScriptSave.c28
-rw-r--r--EDK/Foundation/Framework/Protocol/BootScriptSave/BootScriptSave.h75
-rw-r--r--EDK/Foundation/Framework/Protocol/CpuIo/CpuIo.c28
-rw-r--r--EDK/Foundation/Framework/Protocol/CpuIo/CpuIo.h93
-rw-r--r--EDK/Foundation/Framework/Protocol/DataHub/DataHub.c32
-rw-r--r--EDK/Foundation/Framework/Protocol/DataHub/DataHub.h125
-rw-r--r--EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.cif87
-rw-r--r--EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.inf117
-rw-r--r--EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.mak68
-rw-r--r--EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.sdl26
-rw-r--r--EDK/Foundation/Framework/Protocol/ExitPmAuth/ExitPmAuth.c35
-rw-r--r--EDK/Foundation/Framework/Protocol/ExitPmAuth/ExitPmAuth.h40
-rw-r--r--EDK/Foundation/Framework/Protocol/FirmwareVolume/FirmwareVolume.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/FirmwareVolume/FirmwareVolume.h334
-rw-r--r--EDK/Foundation/Framework/Protocol/FirmwareVolume2/FirmwareVolume2.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/FirmwareVolume2/FirmwareVolume2.h195
-rw-r--r--EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.c35
-rw-r--r--EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h270
-rw-r--r--EDK/Foundation/Framework/Protocol/FormBrowser/FormBrowser.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/FormBrowser/FormBrowser.h97
-rw-r--r--EDK/Foundation/Framework/Protocol/FormCallback/FormCallback.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/FormCallback/FormCallback.h120
-rw-r--r--EDK/Foundation/Framework/Protocol/Hii/Hii.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/Hii/Hii.h618
-rw-r--r--EDK/Foundation/Framework/Protocol/IdeControllerInit/IdeControllerInit.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/IdeControllerInit/IdeControllerInit.h348
-rw-r--r--EDK/Foundation/Framework/Protocol/IncompatiblePciDeviceSupport/IncompatiblePciDeviceSupport.c34
-rw-r--r--EDK/Foundation/Framework/Protocol/IncompatiblePciDeviceSupport/IncompatiblePciDeviceSupport.h55
-rw-r--r--EDK/Foundation/Framework/Protocol/Legacy8259/Legacy8259.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/Legacy8259/Legacy8259.h317
-rw-r--r--EDK/Foundation/Framework/Protocol/LegacyBios/LegacyBios.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/LegacyBios/LegacyBios.h714
-rw-r--r--EDK/Foundation/Framework/Protocol/LegacyBiosPlatform/LegacyBiosPlatform.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/LegacyBiosPlatform/LegacyBiosPlatform.h349
-rw-r--r--EDK/Foundation/Framework/Protocol/LegacyInterrupt/LegacyInterrupt.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/LegacyInterrupt/LegacyInterrupt.h136
-rw-r--r--EDK/Foundation/Framework/Protocol/LegacyRegion/LegacyRegion.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/LegacyRegion/LegacyRegion.h82
-rw-r--r--EDK/Foundation/Framework/Protocol/PciHostBridgeResourceAllocation/PciHostBridgeResourceAllocation.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/PciHostBridgeResourceAllocation/PciHostBridgeResourceAllocation.h364
-rw-r--r--EDK/Foundation/Framework/Protocol/PciHotPlugInit/PciHotPlugInit.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/PciHotPlugInit/PciHotPlugInit.h97
-rw-r--r--EDK/Foundation/Framework/Protocol/PciPlatform/PciPlatform.c26
-rw-r--r--EDK/Foundation/Framework/Protocol/PciPlatform/PciPlatform.h211
-rw-r--r--EDK/Foundation/Framework/Protocol/SectionExtraction/SectionExtraction.c28
-rw-r--r--EDK/Foundation/Framework/Protocol/SectionExtraction/SectionExtraction.h83
-rw-r--r--EDK/Foundation/Framework/Protocol/SecurityPolicy/SecurityPolicy.c28
-rw-r--r--EDK/Foundation/Framework/Protocol/SecurityPolicy/SecurityPolicy.h33
-rw-r--r--EDK/Foundation/Framework/Protocol/Smbus/Smbus.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/Smbus/Smbus.h108
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmAccess/SmmAccess.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmAccess/SmmAccess.h92
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmBase/SmmBase.c38
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmBase/SmmBase.h797
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmControl/SmmControl.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmControl/SmmControl.h79
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmCpuState/CpuSaveState.h150
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmCpuState/SmmCpuState.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmCpuState/SmmCpuState.h43
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmGpiDispatch/SmmGpiDispatch.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmGpiDispatch/SmmGpiDispatch.h152
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmIchnDispatch/SmmIchnDispatch.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmIchnDispatch/SmmIchnDispatch.h199
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmPeriodicTimerDispatch/SmmPeriodicTimerDispatch.c34
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmPeriodicTimerDispatch/SmmPeriodicTimerDispatch.h224
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmPowerButtonDispatch/SmmPowerButtonDispatch.c34
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmPowerButtonDispatch/SmmPowerButtonDispatch.h153
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmStandbyButtonDispatch/SmmStandbyButtonDispatch.c34
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmStandbyButtonDispatch/SmmStandbyButtonDispatch.h153
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmStatusCode/SmmStatusCode.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmStatusCode/SmmStatusCode.h58
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmSwDispatch/SmmSwDispatch.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmSwDispatch/SmmSwDispatch.h151
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmSxDispatch/SmmSxDispatch.c30
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmSxDispatch/SmmSxDispatch.h170
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmUsbDispatch/SmmUsbDispatch.c31
-rw-r--r--EDK/Foundation/Framework/Protocol/SmmUsbDispatch/SmmUsbDispatch.h149
201 files changed, 20509 insertions, 0 deletions
diff --git a/EDK/Foundation/Framework/Guid/AcpiTableStorage/AcpiTableStorage.c b/EDK/Foundation/Framework/Guid/AcpiTableStorage/AcpiTableStorage.c
new file mode 100644
index 0000000..13c46cd
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/AcpiTableStorage/AcpiTableStorage.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ AcpiTableStorage.c
+
+Abstract:
+
+ The filename of the Acpi table storage file.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION (AcpiTableStorage)
+
+EFI_GUID gEfiAcpiTableStorageGuid = EFI_ACPI_TABLE_STORAGE_GUID;
+
+EFI_GUID_STRING (&gEfiAcpiTableStorageGuid, "ACPI Table Storage File Name",
+ "Tiano ACPI 2.0 Table Storage file name GUID");
diff --git a/EDK/Foundation/Framework/Guid/AcpiTableStorage/AcpiTableStorage.h b/EDK/Foundation/Framework/Guid/AcpiTableStorage/AcpiTableStorage.h
new file mode 100644
index 0000000..9c8c065
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/AcpiTableStorage/AcpiTableStorage.h
@@ -0,0 +1,32 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ AcpiTableStorage.h
+
+Abstract:
+
+ GUID for the ACPI Table Storage filename.
+
+ This GUID is defined in the Tiano ACPI Table Storage EPS.
+
+--*/
+
+#ifndef _ACPI_TABLE_STORAGE_H_
+#define _ACPI_TABLE_STORAGE_H_
+
+#define EFI_ACPI_TABLE_STORAGE_GUID \
+ { 0x7e374e25, 0x8e01, 0x4fee, 0x87, 0xf2, 0x39, 0xc, 0x23, 0xc6, 0x6, 0xcd }
+
+extern EFI_GUID gEfiAcpiTableStorageGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/Apriori/Apriori.c b/EDK/Foundation/Framework/Guid/Apriori/Apriori.c
new file mode 100644
index 0000000..bba2107
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/Apriori/Apriori.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Apriori.c
+
+Abstract:
+
+ GUID used as an FV filename for A Priori file. The A Priori file contains a
+ list of FV filenames that the DXE dispatcher will schedule reguardless of
+ the dependency grammer.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION (Apriori)
+
+EFI_GUID gAprioriGuid = EFI_APRIORI_GUID;
+
+EFI_GUID_STRING(&gAprioriGuid, "Apriori File Name", "Apriori File containing FV GUIDs");
diff --git a/EDK/Foundation/Framework/Guid/Apriori/Apriori.h b/EDK/Foundation/Framework/Guid/Apriori/Apriori.h
new file mode 100644
index 0000000..45f0794
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/Apriori/Apriori.h
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Apriori.h
+
+Abstract:
+
+ GUID used as an FV filename for A Priori file. The A Priori file contains a
+ list of FV filenames that the DXE dispatcher will schedule reguardless of
+ the dependency grammer.
+
+--*/
+
+#ifndef _APRIORI_GUID_H_
+#define _APRIORI_GUID_H_
+
+#define EFI_APRIORI_GUID \
+ { \
+ 0xfc510ee7, 0xffdc, 0x11d4, 0xbd, 0x41, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+extern EFI_GUID gAprioriGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubRecords.c b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubRecords.c
new file mode 100644
index 0000000..33cb53e
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubRecords.c
@@ -0,0 +1,51 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DataHubRecords.c
+
+Abstract:
+
+ This file defines GUIDs and associated data structures for records
+ posted to the Data Hub.
+ The producers of these records use these definitions to construct
+ records.
+ The consumers of these records use these definitions to retrieve,
+ filter and parse records.
+
+ For more information please look at DataHub.doc
+
+--*/
+
+
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION (DataHubRecords)
+
+EFI_GUID gProcessorProducerGuid = EFI_PROCESSOR_PRODUCER_GUID;
+
+EFI_GUID gProcessorSubClassName = EFI_PROCESSOR_SUBCLASS_GUID;
+
+EFI_GUID gCacheSubClassName = EFI_CACHE_SUBCLASS_GUID;
+
+EFI_GUID gMiscProducerGuid = EFI_MISC_PRODUCER_GUID;
+EFI_GUID gMiscSubClassName = EFI_MISC_SUBCLASS_GUID;
+EFI_GUID gEfiMiscSubClassGuid = EFI_MISC_SUBCLASS_GUID;
+
+
+EFI_GUID gMemoryProducerGuid = EFI_MEMORY_PRODUCER_GUID;
+
+EFI_GUID gEfiMemorySubClassGuid = EFI_MEMORY_SUBCLASS_GUID;
+
+
+
+/* eof - DataHubRecords.c */
diff --git a/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubRecords.h b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubRecords.h
new file mode 100644
index 0000000..fe386be
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubRecords.h
@@ -0,0 +1,112 @@
+/*++
+
+Copyright (c) 2004 - 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DataHubRecords.h
+
+Abstract:
+
+ This file defines GUIDs and associated data structures for records
+ posted to the Data Hub.
+ The producers of these records use these definitions to construct
+ records.
+ The consumers of these records use these definitions to retrieve,
+ filter and parse records.
+
+ For more information please look at DataHub.doc
+
+--*/
+
+#ifndef _DATAHUB_RECORDS_H_
+#define _DATAHUB_RECORDS_H_
+
+#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
+#include "TianoHii.h"
+#else
+#include "EfiInternalFormRepresentation.h"
+#endif
+#include "DataHubSubClass.h"
+#include "DataHubSubClassProcessor.h"
+#include "DataHubSubClassCache.h"
+#include "DataHubSubClassMemory.h"
+#include "DataHubSubClassMisc.h"
+
+/*++
+BEGIN: Processor records definitions
+--*/
+
+extern EFI_GUID gProcessorProducerGuid;
+
+#define EFI_PROCESSOR_PRODUCER_GUID \
+ { 0x1bf06aea, 0x5bec, 0x4a8d, 0x95, 0x76, 0x74, 0x9b, 0x09, 0x56, 0x2d, 0x30 }
+
+
+extern EFI_GUID gProcessorSubClassName;
+
+
+extern EFI_GUID gCacheSubClassName;
+
+
+extern EFI_GUID gMiscSubClassName;
+
+/*++
+END: Processor records definitions
+--*/
+
+
+
+/*++
+BEGIN: Memory records definitions
+--*/
+
+extern EFI_GUID gMemoryProducerGuid;
+
+#define EFI_MEMORY_PRODUCER_GUID \
+ { 0x1d7add6e, 0xb2da, 0x4b0b, 0xb2, 0x9f, 0x49, 0xcb, 0x42, 0xf4, 0x63, 0x56 }
+
+//
+// ... need memory sub classes here...
+//
+extern EFI_GUID gEfiMemorySubClassGuid;
+
+
+
+/*++
+END: Memory records definitions
+--*/
+
+
+/*++
+BEGIN: Misc records definitions
+--*/
+
+extern EFI_GUID gMiscProducerGuid;
+
+#define EFI_MISC_PRODUCER_GUID \
+{ 0x62512c92, 0x63c4, 0x4d80, 0x82, 0xb1, 0xc1, 0xa4, 0xdc, 0x44, 0x80, 0xe5 }
+
+
+
+//
+// ... need misc sub classes here...
+//
+extern EFI_GUID gEfiMiscSubClassGuid;
+
+
+
+
+/*++
+END: Misc records definitions
+--*/
+
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClass.h b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClass.h
new file mode 100644
index 0000000..753dc17
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClass.h
@@ -0,0 +1,73 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DataHubSubClass.h
+
+Abstract:
+
+ Definitions for data hub data records that contains a sub class header
+
+Revision History
+
+--*/
+
+#ifndef _DATA_HUB_SUBCLASS_H_
+#define _DATA_HUB_SUBCLASS_H_
+
+//
+// Sub Class Header type1
+//
+
+#define EFI_SUBCLASS_INSTANCE_RESERVED 0
+#define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF //16 bit
+
+typedef struct {
+ UINT32 Version;
+ UINT32 HeaderSize;
+ UINT16 Instance;
+ UINT16 SubInstance;
+ UINT32 RecordType;
+} EFI_SUBCLASS_TYPE1_HEADER;
+
+//
+// EXP data
+//
+
+typedef struct {
+ INT16 Value;
+ INT16 Exponent;
+} EFI_EXP_BASE10_DATA;
+
+typedef struct {
+ UINT16 Value;
+ UINT16 Exponent;
+} EFI_EXP_BASE2_DATA;
+
+//
+// Inter link data that references another data record
+//
+
+typedef struct {
+ EFI_GUID ProducerName;
+ UINT16 Instance;
+ UINT16 SubInstance;
+} EFI_INTER_LINK_DATA;
+
+
+//
+// String Token Definition
+//
+#define EFI_STRING_TOKEN UINT16
+
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassCache.h b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassCache.h
new file mode 100644
index 0000000..b46a434
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassCache.h
@@ -0,0 +1,161 @@
+/*++
+
+Copyright (c) 2004 - 2011, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DataHubSubClassCache.h
+
+Abstract:
+
+ Definitions for Cache sub class data records
+
+Revision History
+
+--*/
+
+#ifndef _DATAHUB_SUBCLASS_CACHE_H_
+#define _DATAHUB_SUBCLASS_CACHE_H_
+
+#define EFI_CACHE_SUBCLASS_VERSION 0x00010000
+
+#define EFI_CACHE_SUBCLASS_GUID \
+{ 0x7f0013a7, 0xdc79, 0x4b22, 0x80, 0x99, 0x11, 0xf7, 0x5f, 0xdc, 0x82, 0x9d }
+
+typedef EFI_EXP_BASE2_DATA EFI_CACHE_SIZE_DATA;
+
+typedef EFI_EXP_BASE2_DATA EFI_MAXIMUM_CACHE_SIZE_DATA;
+
+typedef EFI_EXP_BASE10_DATA EFI_CACHE_SPEED_DATA;
+
+typedef STRING_REF EFI_CACHE_SOCKET_DATA;
+
+typedef struct {
+ UINT32 Other :1;
+ UINT32 Unknown :1;
+ UINT32 NonBurst :1;
+ UINT32 Burst :1;
+ UINT32 PipelineBurst :1;
+ //
+ // Inconsistent between CacheSubclass 0.9 and SMBIOS specifications here:
+ // In CacheSubclass specification 0.9, the sequence of Asynchronous and Synchronous fileds
+ // are opposite to SMBIOS specification.
+ //
+ UINT32 Asynchronous :1;
+ UINT32 Synchronous :1;
+ UINT32 Reserved :25;
+} EFI_CACHE_SRAM_TYPE_DATA;
+
+typedef enum {
+ EfiCacheErrorOther = 1,
+ EfiCacheErrorUnknown = 2,
+ EfiCacheErrorNone = 3,
+ EfiCacheErrorParity = 4,
+ EfiCacheErrorSingleBit = 5,
+ EfiCacheErrorMultiBit = 6
+} EFI_CACHE_ERROR_TYPE_DATA;
+
+typedef enum {
+ EfiCacheTypeOther = 1,
+ EfiCacheTypeUnknown = 2,
+ EfiCacheTypeInstruction = 3,
+ EfiCacheTypeData = 4,
+ EfiCacheTypeUnified = 5
+} EFI_CACHE_TYPE_DATA;
+
+typedef enum {
+ EfiCacheAssociativityOther = 0x01,
+ EfiCacheAssociativityUnknown = 0x02,
+ EfiCacheAssociativityDirectMapped = 0x03,
+ EfiCacheAssociativity2Way = 0x04,
+ EfiCacheAssociativity4Way = 0x05,
+ EfiCacheAssociativityFully = 0x06,
+ EfiCacheAssociativity8Way = 0x07,
+ EfiCacheAssociativity16Way = 0x08,
+ EfiCacheAssociativity12Way = 0x09,
+ EfiCacheAssociativity24Way = 0x0A,
+ EfiCacheAssociativity32Way = 0x0B,
+ EfiCacheAssociativity48Way = 0x0C,
+ EfiCacheAssociativity64Way = 0x0D
+} EFI_CACHE_ASSOCIATIVITY_DATA;
+
+typedef struct {
+ UINT32 Level :3;
+ UINT32 Socketed :1;
+ UINT32 Reserved2 :1;
+ UINT32 Location :2;
+ UINT32 Enable :1;
+ UINT32 OperationalMode :2;
+ UINT32 Reserved1 :22;
+} EFI_CACHE_CONFIGURATION_DATA;
+
+#define EFI_CACHE_L1 1
+#define EFI_CACHE_L2 2
+#define EFI_CACHE_L3 3
+#define EFI_CACHE_L4 4
+#define EFI_CACHE_LMAX EFI_CACHE_L4
+
+#define EFI_CACHE_SOCKETED 1
+#define EFI_CACHE_NOT_SOCKETED 0
+
+typedef enum {
+ EfiCacheInternal = 0,
+ EfiCacheExternal = 1,
+ EfiCacheReserved = 2,
+ EfiCacheUnknown = 3
+} EFI_CACHE_LOCATION;
+
+#define EFI_CACHE_ENABLED 1
+#define EFI_CACHE_DISABLED 0
+
+typedef enum {
+ EfiCacheWriteThrough = 0,
+ EfiCacheWriteBack = 1,
+ EfiCacheDynamicMode = 2,
+ EfiCacheUnknownMode = 3
+} EFI_CACHE_OPERATIONAL_MODE;
+
+
+
+typedef enum {
+ CacheSizeRecordType = 1,
+ MaximumSizeCacheRecordType = 2,
+ CacheSpeedRecordType = 3,
+ CacheSocketRecordType = 4,
+ CacheSramTypeRecordType = 5,
+ CacheInstalledSramTypeRecordType = 6,
+ CacheErrorTypeRecordType = 7,
+ CacheTypeRecordType = 8,
+ CacheAssociativityRecordType = 9,
+ CacheConfigRecordType = 10
+} EFI_CACHE_VARIABLE_RECORD_TYPE;
+
+
+typedef union {
+ EFI_CACHE_SIZE_DATA CacheSize;
+ EFI_MAXIMUM_CACHE_SIZE_DATA MaximumCacheSize;
+ EFI_CACHE_SPEED_DATA CacheSpeed;
+ EFI_CACHE_SOCKET_DATA CacheSocket;
+ EFI_CACHE_SRAM_TYPE_DATA CacheSramType;
+ EFI_CACHE_SRAM_TYPE_DATA CacheInstalledSramType;
+ EFI_CACHE_ERROR_TYPE_DATA CacheErrorType;
+ EFI_CACHE_TYPE_DATA CacheType;
+ EFI_CACHE_ASSOCIATIVITY_DATA CacheAssociativity;
+ EFI_CACHE_CONFIGURATION_DATA CacheConfig;
+ EFI_CACHE_ASSOCIATION_DATA CacheAssociation;
+} EFI_CACHE_VARIABLE_RECORD;
+
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;
+ EFI_CACHE_VARIABLE_RECORD VariableRecord;
+} EFI_CACHE_DATA_RECORD;
+
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMemory.h b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMemory.h
new file mode 100644
index 0000000..4d3eef7
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMemory.h
@@ -0,0 +1,431 @@
+/*++
+
+Copyright (c) 2004 - 2009, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DataHubSubClassMemory.h
+
+Abstract:
+
+ Definitions for memory sub class data records
+
+Revision History
+
+--*/
+
+#ifndef _DATAHUB_SUBCLASS_MEMORY_H_
+#define _DATAHUB_SUBCLASS_MEMORY_H_
+
+#include EFI_GUID_DEFINITION (DataHubRecords)
+
+
+#define EFI_MEMORY_SUBCLASS_GUID \
+ {0x4E8F4EBB, 0x64B9, 0x4e05, 0x9B, 0x18, 0x4C, 0xFE, 0x49, 0x23, 0x50, 0x97}
+
+#define EFI_MEMORY_SUBCLASS_VERSION 0x0100
+
+
+#define EFI_MEMORY_SIZE_RECORD_NUMBER 0x00000001
+
+typedef enum _EFI_MEMORY_REGION_TYPE {
+ EfiMemoryRegionMemory = 0x01,
+ EfiMemoryRegionReserved = 0x02,
+ EfiMemoryRegionAcpi = 0x03,
+ EfiMemoryRegionNvs = 0x04
+} EFI_MEMORY_REGION_TYPE;
+
+typedef struct {
+ UINT32 ProcessorNumber;
+ UINT16 StartBusNumber;
+ UINT16 EndBusNumber;
+ EFI_MEMORY_REGION_TYPE MemoryRegionType;
+ EFI_EXP_BASE2_DATA MemorySize;
+ EFI_PHYSICAL_ADDRESS MemoryStartAddress;
+} EFI_MEMORY_SIZE_DATA;
+
+
+#define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER 0x00000002
+
+typedef enum _EFI_MEMORY_ARRAY_LOCATION {
+ EfiMemoryArrayLocationOther = 0x01,
+ EfiMemoryArrayLocationUnknown = 0x02,
+ EfiMemoryArrayLocationSystemBoard = 0x03,
+ EfiMemoryArrayLocationIsaAddonCard = 0x04,
+ EfiMemoryArrayLocationEisaAddonCard = 0x05,
+ EfiMemoryArrayLocationPciAddonCard = 0x06,
+ EfiMemoryArrayLocationMcaAddonCard = 0x07,
+ EfiMemoryArrayLocationPcmciaAddonCard = 0x08,
+ EfiMemoryArrayLocationProprietaryAddonCard = 0x09,
+ EfiMemoryArrayLocationNuBus = 0x0A,
+ EfiMemoryArrayLocationPc98C20AddonCard = 0xA0,
+ EfiMemoryArrayLocationPc98C24AddonCard = 0xA1,
+ EfiMemoryArrayLocationPc98EAddonCard = 0xA2,
+ EfiMemoryArrayLocationPc98LocalBusAddonCard = 0xA3
+} EFI_MEMORY_ARRAY_LOCATION;
+
+typedef enum _EFI_MEMORY_ARRAY_USE {
+ EfiMemoryArrayUseOther = 0x01,
+ EfiMemoryArrayUseUnknown = 0x02,
+ EfiMemoryArrayUseSystemMemory = 0x03,
+ EfiMemoryArrayUseVideoMemory = 0x04,
+ EfiMemoryArrayUseFlashMemory = 0x05,
+ EfiMemoryArrayUseNonVolatileRam = 0x06,
+ EfiMemoryArrayUseCacheMemory = 0x07,
+} EFI_MEMORY_ARRAY_USE;
+
+typedef enum _EFI_MEMORY_ERROR_CORRECTION {
+ EfiMemoryErrorCorrectionOther = 0x01,
+ EfiMemoryErrorCorrectionUnknown = 0x02,
+ EfiMemoryErrorCorrectionNone = 0x03,
+ EfiMemoryErrorCorrectionParity = 0x04,
+ EfiMemoryErrorCorrectionSingleBitEcc = 0x05,
+ EfiMemoryErrorCorrectionMultiBitEcc = 0x06,
+ EfiMemoryErrorCorrectionCrc = 0x07,
+} EFI_MEMORY_ERROR_CORRECTION;
+
+typedef struct {
+ EFI_MEMORY_ARRAY_LOCATION MemoryArrayLocation;
+ EFI_MEMORY_ARRAY_USE MemoryArrayUse;
+ EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection;
+ UINT32 MaximumMemoryCapacity;
+ UINT16 NumberMemoryDevices;
+} EFI_MEMORY_ARRAY_LOCATION_DATA;
+
+
+#define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER 0x00000003
+
+typedef enum _EFI_MEMORY_FORM_FACTOR {
+ EfiMemoryFormFactorOther = 0x01,
+ EfiMemoryFormFactorUnknown = 0x02,
+ EfiMemoryFormFactorSimm = 0x03,
+ EfiMemoryFormFactorSip = 0x04,
+ EfiMemoryFormFactorChip = 0x05,
+ EfiMemoryFormFactorDip = 0x06,
+ EfiMemoryFormFactorZip = 0x07,
+ EfiMemoryFormFactorProprietaryCard = 0x08,
+ EfiMemoryFormFactorDimm = 0x09,
+ EfiMemoryFormFactorTsop = 0x0A,
+ EfiMemoryFormFactorRowOfChips = 0x0B,
+ EfiMemoryFormFactorRimm = 0x0C,
+ EfiMemoryFormFactorSodimm = 0x0D,
+ EfiMemoryFormFactorSrimm = 0x0E,
+ EfiMemoryFormFactorFbDimm = 0x0F
+} EFI_MEMORY_FORM_FACTOR;
+
+typedef enum _EFI_MEMORY_ARRAY_TYPE {
+ EfiMemoryTypeOther = 0x01,
+ EfiMemoryTypeUnknown = 0x02,
+ EfiMemoryTypeDram = 0x03,
+ EfiMemoryTypeEdram = 0x04,
+ EfiMemoryTypeVram = 0x05,
+ EfiMemoryTypeSram = 0x06,
+ EfiMemoryTypeRam = 0x07,
+ EfiMemoryTypeRom = 0x08,
+ EfiMemoryTypeFlash = 0x09,
+ EfiMemoryTypeEeprom = 0x0A,
+ EfiMemoryTypeFeprom = 0x0B,
+ EfiMemoryTypeEprom = 0x0C,
+ EfiMemoryTypeCdram = 0x0D,
+ EfiMemoryType3Dram = 0x0E,
+ EfiMemoryTypeSdram = 0x0F,
+ EfiMemoryTypeSgram = 0x10,
+ EfiMemoryTypeRdram = 0x11,
+ EfiMemoryTypeDdr = 0x12,
+ EfiMemoryTypeDdr2 = 0x13,
+ EfiMemoryTypeDdr2FbDimm = 0x14,
+ EfiMemoryTypeDdr3 = 0x18,
+ EfiMemoryTypeFbd2 = 0x19
+} EFI_MEMORY_ARRAY_TYPE;
+
+typedef struct {
+ UINT32 Reserved :1;
+ UINT32 Other :1;
+ UINT32 Unknown :1;
+ UINT32 FastPaged :1;
+ UINT32 StaticColumn :1;
+ UINT32 PseudoStatic :1;
+ UINT32 Rambus :1;
+ UINT32 Synchronous :1;
+ UINT32 Cmos :1;
+ UINT32 Edo :1;
+ UINT32 WindowDram :1;
+ UINT32 CacheDram :1;
+ UINT32 Nonvolatile :1;
+ UINT32 Reserved1 :19;
+} EFI_MEMORY_TYPE_DETAIL;
+
+typedef enum {
+ EfiMemoryStateEnabled =0,
+ EfiMemoryStateUnknown,
+ EfiMemoryStateUnsupported,
+ EfiMemoryStateError,
+ EfiMemoryStateAbsent,
+ EfiMemoryStateDisabled,
+ EfiMemoryStatePartial
+} EFI_MEMORY_STATE;
+
+typedef struct {
+ EFI_STRING_TOKEN MemoryDeviceLocator;
+ EFI_STRING_TOKEN MemoryBankLocator;
+ EFI_STRING_TOKEN MemoryManufacturer;
+ EFI_STRING_TOKEN MemorySerialNumber;
+ EFI_STRING_TOKEN MemoryAssetTag;
+ EFI_STRING_TOKEN MemoryPartNumber;
+ EFI_INTER_LINK_DATA MemoryArrayLink;
+ EFI_INTER_LINK_DATA MemorySubArrayLink;
+ UINT16 MemoryTotalWidth;
+ UINT16 MemoryDataWidth;
+ UINT64 MemoryDeviceSize;
+ EFI_MEMORY_FORM_FACTOR MemoryFormFactor;
+ UINT8 MemoryDeviceSet;
+ EFI_MEMORY_ARRAY_TYPE MemoryType;
+ EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;
+ UINT16 MemorySpeed;
+ EFI_MEMORY_STATE MemoryState;
+ UINT8 MemoryAttributes;
+ UINT8 MemoryBankConnections;
+ UINT8 MemoryErrorStatus;
+} EFI_MEMORY_ARRAY_LINK;
+
+
+#define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004
+
+typedef struct {
+ EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;
+ EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;
+ EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
+ UINT16 MemoryArrayPartitionWidth;
+} EFI_MEMORY_ARRAY_START_ADDRESS;
+
+
+#define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005
+
+typedef struct {
+ EFI_PHYSICAL_ADDRESS MemoryDeviceStartAddress;
+ EFI_PHYSICAL_ADDRESS MemoryDeviceEndAddress;
+ EFI_INTER_LINK_DATA PhysicalMemoryDeviceLink;
+ EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;
+ UINT8 MemoryDevicePartitionRowPosition;
+ UINT8 MemoryDeviceInterleavePosition;
+ UINT8 MemoryDeviceInterleaveDataDepth;
+} EFI_MEMORY_DEVICE_START_ADDRESS;
+
+
+//
+// Memory. Channel Device Type - SMBIOS Type 37
+//
+
+#define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006
+
+typedef enum _EFI_MEMORY_CHANNEL_TYPE {
+ EfiMemoryChannelTypeOther = 1,
+ EfiMemoryChannelTypeUnknown = 2,
+ EfiMemoryChannelTypeRambus = 3,
+ EfiMemoryChannelTypeSyncLink = 4
+} EFI_MEMORY_CHANNEL_TYPE;
+
+typedef struct {
+ EFI_MEMORY_CHANNEL_TYPE MemoryChannelType;
+ UINT8 MemoryChannelMaximumLoad;
+ UINT8 MemoryChannelDeviceCount;
+} EFI_MEMORY_CHANNEL_TYPE_DATA;
+
+#define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007
+
+typedef struct {
+ UINT8 DeviceId;
+ EFI_INTER_LINK_DATA DeviceLink;
+ UINT8 MemoryChannelDeviceLoad;
+} EFI_MEMORY_CHANNEL_DEVICE_DATA;
+
+//
+// Memory. Controller Information - SMBIOS Type 5
+//
+#define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008
+
+typedef enum {
+ EfiErrorDetectingMethodOther = 1,
+ EfiErrorDetectingMethodUnknown = 2,
+ EfiErrorDetectingMethodNone = 3,
+ EfiErrorDetectingMethodParity = 4,
+ EfiErrorDetectingMethod32Ecc = 5,
+ EfiErrorDetectingMethod64Ecc = 6,
+ EfiErrorDetectingMethod128Ecc = 7,
+ EfiErrorDetectingMethodCrc = 8
+} EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;
+
+typedef struct {
+ UINT8 Other :1;
+ UINT8 Unknown :1;
+ UINT8 None :1;
+ UINT8 SingleBitErrorCorrect :1;
+ UINT8 DoubleBitErrorCorrect :1;
+ UINT8 ErrorScrubbing :1;
+ UINT8 Reserved :2;
+} EFI_MEMORY_ERROR_CORRECT_CAPABILITY;
+
+typedef enum {
+ EfiMemoryInterleaveOther = 1,
+ EfiMemoryInterleaveUnknown = 2,
+ EfiMemoryInterleaveOneWay = 3,
+ EfiMemoryInterleaveTwoWay = 4,
+ EfiMemoryInterleaveFourWay = 5,
+ EfiMemoryInterleaveEightWay = 6,
+ EfiMemoryInterleaveSixteenWay = 7
+} EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;
+
+typedef struct {
+ UINT16 Other :1;
+ UINT16 Unknown :1;
+ UINT16 SeventyNs :1;
+ UINT16 SixtyNs :1;
+ UINT16 FiftyNs :1;
+ UINT16 Reserved :11;
+} EFI_MEMORY_SPEED_TYPE;
+
+typedef struct {
+ UINT16 Other :1;
+ UINT16 Unknown :1;
+ UINT16 Standard :1;
+ UINT16 FastPageMode :1;
+ UINT16 EDO :1;
+ UINT16 Parity :1;
+ UINT16 ECC :1;
+ UINT16 SIMM :1;
+ UINT16 DIMM :1;
+ UINT16 BurstEdo :1;
+ UINT16 SDRAM :1;
+ UINT16 Reserved :5;
+} EFI_MEMORY_SUPPORTED_TYPE;
+
+typedef struct {
+ UINT8 Five :1;
+ UINT8 Three :1;
+ UINT8 Two :1;
+ UINT8 Reserved :5;
+} EFI_MEMORY_MODULE_VOLTAGE_TYPE;
+
+//
+// EFI_MEMORY_CONTROLLER_INFORMATION is obsolete
+// Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead
+//
+typedef struct {
+ EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
+ UINT8 MaxMemoryModuleSize;
+ EFI_MEMORY_SPEED_TYPE MemorySpeedType;
+ EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
+ EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
+ UINT8 NumberofMemorySlot;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
+ UINT16 *MemoryModuleConfigHandles;
+} EFI_MEMORY_CONTROLLER_INFORMATION;
+
+typedef struct {
+ EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;
+ EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;
+ UINT8 MaxMemoryModuleSize;
+ EFI_MEMORY_SPEED_TYPE MemorySpeedType;
+ EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;
+ EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;
+ UINT8 NumberofMemorySlot;
+ EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;
+ EFI_INTER_LINK_DATA MemoryModuleConfig[1];
+} EFI_MEMORY_CONTROLLER_INFORMATION_DATA;
+
+//
+// Memory. Error Information - SMBIOS Type 18
+//
+#define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009
+
+typedef enum {
+ EfiMemoryErrorOther = 1,
+ EfiMemoryErrorUnknown = 2,
+ EfiMemoryErrorOk = 3,
+ EfiMemoryErrorBadRead = 4,
+ EfiMemoryErrorParity = 5,
+ EfiMemoryErrorSigleBit = 6,
+ EfiMemoryErrorDoubleBit = 7,
+ EfiMemoryErrorMultiBit = 8,
+ EfiMemoryErrorNibble = 9,
+ EfiMemoryErrorChecksum = 10,
+ EfiMemoryErrorCrc = 11,
+ EfiMemoryErrorCorrectSingleBit = 12,
+ EfiMemoryErrorCorrected = 13,
+ EfiMemoryErrorUnCorrectable = 14
+} EFI_MEMORY_ERROR_TYPE;
+
+typedef enum {
+ EfiMemoryGranularityOther = 1,
+ EfiMemoryGranularityOtherUnknown = 2,
+ EfiMemoryGranularityDeviceLevel = 3,
+ EfiMemoryGranularityMemPartitionLevel = 4
+} EFI_MEMORY_ERROR_GRANULARITY_TYPE;
+
+typedef enum {
+ EfiMemoryErrorOperationOther = 1,
+ EfiMemoryErrorOperationUnknown = 2,
+ EfiMemoryErrorOperationRead = 3,
+ EfiMemoryErrorOperationWrite = 4,
+ EfiMemoryErrorOperationPartialWrite = 5
+} EFI_MEMORY_ERROR_OPERATION_TYPE;
+
+typedef struct {
+ EFI_MEMORY_ERROR_TYPE MemoryErrorType;
+ EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
+ EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
+ UINT32 VendorSyndrome;
+ UINT32 MemoryArrayErrorAddress;
+ UINT32 DeviceErrorAddress;
+ UINT32 DeviceErrorResolution;
+} EFI_MEMORY_32BIT_ERROR_INFORMATION;
+
+//
+// Memory. Error Information - SMBIOS Type 33
+//
+#define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A
+
+typedef struct {
+ EFI_MEMORY_ERROR_TYPE MemoryErrorType;
+ EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;
+ EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;
+ UINT32 VendorSyndrome;
+ UINT64 MemoryArrayErrorAddress;
+ UINT64 DeviceErrorAddress;
+ UINT32 DeviceErrorResolution;
+} EFI_MEMORY_64BIT_ERROR_INFORMATION;
+
+
+typedef union _EFI_MEMORY_SUBCLASS_RECORDS {
+ EFI_MEMORY_SIZE_DATA SizeData;
+ EFI_MEMORY_ARRAY_LOCATION_DATA ArrayLocationData;
+ EFI_MEMORY_ARRAY_LINK ArrayLink;
+ EFI_MEMORY_ARRAY_START_ADDRESS ArrayStartAddress;
+ EFI_MEMORY_DEVICE_START_ADDRESS DeviceStartAddress;
+ EFI_MEMORY_CHANNEL_TYPE_DATA ChannelTypeData;
+ EFI_MEMORY_CHANNEL_DEVICE_DATA ChannelDeviceData;
+ EFI_MEMORY_CONTROLLER_INFORMATION MemoryControllerInfo;
+ EFI_MEMORY_32BIT_ERROR_INFORMATION Memory32bitErrorInfo;
+ EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo;
+} EFI_MEMORY_SUBCLASS_RECORDS;
+
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER Header;
+ EFI_MEMORY_SUBCLASS_RECORDS Record;
+} EFI_MEMORY_SUBCLASS_DRIVER_DATA;
+
+
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMisc.h b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMisc.h
new file mode 100644
index 0000000..368c91c
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassMisc.h
@@ -0,0 +1,1260 @@
+/*++
+
+Copyright (c) 2004 - 2009, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DataHubSubClassMisc.h
+
+Abstract:
+
+ Definitions for Misc sub class data records
+
+Revision History
+
+--*/
+
+#ifndef _DATAHUB_SUBCLASS_MISC_H_
+#define _DATAHUB_SUBCLASS_MISC_H_
+
+#include EFI_GUID_DEFINITION(DataHubRecords)
+
+#define EFI_MISC_SUBCLASS_GUID \
+{ 0x772484B2, 0x7482, 0x4b91, 0x9F, 0x9A, 0xAD, 0x43, 0xF8, 0x1C, 0x58, 0x81 }
+
+#define EFI_MISC_SUBCLASS_VERSION 0x0100
+
+#pragma pack(1)
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Last PCI Bus Number
+//
+#define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER 0x00000001
+
+typedef struct {
+ UINT8 LastPciBus;
+} EFI_MISC_LAST_PCI_BUS;
+
+typedef struct {
+ UINT8 FunctionNum :3;
+ UINT8 DeviceNum :5;
+} EFI_MISC_DEV_FUNC_NUM;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. BIOS Vendor - SMBIOS Type 0
+//
+#define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER 0x00000002
+
+typedef struct {
+ UINT32 Reserved1 :2;
+ UINT32 Unknown :1;
+ UINT32 BiosCharacteristicsNotSupported :1;
+ UINT32 IsaIsSupported :1;
+ UINT32 McaIsSupported :1;
+ UINT32 EisaIsSupported :1;
+ UINT32 PciIsSupported :1;
+ UINT32 PcmciaIsSupported :1;
+ UINT32 PlugAndPlayIsSupported :1;
+ UINT32 ApmIsSupported :1;
+ UINT32 BiosIsUpgradable :1;
+ UINT32 BiosShadowingAllowed :1;
+ UINT32 VlVesaIsSupported :1;
+ UINT32 EscdSupportIsAvailable :1;
+ UINT32 BootFromCdIsSupported :1;
+ UINT32 SelectableBootIsSupported :1;
+ UINT32 RomBiosIsSocketed :1;
+ UINT32 BootFromPcmciaIsSupported :1;
+ UINT32 EDDSpecificationIsSupported :1;
+ UINT32 JapaneseNecFloppyIsSupported :1;
+ UINT32 JapaneseToshibaFloppyIsSupported :1;
+ UINT32 Floppy525_360IsSupported :1;
+ UINT32 Floppy525_12IsSupported :1;
+ UINT32 Floppy35_720IsSupported :1;
+ UINT32 Floppy35_288IsSupported :1;
+ UINT32 PrintScreenIsSupported :1;
+ UINT32 Keyboard8042IsSupported :1;
+ UINT32 SerialIsSupported :1;
+ UINT32 PrinterIsSupported :1;
+ UINT32 CgaMonoIsSupported :1;
+ UINT32 NecPc98 :1;
+ UINT32 AcpiIsSupported :1;
+ UINT32 UsbLegacyIsSupported :1;
+ UINT32 AgpIsSupported :1;
+ UINT32 I20BootIsSupported :1;
+ UINT32 Ls120BootIsSupported :1;
+ UINT32 AtapiZipDriveBootIsSupported :1;
+ UINT32 Boot1394IsSupported :1;
+ UINT32 SmartBatteryIsSupported :1;
+ UINT32 BiosBootSpecIsSupported :1;
+ UINT32 FunctionKeyNetworkBootIsSupported :1;
+ UINT32 TargetContentDistributionEnabled :1;
+ UINT32 Reserved :21;
+} EFI_MISC_BIOS_CHARACTERISTICS;
+
+typedef struct {
+ UINT32 BiosReserved :16;
+ UINT32 SystemReserved :16;
+ UINT32 Reserved :32;
+} EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION;
+
+typedef UINT8 EFI_MISC_BIOS_MAJOR_RELEASE;
+typedef UINT8 EFI_MISC_BIOS_MINOR_RELEASE;
+typedef UINT8 EFI_MISC_FIRM_MAJOR_RELEASE;
+typedef UINT8 EFI_MISC_FIRM_MINOR_RELEASE;
+
+typedef struct {
+ STRING_REF BiosVendor;
+ STRING_REF BiosVersion;
+ STRING_REF BiosReleaseDate;
+ EFI_PHYSICAL_ADDRESS BiosStartingAddress;
+ EFI_EXP_BASE2_DATA BiosPhysicalDeviceSize;
+ EFI_MISC_BIOS_CHARACTERISTICS BiosCharacteristics1;
+ EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION BiosCharacteristics2;
+ UINT8 BiosMajorRelease;
+ UINT8 BiosMinorRelease;
+ UINT8 BiosEmbeddedFirmwareMajorRelease;
+ UINT8 BiosEmbeddedFirmwareMinorRelease;
+} EFI_MISC_BIOS_VENDOR;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. System Manufacturer - SMBIOS Type 1
+//
+#define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003
+
+typedef enum {
+ EfiSystemWakeupTypeReserved = 0,
+ EfiSystemWakeupTypeOther = 1,
+ EfiSystemWakeupTypeUnknown = 2,
+ EfiSystemWakeupTypeApmTimer = 3,
+ EfiSystemWakeupTypeModemRing = 4,
+ EfiSystemWakeupTypeLanRemote = 5,
+ EfiSystemWakeupTypePowerSwitch = 6,
+ EfiSystemWakeupTypePciPme = 7,
+ EfiSystemWakeupTypeAcPowerRestored = 8,
+} EFI_MISC_SYSTEM_WAKEUP_TYPE;
+
+typedef struct {
+ STRING_REF SystemManufacturer;
+ STRING_REF SystemProductName;
+ STRING_REF SystemVersion;
+ STRING_REF SystemSerialNumber;
+ EFI_GUID SystemUuid;
+ EFI_MISC_SYSTEM_WAKEUP_TYPE SystemWakeupType;
+ STRING_REF SystemSKUNumber;
+ STRING_REF SystemFamily;
+} EFI_MISC_SYSTEM_MANUFACTURER;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Base Board Manufacturer - SMBIOS Type 2
+//
+#define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004
+
+typedef struct {
+ UINT32 Motherboard :1;
+ UINT32 RequiresDaughterCard :1;
+ UINT32 Removable :1;
+ UINT32 Replaceable :1;
+ UINT32 HotSwappable :1;
+ UINT32 Reserved :27;
+} EFI_BASE_BOARD_FEATURE_FLAGS;
+
+typedef enum {
+ EfiBaseBoardTypeUnknown = 1,
+ EfiBaseBoardTypeOther = 2,
+ EfiBaseBoardTypeServerBlade = 3,
+ EfiBaseBoardTypeConnectivitySwitch = 4,
+ EfiBaseBoardTypeSystemManagementModule = 5,
+ EfiBaseBoardTypeProcessorModule = 6,
+ EfiBaseBoardTypeIOModule = 7,
+ EfiBaseBoardTypeMemoryModule = 8,
+ EfiBaseBoardTypeDaughterBoard = 9,
+ EfiBaseBoardTypeMotherBoard = 0xA,
+ EfiBaseBoardTypeProcessorMemoryModule = 0xB,
+ EfiBaseBoardTypeProcessorIOModule = 0xC,
+ EfiBaseBoardTypeInterconnectBoard = 0xD,
+} EFI_BASE_BOARD_TYPE;
+
+typedef struct {
+ STRING_REF BaseBoardManufacturer;
+ STRING_REF BaseBoardProductName;
+ STRING_REF BaseBoardVersion;
+ STRING_REF BaseBoardSerialNumber;
+ STRING_REF BaseBoardAssetTag;
+ STRING_REF BaseBoardChassisLocation;
+ EFI_BASE_BOARD_FEATURE_FLAGS BaseBoardFeatureFlags;
+ EFI_BASE_BOARD_TYPE BaseBoardType;
+ EFI_INTER_LINK_DATA BaseBoardChassisLink;
+ UINT32 BaseBoardNumberLinks;
+ EFI_INTER_LINK_DATA LinkN;
+} EFI_MISC_BASE_BOARD_MANUFACTURER;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. System/Chassis Enclosure - SMBIOS Type 3
+//
+#define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER 0x00000005
+
+typedef enum {
+ EfiMiscChassisTypeOther = 0x1,
+ EfiMiscChassisTypeUnknown = 0x2,
+ EfiMiscChassisTypeDeskTop = 0x3,
+ EfiMiscChassisTypeLowProfileDesktop = 0x4,
+ EfiMiscChassisTypePizzaBox = 0x5,
+ EfiMiscChassisTypeMiniTower = 0x6,
+ EfiMiscChassisTypeTower = 0x7,
+ EfiMiscChassisTypePortable = 0x8,
+ EfiMiscChassisTypeLapTop = 0x9,
+ EfiMiscChassisTypeNotebook = 0xA,
+ EfiMiscChassisTypeHandHeld = 0xB,
+ EfiMiscChassisTypeDockingStation = 0xC,
+ EfiMiscChassisTypeAllInOne = 0xD,
+ EfiMiscChassisTypeSubNotebook = 0xE,
+ EfiMiscChassisTypeSpaceSaving = 0xF,
+ EfiMiscChassisTypeLunchBox = 0x10,
+ EfiMiscChassisTypeMainServerChassis = 0x11,
+ EfiMiscChassisTypeExpansionChassis = 0x12,
+ EfiMiscChassisTypeSubChassis = 0x13,
+ EfiMiscChassisTypeBusExpansionChassis = 0x14,
+ EfiMiscChassisTypePeripheralChassis = 0x15,
+ EfiMiscChassisTypeRaidChassis = 0x16,
+ EfiMiscChassisTypeRackMountChassis = 0x17,
+ EfiMiscChassisTypeSealedCasePc = 0x18,
+ EfiMiscChassisMultiSystemChassis = 0x19,
+ EfiMiscChassisCompactPCI = 0x1A,
+ EfiMiscChassisAdvancedTCA = 0x1B,
+ EfiMiscChassisBlade = 0x1C,
+ EfiMiscChassisBladeEnclosure = 0x1D
+} EFI_MISC_CHASSIS_TYPE;
+
+typedef struct {
+ UINT32 ChassisType :16;
+ UINT32 ChassisLockPresent:1;
+ UINT32 Reserved :15;
+} EFI_MISC_CHASSIS_STATUS;
+
+typedef enum {
+ EfiChassisStateOther = 1,
+ EfiChassisStateUnknown = 2,
+ EfiChassisStateSafe = 3,
+ EfiChassisStateWarning = 4,
+ EfiChassisStateCritical = 5,
+ EfiChassisStateNonRecoverable = 6,
+} EFI_MISC_CHASSIS_STATE;
+
+typedef enum {
+ EfiChassisSecurityStatusOther = 1,
+ EfiChassisSecurityStatusUnknown = 2,
+ EfiChassisSecurityStatusNone = 3,
+ EfiChassisSecurityStatusExternalInterfaceLockedOut = 4,
+ EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 5,
+} EFI_MISC_CHASSIS_SECURITY_STATE;
+
+typedef struct {
+ UINT32 RecordType :1;
+ UINT32 Type :7;
+ UINT32 Reserved :24;
+} EFI_MISC_ELEMENT_TYPE;
+
+typedef struct {
+ EFI_MISC_ELEMENT_TYPE ChassisElementType;
+ EFI_INTER_LINK_DATA ChassisElementStructure;
+ EFI_BASE_BOARD_TYPE ChassisBaseBoard;
+ UINT32 ChassisElementMinimum;
+ UINT32 ChassisElementMaximum;
+} EFI_MISC_ELEMENTS;
+
+typedef struct {
+ STRING_REF ChassisManufacturer;
+ STRING_REF ChassisVersion;
+ STRING_REF ChassisSerialNumber;
+ STRING_REF ChassisAssetTag;
+ EFI_MISC_CHASSIS_STATUS ChassisType;
+ EFI_MISC_CHASSIS_STATE ChassisBootupState;
+ EFI_MISC_CHASSIS_STATE ChassisPowerSupplyState;
+ EFI_MISC_CHASSIS_STATE ChassisThermalState;
+ EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState;
+ UINT32 ChassisOemDefined;
+ UINT32 ChassisHeight;
+ UINT32 ChassisNumberPowerCords;
+ UINT32 ChassisElementCount;
+ UINT32 ChassisElementRecordLength;//
+ EFI_MISC_ELEMENTS ChassisElements;
+} EFI_MISC_CHASSIS_MANUFACTURER;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Port Connector Information - SMBIOS Type 8
+//
+#define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00000006
+
+typedef enum {
+ EfiPortConnectorTypeNone = 0x0,
+ EfiPortConnectorTypeCentronics = 0x1,
+ EfiPortConnectorTypeMiniCentronics = 0x2,
+ EfiPortConnectorTypeProprietary = 0x3,
+ EfiPortConnectorTypeDB25Male = 0x4,
+ EfiPortConnectorTypeDB25Female = 0x5,
+ EfiPortConnectorTypeDB15Male = 0x6,
+ EfiPortConnectorTypeDB15Female = 0x7,
+ EfiPortConnectorTypeDB9Male = 0x8,
+ EfiPortConnectorTypeDB9Female = 0x9,
+ EfiPortConnectorTypeRJ11 = 0xA,
+ EfiPortConnectorTypeRJ45 = 0xB,
+ EfiPortConnectorType50PinMiniScsi = 0xC,
+ EfiPortConnectorTypeMiniDin = 0xD,
+ EfiPortConnectorTypeMicriDin = 0xE,
+ EfiPortConnectorTypePS2 = 0xF,
+ EfiPortConnectorTypeInfrared = 0x10,
+ EfiPortConnectorTypeHpHil = 0x11,
+ EfiPortConnectorTypeUsb = 0x12,
+ EfiPortConnectorTypeSsaScsi = 0x13,
+ EfiPortConnectorTypeCircularDin8Male = 0x14,
+ EfiPortConnectorTypeCircularDin8Female = 0x15,
+ EfiPortConnectorTypeOnboardIde = 0x16,
+ EfiPortConnectorTypeOnboardFloppy = 0x17,
+ EfiPortConnectorType9PinDualInline = 0x18,
+ EfiPortConnectorType25PinDualInline = 0x19,
+ EfiPortConnectorType50PinDualInline = 0x1A,
+ EfiPortConnectorType68PinDualInline = 0x1B,
+ EfiPortConnectorTypeOnboardSoundInput = 0x1C,
+ EfiPortConnectorTypeMiniCentronicsType14 = 0x1D,
+ EfiPortConnectorTypeMiniCentronicsType26 = 0x1E,
+ EfiPortConnectorTypeHeadPhoneMiniJack = 0x1F,
+ EfiPortConnectorTypeBNC = 0x20,
+ EfiPortConnectorType1394 = 0x21,
+ EfiPortConnectorTypeSasSata = 0x22,
+ EfiPortConnectorTypePC98 = 0xA0,
+ EfiPortConnectorTypePC98Hireso = 0xA1,
+ EfiPortConnectorTypePCH98 = 0xA2,
+ EfiPortConnectorTypePC98Note = 0xA3,
+ EfiPortConnectorTypePC98Full = 0xA4,
+ EfiPortConnectorTypeOther = 0xFF,
+} EFI_MISC_PORT_CONNECTOR_TYPE;
+
+typedef enum {
+ EfiPortTypeNone = 0x0,
+ EfiPortTypeParallelXtAtCompatible = 0x1,
+ EfiPortTypeParallelPortPs2 = 0x2,
+ EfiPortTypeParallelPortEcp = 0x3,
+ EfiPortTypeParallelPortEpp = 0x4,
+ EfiPortTypeParallelPortEcpEpp = 0x5,
+ EfiPortTypeSerialXtAtCompatible = 0x6,
+ EfiPortTypeSerial16450Compatible = 0x7,
+ EfiPortTypeSerial16550Compatible = 0x8,
+ EfiPortTypeSerial16550ACompatible = 0x9,
+ EfiPortTypeScsi = 0xA,
+ EfiPortTypeMidi = 0xB,
+ EfiPortTypeJoyStick = 0xC,
+ EfiPortTypeKeyboard = 0xD,
+ EfiPortTypeMouse = 0xE,
+ EfiPortTypeSsaScsi = 0xF,
+ EfiPortTypeUsb = 0x10,
+ EfiPortTypeFireWire = 0x11,
+ EfiPortTypePcmciaTypeI = 0x12,
+ EfiPortTypePcmciaTypeII = 0x13,
+ EfiPortTypePcmciaTypeIII = 0x14,
+ EfiPortTypeCardBus = 0x15,
+ EfiPortTypeAccessBusPort = 0x16,
+ EfiPortTypeScsiII = 0x17,
+ EfiPortTypeScsiWide = 0x18,
+ EfiPortTypePC98 = 0x19,
+ EfiPortTypePC98Hireso = 0x1A,
+ EfiPortTypePCH98 = 0x1B,
+ EfiPortTypeVideoPort = 0x1C,
+ EfiPortTypeAudioPort = 0x1D,
+ EfiPortTypeModemPort = 0x1E,
+ EfiPortTypeNetworkPort = 0x1F,
+ EfiPortTypeSata = 0x20,
+ EfiPortTypeSas = 0x21,
+ EfiPortType8251Compatible = 0xA0,
+ EfiPortType8251FifoCompatible = 0xA1,
+ EfiPortTypeOther = 0xFF,
+} EFI_MISC_PORT_TYPE;
+
+
+typedef struct {
+ EFI_STRING_TOKEN PortInternalConnectorDesignator;
+ EFI_STRING_TOKEN PortExternalConnectorDesignator;
+ EFI_MISC_PORT_CONNECTOR_TYPE PortInternalConnectorType;
+ EFI_MISC_PORT_CONNECTOR_TYPE PortExternalConnectorType;
+ EFI_MISC_PORT_TYPE PortType;
+ EFI_MISC_PORT_DEVICE_PATH PortPath;
+} EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. System Slots - SMBIOS Type 9
+//
+#define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007
+
+typedef enum {
+ EfiSlotTypeOther = 0x1,
+ EfiSlotTypeUnknown = 0x2,
+ EfiSlotTypeIsa = 0x3,
+ EfiSlotTypeMca = 0x4,
+ EfiSlotTypeEisa = 0x5,
+ EfiSlotTypePci = 0x6,
+ EfiSlotTypePcmcia = 0x7,
+ EfiSlotTypeVlVesa = 0x8,
+ EfiSlotTypeProprietary = 0x9,
+ EfiSlotTypeProcessorCardSlot = 0xA,
+ EfiSlotTypeProprietaryMemoryCardSlot = 0xB,
+ EfiSlotTypeIORiserCardSlot = 0xC,
+ EfiSlotTypeNuBus = 0xD,
+ EfiSlotTypePci66MhzCapable = 0xE,
+ EfiSlotTypeAgp = 0xF,
+ EfiSlotTypeApg2X = 0x10,
+ EfiSlotTypeAgp4X = 0x11,
+ EfiSlotTypePciX = 0x12,
+ EfiSlotTypeAgp8X = 0x13,
+ EfiSlotTypePC98C20 = 0xA0,
+ EfiSlotTypePC98C24 = 0xA1,
+ EfiSlotTypePC98E = 0xA2,
+ EfiSlotTypePC98LocalBus = 0xA3,
+ EfiSlotTypePC98Card = 0xA4,
+ EfiSlotTypePciExpress = 0xA5,
+ EfiSlotTypePciExpressX1 = 0xA6,
+ EfiSlotTypePciExpressX2 = 0xA7,
+ EfiSlotTypePciExpressX4 = 0xA8,
+ EfiSlotTypePciExpressX8 = 0xA9,
+ EfiSlotTypePciExpressX16 = 0xAA,
+ EfiSlotTypePciExpressGen2 = 0xAB,
+ EfiSlotTypePciExpressGen2X1 = 0xAC,
+ EfiSlotTypePciExpressGen2X2 = 0xAD,
+ EfiSlotTypePciExpressGen2X4 = 0xAE,
+ EfiSlotTypePciExpressGen2X8 = 0xAF,
+ EfiSlotTypePciExpressGen2X16 = 0xB0
+} EFI_MISC_SLOT_TYPE;
+
+typedef enum {
+ EfiSlotDataBusWidthOther = 1,
+ EfiSlotDataBusWidthUnknown = 2,
+ EfiSlotDataBusWidth8Bit = 3,
+ EfiSlotDataBusWidth16Bit = 4,
+ EfiSlotDataBusWidth32Bit = 5,
+ EfiSlotDataBusWidth64Bit = 6,
+ EfiSlotDataBusWidth128Bit = 7,
+ EfiSlotDataBusWidth1xOrx1 = 8,
+ EfiSlotDataBusWidth2xOrx2 = 9,
+ EfiSlotDataBusWidth4xOrx4 = 0xA,
+ EfiSlotDataBusWidth8xOrx8 = 0xB,
+ EfiSlotDataBusWidth12xOrx12 = 0xC,
+ EfiSlotDataBusWidth16xOrx16 = 0xD,
+ EfiSlotDataBusWidth32xOrx32 = 0xE,
+} EFI_MISC_SLOT_DATA_BUS_WIDTH;
+
+typedef enum {
+ EfiSlotUsageOther = 1,
+ EfiSlotUsageUnknown = 2,
+ EfiSlotUsageAvailable = 3,
+ EfiSlotUsageInUse = 4,
+} EFI_MISC_SLOT_USAGE;
+
+typedef enum {
+ EfiSlotLengthOther = 1,
+ EfiSlotLengthUnknown = 2,
+ EfiSlotLengthShort = 3,
+ EfiSlotLengthLong = 4
+} EFI_MISC_SLOT_LENGTH;
+
+typedef struct {
+ UINT32 CharacteristicsUnknown :1;
+ UINT32 Provides50Volts :1;
+ UINT32 Provides33Volts :1;
+ UINT32 SharedSlot :1;
+ UINT32 PcCard16Supported :1;
+ UINT32 CardBusSupported :1;
+ UINT32 ZoomVideoSupported :1;
+ UINT32 ModemRingResumeSupported:1;
+ UINT32 PmeSignalSupported :1;
+ UINT32 HotPlugDevicesSupported :1;
+ UINT32 SmbusSignalSupported :1;
+ UINT32 Reserved :21;
+} EFI_MISC_SLOT_CHARACTERISTICS;
+
+typedef struct {
+ STRING_REF SlotDesignation;
+ EFI_MISC_SLOT_TYPE SlotType;
+ EFI_MISC_SLOT_DATA_BUS_WIDTH SlotDataBusWidth;
+ EFI_MISC_SLOT_USAGE SlotUsage;
+ EFI_MISC_SLOT_LENGTH SlotLength;
+ UINT16 SlotId;
+ EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics;
+ EFI_DEVICE_PATH_PROTOCOL SlotDevicePath;
+ UINT16 SegmentGroupNum;
+ UINT8 BusNum;
+ EFI_MISC_DEV_FUNC_NUM DevFuncNum;
+} EFI_MISC_SYSTEM_SLOT_DESIGNATION;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Onboard Device - SMBIOS Type 10
+//
+#define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008
+
+typedef enum {
+ EfiOnBoardDeviceTypeOther = 1,
+ EfiOnBoardDeviceTypeUnknown = 2,
+ EfiOnBoardDeviceTypeVideo = 3,
+ EfiOnBoardDeviceTypeScsiController = 4,
+ EfiOnBoardDeviceTypeEthernet = 5,
+ EfiOnBoardDeviceTypeTokenRing = 6,
+ EfiOnBoardDeviceTypeSound = 7,
+ EfiOnBoardDeviceTypePataController = 8,
+ EfiOnBoardDeviceTypeSataController = 9,
+ EfiOnBoardDeviceTypeSasController = 10
+} EFI_MISC_ONBOARD_DEVICE_TYPE;
+
+typedef struct {
+ UINT32 DeviceType :16;
+ UINT32 DeviceEnabled :1;
+ UINT32 Reserved :15;
+} EFI_MISC_ONBOARD_DEVICE_STATUS;
+
+typedef struct {
+ STRING_REF OnBoardDeviceDescription;
+ EFI_MISC_ONBOARD_DEVICE_STATUS OnBoardDeviceStatus;
+ EFI_DEVICE_PATH_PROTOCOL OnBoardDevicePath;
+} EFI_MISC_ONBOARD_DEVICE;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. BIOS Language Information - SMBIOS Type 11
+//
+#define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009
+
+typedef struct {
+ STRING_REF OemStringRef[1];
+} EFI_MISC_OEM_STRING;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. System Options - SMBIOS Type 12
+//
+typedef struct {
+ STRING_REF SystemOptionStringRef[1];
+} EFI_MISC_SYSTEM_OPTION_STRING;
+
+#define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Number of Installable Languages - SMBIOS Type 13
+//
+#define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x0000000B
+
+typedef struct {
+ UINT32 AbbreviatedLanguageFormat :1;
+ UINT32 Reserved :31;
+} EFI_MISC_LANGUAGE_FLAGS;
+
+typedef struct {
+ UINT16 NumberOfInstallableLanguages;
+ EFI_MISC_LANGUAGE_FLAGS LanguageFlags;
+ UINT16 CurrentLanguageNumber;
+} EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. System Language String
+//
+#define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C
+
+typedef struct {
+ UINT16 LanguageId;
+ STRING_REF SystemLanguageString;
+} EFI_MISC_SYSTEM_LANGUAGE_STRING;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Group Associations - SMBIOS Type 14
+//
+#define EFI_MISC_GROUP_NAME_RECORD_NUMBER 0x0000000D
+
+typedef struct {
+ STRING_REF GroupName;
+ UINT16 NumberGroupItems;
+ UINT16 GroupId;
+} EFI_MISC_GROUP_NAME_DATA;
+
+#define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER 0x0000000E
+
+typedef struct {
+ EFI_GUID SubClass;
+ EFI_INTER_LINK_DATA GroupLink;
+ UINT16 GroupId;
+ UINT16 GroupElementId;
+ UINT8 ItemType;
+} EFI_MISC_GROUP_ITEM_SET_DATA;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Pointing Device Type - SMBIOS Type 21
+//
+#define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F
+
+typedef enum {
+ EfiPointingDeviceTypeOther = 1,
+ EfiPointingDeviceTypeUnknown = 2,
+ EfiPointingDeviceTypeMouse = 3,
+ EfiPointingDeviceTypeTrackBall = 4,
+ EfiPointingDeviceTypeTrackPoint = 5,
+ EfiPointingDeviceTypeGlidePoint = 6,
+ EfiPointingDeviceTouchPad = 7,
+ EfiPointingDeviceTouchScreen = 8,
+ EfiPointingDeviceOpticalSensor = 9,
+} EFI_MISC_POINTING_DEVICE_TYPE;
+
+typedef enum {
+ EfiPointingDeviceInterfaceOther = 1,
+ EfiPointingDeviceInterfaceUnknown = 2,
+ EfiPointingDeviceInterfaceSerial = 3,
+ EfiPointingDeviceInterfacePs2 = 4,
+ EfiPointingDeviceInterfaceInfrared = 5,
+ EfiPointingDeviceInterfaceHpHil = 6,
+ EfiPointingDeviceInterfaceBusMouse = 7,
+ EfiPointingDeviceInterfaceADB = 8,
+ EfiPointingDeviceInterfaceBusMouseDB9 = 0xA0,
+ EfiPointingDeviceInterfaceBusMouseMicroDin = 0xA1,
+ EfiPointingDeviceInterfaceUsb = 0xA2,
+} EFI_MISC_POINTING_DEVICE_INTERFACE;
+
+typedef struct {
+ EFI_MISC_POINTING_DEVICE_TYPE PointingDeviceType;
+ EFI_MISC_POINTING_DEVICE_INTERFACE PointingDeviceInterface;
+ UINT16 NumberPointingDeviceButtons;
+ EFI_DEVICE_PATH_PROTOCOL PointingDevicePath;
+} EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Portable Battery - SMBIOS Type 22
+//
+#define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER 0x00000010
+
+typedef enum {
+ EfiPortableBatteryDeviceChemistryOther = 1,
+ EfiPortableBatteryDeviceChemistryUnknown = 2,
+ EfiPortableBatteryDeviceChemistryLeadAcid = 3,
+ EfiPortableBatteryDeviceChemistryNickelCadmium = 4,
+ EfiPortableBatteryDeviceChemistryNickelMetalHydride = 5,
+ EfiPortableBatteryDeviceChemistryLithiumIon = 6,
+ EfiPortableBatteryDeviceChemistryZincAir = 7,
+ EfiPortableBatteryDeviceChemistryLithiumPolymer = 8,
+} EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY;
+
+typedef struct {
+ STRING_REF Location;
+ STRING_REF Manufacturer;
+ STRING_REF ManufactureDate;
+ STRING_REF SerialNumber;
+ STRING_REF DeviceName;
+ EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY DeviceChemistry;
+ UINT16 DesignCapacity;
+ UINT16 DesignVoltage;
+ STRING_REF SBDSVersionNumber;
+ UINT8 MaximumError;
+ UINT16 SBDSSerialNumber;
+ UINT16 SBDSManufactureDate;
+ STRING_REF SBDSDeviceChemistry;
+ UINT8 DesignCapacityMultiplier;
+ UINT32 OEMSpecific;
+ UINT8 BatteryNumber; // Temporary
+ BOOLEAN Valid; // Is entry valid - Temporary
+} EFI_MISC_PORTABLE_BATTERY;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Reset Capabilities - SMBIOS Type 23
+//
+#define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011
+
+typedef struct {
+ UINT32 Status :1;
+ UINT32 BootOption :2;
+ UINT32 BootOptionOnLimit :2;
+ UINT32 WatchdogTimerPresent:1;
+ UINT32 Reserved :26;
+} EFI_MISC_RESET_CAPABILITIES_TYPE;
+
+typedef struct {
+ EFI_MISC_RESET_CAPABILITIES_TYPE ResetCapabilities;
+ UINT16 ResetCount;
+ UINT16 ResetLimit;
+ UINT16 ResetTimerInterval;
+ UINT16 ResetTimeout;
+} EFI_MISC_RESET_CAPABILITIES;
+
+typedef struct {
+ EFI_MISC_RESET_CAPABILITIES ResetCapabilities;
+ UINT16 ResetCount;
+ UINT16 ResetLimit;
+ UINT16 ResetTimerInterval;
+ UINT16 ResetTimeout;
+} EFI_MISC_RESET_CAPABILITIES_DATA;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Hardware Security - SMBIOS Type 24
+//
+#define EFI_MISC_HARDWARE_SECURITY_RECORD_NUMBER 0x00000012
+
+//
+// Backward Compatibility
+//
+#define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER EFI_MISC_HARDWARE_SECURITY_RECORD_NUMBER
+
+typedef enum {
+ EfiHardwareSecurityStatusDisabled = 0,
+ EfiHardwareSecurityStatusEnabled = 1,
+ EfiHardwareSecurityStatusNotImplemented = 2,
+ EfiHardwareSecurityStatusUnknown = 3
+} EFI_MISC_HARDWARE_SECURITY_STATUS;
+
+typedef struct {
+ EFI_MISC_HARDWARE_SECURITY_STATUS FrontPanelResetStatus :2;
+ EFI_MISC_HARDWARE_SECURITY_STATUS AdministratorPasswordStatus :2;
+ EFI_MISC_HARDWARE_SECURITY_STATUS KeyboardPasswordStatus :2;
+ EFI_MISC_HARDWARE_SECURITY_STATUS PowerOnPasswordStatus :2;
+ EFI_MISC_HARDWARE_SECURITY_STATUS Reserved :24;
+} EFI_MISC_HARDWARE_SECURITY_SETTINGS;
+
+typedef struct {
+ EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings;
+} EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. System Power Controls - SMBIOS Type 25
+//
+#define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER 0x00000013
+
+typedef struct {
+ UINT8 ScheduledPoweronMonth;
+ UINT8 ScheduledPoweronDayOfMonth;
+ UINT8 ScheduledPoweronHour;
+ UINT8 ScheduledPoweronMinute;
+ UINT8 ScheduledPoweronSecond;
+} EFI_MISC_SCHEDULED_POWER_ON_MONTH;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Voltage Probe - SMBIOS Type 26
+//
+#define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000014
+
+typedef struct {
+ UINT32 VoltageProbeSite :5;
+ UINT32 VoltageProbeStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_VOLTAGE_PROBE_LOCATION;
+
+typedef struct {
+ STRING_REF VoltageProbeDescription;
+ EFI_MISC_VOLTAGE_PROBE_LOCATION VoltageProbeLocation;
+ UINT16 VoltageProbeMaximumValue;
+ UINT16 VoltageProbeMinimumValue;
+ UINT16 VoltageProbeResolution;
+ UINT16 VoltageProbeTolerance;
+ UINT16 VoltageProbeAccuracy;
+ UINT16 VoltageProbeNominalValue;
+ UINT16 MDLowerNoncriticalThreshold;
+ UINT16 MDUpperNoncriticalThreshold;
+ UINT16 MDLowerCriticalThreshold;
+ UINT16 MDUpperCriticalThreshold;
+ UINT16 MDLowerNonrecoverableThreshold;
+ UINT16 MDUpperNonrecoverableThreshold;
+ UINT32 VoltageProbeOemDefined;
+} EFI_MISC_VOLTAGE_PROBE_DESCRIPTION;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Cooling Device - SMBIOS Type 27
+//
+#define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER 0x00000015
+
+typedef struct {
+ UINT32 CoolingDevice :5;
+ UINT32 CoolingDeviceStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_COOLING_DEVICE_TYPE;
+
+typedef struct {
+ EFI_MISC_COOLING_DEVICE_TYPE CoolingDeviceType;
+ EFI_INTER_LINK_DATA CoolingDeviceTemperatureLink;
+ UINT8 CoolingDeviceUnitGroup;
+ UINT16 CoolingDeviceNominalSpeed;
+ UINT32 CoolingDeviceOemDefined;
+} EFI_MISC_COOLING_DEVICE_TEMP_LINK;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Temperature Probe - SMBIOS Type 28
+//
+#define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000016
+
+typedef struct {
+ UINT32 TemperatureProbeSite :5;
+ UINT32 TemperatureProbeStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_TEMPERATURE_PROBE_LOCATION;
+
+typedef struct {
+ STRING_REF TemperatureProbeDescription;
+ EFI_MISC_TEMPERATURE_PROBE_LOCATION TemperatureProbeLocation;
+ UINT16 TemperatureProbeMaximumValue;
+ UINT16 TemperatureProbeMinimumValue;
+ UINT16 TemperatureProbeResolution;
+ UINT16 TemperatureProbeTolerance;
+ UINT16 TemperatureProbeAccuracy;
+ UINT16 TemperatureProbeNominalValue;
+ UINT16 MDLowerNoncriticalThreshold;
+ UINT16 MDUpperNoncriticalThreshold;
+ UINT16 MDLowerCriticalThreshold;
+ UINT16 MDUpperCriticalThreshold;
+ UINT16 MDLowerNonrecoverableThreshold;
+ UINT16 MDUpperNonrecoverableThreshold;
+ UINT32 TemperatureProbeOemDefined;
+} EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Electrical Current Probe - SMBIOS Type 29
+//
+#define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000017
+
+typedef struct {
+ UINT32 ElectricalCurrentProbeSite :5;
+ UINT32 ElectricalCurrentProbeStatus :3;
+ UINT32 Reserved :24;
+} EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;
+
+typedef struct {
+ STRING_REF ElectricalCurrentProbeDescription;
+ EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION ElectricalCurrentProbeLocation;
+ UINT16 ElectricalCurrentProbeMaximumValue;
+ UINT16 ElectricalCurrentProbeMinimumValue;
+ UINT16 ElectricalCurrentProbeResolution;
+ UINT16 ElectricalCurrentProbeTolerance;
+ UINT16 ElectricalCurrentProbeAccuracy;
+ UINT16 ElectricalCurrentProbeNominalValue;
+ UINT16 MDLowerNoncriticalThreshold;
+ UINT16 MDUpperNoncriticalThreshold;
+ UINT16 MDLowerCriticalThreshold;
+ UINT16 MDUpperCriticalThreshold;
+ UINT16 MDLowerNonrecoverableThreshold;
+ UINT16 MDUpperNonrecoverableThreshold;
+ UINT32 ElectricalCurrentProbeOemDefined;
+} EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Out-of-Band Remote Access - SMBIOS Type 30
+//
+#define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER 0x00000018
+
+typedef struct {
+ UINT32 InboundConnectionEnabled :1;
+ UINT32 OutboundConnectionEnabled :1;
+ UINT32 Reserved :30;
+} EFI_MISC_REMOTE_ACCESS_CONNECTIONS;
+
+typedef struct {
+ STRING_REF RemoteAccessManufacturerNameDescription;
+ EFI_MISC_REMOTE_ACCESS_CONNECTIONS RemoteAccessConnections;
+} EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION;
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. BIS Entry Point - SMBIOS Type 31
+//
+#define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER 0x00000019
+
+typedef struct {
+ EFI_PHYSICAL_ADDRESS BisEntryPoint;
+} EFI_MISC_BIS_ENTRY_POINT;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Boot Information - SMBIOS Type 32
+//
+#define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER 0x0000001A
+
+typedef enum {
+ EfiBootInformationStatusNoError = 0,
+ EfiBootInformationStatusNoBootableMedia = 1,
+ EfiBootInformationStatusNormalOSFailedLoading = 2,
+ EfiBootInformationStatusFirmwareDetectedFailure = 3,
+ EfiBootInformationStatusOSDetectedFailure = 4,
+ EfiBootInformationStatusUserRequestedBoot = 5,
+ EfiBootInformationStatusSystemSecurityViolation = 6,
+ EfiBootInformationStatusPreviousRequestedImage = 7,
+ EfiBootInformationStatusWatchdogTimerExpired = 8,
+ EfiBootInformationStatusStartReserved = 9,
+ EfiBootInformationStatusStartOemSpecific = 128,
+ EfiBootInformationStatusStartProductSpecific = 192,
+} EFI_MISC_BOOT_INFORMATION_STATUS_TYPE;
+
+typedef struct {
+ EFI_MISC_BOOT_INFORMATION_STATUS_TYPE BootInformationStatus;
+ UINT8 BootInformationData[9];
+} EFI_MISC_BOOT_INFORMATION_STATUS;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Management Device - SMBIOS Type 34
+//
+#define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER 0x0000001B
+
+typedef enum {
+ EfiManagementDeviceTypeOther = 1,
+ EfiManagementDeviceTypeUnknown = 2,
+ EfiManagementDeviceTypeLm75 = 3,
+ EfiManagementDeviceTypeLm78 = 4,
+ EfiManagementDeviceTypeLm79 = 5,
+ EfiManagementDeviceTypeLm80 = 6,
+ EfiManagementDeviceTypeLm81 = 7,
+ EfiManagementDeviceTypeAdm9240 = 8,
+ EfiManagementDeviceTypeDs1780 = 9,
+ EfiManagementDeviceTypeMaxim1617 = 0xA,
+ EfiManagementDeviceTypeGl518Sm = 0xB,
+ EfiManagementDeviceTypeW83781D = 0xC,
+ EfiManagementDeviceTypeHt82H791 = 0xD
+} EFI_MISC_MANAGEMENT_DEVICE_TYPE;
+
+typedef enum {
+ EfiManagementDeviceAddressTypeOther = 1,
+ EfiManagementDeviceAddressTypeUnknown = 2,
+ EfiManagementDeviceAddressTypeIOPort = 3,
+ EfiManagementDeviceAddressTypeMemory = 4,
+ EfiManagementDeviceAddressTypeSmbus = 5
+} EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;
+
+typedef struct {
+ STRING_REF ManagementDeviceDescription;
+ EFI_MISC_MANAGEMENT_DEVICE_TYPE ManagementDeviceType;
+ UINTN ManagementDeviceAddress;
+ EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE ManagementDeviceAddressType;
+} EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. Management Device Component - SMBIOS Type 35
+//
+#define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER 0x0000001C
+
+typedef struct {
+ STRING_REF ManagementDeviceComponentDescription;
+ EFI_INTER_LINK_DATA ManagementDeviceLink;
+ EFI_INTER_LINK_DATA ManagementDeviceComponentLink;
+ EFI_INTER_LINK_DATA ManagementDeviceThresholdLink;
+ UINT8 ComponentType;
+} EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// IPMI Data Record - SMBIOS Type 38
+//
+typedef enum {
+ EfiIpmiOther = 0,
+ EfiIpmiKcs = 1,
+ EfiIpmiSmic = 2,
+ EfiIpmiBt = 3,
+} EFI_MISC_IPMI_INTERFACE_TYPE;
+
+typedef struct {
+ UINT16 IpmiSpecLeastSignificantDigit:4;
+ UINT16 IpmiSpecMostSignificantDigit:4;
+ UINT16 Reserved:8;
+} EFI_MISC_IPMI_SPECIFICATION_REVISION;
+
+typedef struct {
+ EFI_MISC_IPMI_INTERFACE_TYPE IpmiInterfaceType;
+ EFI_MISC_IPMI_SPECIFICATION_REVISION IpmiSpecificationRevision;
+ UINT16 IpmiI2CSlaveAddress;
+ UINT16 IpmiNvDeviceAddress;
+ UINT64 IpmiBaseAddress;
+ EFI_DEVICE_PATH_PROTOCOL IpmiDevicePath;
+} EFI_MISC_IPMI_INTERFACE_TYPE_DATA;
+
+#define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER 0x0000001D
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+//System Power supply Record - SMBIOS Type 39
+//
+typedef struct {
+ UINT16 PowerSupplyHotReplaceable :1;
+ UINT16 PowerSupplyPresent :1;
+ UINT16 PowerSupplyUnplugged :1;
+ UINT16 InputVoltageRangeSwitch :4;
+ UINT16 PowerSupplyStatus :3;
+ UINT16 PowerSupplyType :4;
+ UINT16 Reserved :2;
+} POWER_SUPPLY_CHARACTERISTICS;
+
+typedef struct {
+ UINT16 PowerUnitGroup;
+ STRING_REF PowerSupplyLocation;
+ STRING_REF PowerSupplyDeviceName;
+ STRING_REF PowerSupplyManufacturer;
+ STRING_REF PowerSupplySerialNumber;
+ STRING_REF PowerSupplyAssetTagNumber;
+ STRING_REF PowerSupplyModelPartNumber;
+ STRING_REF PowerSupplyRevisionLevel;
+ UINT16 PowerSupplyMaxPowerCapacity;
+ POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;
+ EFI_INTER_LINK_DATA PowerSupplyInputVoltageProbeLink;
+ EFI_INTER_LINK_DATA PowerSupplyCoolingDeviceLink;
+ EFI_INTER_LINK_DATA PowerSupplyInputCurrentProbeLink;
+} EFI_MISC_SYSTEM_POWER_SUPPLY;
+
+#define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+//Additional Information Record - SMBIOS Type 40
+//
+typedef struct {
+ UINT8 EntryLength;
+ UINT8 ReferencedSmbiosType;
+ EFI_INTER_LINK_DATA ReferencedLink;
+ UINT8 ReferencedOffset;
+ STRING_REF EntryString;
+ EFI_PHYSICAL_ADDRESS ValueAddress;
+} EFI_MISC_ADDITIONAL_INFORMATION_ENTRY;
+
+typedef struct {
+ UINT8 NumberOfAdditionalInformationEntries;
+ EFI_PHYSICAL_ADDRESS AdditionalInfoEntriesAddr;
+} EFI_MISC_ADDITIONAL_INFORMATION;
+
+#define EFI_MISC_ADDITIONAL_INFORMATION_RECORD_NUMBER 0x00000022
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+//Onboard Devices Extended Infomation Record - SMBIOS Type 41
+//
+typedef struct {
+ UINT8 TypeOfDevice:7;
+ UINT8 DeviceStatus:1;
+} EFI_MISC_DEVICE_TYPE;
+
+typedef struct {
+ STRING_REF ReferenceDesignation;
+ EFI_MISC_DEVICE_TYPE DeviceType;
+ UINT8 DeviceTypeInstance;
+ UINT16 SegmentGroupNum;
+ UINT8 BusNum;
+ EFI_MISC_DEV_FUNC_NUM DevFuncNum;
+} EFI_MISC_ONBOARD_DEVICES_EXTENDED_INFORMATION;
+
+#define EFI_MISC_ONBOARD_DEVICES_EXTENDED_INFORMATION_RECORD_NUMBER 0x00000023
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Generic Data Record - All SMBIOS Type
+// Put smbios raw data into one datahub record directly. Smbios driver would
+// copy smbios raw data into smbios table but not take any translation.
+//
+typedef struct {
+ UINT8 Type;
+ UINT8 Length;
+ UINT16 Handle;
+} SMBIOS_STRUCTURE_HDR;
+
+typedef struct {
+ SMBIOS_STRUCTURE_HDR Header;
+ UINT8 RawData[1];
+} EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;
+
+#define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER 0x0000001F
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Misc. System Event Log - SMBIOS Type 15
+//
+#define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020
+
+typedef enum {
+ EfiEventLogTypeReserved1 = 0,
+ EfiEventLogTypeSingleBitEccMemoryError = 1,
+ EfiEventLogTypeMultiBitEccMemoryError = 2,
+ EfiEventLogTypeParityMemoryError = 3,
+ EfiEventLogTypeBusTimeOut = 4,
+ EfiEventLogTypeIoChannelCheck = 5,
+ EfiEventLogTypeSoftwareNmi = 6,
+ EfiEventLogTypePostMemoryResize = 7,
+ EfiEventLogTypePostError = 8,
+ EfiEventLogTypePciParityError = 9,
+ EfiEventLogTypePciSystemError = 0xA,
+ EfiEventLogTypeCpuFailure = 0xB,
+ EfiEventLogTypeEisaFailSafeTimerTimeOut = 0xC,
+ EfiEventLogTypeCorrectableMemoryLogDisabled = 0xD,
+ EfiEventLogTypeLoggingDisabled = 0xE,
+ EfiEventLogTypeReserved2 = 0xF,
+ EfiEventLogTypeSystemLimitExceeded = 0x10,
+ EfiEventLogTypeAsynchronousHardwareTimerExpired = 0x11,
+ EfiEventLogTypeSystemConfigurationInformation = 0x12,
+ EfiEventLogTypeHardDiskInformation = 0x13,
+ EfiEventLogTypeSystemReconfigured = 0x14,
+ EfiEventLogTypeUncorrectableCpuComplexError = 0x15,
+ EfiEventLogTypeLogAreaResetCleared = 0x16,
+ EfiEventLogTypeSystemBoot = 0x17,
+ EfiEventLogTypeEndOfLog = 0xFF
+} EFI_MISC_LOG_TYPE;
+
+typedef enum {
+ EfiEventLogDataFormatTypeNone = 0,
+ EfiEventLogDataFormatTypeHandle = 1,
+ EfiEventLogDataFormatTypeMultipleEvent = 2,
+ EfiEventLogDataFormatTypeMultipleEventHandle = 3,
+ EfiEventLogDataFormatTypePostResultsBitmap = 4,
+ EfiEventLogDataFormatTypeSystemManagement = 5,
+ EfiEventLogDataFormatTypeMultipleEventSystemManagement = 6
+} EFI_MISC_VARIABLE_DATA_FORMAT_TYPE;
+
+typedef struct {
+ UINT8 LogType;
+ UINT8 DataFormatType;
+} EFI_MISC_EVENT_LOG_TYPE;
+
+typedef struct {
+ UINT16 LogAreaLength;
+ UINT16 LogHeaderStartOffset;
+ UINT16 LogDataStartOffset;
+ UINT8 AccessMethod;
+ UINT8 LogStatus;
+ UINT32 LogChangeToken;
+ UINT32 AccessMethodAddress;
+ UINT8 LogHeaderFormat;
+ UINT8 NumberOfSupportedLogType;
+ UINT8 LengthOfLogDescriptor;
+ EFI_PHYSICAL_ADDRESS EventLogTypeDescriptors; // Pointer to EFI_MISC_EVENT_LOG_TYPE
+} EFI_MISC_SYSTEM_EVENT_LOG;
+
+//
+// Access Method.
+// 0x00~0x04: as following definition
+// 0x05~0x7f: Available for future assignment.
+// 0x80~0xff: BIOS Vendor/OEM-specific.
+//
+#define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT 0x00
+#define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT 0X01
+#define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT 0X02
+#define ACCESS_MEMORY_MAPPED 0x03
+#define ACCESS_GPNV 0x04
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+//Management Device Threshold Data Record - SMBIOS Type 36
+//
+#define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER 0x00000021
+
+typedef struct {
+ UINT16 LowerThresNonCritical;
+ UINT16 UpperThresNonCritical;
+ UINT16 LowerThresCritical;
+ UINT16 UpperThresCritical;
+ UINT16 LowerThresNonRecover;
+ UINT16 UpperThresNonRecover;
+} EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;
+
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+//
+//
+typedef union {
+ EFI_MISC_LAST_PCI_BUS LastPciBus;
+ EFI_MISC_BIOS_VENDOR MiscBiosVendor;
+ EFI_MISC_SYSTEM_MANUFACTURER MiscSystemManufacturer;
+ EFI_MISC_BASE_BOARD_MANUFACTURER MiscBaseBoardManufacturer;
+ EFI_MISC_CHASSIS_MANUFACTURER MiscChassisManufacturer;
+ EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR MiscPortInternalConnectorDesignator;
+ EFI_MISC_SYSTEM_SLOT_DESIGNATION MiscSystemSlotDesignation;
+ EFI_MISC_ONBOARD_DEVICE MiscOnboardDevice;
+ EFI_MISC_OEM_STRING MiscOemString;
+ EFI_MISC_SYSTEM_OPTION_STRING MiscOptionString;
+ EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES NumberOfInstallableLanguages;
+ EFI_MISC_SYSTEM_LANGUAGE_STRING MiscSystemLanguageString;
+ EFI_MISC_GROUP_NAME_DATA MiscGroupNameData;
+ EFI_MISC_GROUP_ITEM_SET_DATA MiscGroupItemSetData;
+ EFI_MISC_SYSTEM_EVENT_LOG MiscSystemEventLog;
+ EFI_MISC_ONBOARD_DEVICE_TYPE_DATA MiscOnboardDeviceTypeData;
+ EFI_MISC_PORTABLE_BATTERY MiscPortableBattery;
+ EFI_MISC_RESET_CAPABILITIES_DATA MiscResetCapablilitiesData;
+ EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA MiscHardwareSecuritySettingsData;
+ EFI_MISC_SCHEDULED_POWER_ON_MONTH MiscScheduledPowerOnMonth;
+ EFI_MISC_VOLTAGE_PROBE_DESCRIPTION MiscVoltageProbeDescription;
+ EFI_MISC_COOLING_DEVICE_TEMP_LINK MiscCoolingDeviceTempLink;
+ EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION MiscTemperatureProbeDescription;
+ EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION MiscElectricalCurrentProbeDescription;
+ EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION MiscRemoteAccessManufacturerDescription;
+ EFI_MISC_BIS_ENTRY_POINT MiscBisEntryPoint;
+ EFI_MISC_BOOT_INFORMATION_STATUS MiscBootInformationStatus;
+ EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION MiscManagementDeviceDescription;
+ EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION MiscManagementDeviceComponentDescription;
+ EFI_MISC_IPMI_INTERFACE_TYPE_DATA MiscIpmiInterfaceTypeData;
+ EFI_MISC_SYSTEM_POWER_SUPPLY MiscPowerSupplyInfo;
+ EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION MiscSmbiosStructEncapsulation;
+ EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD MiscManagementDeviceThreshold;
+ EFI_MISC_ADDITIONAL_INFORMATION MiscAdditionalInformation;
+ EFI_MISC_ONBOARD_DEVICES_EXTENDED_INFORMATION MiscOnBoardDevicesExtendedInformation;
+} EFI_MISC_SUBCLASS_RECORDS;
+
+//
+//
+//
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER Header;
+ EFI_MISC_SUBCLASS_RECORDS Record;
+} EFI_MISC_SUBCLASS_DRIVER_DATA;
+
+#pragma pack()
+
+#endif /* _DATAHUB_SUBCLASS_MISC_H_ */
+/* eof - DataHubSubClassMisc.h */
diff --git a/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassProcessor.h b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassProcessor.h
new file mode 100644
index 0000000..578cb87
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/DataHubRecords/DataHubSubClassProcessor.h
@@ -0,0 +1,492 @@
+/*++
+
+Copyright (c) 2004 - 2009, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DataHubSubClassProcessor.h
+
+Abstract:
+
+ Definitions for processor sub class data records
+
+Revision History
+
+--*/
+
+#ifndef _DATAHUB_SUBCLASS_PROCESSOR_H_
+#define _DATAHUB_SUBCLASS_PROCESSOR_H_
+
+#define EFI_PROCESSOR_SUBCLASS_VERSION 0x00010000
+
+#define EFI_PROCESSOR_SUBCLASS_GUID \
+ { 0x26fdeb7e, 0xb8af, 0x4ccf, 0xaa, 0x97, 0x02, 0x63, 0x3c, 0xe4, 0x8c, 0xa7 }
+
+
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA;
+
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA;
+
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_CORE_FREQUENCY_DATA;
+
+typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA;
+
+typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA;
+
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_FSB_FREQUENCY_DATA;
+
+typedef STRING_REF EFI_PROCESSOR_VERSION_DATA;
+
+typedef STRING_REF EFI_PROCESSOR_MANUFACTURER_DATA;
+
+typedef STRING_REF EFI_PROCESSOR_SERIAL_NUMBER_DATA;
+
+typedef STRING_REF EFI_PROCESSOR_ASSET_TAG_DATA;
+
+typedef STRING_REF EFI_PROCESSOR_PART_NUMBER_DATA;
+
+typedef struct {
+ UINT32 ProcessorSteppingId:4;
+ UINT32 ProcessorModel: 4;
+ UINT32 ProcessorFamily: 4;
+ UINT32 ProcessorType: 2;
+ UINT32 ProcessorReserved1: 2;
+ UINT32 ProcessorXModel: 4;
+ UINT32 ProcessorXFamily: 8;
+ UINT32 ProcessorReserved2: 4;
+} EFI_PROCESSOR_SIGNATURE;
+
+typedef struct {
+ UINT32 ProcessorBrandIndex :8;
+ UINT32 ProcessorClflush :8;
+ UINT32 ProcessorReserved :8;
+ UINT32 ProcessorDfltApicId :8;
+} EFI_PROCESSOR_MISC_INFO;
+
+typedef struct {
+ UINT32 ProcessorFpu: 1;
+ UINT32 ProcessorVme: 1;
+ UINT32 ProcessorDe: 1;
+ UINT32 ProcessorPse: 1;
+ UINT32 ProcessorTsc: 1;
+ UINT32 ProcessorMsr: 1;
+ UINT32 ProcessorPae: 1;
+ UINT32 ProcessorMce: 1;
+ UINT32 ProcessorCx8: 1;
+ UINT32 ProcessorApic: 1;
+ UINT32 ProcessorReserved1: 1;
+ UINT32 ProcessorSep: 1;
+ UINT32 ProcessorMtrr: 1;
+ UINT32 ProcessorPge: 1;
+ UINT32 ProcessorMca: 1;
+ UINT32 ProcessorCmov: 1;
+ UINT32 ProcessorPat: 1;
+ UINT32 ProcessorPse36: 1;
+ UINT32 ProcessorPsn: 1;
+ UINT32 ProcessorClfsh: 1;
+ UINT32 ProcessorReserved2: 1;
+ UINT32 ProcessorDs: 1;
+ UINT32 ProcessorAcpi: 1;
+ UINT32 ProcessorMmx: 1;
+ UINT32 ProcessorFxsr: 1;
+ UINT32 ProcessorSse: 1;
+ UINT32 ProcessorSse2: 1;
+ UINT32 ProcessorSs: 1;
+ UINT32 ProcessorReserved3: 1;
+ UINT32 ProcessorTm: 1;
+ UINT32 ProcessorReserved4: 2;
+} EFI_PROCESSOR_FEATURE_FLAGS;
+
+typedef struct {
+ EFI_PROCESSOR_SIGNATURE Signature;
+ EFI_PROCESSOR_MISC_INFO MiscInfo;
+ UINT32 Reserved;
+ EFI_PROCESSOR_FEATURE_FLAGS FeatureFlags;
+} EFI_PROCESSOR_ID_DATA;
+
+typedef enum {
+ EfiProcessorOther = 1,
+ EfiProcessorUnknown = 2,
+ EfiCentralProcessor = 3,
+ EfiMathProcessor = 4,
+ EfiDspProcessor = 5,
+ EfiVideoProcessor = 6
+} EFI_PROCESSOR_TYPE_DATA;
+
+typedef enum {
+ EfiProcessorFamilyOther = 1,
+ EfiProcessorFamilyUnknown = 2,
+ EfiProcessorFamily8086 = 3,
+ EfiProcessorFamily80286 = 4,
+ EfiProcessorFamilyIntel386 = 5,
+ EfiProcessorFamilyIntel486 = 6,
+ EfiProcessorFamily8087 = 7,
+ EfiProcessorFamily80287 = 8,
+ EfiProcessorFamily80387 = 9,
+ EfiProcessorFamily80487 = 0x0A,
+ EfiProcessorFamilyPentium = 0x0B,
+ EfiProcessorFamilyPentiumPro = 0x0C,
+ EfiProcessorFamilyPentiumII = 0x0D,
+ EfiProcessorFamilyPentiumMMX = 0x0E,
+ EfiProcessorFamilyCeleron = 0x0F,
+ EfiProcessorFamilyPentiumIIXeon = 0x10,
+ EfiProcessorFamilyPentiumIII = 0x11,
+ EfiProcessorFamilyM1 = 0x12,
+ EfiProcessorFamilyM2 = 0x13,
+ EfiProcessorFamilyM1Reserved2 = 0x14,
+ EfiProcessorFamilyM1Reserved3 = 0x15,
+ EfiProcessorFamilyM1Reserved4 = 0x16,
+ EfiProcessorFamilyM1Reserved5 = 0x17,
+ EfiProcessorFamilyAmdDuron = 0x18,
+ EfiProcessorFamilyK5 = 0x19,
+ EfiProcessorFamilyK6 = 0x1A,
+ EfiProcessorFamilyK6_2 = 0x1B,
+ EfiProcessorFamilyK6_3 = 0x1C,
+ EfiProcessorFamilyAmdAthlon = 0x1D,
+ EfiProcessorFamilyK6_2Plus = 0x1E,
+ EfiProcessorFamilyK5Reserved6 = 0x1F,
+ EfiProcessorFamilyPowerPC = 0x20,
+ EfiProcessorFamilyPowerPC601 = 0x21,
+ EfiProcessorFamilyPowerPC603 = 0x22,
+ EfiProcessorFamilyPowerPC603Plus = 0x23,
+ EfiProcessorFamilyPowerPC604 = 0x24,
+ EfiProcessorFamilyPowerPC620 = 0x25,
+ EfiProcessorFamilyPowerPC704 = 0x26,
+ EfiProcessorFamilyPowerPC750 = 0x27,
+ EfiProcessorFamilyIntelCoreDuo = 0x28,
+ EfiProcessorFamilyIntelCoreDuoMobile = 0x29,
+ EfiProcessorFamilyIntelCoreSoloMobile = 0x2A,
+ EfiProcessorFamilyIntelAtom = 0x2B,
+ EfiProcessorFamilyAlpha2 = 0x30,
+ EfiProcessorFamilyAlpha21064 = 0x31,
+ EfiProcessorFamilyAlpha21066 = 0x32,
+ EfiProcessorFamilyAlpha21164 = 0x33,
+ EfiProcessorFamilyAlpha21164PC = 0x34,
+ EfiProcessorFamilyAlpha21164a = 0x35,
+ EfiProcessorFamilyAlpha21264 = 0x36,
+ EfiProcessorFamilyAlpha21364 = 0x37,
+ EfiProcessorFamilyMips = 0x40,
+ EfiProcessorFamilyMIPSR4000 = 0x41,
+ EfiProcessorFamilyMIPSR4200 = 0x42,
+ EfiProcessorFamilyMIPSR4400 = 0x43,
+ EfiProcessorFamilyMIPSR4600 = 0x44,
+ EfiProcessorFamilyMIPSR10000 = 0x45,
+ EfiProcessorFamilySparc = 0x50,
+ EfiProcessorFamilySuperSparc = 0x51,
+ EfiProcessorFamilymicroSparcII = 0x52,
+ EfiProcessorFamilymicroSparcIIep = 0x53,
+ EfiProcessorFamilyUltraSparc = 0x54,
+ EfiProcessorFamilyUltraSparcII = 0x55,
+ EfiProcessorFamilyUltraSparcIIi = 0x56,
+ EfiProcessorFamilyUltraSparcIII = 0x57,
+ EfiProcessorFamilyUltraSparcIIIi = 0x58,
+ EfiProcessorFamily68040 = 0x60,
+ EfiProcessorFamily68xxx = 0x61,
+ EfiProcessorFamily68000 = 0x62,
+ EfiProcessorFamily68010 = 0x63,
+ EfiProcessorFamily68020 = 0x64,
+ EfiProcessorFamily68030 = 0x65,
+ EfiProcessorFamilyHobbit = 0x70,
+ EfiProcessorFamilyCrusoeTM5000 = 0x78,
+ EfiProcessorFamilyCrusoeTM3000 = 0x79,
+ EfiProcessorFamilyEfficeonTM8000 = 0x7A,
+ EfiProcessorFamilyWeitek = 0x80,
+ EfiProcessorFamilyItanium = 0x82,
+ EfiProcessorFamilyAmdAthlon64 = 0x83,
+ EfiProcessorFamilyAmdOpteron = 0x84,
+ EfiProcessorFamilyAmdSempron = 0x85,
+ EfiProcessorFamilyAmdTurion64Mobile = 0x86,
+ EfiProcessorFamilyDualCoreAmdOpteron = 0x87,
+ EfiProcessorFamilyAmdAthlon64X2DualCore = 0x88,
+ EfiProcessorFamilyAmdTurion64X2Mobile = 0x89,
+ EfiProcessorFamilyQuadCoreAmdOpteron = 0x8A,
+ EfiProcessorFamilyThirdGenerationAmdOpteron = 0x8B,
+ EfiProcessorFamilyAmdPhenomFxQuadCore = 0x8C,
+ EfiProcessorFamilyAmdPhenomX4QuadCore = 0x8D,
+ EfiProcessorFamilyAmdPhenomX2DualCore = 0x8E,
+ EfiProcessorFamilyAmdAthlonX2DualCore = 0x8F,
+ EfiProcessorFamilyPARISC = 0x90,
+ EfiProcessorFamilyPaRisc8500 = 0x91,
+ EfiProcessorFamilyPaRisc8000 = 0x92,
+ EfiProcessorFamilyPaRisc7300LC = 0x93,
+ EfiProcessorFamilyPaRisc7200 = 0x94,
+ EfiProcessorFamilyPaRisc7100LC = 0x95,
+ EfiProcessorFamilyPaRisc7100 = 0x96,
+ EfiProcessorFamilyV30 = 0xA0,
+ EfiProcessorFamilyQuadCoreIntelXeon3200Series = 0xA1,
+ EfiProcessorFamilyDualCoreIntelXeon3000Series = 0xA2,
+ EfiProcessorFamilyQuadCoreIntelXeon5300Series = 0xA3,
+ EfiProcessorFamilyDualCoreIntelXeon5100Series = 0xA4,
+ EfiProcessorFamilyDualCoreIntelXeon5000Series = 0xA5,
+ EfiProcessorFamilyDualCoreIntelXeonLV = 0xA6,
+ EfiProcessorFamilyDualCoreIntelXeonULV = 0xA7,
+ EfiProcessorFamilyDualCoreIntelXeon7100Series = 0xA8,
+ EfiProcessorFamilyQuadCoreIntelXeon5400Series = 0xA9,
+ EfiProcessorFamilyQuadCoreIntelXeon = 0xAA,
+ EfiProcessorFamilyDualCoreIntelXeon5200Series = 0xAB,
+ EfiProcessorFamilyDualCoreIntelXeon7200Series = 0xAC,
+ EfiProcessorFamilyQuadCoreIntelXeon7300Series = 0xAD,
+ EfiProcessorFamilyQuadCoreIntelXeon7400Series = 0xAE,
+ EfiProcessorFamilyMultiCoreIntelXeon7400Series = 0xAF,
+ EfiProcessorFamilyPentiumIIIXeon = 0xB0,
+ EfiProcessorFamilyPentiumIIISpeedStep = 0xB1,
+ EfiProcessorFamilyPentium4 = 0xB2,
+ EfiProcessorFamilyIntelXeon = 0xB3,
+ EfiProcessorFamilyAS400 = 0xB4,
+ EfiProcessorFamilyIntelXeonMP = 0xB5,
+ EfiProcessorFamilyAMDAthlonXP = 0xB6,
+ EfiProcessorFamilyAMDAthlonMP = 0xB7,
+ EfiProcessorFamilyIntelItanium2 = 0xB8,
+ EfiProcessorFamilyIntelPentiumM = 0xB9,
+ EfiProcessorFamilyIntelCeleronD = 0xBA,
+ EfiProcessorFamilyIntelPentiumD = 0xBB,
+ EfiProcessorFamilyIntelPentiumEx = 0xBC,
+ EfiProcessorFamilyIntelCoreSolo = 0xBD, // SMBIOS spec 2.6 correct this value
+ EfiProcessorFamilyReserved = 0xBE,
+ EfiProcessorFamilyIntelCore2 = 0xBF,
+ EfiProcessorFamilyIntelCore2Solo = 0xC0,
+ EfiProcessorFamilyIntelCore2Extreme = 0xC1,
+ EfiProcessorFamilyIntelCore2Quad = 0xC2,
+ EfiProcessorFamilyIntelCore2ExtremeMobile = 0xC3,
+ EfiProcessorFamilyIntelCore2DuoMobile = 0xC4,
+ EfiProcessorFamilyIntelCore2SoloMobile = 0xC5,
+ EfiProcessorFamilyIntelCoreI7 = 0xC6,
+ EfiProcessorFamilyDualCoreIntelCeleron = 0xC7,
+ EfiProcessorFamilyIBM390 = 0xC8,
+ EfiProcessorFamilyG4 = 0xC9,
+ EfiProcessorFamilyG5 = 0xCA,
+ EfiProcessorFamilyG6 = 0xCB,
+ EfiProcessorFamilyzArchitectur = 0xCC,
+ EfiProcessorFamilyViaC7M = 0xD2,
+ EfiProcessorFamilyViaC7D = 0xD3,
+ EfiProcessorFamilyViaC7 = 0xD4,
+ EfiProcessorFamilyViaEden = 0xD5,
+ EfiProcessorFamilyMultiCoreIntelXeon = 0xD6,
+ EfiProcessorFamilyDualCoreIntelXeon3Series = 0xD7,
+ EfiProcessorFamilyQuadCoreIntelXeon3Series = 0xD8,
+ EfiProcessorFamilyDualCoreIntelXeon5Series = 0xDA,
+ EfiProcessorFamilyQuadCoreIntelXeon5Series = 0xDB,
+ EfiProcessorFamilyDualCoreIntelXeon7Series = 0xDD,
+ EfiProcessorFamilyQuadCoreIntelXeon7Series = 0xDE,
+ EfiProcessorFamilyMultiCoreIntelXeon7Series = 0xDF,
+ EfiProcessorFamilyEmbeddedAmdOpteronQuadCore = 0xE6,
+ EfiProcessorFamilyAmdPhenomTripleCore = 0xE7,
+ EfiProcessorFamilyAmdTurionUltraDualCoreMobile = 0xE8,
+ EfiProcessorFamilyAmdTurionDualCoreMobile = 0xE9,
+ EfiProcessorFamilyAmdAthlonDualCore = 0xEA,
+ EfiProcessorFamilyAmdSempronSI = 0xEB,
+ EfiProcessorFamilyi860 = 0xFA,
+ EfiProcessorFamilyi960 = 0xFB,
+ EfiProcessorFamilyIndicatorFamily2 = 0xFE
+} EFI_PROCESSOR_FAMILY_DATA;
+
+typedef enum {
+ EfiProcessorFamilySh3 = 0x104,
+ EfiProcessorFamilySh4 = 0x105,
+ EfiProcessorFamilyArm = 0x118,
+ EfiProcessorFamilyStrongArm = 0x119,
+ EfiProcessorFamily6x86 = 0x12C,
+ EfiProcessorFamilyMediaGx = 0x12D,
+ EfiProcessorFamilyMii = 0x12E,
+ EfiProcessorFamilyWinChip = 0x140,
+ EfiProcessorFamilyDsp = 0x15E,
+ EfiProcessorFamilyVideo = 0x1F4
+} EFI_PROCESSOR_FAMILY2_DATA;
+
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_VOLTAGE_DATA;
+
+typedef EFI_PHYSICAL_ADDRESS EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA;
+
+typedef UINT32 EFI_PROCESSOR_APIC_ID_DATA;
+
+typedef UINT32 EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA;
+
+typedef enum {
+ EfiProcessorIa32Microcode = 1,
+ EfiProcessorIpfPalAMicrocode = 2,
+ EfiProcessorIpfPalBMicrocode = 3
+} EFI_PROCESSOR_MICROCODE_TYPE;
+
+typedef struct {
+ EFI_PROCESSOR_MICROCODE_TYPE ProcessorMicrocodeType;
+ UINT32 ProcessorMicrocodeRevisionNumber;
+} EFI_PROCESSOR_MICROCODE_REVISION_DATA;
+
+typedef struct {
+ UINT32 CpuStatus :3;
+ UINT32 Reserved1 :3;
+ UINT32 SocketPopulated :1;
+ UINT32 Reserved2 :1;
+ UINT32 ApicEnable :1;
+ UINT32 BootApplicationProcessor :1;
+ UINT32 Reserved3 :22;
+} EFI_PROCESSOR_STATUS_DATA;
+
+typedef enum {
+ EfiCpuStatusUnknown = 0,
+ EfiCpuStatusEnabled = 1,
+ EfiCpuStatusDisabledByUser = 2,
+ EfiCpuStatusDisabledbyBios = 3,
+ EfiCpuStatusIdle = 4,
+ EfiCpuStatusOther = 7
+} EFI_CPU_STATUS;
+
+typedef enum {
+ EfiProcessorSocketOther = 1,
+ EfiProcessorSocketUnknown = 2,
+ EfiProcessorSocketDaughterBoard = 3,
+ EfiProcessorSocketZIF = 4,
+ EfiProcessorSocketReplacePiggyBack = 5,
+ EfiProcessorSocketNone = 6,
+ EfiProcessorSocketLIF = 7,
+ EfiProcessorSocketSlot1 = 8,
+ EfiProcessorSocketSlot2 = 9,
+ EfiProcessorSocket370Pin = 0xA,
+ EfiProcessorSocketSlotA = 0xB,
+ EfiProcessorSocketSlotM = 0xC,
+ EfiProcessorSocket423 = 0xD,
+ EfiProcessorSocketA462 = 0xE,
+ EfiProcessorSocket478 = 0xF,
+ EfiProcessorSocket754 = 0x10,
+ EfiProcessorSocket940 = 0x11,
+ EfiProcessorSocket939 = 0x12,
+ EfiProcessorSocketmPGA604 = 0x13,
+ EfiProcessorSocketLGA771 = 0x14,
+ EfiProcessorSocketLGA775 = 0x15,
+ EfiProcessorSocketS1 = 0x16,
+ EfiProcessorSocketAm2 = 0x17,
+ EfiProcessorSocketF = 0x18,
+ EfiProcessorSocketLGA1366 = 0x19
+} EFI_PROCESSOR_SOCKET_TYPE_DATA;
+
+typedef STRING_REF EFI_PROCESSOR_SOCKET_NAME_DATA;
+
+typedef EFI_INTER_LINK_DATA EFI_CACHE_ASSOCIATION_DATA;
+
+typedef enum {
+ EfiProcessorHealthy = 1,
+ EfiProcessorPerfRestricted = 2,
+ EfiProcessorFuncRestricted = 3
+} EFI_PROCESSOR_HEALTH_STATUS;
+
+typedef UINTN EFI_PROCESSOR_PACKAGE_NUMBER_DATA;
+
+typedef UINT8 EFI_PROCESSOR_CORE_COUNT_DATA;
+typedef UINT8 EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA;
+typedef UINT8 EFI_PROCESSOR_THREAD_COUNT_DATA;
+
+typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA;
+
+typedef struct {
+ UINT16 Reserved :1;
+ UINT16 Unknown :1;
+ UINT16 Capable64Bit :1;
+ UINT16 Reserved2 :13;
+} EFI_PROCESSOR_CHARACTERISTICS_DATA;
+
+typedef struct {
+ EFI_PROCESSOR_SOCKET_NAME_DATA ProcessorSocketName;
+ EFI_PROCESSOR_TYPE_DATA ProcessorType;
+ EFI_PROCESSOR_FAMILY_DATA ProcessorFamily;
+ EFI_PROCESSOR_MANUFACTURER_DATA ProcessorManufacturer;
+ EFI_PROCESSOR_ID_DATA ProcessorId;
+ EFI_PROCESSOR_VERSION_DATA ProcessorVersion;
+ EFI_PROCESSOR_VOLTAGE_DATA ProcessorVoltage;
+ EFI_PROCESSOR_FSB_FREQUENCY_DATA ProcessorFsbFrequency;
+ EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA ProcessorMaxCoreFrequency;
+ EFI_PROCESSOR_CORE_FREQUENCY_DATA ProcessorCoreFrequency;
+ EFI_PROCESSOR_STATUS_DATA ProcessorStatus;
+ EFI_PROCESSOR_SOCKET_TYPE_DATA ProcessorSocketType;
+ EFI_CACHE_ASSOCIATION_DATA ProcessorL1LinkData;
+ EFI_CACHE_ASSOCIATION_DATA ProcessorL2LinkData;
+ EFI_CACHE_ASSOCIATION_DATA ProcessorL3LinkData;
+ EFI_PROCESSOR_SERIAL_NUMBER_DATA ProcessorSerialNumber;
+ EFI_PROCESSOR_ASSET_TAG_DATA ProcessorAssetTag;
+ EFI_PROCESSOR_PART_NUMBER_DATA ProcessorPartNumber;
+ EFI_PROCESSOR_CORE_COUNT_DATA ProcessorCoreCount;
+ EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA ProcessorEnabledCoreCount;
+ EFI_PROCESSOR_THREAD_COUNT_DATA ProcessorThreadCount;
+ EFI_PROCESSOR_CHARACTERISTICS_DATA ProcessorCharacteristics;
+ EFI_PROCESSOR_FAMILY2_DATA ProcessorFamily2;
+} EFI_PROCESSOR_SOCKET_DATA;
+
+typedef enum {
+ ProcessorCoreFrequencyRecordType = 1,
+ ProcessorFsbFrequencyRecordType = 2,
+ ProcessorVersionRecordType = 3,
+ ProcessorManufacturerRecordType = 4,
+ ProcessorSerialNumberRecordType = 5,
+ ProcessorIdRecordType = 6,
+ ProcessorTypeRecordType = 7,
+ ProcessorFamilyRecordType = 8,
+ ProcessorVoltageRecordType = 9,
+ ProcessorApicBaseAddressRecordType = 10,
+ ProcessorApicIdRecordType = 11,
+ ProcessorApicVersionNumberRecordType = 12,
+ CpuUcodeRevisionDataRecordType = 13,
+ ProcessorStatusRecordType = 14,
+ ProcessorSocketTypeRecordType = 15,
+ ProcessorSocketNameRecordType = 16,
+ CacheAssociationRecordType = 17,
+ ProcessorMaxCoreFrequencyRecordType = 18,
+ ProcessorAssetTagRecordType = 19,
+ ProcessorMaxFsbFrequencyRecordType = 20,
+ ProcessorPackageNumberRecordType = 21,
+ ProcessorCoreFrequencyListRecordType = 22,
+ ProcessorFsbFrequencyListRecordType = 23,
+ ProcessorHealthStatusRecordType = 24,
+ ProcessorCoreCountRecordType = 25,
+ ProcessorEnabledCoreCountRecordType = 26,
+ ProcessorThreadCountRecordType = 27,
+ ProcessorCharacteristicsRecordType = 28,
+ ProcessorFamily2RecordType = 29,
+ ProcessorPartNumberRecordType = 30,
+ ProcessorSocketRecordType = 31
+} EFI_CPU_VARIABLE_RECORD_TYPE;
+
+typedef union {
+ EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA ProcessorCoreFrequencyList;
+ EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA ProcessorFsbFrequencyList;
+ EFI_PROCESSOR_SERIAL_NUMBER_DATA ProcessorSerialNumber;
+ EFI_PROCESSOR_CORE_FREQUENCY_DATA ProcessorCoreFrequency;
+ EFI_PROCESSOR_FSB_FREQUENCY_DATA ProcessorFsbFrequency;
+ EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA ProcessorMaxCoreFrequency;
+ EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA ProcessorMaxFsbFrequency;
+ EFI_PROCESSOR_VERSION_DATA ProcessorVersion;
+ EFI_PROCESSOR_MANUFACTURER_DATA ProcessorManufacturer;
+ EFI_PROCESSOR_ID_DATA ProcessorId;
+ EFI_PROCESSOR_TYPE_DATA ProcessorType;
+ EFI_PROCESSOR_FAMILY_DATA ProcessorFamily;
+ EFI_PROCESSOR_VOLTAGE_DATA ProcessorVoltage;
+ EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA ProcessorApicBase;
+ EFI_PROCESSOR_APIC_ID_DATA ProcessorApicId;
+ EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA ProcessorApicVersionNumber;
+ EFI_PROCESSOR_MICROCODE_REVISION_DATA CpuUcodeRevisionData;
+ EFI_PROCESSOR_STATUS_DATA ProcessorStatus;
+ EFI_PROCESSOR_SOCKET_TYPE_DATA ProcessorSocketType;
+ EFI_PROCESSOR_SOCKET_NAME_DATA ProcessorSocketName;
+ EFI_PROCESSOR_ASSET_TAG_DATA ProcessorAssetTag;
+ EFI_PROCESSOR_PART_NUMBER_DATA ProcessorPartNumber;
+ EFI_PROCESSOR_HEALTH_STATUS ProcessorHealthStatus;
+ EFI_PROCESSOR_PACKAGE_NUMBER_DATA ProcessorPackageNumber;
+ EFI_PROCESSOR_CORE_COUNT_DATA ProcessorCoreCount;
+ EFI_PROCESSOR_ENABLED_CORE_COUNT_DATA ProcessorEnabledCoreCount;
+ EFI_PROCESSOR_THREAD_COUNT_DATA ProcessorThreadCount;
+ EFI_PROCESSOR_CHARACTERISTICS_DATA ProcessorCharacteristics;
+ EFI_PROCESSOR_FAMILY2_DATA ProcessorFamily2;
+ EFI_PROCESSOR_SOCKET_DATA ProcessorSocket;
+} EFI_CPU_VARIABLE_RECORD;
+
+typedef struct {
+ EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;
+ EFI_CPU_VARIABLE_RECORD VariableRecord;
+} EFI_CPU_DATA_RECORD;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/DxeServices/DxeServices.c b/EDK/Foundation/Framework/Guid/DxeServices/DxeServices.c
new file mode 100644
index 0000000..8515e04
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/DxeServices/DxeServices.c
@@ -0,0 +1,27 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DxeServices.c
+
+Abstract:
+
+ GUID used for the DXE Services Table
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION (DxeServices)
+
+EFI_GUID gEfiDxeServicesTableGuid = EFI_DXE_SERVICES_TABLE_GUID;
+
+EFI_GUID_STRING(&gEfiDxeServicesTableGuid, "DXE Services Table", "DXE Services Table GUID in EFI System Table");
diff --git a/EDK/Foundation/Framework/Guid/DxeServices/DxeServices.h b/EDK/Foundation/Framework/Guid/DxeServices/DxeServices.h
new file mode 100644
index 0000000..6869a29
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/DxeServices/DxeServices.h
@@ -0,0 +1,32 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DxeServices.h
+
+Abstract:
+
+ GUID used for the DXE Services Table
+
+--*/
+
+#ifndef _DXE_SERVICES_H_
+#define _DXE_SERVICES_H_
+
+#define EFI_DXE_SERVICES_TABLE_GUID \
+ { \
+ 0x5ad34ba, 0x6f02, 0x4214, 0x95, 0x2e, 0x4d, 0xa0, 0x39, 0x8e, 0x2b, 0xb9 \
+ }
+
+extern EFI_GUID gEfiDxeServicesTableGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.cif b/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.cif
new file mode 100644
index 0000000..51ff345
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.cif
@@ -0,0 +1,39 @@
+<component>
+ name = "EdkFrameworkGuidLib"
+ category = ModulePart
+ LocalRoot = "Edk\Foundation\Framework\Guid\"
+ RefName = "EdkFrameworkGuidLib"
+[files]
+"EdkFrameworkGuidLib.sdl"
+"EdkFrameworkGuidLib.mak"
+"AcpiTableStorage\AcpiTableStorage.h"
+"AcpiTableStorage\AcpiTableStorage.c"
+"Apriori\Apriori.h"
+"Apriori\Apriori.c"
+"DataHubRecords\DataHubRecords.h"
+"DataHubRecords\DataHubRecords.c"
+"DataHubRecords\DataHubSubClass.h"
+"DataHubRecords\DataHubSubClassCache.h"
+"DataHubRecords\DataHubSubClassMemory.h"
+"DataHubRecords\DataHubSubClassMisc.h"
+"DataHubRecords\DataHubSubClassProcessor.h"
+"DxeServices\DxeServices.h"
+"DxeServices\DxeServices.c"
+"FirmwareFileSystem\FirmwareFileSystem.h"
+"FirmwareFileSystem\FirmwareFileSystem.c"
+"Hob\Hob.h"
+"Hob\Hob.c"
+"MemoryAllocationHob\MemoryAllocationHob.h"
+"MemoryAllocationHob\MemoryAllocationHob.c"
+"SmramMemoryReserve\SmramMemoryReserve.h"
+"SmramMemoryReserve\SmramMemoryReserve.c"
+"StatusCodeDataTypeId\StatusCodeDataTypeId.h"
+"StatusCodeDataTypeId\StatusCodeDataTypeId.c"
+"FrameworkDevicePath\FrameworkDevicePath.h"
+"FrameworkDevicePath\FrameworkDevicePath.c"
+"FirmwareFileSystem2\FirmwareFileSystem2.h"
+"FirmwareFileSystem2\FirmwareFileSystem2.c"
+"PeiApriori\PeiApriori.h"
+"PeiApriori\PeiApriori.c"
+"EdkFrameworkGuidLib.inf"
+<endComponent>
diff --git a/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.inf b/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.inf
new file mode 100644
index 0000000..fc6fde6
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.inf
@@ -0,0 +1,64 @@
+#/*++
+#
+# Copyright (c) 2004 - 2006, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+# EdkFrameworkGuidLib.inf
+#
+# Abstract:
+#
+# Component description file.
+#
+#--*/
+
+[defines]
+BASE_NAME= EdkFrameworkGuidLib
+COMPONENT_TYPE= LIBRARY
+
+[includes.common]
+ $(EDK_SOURCE)\Foundation\Framework
+ $(EDK_SOURCE)\Foundation\Efi
+ $(EDK_SOURCE)\Foundation\Include
+ $(EDK_SOURCE)\Foundation\Efi\Include
+ $(EDK_SOURCE)\Foundation\Framework\Include
+ $(EDK_SOURCE)\Foundation\Include\IndustryStandard
+ $(EDK_SOURCE)\Foundation\Core\Dxe
+ $(EDK_SOURCE)\Foundation\Include\Pei
+ $(EDK_SOURCE)\Foundation\Library\Pei\Include
+
+[includes.Nt32]
+ $(EDK_SOURCE)\Foundation\Include\WinNt
+
+[nmake.common]
+C_STD_INCLUDE=
+[sources.common]
+ AcpiTableStorage\AcpiTableStorage.h
+ AcpiTableStorage\AcpiTableStorage.c
+ Apriori\Apriori.h
+ Apriori\Apriori.c
+ DataHubRecords\DataHubRecords.h
+ DataHubRecords\DataHubRecords.c
+ DxeServices\DxeServices.h
+ DxeServices\DxeServices.c
+ FirmwareFileSystem\FirmwareFileSystem.h
+ FirmwareFileSystem\FirmwareFileSystem.c
+ Hob\Hob.h
+ Hob\Hob.c
+ MemoryAllocationHob\MemoryAllocationHob.c
+ MemoryAllocationHob\MemoryAllocationHob.h
+ SmramMemoryReserve\SmramMemoryReserve.h
+ SmramMemoryReserve\SmramMemoryReserve.c
+ StatusCodeDataTypeId\StatusCodeDataTypeId.h
+ StatusCodeDataTypeId\StatusCodeDataTypeId.c
+ FrameworkDevicePath\FrameworkDevicePath.h
+ FrameworkDevicePath\FrameworkDevicePath.c
+ FirmwareFileSystem2\FirmwareFileSystem2.h
+ FirmwareFileSystem2\FirmwareFileSystem2.c
diff --git a/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.mak b/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.mak
new file mode 100644
index 0000000..ce0dbdb
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.mak
@@ -0,0 +1,73 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+
+#**********************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/EdkFrameworkGuidLib/EdkFrameworkGuidLib.mak 1 1/20/12 4:02a Jeffch $
+#
+# $Revision: 1 $
+#
+# $Date: 1/20/12 4:02a $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/EdkFrameworkGuidLib/EdkFrameworkGuidLib.mak $
+#
+# 1 1/20/12 4:02a Jeffch
+# Create Intel EDK 1117 Patch 7.
+#
+# 1 9/27/11 6:25a Wesleychen
+# Intel EDK initially releases.
+#
+# 2 9/02/09 3:17a Iminglin
+# EIP24919
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: EdkFrameworkGuidLib.mak
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+
+$(EDKFRAMEWORKGUIDLIB) : EdkFrameworkGuidLib
+
+EdkFrameworkGuidLib : $(BUILD_DIR)\EdkFrameworkGuidLib.mak EdkFrameworkGuidLibBin
+
+$(BUILD_DIR)\EdkFrameworkGuidLib.mak : $(EdkFrameworkGuidLib_DIR)\$(@B).cif $(EdkFrameworkGuidLib_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(EdkFrameworkGuidLib_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+EdkFrameworkGuidLibBin :
+ $(MAKE) /$(MAKEFLAGS) $(EDK_DEFAULTS)\
+ /f $(BUILD_DIR)\EdkFrameworkGuidLib.mak all\
+ TYPE=LIBRARY
+!IF "$(x64_BUILD)"=="1"
+ $(MAKE) /$(MAKEFLAGS) $(EDK_DEFAULTS) BUILD_DIR=$(BUILD_DIR)\IA32\
+ /f $(BUILD_DIR)\EdkFrameworkGuidLib.mak all\
+ TYPE=PEI_LIBRARY
+!ENDIF
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#********************************************************************** \ No newline at end of file
diff --git a/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.sdl b/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.sdl
new file mode 100644
index 0000000..b5a4fc3
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/EdkFrameworkGuidLib.sdl
@@ -0,0 +1,26 @@
+TOKEN
+ Name = "EdkFrameworkGuidLib_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable EdkFrameworkGuidLib support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "EDKFRAMEWORKGUIDLIB"
+ Value = "$$(LIB_BUILD_DIR)\EdkFrameworkGuidLib.lib"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+PATH
+ Name = "EdkFrameworkGuidLib_DIR"
+End
+
+MODULE
+ Help = "Includes EdkFrameworkGuidLib.mak to Project"
+ File = "EdkFrameworkGuidLib.mak"
+End
+
diff --git a/EDK/Foundation/Framework/Guid/FirmwareFileSystem/FirmwareFileSystem.c b/EDK/Foundation/Framework/Guid/FirmwareFileSystem/FirmwareFileSystem.c
new file mode 100644
index 0000000..147d8a0
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/FirmwareFileSystem/FirmwareFileSystem.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareFileSystem.c
+
+Abstract:
+
+ Tiano Guid used to define the Firmware File System. See the EFI Firmware
+ File System Specification for more details.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION (FirmwareFileSystem)
+
+EFI_GUID gEfiFirmwareFileSystemGuid = EFI_FIRMWARE_FILE_SYSTEM_GUID;
+EFI_GUID gEfiFirmwareVolumeTopFileGuid = EFI_FFS_VOLUME_TOP_FILE_GUID;
+
+EFI_GUID_STRING(&gEfiFirmwareFileSystemGuid, "Firmware File System GUID", "EFI Firmware File System GUID");
+EFI_GUID_STRING(&gEfiFirmwareVolumeTopFileGuid, "Firmware Volume Top File GUID", "EFI FFS Volume Top File GUID");
diff --git a/EDK/Foundation/Framework/Guid/FirmwareFileSystem/FirmwareFileSystem.h b/EDK/Foundation/Framework/Guid/FirmwareFileSystem/FirmwareFileSystem.h
new file mode 100644
index 0000000..ba2b34a
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/FirmwareFileSystem/FirmwareFileSystem.h
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareFileSystem.h
+
+Abstract:
+
+ Tiano Guid used to define the Firmware File System. See the EFI Firmware
+ File System Specification for more details.
+
+--*/
+
+#ifndef _FIRMWARE_FILE_SYSTEM_GUID_H
+#define _FIRMWARE_FILE_SYSTEM_GUID_H
+
+//
+// GUID definitions are in EfiFirmwareFileSystem.h
+//
+#include "EfiFirmwareFileSystem.h"
+
+extern EFI_GUID gEfiFirmwareFileSystemGuid;
+extern EFI_GUID gEfiFirmwareVolumeTopFileGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/FirmwareFileSystem2/FirmwareFileSystem2.c b/EDK/Foundation/Framework/Guid/FirmwareFileSystem2/FirmwareFileSystem2.c
new file mode 100644
index 0000000..39a17c9
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/FirmwareFileSystem2/FirmwareFileSystem2.c
@@ -0,0 +1,27 @@
+/*++
+
+Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareFileSystem2.c
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION(FirmwareFileSystem2)
+
+EFI_GUID gEfiFirmwareFileSystem2Guid = EFI_FIRMWARE_FILE_SYSTEM2_GUID;
+EFI_GUID_STRING(&gEfiFirmwareFileSystem2Guid, "FirmwareFileSystem2", "Efi FirmwareFileSystem2")
+
diff --git a/EDK/Foundation/Framework/Guid/FirmwareFileSystem2/FirmwareFileSystem2.h b/EDK/Foundation/Framework/Guid/FirmwareFileSystem2/FirmwareFileSystem2.h
new file mode 100644
index 0000000..ccc566f
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/FirmwareFileSystem2/FirmwareFileSystem2.h
@@ -0,0 +1,33 @@
+/*++
+
+Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareFileSystem2.h
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#ifndef __FIRMWARE_FILE_SYSTEM2_GUID_H__
+#define __FIRMWARE_FILE_SYSTEM2_GUID_H__
+
+//
+// GUIDs defined by the FFS specification.
+//
+#define EFI_FIRMWARE_FILE_SYSTEM2_GUID \
+ { 0x8c8ce578, 0x8a3d, 0x4f1c, { 0x99, 0x35, 0x89, 0x61, 0x85, 0xc3, 0x2d, 0xd3 } }
+
+extern EFI_GUID gEfiFirmwareFileSystem2Guid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/FrameworkDevicePath/FrameworkDevicePath.c b/EDK/Foundation/Framework/Guid/FrameworkDevicePath/FrameworkDevicePath.c
new file mode 100644
index 0000000..750e7a2
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/FrameworkDevicePath/FrameworkDevicePath.c
@@ -0,0 +1,27 @@
+/*++
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FrameworkDevicePath.c
+
+Abstract:
+
+ GUID used for
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION (FrameworkDevicePath)
+
+EFI_GUID gEfiFrameworkDevicePathGuid = EFI_FRAMEWORK_DEVICE_PATH_GUID;
+
+EFI_GUID_STRING(&gEfiFrameworkDevicePathGuid, "Framework Devic Path", "Framework Device Path GUID");
diff --git a/EDK/Foundation/Framework/Guid/FrameworkDevicePath/FrameworkDevicePath.h b/EDK/Foundation/Framework/Guid/FrameworkDevicePath/FrameworkDevicePath.h
new file mode 100644
index 0000000..ecd25eb
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/FrameworkDevicePath/FrameworkDevicePath.h
@@ -0,0 +1,29 @@
+/*++
+ This GUID is used to define a vendor specific device path being owned by the
+ Framework specificaitons.
+
+ Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ Module Name: FrameworkDevicePath.h
+
+ @par Revision Reference:
+ Spec Version 0.9
+
+--*/
+
+#ifndef __FRAMEWORK_DEVICE_PATH_GUID_H__
+#define __FRAMEWORK_DEVICE_PATH_GUID_H__
+
+#define EFI_FRAMEWORK_DEVICE_PATH_GUID \
+ { 0xb7084e63, 0x46b7, 0x4d1a, { 0x86, 0x77, 0xe3, 0x0b, 0x53, 0xdb, 0xf0, 0x50 } }
+
+extern EFI_GUID gEfiFrameworkDevicePathGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/Hob/Hob.c b/EDK/Foundation/Framework/Guid/Hob/Hob.c
new file mode 100644
index 0000000..10dd0bd
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/Hob/Hob.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Hob.c
+
+Abstract:
+
+ GUIDs used for HOB List in the EFI 1.0 system table
+
+ These GUIDs point the HOB List passed in from PEI to DXE.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION (Hob)
+
+EFI_GUID gEfiHobListGuid = EFI_HOB_LIST_GUID;
+
+EFI_GUID_STRING(&gEfiHobListGuid, "HOB List", "HOB List GUID in EFI System Table");
diff --git a/EDK/Foundation/Framework/Guid/Hob/Hob.h b/EDK/Foundation/Framework/Guid/Hob/Hob.h
new file mode 100644
index 0000000..a7771fe
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/Hob/Hob.h
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Hob.h
+
+Abstract:
+
+ GUIDs used for HOB List entries in the in the EFI 1.0 system table
+
+ These GUIDs point the HOB List passed from PEI to DXE.
+
+--*/
+
+#ifndef _HOB_GUID_H_
+#define _HOB_GUID_H_
+
+#define EFI_HOB_LIST_GUID \
+ { \
+ 0x7739f24c, 0x93d7, 0x11d4, 0x9a, 0x3a, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d \
+ }
+
+extern EFI_GUID gEfiHobListGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/MemoryAllocationHob/MemoryAllocationHob.c b/EDK/Foundation/Framework/Guid/MemoryAllocationHob/MemoryAllocationHob.c
new file mode 100644
index 0000000..84ef72e
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/MemoryAllocationHob/MemoryAllocationHob.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ MemoryAllocationHob.c
+
+Abstract:
+
+ GUIDs for HOBs used in memory allcation
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION(MemoryAllocationHob)
+
+EFI_GUID gEfiHobMemeryAllocBspStoreGuid = EFI_HOB_MEMORY_ALLOC_BSP_STORE_GUID;
+EFI_GUID gEfiHobMemeryAllocStackGuid = EFI_HOB_MEMORY_ALLOC_STACK_GUID;
+EFI_GUID gEfiHobMemeryAllocModuleGuid = EFI_HOB_MEMORY_ALLOC_MODULE_GUID;
+
+EFI_GUID_STRING(&gEfiHobMemeryAllocBspStoreGuid, "BSP Store HOB", "HOB for BSP Store Memory Allocation");
+EFI_GUID_STRING(&gEfiHobMemeryAllocStackGuid, "Stack HOB", "HOB for Stack Memory Allocation");
+EFI_GUID_STRING(&gEfiHobMemeryAllocModuleGuid, "Memry Allocation Module HOB", "HOB for Memory Allocation Module");
diff --git a/EDK/Foundation/Framework/Guid/MemoryAllocationHob/MemoryAllocationHob.h b/EDK/Foundation/Framework/Guid/MemoryAllocationHob/MemoryAllocationHob.h
new file mode 100644
index 0000000..827e772
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/MemoryAllocationHob/MemoryAllocationHob.h
@@ -0,0 +1,38 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ MemoryAllocationHob.h
+
+Abstract:
+
+ GUIDs for HOBs used in memory allcation
+
+--*/
+
+#ifndef _HOB__MEMORY_ALLOCATION_GUID_H_
+#define _HOB__MEMORY_ALLOCATION_GUID_H_
+
+#define EFI_HOB_MEMORY_ALLOC_BSP_STORE_GUID \
+ {0x564b33cd, 0xc92a, 0x4593, 0x90, 0xbf, 0x24, 0x73, 0xe4, 0x3c, 0x63, 0x22};
+
+#define EFI_HOB_MEMORY_ALLOC_STACK_GUID \
+ {0x4ed4bf27, 0x4092, 0x42e9, 0x80, 0x7d, 0x52, 0x7b, 0x1d, 0x0, 0xc9, 0xbd}
+
+#define EFI_HOB_MEMORY_ALLOC_MODULE_GUID \
+ {0xf8e21975, 0x899, 0x4f58, 0xa4, 0xbe, 0x55, 0x25, 0xa9, 0xc6, 0xd7, 0x7a}
+
+extern EFI_GUID gEfiHobMemeryAllocBspStoreGuid;
+extern EFI_GUID gEfiHobMemeryAllocStackGuid;
+extern EFI_GUID gEfiHobMemeryAllocModuleGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/PeiApriori/PeiApriori.c b/EDK/Foundation/Framework/Guid/PeiApriori/PeiApriori.c
new file mode 100644
index 0000000..bab1606
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/PeiApriori/PeiApriori.c
@@ -0,0 +1,26 @@
+/*++
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PeiApriori.c
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION(PeiApriori)
+
+EFI_GUID gEfiPeiAprioriGuid = EFI_PEI_APRIORI_FILE_NAME_GUID;
+EFI_GUID_STRING(&gEfiPeiAprioriGuid, "PeiApriori", "Efi PeiApriori")
diff --git a/EDK/Foundation/Framework/Guid/PeiApriori/PeiApriori.h b/EDK/Foundation/Framework/Guid/PeiApriori/PeiApriori.h
new file mode 100644
index 0000000..12a611b
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/PeiApriori/PeiApriori.h
@@ -0,0 +1,36 @@
+/*++
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PeiApriori.h
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#ifndef __PEI_APRIORI_GUID_H__
+#define __PEI_APRIORI_GUID_H__
+
+#include "Tiano.h"
+
+//
+// GUIDs defined by the FFS specification.
+//
+#define EFI_PEI_APRIORI_FILE_NAME_GUID \
+ { 0x1b45cc0a, 0x156a, 0x428a, 0xaf, 0x62, 0x49, 0x86, 0x4d, 0xa0, 0xe6, 0xe6}
+
+
+extern EFI_GUID gEfiPeiAprioriGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/SmramMemoryReserve/SmramMemoryReserve.c b/EDK/Foundation/Framework/Guid/SmramMemoryReserve/SmramMemoryReserve.c
new file mode 100644
index 0000000..221b1a8
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/SmramMemoryReserve/SmramMemoryReserve.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmramMemoryReserve.c
+
+Abstract:
+
+ GUID for use in reserving SMRAM regions.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION(SmramMemoryReserve)
+
+EFI_GUID gEfiSmmPeiSmramMemoryReserve = EFI_SMM_PEI_SMRAM_MEMORY_RESERVE;
+
+EFI_GUID_STRING(&gEfiSmmPeiSmramMemoryReserve, "SMRAM Memory Reserve", "SMRAM Memory Reserve");
diff --git a/EDK/Foundation/Framework/Guid/SmramMemoryReserve/SmramMemoryReserve.h b/EDK/Foundation/Framework/Guid/SmramMemoryReserve/SmramMemoryReserve.h
new file mode 100644
index 0000000..ff3351b
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/SmramMemoryReserve/SmramMemoryReserve.h
@@ -0,0 +1,70 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmramMemoryReserve.h
+
+Abstract:
+
+ GUID for use in reserving SMRAM regions.
+
+--*/
+
+#ifndef _EFI_SMM_PEI_SMRAM_MEMORY_RESERVE_H_
+#define _EFI_SMM_PEI_SMRAM_MEMORY_RESERVE_H_
+
+#define EFI_SMM_PEI_SMRAM_MEMORY_RESERVE \
+ { \
+ 0x6dadf1d1, 0xd4cc, 0x4910, 0xbb, 0x6e, 0x82, 0xb1, 0xfd, 0x80, 0xff, 0x3d \
+ }
+
+//
+// *******************************************************
+// EFI_SMRAM_DESCRIPTOR
+// *******************************************************
+//
+typedef struct {
+ EFI_PHYSICAL_ADDRESS PhysicalStart; // Phsyical location in DRAM
+ EFI_PHYSICAL_ADDRESS CpuStart; // Address CPU uses to access the SMI handler
+ // May or may not match PhysicalStart
+ //
+ UINT64 PhysicalSize;
+ UINT64 RegionState;
+} EFI_SMRAM_DESCRIPTOR;
+
+//
+// *******************************************************
+// EFI_SMRAM_STATE
+// *******************************************************
+//
+#define EFI_SMRAM_OPEN 0x00000001
+#define EFI_SMRAM_CLOSED 0x00000002
+#define EFI_SMRAM_LOCKED 0x00000004
+#define EFI_CACHEABLE 0x00000008
+#define EFI_ALLOCATED 0x00000010
+#define EFI_NEEDS_TESTING 0x00000020
+#define EFI_NEEDS_ECC_INITIALIZATION 0x00000040
+
+//
+// *******************************************************
+// EFI_SMRAM_HOB_DESCRIPTOR_BLOCK
+// *******************************************************
+//
+typedef struct {
+ UINT32 NumberOfSmmReservedRegions;
+ EFI_SMRAM_DESCRIPTOR Descriptor[1];
+} EFI_SMRAM_HOB_DESCRIPTOR_BLOCK;
+
+extern EFI_GUID gEfiSmmPeiSmramMemoryReserve;
+
+#endif
diff --git a/EDK/Foundation/Framework/Guid/StatusCodeDataTypeId/StatusCodeDataTypeId.c b/EDK/Foundation/Framework/Guid/StatusCodeDataTypeId/StatusCodeDataTypeId.c
new file mode 100644
index 0000000..a5f102a
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/StatusCodeDataTypeId/StatusCodeDataTypeId.c
@@ -0,0 +1,47 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ StatusCodeDataTypeId.c
+
+Abstract:
+
+ GUID used to identify id for the caller who is initiating the Status Code.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_GUID_DEFINITION (StatusCodeDataTypeId)
+
+//
+// Taken out from StatusCode.C created by PRC
+//
+EFI_GUID gEfiStatusCodeDataTypeStringGuid = EFI_STATUS_CODE_DATA_TYPE_STRING_GUID;
+EFI_GUID gEfiStatusCodeDataTypeDebugGuid = EFI_STATUS_CODE_DATA_TYPE_DEBUG_GUID;
+EFI_GUID gEfiStatusCodeDataTypeAssertGuid = EFI_STATUS_CODE_DATA_TYPE_ASSERT_GUID;
+EFI_GUID gEfiStatusCodeDataTypeExceptionHandlerGuid = EFI_STATUS_CODE_DATA_TYPE_EXCEPTION_HANDLER_GUID;
+EFI_GUID gEfiStatusCodeDataTypeErrorGuid = EFI_STATUS_CODE_DATA_TYPE_ERROR_GUID;
+EFI_GUID gEfiStatusCodeDataTypeProgressCodeGuid = EFI_STATUS_CODE_DATA_TYPE_PROGRESS_CODE_GUID;
+
+EFI_GUID gEfiStatusCodeSpecificDataGuid = EFI_STATUS_CODE_SPECIFIC_DATA_GUID;
+
+EFI_GUID_STRING(&gEfiStatusCodeDataTypeStringGuid, "Status Code", "Data Hub record Data type String");
+EFI_GUID_STRING(&gEfiStatusCodeSpecificDataGuid, "Status Code", "Data Hub record Data type specific ");
+EFI_GUID_STRING(&gEfiStatusCodeDataTypeDebugGuid, "Status Code", "Data Hub record data type Debug");
+EFI_GUID_STRING(&gEfiStatusCodeDataTypeAssertGuid, "Status Code", "Data Hub record data type Assert");
+EFI_GUID_STRING(&gEfiStatusCodeDataTypeErrorGuid, "Status Code", "Data Hub record data type Error");
+EFI_GUID_STRING(&gEfiStatusCodeDataTypeProgressCodeGuid, "Status Code", "Data Hub record data type Progress Code");
+EFI_GUID_STRING
+ (&gEfiStatusCodeDataTypeExceptionHandlerGuid, "Status Code", "Data Hub record Data type Exception handler");
+
+EFI_GUID_STRING
+ (&gEfiStatusCodeSpecificDataGuid, "Status Code Specific Data", "Specific Data for Tiano ReportStatusCode API");
diff --git a/EDK/Foundation/Framework/Guid/StatusCodeDataTypeId/StatusCodeDataTypeId.h b/EDK/Foundation/Framework/Guid/StatusCodeDataTypeId/StatusCodeDataTypeId.h
new file mode 100644
index 0000000..f0afce7
--- /dev/null
+++ b/EDK/Foundation/Framework/Guid/StatusCodeDataTypeId/StatusCodeDataTypeId.h
@@ -0,0 +1,389 @@
+/*++
+
+Copyright (c) 2004 - 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ StatusCodeDataTypeId.h
+
+Abstract:
+
+ GUID used to identify id for the caller who is initiating the Status Code.
+
+--*/
+
+#ifndef _STATUS_CODE_DATA_TYPE_ID_H__
+#define _STATUS_CODE_DATA_TYPE_ID_H__
+
+
+#include "EfiStatusCode.h"
+#include EFI_PROTOCOL_DEFINITION (DebugSupport)
+#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
+#include EFI_PROTOCOL_DEFINITION (HiiDatabase)
+#else
+#include EFI_PROTOCOL_DEFINITION (Hii)
+#endif
+//
+// The size of string
+//
+#define EFI_STATUS_CODE_DATA_MAX_STRING_SIZE 150
+
+//
+// This is the max data size including all the headers which can be passed
+// as Status Code data. This data should be multiple of 8 byte
+// to avoid any kind of boundary issue. Also, sum of this data size (inclusive
+// of size of EFI_STATUS_CODE_DATA should not exceed the max record size of
+// data hub
+//
+#define EFI_STATUS_CODE_DATA_MAX_SIZE 400
+
+//
+// String Data Type defintion. This is part of Status Code Specification
+//
+#define EFI_STATUS_CODE_DATA_TYPE_STRING_GUID \
+ { \
+ 0x92D11080, 0x496F, 0x4D95, 0xBE, 0x7E, 0x03, 0x74, 0x88, 0x38, 0x2B, 0x0A \
+ }
+
+extern EFI_GUID gEfiStatusCodeDataTypeStringGuid;
+
+//
+// This GUID indicates that the format of the accompanying data depends
+// upon the Status Code Value, but follows this Specification
+//
+#define EFI_STATUS_CODE_SPECIFIC_DATA_GUID \
+ { \
+ 0x335984bd, 0xe805, 0x409a, 0xb8, 0xf8, 0xd2, 0x7e, 0xce, 0x5f, 0xf7, 0xa6 \
+ }
+
+extern EFI_GUID gEfiStatusCodeSpecificDataGuid;
+
+#pragma pack(1)
+
+typedef enum {
+ EfiStringAscii,
+ EfiStringUnicode,
+ EfiStringToken
+} EFI_STRING_TYPE;
+
+//
+// HII string token
+//
+typedef struct {
+EFI_HII_HANDLE Handle;
+STRING_REF Token;
+} EFI_STATUS_CODE_STRING_TOKEN;
+
+typedef union {
+CHAR8 *Ascii;
+CHAR16 *Unicode;
+EFI_STATUS_CODE_STRING_TOKEN Hii;
+} EFI_STATUS_CODE_STRING;
+
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_STRING_TYPE StringType;
+ EFI_STATUS_CODE_STRING String;
+} EFI_STATUS_CODE_STRING_DATA;
+
+#pragma pack()
+//
+// Debug Assert Data. This is part of Status Code Specification
+//
+#define EFI_STATUS_CODE_DATA_TYPE_ASSERT_GUID \
+ { \
+ 0xDA571595, 0x4D99, 0x487C, 0x82, 0x7C, 0x26, 0x22, 0x67, 0x7D, 0x33, 0x07 \
+ }
+
+extern EFI_GUID gEfiStatusCodeDataTypeAssertGuid;
+
+//
+// Exception Data type (CPU REGS)
+//
+#define EFI_STATUS_CODE_DATA_TYPE_EXCEPTION_HANDLER_GUID \
+ { \
+ 0x3BC2BD12, 0xAD2E, 0x11D5, 0x87, 0xDD, 0x00, 0x06, 0x29, 0x45, 0xC3, 0xB9 \
+ }
+
+extern EFI_GUID gEfiStatusCodeDataTypeExceptionHandlerGuid;
+
+//
+// Debug DataType defintions. User Defined Data Types.
+//
+#define EFI_STATUS_CODE_DATA_TYPE_DEBUG_GUID \
+ { \
+ 0x9A4E9246, 0xD553, 0x11D5, 0x87, 0xE2, 0x00, 0x06, 0x29, 0x45, 0xC3, 0xb9 \
+ }
+
+#pragma pack(1)
+
+typedef struct {
+ UINT32 ErrorLevel;
+ //
+ // 12 * sizeof (UINT64) Var Arg stack
+ //
+ // ascii DEBUG () Format string
+ //
+} EFI_DEBUG_INFO;
+
+#pragma pack()
+
+extern EFI_GUID gEfiStatusCodeDataTypeDebugGuid;
+
+//
+// Progress Code. User Defined Data Type Guid.
+//
+#define EFI_STATUS_CODE_DATA_TYPE_ERROR_GUID \
+ { \
+ 0xAB359CE3, 0x99B3, 0xAE18, 0xC8, 0x9D, 0x95, 0xD3, 0xB0, 0x72, 0xE1, 0x9B \
+ }
+
+extern EFI_GUID gEfiStatusCodeDataTypeErrorGuid;
+
+//
+// declaration for EFI_EXP_DATA. This may change
+//
+typedef UINTN EFI_EXP_DATA;
+
+//
+// Voltage Extended Error Data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_EXP_DATA Voltage;
+ EFI_EXP_DATA Threshold;
+} EFI_COMPUTING_UNIT_VOLTAGE_ERROR_DATA;
+
+//
+// Microcode Update Extended Error Data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ UINT32 Version;
+} EFI_COMPUTING_UNIT_MICROCODE_UPDATE_ERROR_DATA;
+
+//
+// Asynchronous Timer Extended Error Data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_EXP_DATA TimerLimit;
+} EFI_COMPUTING_UNIT_TIMER_EXPIRED_ERROR_DATA;
+
+//
+// Host Processor Mismatch Extended Error Data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ UINT32 Instance;
+ UINT16 Attributes;
+} EFI_HOST_PROCESSOR_MISMATCH_ERROR_DATA;
+
+//
+// EFI_COMPUTING_UNIT_MISMATCH_ATTRIBUTES
+// All other attributes are reserved for future use and
+// must be initialized to 0.
+//
+#define EFI_COMPUTING_UNIT_MISMATCH_SPEED 0x0001
+#define EFI_COMPUTING_UNIT_MISMATCH_FSB_SPEED 0x0002
+#define EFI_COMPUTING_UNIT_MISMATCH_FAMILY 0x0004
+#define EFI_COMPUTING_UNIT_MISMATCH_MODEL 0x0008
+#define EFI_COMPUTING_UNIT_MISMATCH_STEPPING 0x0010
+#define EFI_COMPUTING_UNIT_MISMATCH_CACHE_SIZE 0x0020
+#define EFI_COMPUTING_UNIT_MISMATCH_OEM1 0x1000
+#define EFI_COMPUTING_UNIT_MISMATCH_OEM2 0x2000
+#define EFI_COMPUTING_UNIT_MISMATCH_OEM3 0x4000
+#define EFI_COMPUTING_UNIT_MISMATCH_OEM4 0x8000
+
+//
+// Thermal Extended Error Data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_EXP_DATA Temperature;
+ EFI_EXP_DATA Threshold;
+} EFI_COMPUTING_UNIT_THERMAL_ERROR_DATA;
+
+//
+// Processor Disabled Extended Error Data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ UINT32 Cause;
+ BOOLEAN SoftwareDisabled;
+} EFI_COMPUTING_UNIT_CPU_DISABLED_ERROR_DATA;
+
+typedef enum {
+ EfiInitCacheDataOnly,
+ EfiInitCacheInstrOnly,
+ EfiInitCacheBoth,
+ EfiInitCacheUnspecified
+} EFI_INIT_CACHE_TYPE;
+
+//
+// Embedded cache init extended data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ UINT32 Level;
+ EFI_INIT_CACHE_TYPE Type;
+} EFI_CACHE_INIT_DATA;
+
+//
+// Memory Extended Error Data
+//
+//
+// Memory Error Granularity Definition
+//
+typedef UINT8 EFI_MEMORY_ERROR_GRANULARITY;
+
+//
+// Memory Error Operation Definition
+//
+typedef UINT8 EFI_MEMORY_ERROR_OPERATION;
+
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_MEMORY_ERROR_GRANULARITY Granularity;
+ EFI_MEMORY_ERROR_OPERATION Operation;
+ UINTN Syndrome;
+ EFI_PHYSICAL_ADDRESS Address;
+ UINTN Resolution;
+} EFI_MEMORY_EXTENDED_ERROR_DATA;
+
+//
+// Memory Error Granularities
+//
+#define EFI_MEMORY_ERROR_OTHER 0x01
+#define EFI_MEMORY_ERROR_UNKNOWN 0x02
+#define EFI_MEMORY_ERROR_DEVICE 0x03
+#define EFI_MEMORY_ERROR_PARTITION 0x04
+
+//
+// Memory Error Operations
+//
+#define EFI_MEMORY_OPERATION_OTHER 0x01
+#define EFI_MEMORY_OPERATION_UNKNOWN 0x02
+#define EFI_MEMORY_OPERATION_READ 0x03
+#define EFI_MEMORY_OPERATION_WRITE 0x04
+#define EFI_MEMORY_OPERATION_PARTIAL_WRITE 0x05
+
+//
+// Define shorthands to describe Group Operations
+// Many memory init operations are essentially group
+// operations.
+// A shorthand to describe that the operation is performed
+// on multiple devices within the array
+//
+#define EFI_MULTIPLE_MEMORY_DEVICE_OPERATION 0xfffe
+//
+// A shorthand to describe that the operation is performed // on all devices within the array
+//
+#define EFI_ALL_MEMORY_DEVICE_OPERATION 0xffff
+//
+// A shorthand to describe that the operation is performed // on multiple arrays
+//
+#define EFI_MULTIPLE_MEMORY_ARRAY_OPERATION 0xfffe
+//
+// A shorthand to describe that the operation is performed // on all the arrays
+//
+#define EFI_ALL_MEMORY_ARRAY_OPERATION 0xffff
+
+//
+// DIMM number
+//
+#pragma pack(1)
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ UINT16 Array;
+ UINT16 Device;
+} EFI_STATUS_CODE_DIMM_NUMBER;
+#pragma pack()
+//
+// Memory Module Mismatch Extended Error Data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_STATUS_CODE_DIMM_NUMBER Instance;
+} EFI_MEMORY_MODULE_MISMATCH_ERROR_DATA;
+
+//
+// Memory Range Extended Data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_PHYSICAL_ADDRESS Start;
+ EFI_PHYSICAL_ADDRESS Length;
+} EFI_MEMORY_RANGE_EXTENDED_DATA;
+
+//
+// Device handle Extended Data. Used for many
+// errors and progress codes to point to the device.
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_HANDLE Handle;
+} EFI_DEVICE_HANDLE_EXTENDED_DATA;
+
+//
+// Resource Allocation Failure Extended Error Data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;
+ UINT32 Bar;
+ VOID *ReqRes;
+ VOID *AllocRes;
+} EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA;
+
+//
+// Extended Error Data for Assert
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ UINT32 LineNumber;
+ UINT32 FileNameSize;
+ EFI_STATUS_CODE_STRING_DATA *FileName;
+} EFI_DEBUG_ASSERT_DATA;
+
+//
+// System Context Data EBC/IA32/IPF
+//
+typedef union {
+ EFI_SYSTEM_CONTEXT_EBC SystemContextEbc;
+ EFI_SYSTEM_CONTEXT_IA32 SystemContextIa32;
+ EFI_SYSTEM_CONTEXT_IPF SystemContextIpf;
+} EFI_STATUS_CODE_EXCEP_SYSTEM_CONTEXT;
+
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_STATUS_CODE_EXCEP_SYSTEM_CONTEXT Context;
+} EFI_STATUS_CODE_EXCEP_EXTENDED_DATA;
+
+//
+// Legacy Oprom extended data
+//
+typedef struct {
+ EFI_STATUS_CODE_DATA DataHeader;
+ EFI_HANDLE DeviceHandle;
+ EFI_PHYSICAL_ADDRESS RomImageBase;
+} EFI_LEGACY_OPROM_EXTENDED_DATA;
+
+//
+// Progress Code. User Defined Data Type Guid.
+//
+#define EFI_STATUS_CODE_DATA_TYPE_PROGRESS_CODE_GUID \
+ { \
+ 0xA356AB39, 0x35C4, 0x35DA, 0xB3, 0x7A, 0xF8, 0xEA, 0x9E, 0x8B, 0x36, 0xA3 \
+ }
+
+extern EFI_GUID gEfiStatusCodeDataTypeProgressCodeGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/BootMode.h b/EDK/Foundation/Framework/Include/BootMode.h
new file mode 100644
index 0000000..8261641
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/BootMode.h
@@ -0,0 +1,38 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootMode.h
+
+Abstract:
+
+ This includes for the Boot mode information.
+
+--*/
+
+#ifndef _EFI_BOOT_MODE_H
+#define _EFI_BOOT_MODE_H
+
+#define BOOT_WITH_FULL_CONFIGURATION 0x00
+#define BOOT_WITH_MINIMAL_CONFIGURATION 0x01
+#define BOOT_ASSUMING_NO_CONFIGURATION_CHANGES 0x02
+#define BOOT_WITH_FULL_CONFIGURATION_PLUS_DIAGNOSTICS 0x03
+#define BOOT_WITH_DEFAULT_SETTINGS 0x04
+#define BOOT_ON_S4_RESUME 0x05
+#define BOOT_ON_S5_RESUME 0x06
+#define BOOT_ON_S2_RESUME 0x10
+#define BOOT_ON_S3_RESUME 0x11
+#define BOOT_ON_FLASH_UPDATE 0x12
+#define BOOT_IN_RECOVERY_MODE 0x20
+#define BOOT_IN_RECOVERY_MODE_MASK 0x40
+#define BOOT_SPECIAL_MASK 0x80
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiBootScript.h b/EDK/Foundation/Framework/Include/EfiBootScript.h
new file mode 100644
index 0000000..891bc96
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiBootScript.h
@@ -0,0 +1,234 @@
+/*++
+
+Copyright (c) 2004 - 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiBootScript.h
+
+Abstract:
+
+
+
+--*/
+
+#ifndef _EFI_SCRIPT_H_
+#define _EFI_SCRIPT_H_
+
+#include "EfiSmbus.h"
+
+#define EFI_ACPI_S3_RESUME_SCRIPT_TABLE 0x00
+
+//
+// Boot Script Opcode Definitions
+//
+typedef const UINT16 EFI_BOOT_SCRIPT_OPCODE;
+
+#define EFI_BOOT_SCRIPT_IO_WRITE_OPCODE 0x00
+#define EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE 0x01
+#define EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE 0x02
+#define EFI_BOOT_SCRIPT_MEM_READ_WRITE_OPCODE 0x03
+#define EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE 0x04
+#define EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE 0x05
+#define EFI_BOOT_SCRIPT_SMBUS_EXECUTE_OPCODE 0x06
+#define EFI_BOOT_SCRIPT_STALL_OPCODE 0x07
+#define EFI_BOOT_SCRIPT_DISPATCH_OPCODE 0x08
+
+//
+// Extensions to boot script definitions
+//
+
+// AMI_OVERRIDE >>> Support PI1.2
+#if defined(PI_SPECIFICATION_VERSION) && (PI_SPECIFICATION_VERSION>=0x0001000A)
+#define EFI_BOOT_SCRIPT_MEM_POLL_OPCODE 0x0E
+#else
+#define EFI_BOOT_SCRIPT_MEM_POLL_OPCODE 0x81 // AMI MEM_POLL_OPCODE_OEM
+#endif
+// AMI_OVERRIDE <<<
+
+#define EFI_BOOT_SCRIPT_INFORMATION_OPCODE 0x0A
+#define EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE_OPCODE 0x0B
+#define EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE_OPCODE 0x0C
+
+#define EFI_BOOT_SCRIPT_TABLE_OPCODE 0xAA
+#define EFI_BOOT_SCRIPT_TERMINATE_OPCODE 0xFF
+
+#pragma pack(1)
+
+//
+// EFI Boot Script Width
+//
+typedef enum {
+ EfiBootScriptWidthUint8,
+ EfiBootScriptWidthUint16,
+ EfiBootScriptWidthUint32,
+ EfiBootScriptWidthUint64,
+ EfiBootScriptWidthFifoUint8,
+ EfiBootScriptWidthFifoUint16,
+ EfiBootScriptWidthFifoUint32,
+ EfiBootScriptWidthFifoUint64,
+ EfiBootScriptWidthFillUint8,
+ EfiBootScriptWidthFillUint16,
+ EfiBootScriptWidthFillUint32,
+ EfiBootScriptWidthFillUint64,
+ EfiBootScriptWidthMaximum
+} EFI_BOOT_SCRIPT_WIDTH;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+} EFI_BOOT_SCRIPT_GENERIC_HEADER;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT16 Version;
+ UINT32 TableLength;
+ UINT16 Reserved[2];
+} EFI_BOOT_SCRIPT_TABLE_HEADER;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+} EFI_BOOT_SCRIPT_COMMON_HEADER;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+ UINT32 Count;
+ UINT64 Address;
+} EFI_BOOT_SCRIPT_IO_WRITE;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+ UINT64 Address;
+} EFI_BOOT_SCRIPT_IO_READ_WRITE;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+ UINT32 Count;
+ UINT64 Address;
+} EFI_BOOT_SCRIPT_MEM_WRITE;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+ UINT64 Address;
+} EFI_BOOT_SCRIPT_MEM_READ_WRITE;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+ UINT32 Count;
+ UINT64 Address;
+} EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+ UINT32 Count;
+ UINT64 Address;
+ UINT16 Segment;
+} EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+ UINT64 Address;
+} EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+ UINT64 Address;
+ UINT16 Segment;
+} EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE;
+
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT64 SlaveAddress;
+ UINT64 Command;
+ UINT32 Operation;
+ BOOLEAN PecCheck;
+ UINT32 DataSize;
+} EFI_BOOT_SCRIPT_SMBUS_EXECUTE;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT64 Duration;
+} EFI_BOOT_SCRIPT_STALL;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ EFI_PHYSICAL_ADDRESS EntryPoint;
+} EFI_BOOT_SCRIPT_DISPATCH;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 Width;
+ UINT64 Address;
+ UINT64 BitMask;
+ UINT64 BitValue;
+ UINT64 Duration;
+ UINT64 LoopTimes;
+} EFI_BOOT_SCRIPT_MEM_POLL;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+ UINT32 InformationLength;
+ EFI_PHYSICAL_ADDRESS Information;
+} EFI_BOOT_SCRIPT_INFORMATION;
+
+typedef struct {
+ UINT16 OpCode;
+ UINT8 Length;
+} EFI_BOOT_SCRIPT_TERMINATE;
+
+typedef union {
+ EFI_BOOT_SCRIPT_GENERIC_HEADER *Header;
+ EFI_BOOT_SCRIPT_TABLE_HEADER *TableInfo;
+ EFI_BOOT_SCRIPT_IO_WRITE *IoWrite;
+ EFI_BOOT_SCRIPT_IO_READ_WRITE *IoReadWrite;
+ EFI_BOOT_SCRIPT_MEM_WRITE *MemWrite;
+ EFI_BOOT_SCRIPT_MEM_READ_WRITE *MemReadWrite;
+ EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE *PciWrite;
+ EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE *PciReadWrite;
+ EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE *PciWrite2;
+ EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE *PciReadWrite2;
+ EFI_BOOT_SCRIPT_SMBUS_EXECUTE *SmbusExecute;
+ EFI_BOOT_SCRIPT_STALL *Stall;
+ EFI_BOOT_SCRIPT_DISPATCH *Dispatch;
+ EFI_BOOT_SCRIPT_MEM_POLL *MemPoll;
+ EFI_BOOT_SCRIPT_INFORMATION *Information;
+ EFI_BOOT_SCRIPT_TERMINATE *Terminate;
+ EFI_BOOT_SCRIPT_COMMON_HEADER *CommonHeader;
+ UINT8 *Raw;
+} BOOT_SCRIPT_POINTERS;
+
+#pragma pack()
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiCapsule.h b/EDK/Foundation/Framework/Include/EfiCapsule.h
new file mode 100644
index 0000000..6cbadec
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiCapsule.h
@@ -0,0 +1,142 @@
+/*++
+
+Copyright (c) 2004 - 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiCapsule.h
+
+Abstract:
+
+ Defines for the EFI Capsule functionality
+
+--*/
+
+#ifndef _EFI_CAPSULE_H_
+#define _EFI_CAPSULE_H_
+
+
+#define CAPSULE_BLOCK_DESCRIPTOR_SIGNATURE EFI_SIGNATURE_32 ('C', 'B', 'D', 'S')
+
+typedef struct {
+ EFI_GUID OemGuid;
+ UINT32 HeaderSize;
+ //
+ // UINT8 OemHdrData[];
+ //
+} EFI_CAPSULE_OEM_HEADER;
+
+#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
+
+#define MAX_SUPPORT_CAPSULE_NUM 50
+#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000
+#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000
+
+typedef struct {
+ UINT64 Length;
+ union {
+ EFI_PHYSICAL_ADDRESS DataBlock;
+ EFI_PHYSICAL_ADDRESS ContinuationPointer;
+ } Union;
+} EFI_CAPSULE_BLOCK_DESCRIPTOR;
+
+typedef struct {
+ EFI_GUID CapsuleGuid;
+ UINT32 HeaderSize;
+ UINT32 Flags;
+ UINT32 CapsuleImageSize;
+} EFI_CAPSULE_HEADER;
+
+typedef struct {
+ UINT32 CapsuleArrayNumber;
+ VOID* CapsulePtr[1];
+} EFI_CAPSULE_TABLE;
+
+//
+// This struct is deprecated because VendorTable entries physical address will not be fixed up when
+// transitioning from preboot to runtime phase. So we don't need CapsuleInfoTable to record capsule
+// GUIDs any more for runtime convert.
+//
+typedef struct {
+ UINT32 CapsuleGuidNumber;
+ EFI_GUID CapsuleGuidPtr[1];
+} EFI_CAPSULE_INFO_TABLE;
+
+//
+// This GUID is used for collecting all capsules' Guids who install in ConfigTable.
+// This GUID is deprecated as well.
+//
+#define EFI_CAPSULE_INFO_GUID \
+ { \
+ 0x8B34EAC7, 0x2690, 0x460B, 0x8B, 0xA5, 0xD5, 0xCF, 0x32, 0x83, 0x17, 0x35 \
+ }
+
+#else
+
+typedef struct {
+ EFI_GUID CapsuleGuid;
+ UINT32 HeaderSize;
+ UINT32 Flags;
+ UINT32 CapsuleImageSize;
+ UINT32 SequenceNumber;
+ EFI_GUID InstanceId;
+ UINT32 OffsetToSplitInformation;
+ UINT32 OffsetToCapsuleBody;
+ UINT32 OffsetToOemDefinedHeader;
+ UINT32 OffsetToAuthorInformation;
+ UINT32 OffsetToRevisionInformation;
+ UINT32 OffsetToShortDescription;
+ UINT32 OffsetToLongDescription;
+ UINT32 OffsetToApplicableDevices;
+} EFI_CAPSULE_HEADER;
+
+//
+// An array of these describe the blocks that make up a capsule for
+// a capsule update.
+//
+typedef struct {
+ UINT64 Length; // length of the data block
+ EFI_PHYSICAL_ADDRESS Data; // physical address of the data block
+ UINT32 Signature; // CBDS
+ UINT32 CheckSum; // to sum this structure to 0
+} EFI_CAPSULE_BLOCK_DESCRIPTOR;
+
+#endif
+
+//
+// Bits in the flags field of the capsule header
+//
+#define EFI_CAPSULE_HEADER_FLAG_SETUP 0x00000001 // supports setup changes
+//
+// This is the GUID of the capsule header of the image on disk.
+//
+#define EFI_CAPSULE_GUID \
+ { \
+ 0x3B6686BD, 0x0D76, 0x4030, 0xB7, 0x0E, 0xB5, 0x51, 0x9E, 0x2F, 0xC5, 0xA0 \
+ }
+
+//
+// This is the GUID of the file created by the capsule application that contains
+// the path to the device(s) to update.
+//
+#define EFI_PATH_FILE_NAME_GUID \
+ { \
+ 0x7644C181, 0xFA6E, 0x46DA, 0x80, 0xCB, 0x04, 0xB9, 0x90, 0x40, 0x62, 0xE8 \
+ }
+//
+// This is the GUID of the configuration results file created by the capsule
+// application.
+//
+#define EFI_CONFIG_FILE_NAME_GUID \
+ { \
+ 0x98B8D59B, 0xE8BA, 0x48EE, 0x98, 0xDD, 0xC2, 0x95, 0x39, 0x2F, 0x1E, 0xDB \
+ }
+
+#endif // #ifndef _EFI_CAPSULE_H_
diff --git a/EDK/Foundation/Framework/Include/EfiDependency.h b/EDK/Foundation/Framework/Include/EfiDependency.h
new file mode 100644
index 0000000..14e5405
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiDependency.h
@@ -0,0 +1,52 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiDependency.h
+
+Abstract:
+
+ This module contains data specific to dependency expressions
+ and local function prototypes.
+
+--*/
+
+#ifndef _DEPENDENCY_H_
+#define _DEPENDENCY_H_
+
+//
+//
+// EFI_DEP_BEFORE - If present, it must be the first and only opcode
+// EFI_DEP_AFTER - If present, it must be the first and only opcode
+// EFI_DEP_SOR - If present, it must be the first opcode
+// EFI_DEP_REPLACE_TRUE - Used to dynamically patch the dependecy expression
+// to save time. A EFI_DEP_PUSH is evauated one an
+// replaced with EFI_DEP_REPLACE_TRUE
+//
+#define EFI_DEP_BEFORE 0x00
+#define EFI_DEP_AFTER 0x01
+#define EFI_DEP_PUSH 0x02
+#define EFI_DEP_AND 0x03
+#define EFI_DEP_OR 0x04
+#define EFI_DEP_NOT 0x05
+#define EFI_DEP_TRUE 0x06
+#define EFI_DEP_FALSE 0x07
+#define EFI_DEP_END 0x08
+#define EFI_DEP_SOR 0x09
+#define EFI_DEP_REPLACE_TRUE 0xff
+
+//
+// Define the initial size of the dependency expression evaluation stack
+//
+#define DEPEX_STACK_SIZE_INCREMENT 0x1000
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiFirmwareFileSystem.h b/EDK/Foundation/Framework/Include/EfiFirmwareFileSystem.h
new file mode 100644
index 0000000..0cd16f8
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiFirmwareFileSystem.h
@@ -0,0 +1,131 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiFirmwareFileSystem.h
+
+Abstract:
+
+ This file defines the data structures that comprise the FFS file system.
+
+--*/
+
+#ifndef _EFI_FFS_FILE_SYSTEM_H_
+#define _EFI_FFS_FILE_SYSTEM_H_
+
+#include "EfiImageFormat.h"
+
+//
+// GUIDs defined by the FFS specification.
+//
+#define EFI_FIRMWARE_FILE_SYSTEM_GUID \
+ { \
+ 0x7A9354D9, 0x0468, 0x444a, 0x81, 0xCE, 0x0B, 0xF6, 0x17, 0xD8, 0x90, 0xDF \
+ }
+
+#define EFI_FFS_VOLUME_TOP_FILE_GUID \
+ { \
+ 0x1BA0062E, 0xC779, 0x4582, 0x85, 0x66, 0x33, 0x6A, 0xE8, 0xF7, 0x8F, 0x9 \
+ }
+
+//
+// FFS specific file types
+//
+#define EFI_FV_FILETYPE_FFS_PAD 0xF0
+
+//
+// FFS File Attributes
+//
+#define FFS_ATTRIB_TAIL_PRESENT 0x01
+#define FFS_ATTRIB_RECOVERY 0x02
+#define FFS_ATTRIB_DATA_ALIGNMENT 0x38
+#define FFS_ATTRIB_CHECKSUM 0x40
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+#define FFS_ATTRIB_HEADER_EXTENSION 0x04
+#else
+//
+// PI 1.0 definition.
+//
+#define FFS_ATTRIB_FIXED 0x04
+#endif
+
+
+//
+// FFS_FIXED_CHECKSUM is the default checksum value used when the
+// FFS_ATTRIB_CHECKSUM attribute bit is clear
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+#define FFS_FIXED_CHECKSUM 0x5A
+#else
+#define FFS_FIXED_CHECKSUM 0xAA
+#endif
+
+//
+// File state definitions
+//
+#define EFI_FILE_HEADER_CONSTRUCTION 0x01
+#define EFI_FILE_HEADER_VALID 0x02
+#define EFI_FILE_DATA_VALID 0x04
+#define EFI_FILE_MARKED_FOR_UPDATE 0x08
+#define EFI_FILE_DELETED 0x10
+#define EFI_FILE_HEADER_INVALID 0x20
+
+#define EFI_FILE_ALL_STATE_BITS (EFI_FILE_HEADER_CONSTRUCTION | \
+ EFI_FILE_HEADER_VALID | \
+ EFI_FILE_DATA_VALID | \
+ EFI_FILE_MARKED_FOR_UPDATE | \
+ EFI_FILE_DELETED | \
+ EFI_FILE_HEADER_INVALID \
+ )
+
+#define EFI_TEST_FFS_ATTRIBUTES_BIT(FvbAttributes, TestAttributes, Bit) \
+ ( \
+ (BOOLEAN) ( \
+ (FvbAttributes & EFI_FVB_ERASE_POLARITY) ? (((~TestAttributes) & Bit) == Bit) : ((TestAttributes & Bit) == Bit) \
+ ) \
+ )
+
+//
+// FFS file integrity check structure
+//
+typedef UINT16 EFI_FFS_FILE_TAIL;
+
+typedef union {
+ struct {
+ UINT8 Header;
+ UINT8 File;
+ } Checksum;
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+ UINT16 TailReference;
+#else
+ UINT16 Checksum16;
+#endif
+} EFI_FFS_INTEGRITY_CHECK;
+
+//
+// FFS file header definition
+//
+typedef UINT8 EFI_FFS_FILE_ATTRIBUTES;
+typedef UINT8 EFI_FFS_FILE_STATE;
+
+typedef struct {
+ EFI_GUID Name;
+ EFI_FFS_INTEGRITY_CHECK IntegrityCheck;
+ EFI_FV_FILETYPE Type;
+ EFI_FFS_FILE_ATTRIBUTES Attributes;
+ UINT8 Size[3];
+ EFI_FFS_FILE_STATE State;
+} EFI_FFS_FILE_HEADER;
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiFirmwareVolume.h b/EDK/Foundation/Framework/Include/EfiFirmwareVolume.h
new file mode 100644
index 0000000..a5efb2b
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiFirmwareVolume.h
@@ -0,0 +1,47 @@
+/*++
+
+Copyright (c) 2007 , Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiFirmwareVolume.h
+
+Abstract:
+
+--*/
+
+#ifndef _EFI_FIRMWARE_VOLUME_H_
+#define _EFI_FIRMWARE_VOLUME_H_
+
+ //;;## ...AMI_ADD FILE... Support PI1.x
+
+#define FV_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('_', 'F', 'V', '_')
+#define EFI_FV_FILE_ATTRIB_ALIGNMENT 0x0000001F
+#define EFI_FV_UNRELIABLE_WRITE 0x00000000
+#define EFI_FV_RELIABLE_WRITE 0x00000001
+
+
+//
+// EFI_FV_ATTRIBUTES bit definitions
+//
+typedef UINT64 EFI_FV_ATTRIBUTES;
+typedef UINT32 EFI_FV_FILE_ATTRIBUTES;
+typedef UINT32 EFI_FV_WRITE_POLICY;
+
+
+typedef struct {
+ EFI_GUID *NameGuid;
+ EFI_FV_FILETYPE Type;
+ EFI_FV_FILE_ATTRIBUTES FileAttributes;
+ VOID *Buffer;
+ UINT32 BufferSize;
+} EFI_FV_WRITE_FILE_DATA;
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiFirmwareVolumeHeader.h b/EDK/Foundation/Framework/Include/EfiFirmwareVolumeHeader.h
new file mode 100644
index 0000000..50dc8b4
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiFirmwareVolumeHeader.h
@@ -0,0 +1,215 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiFirmwareVolumeHeader.h
+
+Abstract:
+
+ Defines data structure that is the volume header found at the beginning of
+ all firmware volumes that are either memory mapped, or have an
+ associated FirmwareVolumeBlock protocol.
+
+--*/
+
+#ifndef _EFI_FIRMWARE_VOLUME_HEADER_H_
+#define _EFI_FIRMWARE_VOLUME_HEADER_H_
+
+//
+// Firmware Volume Block Attributes definition
+//
+typedef UINT32 EFI_FVB_ATTRIBUTES;
+
+//
+// Firmware Volume Block Attributes bit definitions
+//
+#define EFI_FVB_READ_DISABLED_CAP 0x00000001
+#define EFI_FVB_READ_ENABLED_CAP 0x00000002
+#define EFI_FVB_READ_STATUS 0x00000004
+
+#define EFI_FVB_WRITE_DISABLED_CAP 0x00000008
+#define EFI_FVB_WRITE_ENABLED_CAP 0x00000010
+#define EFI_FVB_WRITE_STATUS 0x00000020
+
+#define EFI_FVB_LOCK_CAP 0x00000040
+#define EFI_FVB_LOCK_STATUS 0x00000080
+
+#define EFI_FVB_STICKY_WRITE 0x00000200
+#define EFI_FVB_MEMORY_MAPPED 0x00000400
+#define EFI_FVB_ERASE_POLARITY 0x00000800
+
+//;;## ...AMI_OVERRIDE... Support PI1.x
+
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+
+#define EFI_FVB_ALIGNMENT_CAP 0x00008000
+#define EFI_FVB_ALIGNMENT_2 0x00010000
+#define EFI_FVB_ALIGNMENT_4 0x00020000
+#define EFI_FVB_ALIGNMENT_8 0x00040000
+#define EFI_FVB_ALIGNMENT_16 0x00080000
+#define EFI_FVB_ALIGNMENT_32 0x00100000
+#define EFI_FVB_ALIGNMENT_64 0x00200000
+#define EFI_FVB_ALIGNMENT_128 0x00400000
+#define EFI_FVB_ALIGNMENT_256 0x00800000
+#define EFI_FVB_ALIGNMENT_512 0x01000000
+#define EFI_FVB_ALIGNMENT_1K 0x02000000
+#define EFI_FVB_ALIGNMENT_2K 0x04000000
+#define EFI_FVB_ALIGNMENT_4K 0x08000000
+#define EFI_FVB_ALIGNMENT_8K 0x10000000
+#define EFI_FVB_ALIGNMENT_16K 0x20000000
+#define EFI_FVB_ALIGNMENT_32K 0x40000000
+#define EFI_FVB_ALIGNMENT_64K 0x80000000
+
+#define EFI_FVB_CAPABILITIES (EFI_FVB_READ_DISABLED_CAP | \
+ EFI_FVB_READ_ENABLED_CAP | \
+ EFI_FVB_WRITE_DISABLED_CAP | \
+ EFI_FVB_WRITE_ENABLED_CAP | \
+ EFI_FVB_LOCK_CAP \
+ )
+
+#define EFI_FVB_STATUS (EFI_FVB_READ_STATUS | EFI_FVB_WRITE_STATUS | EFI_FVB_LOCK_STATUS)
+
+
+
+#else
+
+#define EFI_FVB2_READ_LOCK_CAP 0x00001000
+#define EFI_FVB2_READ_LOCK_STATUS 0x00002000
+
+#define EFI_FVB2_WRITE_LOCK_CAP 0x00004000
+#define EFI_FVB2_WRITE_LOCK_STATUS 0x00008000
+
+#define EFI_FVB2_ALIGNMENT 0x001F0000
+#define EFI_FVB2_ALIGNMENT_1 0x00000000
+#define EFI_FVB2_ALIGNMENT_2 0x00010000
+#define EFI_FVB2_ALIGNMENT_4 0x00020000
+#define EFI_FVB2_ALIGNMENT_8 0x00030000
+#define EFI_FVB2_ALIGNMENT_16 0x00040000
+#define EFI_FVB2_ALIGNMENT_32 0x00050000
+#define EFI_FVB2_ALIGNMENT_64 0x00060000
+#define EFI_FVB2_ALIGNMENT_128 0x00070000
+#define EFI_FVB2_ALIGNMENT_256 0x00080000
+#define EFI_FVB2_ALIGNMENT_512 0x00090000
+#define EFI_FVB2_ALIGNMENT_1K 0x000A0000
+#define EFI_FVB2_ALIGNMENT_2K 0x000B0000
+#define EFI_FVB2_ALIGNMENT_4K 0x000C0000
+#define EFI_FVB2_ALIGNMENT_8K 0x000D0000
+#define EFI_FVB2_ALIGNMENT_16K 0x000E0000
+#define EFI_FVB2_ALIGNMENT_32K 0x000F0000
+#define EFI_FVB2_ALIGNMENT_64K 0x00100000
+#define EFI_FVB2_ALIGNMENT_128K 0x00110000
+#define EFI_FVB2_ALIGNMENT_256K 0x00120000
+#define EFI_FVB2_ALIGNMNET_512K 0x00130000
+#define EFI_FVB2_ALIGNMENT_1M 0x00140000
+#define EFI_FVB2_ALIGNMENT_2M 0x00150000
+#define EFI_FVB2_ALIGNMENT_4M 0x00160000
+#define EFI_FVB2_ALIGNMENT_8M 0x00170000
+#define EFI_FVB2_ALIGNMENT_16M 0x00180000
+#define EFI_FVB2_ALIGNMENT_32M 0x00190000
+#define EFI_FVB2_ALIGNMENT_64M 0x001A0000
+#define EFI_FVB2_ALIGNMENT_128M 0x001B0000
+#define EFI_FVB2_ALIGNMENT_256M 0x001C0000
+#define EFI_FVB2_ALIGNMENT_512M 0x001D0000
+#define EFI_FVB2_ALIGNMENT_1G 0x001E0000
+#define EFI_FVB2_ALIGNMENT_2G 0x001F0000
+
+#define EFI_FVB_CAPABILITIES (EFI_FVB_READ_DISABLED_CAP | \
+ EFI_FVB_READ_ENABLED_CAP | \
+ EFI_FVB_WRITE_DISABLED_CAP | \
+ EFI_FVB_WRITE_ENABLED_CAP | \
+ EFI_FVB_LOCK_CAP | \
+ EFI_FVB2_READ_LOCK_CAP | \
+ EFI_FVB2_WRITE_LOCK_CAP )
+
+#define EFI_FVB_STATUS (EFI_FVB_READ_STATUS | EFI_FVB_WRITE_STATUS | \
+ EFI_FVB_LOCK_STATUS | EFI_FVB2_READ_LOCK_STATUS | \
+ EFI_FVB2_WRITE_LOCK_STATUS )
+
+
+
+//
+// Extended Header Header. Located via ExtHeaderOffset.
+// The extended headers follow each other in memory and are
+// terminated by ExtHeaderType EFI_FV_EXT_TYPE_END
+//
+#define EFI_FV_EXT_TYPE_END 0x00
+typedef struct {
+ UINT16 ExtEntrySize;
+ UINT16 ExtEntryType;
+} EFI_FIRMWARE_VOLUME_EXT_ENTRY;
+
+//
+// GUID that maps OEM file types to GUIDs
+//
+#define EFI_FV_EXT_TYPE_OEM_TYPE 0x01
+typedef struct {
+ EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;
+ UINT32 TypeMask;
+ EFI_GUID Types[1];
+} EFI_FIRMWARE_VOLUME_EXT_HEADER_OEM_TYPE;
+
+//
+// Unique name of the FV
+//
+typedef struct {
+ EFI_GUID FvName;
+ UINT32 ExtHeaderSize;
+} EFI_FIRMWARE_VOLUME_EXT_HEADER;
+
+
+#endif
+
+//
+// Firmware Volume Header Revision definition
+//
+#define EFI_FVH_REVISION 0x01
+//
+// PI1.0 define Firmware Volume Header Revision to 2
+//
+#define EFI_FVH_PI_REVISION 0x02
+
+//
+// Firmware Volume Header Signature definition
+//
+#define EFI_FVH_SIGNATURE EFI_SIGNATURE_32 ('_', 'F', 'V', 'H')
+
+//
+// Firmware Volume Header Block Map Entry definition
+//
+typedef struct {
+ UINT32 NumBlocks;
+ UINT32 BlockLength;
+} EFI_FV_BLOCK_MAP_ENTRY;
+
+//
+// Firmware Volume Header definition
+//
+typedef struct {
+ UINT8 ZeroVector[16];
+ EFI_GUID FileSystemGuid;
+ UINT64 FvLength;
+ UINT32 Signature;
+ EFI_FVB_ATTRIBUTES Attributes;
+ UINT16 HeaderLength;
+ UINT16 Checksum;
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+ UINT8 Reserved[3];
+#else
+ UINT16 ExtHeaderOffset;
+ UINT8 Reserved[1];
+#endif
+ UINT8 Revision;
+ EFI_FV_BLOCK_MAP_ENTRY FvBlockMap[1];
+} EFI_FIRMWARE_VOLUME_HEADER;
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiImageFormat.h b/EDK/Foundation/Framework/Include/EfiImageFormat.h
new file mode 100644
index 0000000..de2a4f3
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiImageFormat.h
@@ -0,0 +1,279 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiImageFormat.h
+
+Abstract:
+
+ This file defines the data structures that are architecturally defined for file
+ images loaded via the FirmwareVolume protocol. The Firmware Volume specification
+ is the basis for these definitions.
+
+--*/
+
+#ifndef _EFI_IMAGE_FORMAT_H_
+#define _EFI_IMAGE_FORMAT_H_
+
+//
+// pack all data structures since this is actually a binary format and we cannot
+// allow internal padding in the data structures because of some compilerism..
+//
+#pragma pack(1)
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// Architectural file types
+//
+typedef UINT8 EFI_FV_FILETYPE;
+
+#define EFI_FV_FILETYPE_ALL 0x00
+#define EFI_FV_FILETYPE_RAW 0x01
+#define EFI_FV_FILETYPE_FREEFORM 0x02
+#define EFI_FV_FILETYPE_SECURITY_CORE 0x03
+#define EFI_FV_FILETYPE_PEI_CORE 0x04
+#define EFI_FV_FILETYPE_DXE_CORE 0x05
+#define EFI_FV_FILETYPE_PEIM 0x06
+#define EFI_FV_FILETYPE_DRIVER 0x07
+#define EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER 0x08
+#define EFI_FV_FILETYPE_APPLICATION 0x09
+//
+// File type 0x0A is reserved and should not be used
+//
+#define EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE 0x0B
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// Section types
+//
+typedef UINT8 EFI_SECTION_TYPE;
+
+//
+// ************************************************************
+// The section type EFI_SECTION_ALL is a psuedo type. It is
+// used as a wildcard when retrieving sections. The section
+// type EFI_SECTION_ALL matches all section types.
+// ************************************************************
+//
+#define EFI_SECTION_ALL 0x00
+
+//
+// ************************************************************
+// Encapsulation section Type values
+// ************************************************************
+//
+#define EFI_SECTION_COMPRESSION 0x01
+#define EFI_SECTION_GUID_DEFINED 0x02
+
+//
+// ************************************************************
+// Leaf section Type values
+// ************************************************************
+//
+#define EFI_SECTION_FIRST_LEAF_SECTION_TYPE 0x10
+
+#define EFI_SECTION_PE32 0x10
+#define EFI_SECTION_PIC 0x11
+#define EFI_SECTION_TE 0x12
+#define EFI_SECTION_DXE_DEPEX 0x13
+#define EFI_SECTION_VERSION 0x14
+#define EFI_SECTION_USER_INTERFACE 0x15
+#define EFI_SECTION_COMPATIBILITY16 0x16
+#define EFI_SECTION_FIRMWARE_VOLUME_IMAGE 0x17
+#define EFI_SECTION_FREEFORM_SUBTYPE_GUID 0x18
+#define EFI_SECTION_RAW 0x19
+#define EFI_SECTION_PEI_DEPEX 0x1B
+
+#define EFI_SECTION_LAST_LEAF_SECTION_TYPE 0x1B
+#define EFI_SECTION_LAST_SECTION_TYPE 0x1B
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// Common section header
+//
+typedef struct {
+ UINT8 Size[3];
+ UINT8 Type;
+} EFI_COMMON_SECTION_HEADER;
+
+#define SECTION_SIZE(SectionHeaderPtr) \
+ ((UINT32) (*((UINT32 *) ((EFI_COMMON_SECTION_HEADER *) SectionHeaderPtr)->Size) & 0x00ffffff))
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// Compression section
+//
+//
+// CompressionType values
+//
+#define EFI_NOT_COMPRESSED 0x00
+#define EFI_STANDARD_COMPRESSION 0x01
+#define EFI_CUSTOMIZED_COMPRESSION 0x02
+
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+ UINT32 UncompressedLength;
+ UINT8 CompressionType;
+} EFI_COMPRESSION_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// GUID defined section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+ EFI_GUID SectionDefinitionGuid;
+ UINT16 DataOffset;
+ UINT16 Attributes;
+} EFI_GUID_DEFINED_SECTION;
+
+//
+// Bit values for Attributes
+//
+#define EFI_GUIDED_SECTION_PROCESSING_REQUIRED 0x01
+#define EFI_GUIDED_SECTION_AUTH_STATUS_VALID 0x02
+
+//
+// Bit values for AuthenticationStatus
+//
+#define EFI_AGGREGATE_AUTH_STATUS_PLATFORM_OVERRIDE 0x000001
+#define EFI_AGGREGATE_AUTH_STATUS_IMAGE_SIGNED 0x000002
+#define EFI_AGGREGATE_AUTH_STATUS_NOT_TESTED 0x000004
+#define EFI_AGGREGATE_AUTH_STATUS_TEST_FAILED 0x000008
+#define EFI_AGGREGATE_AUTH_STATUS_ALL 0x00000f
+
+#define EFI_LOCAL_AUTH_STATUS_PLATFORM_OVERRIDE 0x010000
+#define EFI_LOCAL_AUTH_STATUS_IMAGE_SIGNED 0x020000
+#define EFI_LOCAL_AUTH_STATUS_NOT_TESTED 0x040000
+#define EFI_LOCAL_AUTH_STATUS_TEST_FAILED 0x080000
+#define EFI_LOCAL_AUTH_STATUS_ALL 0x0f0000
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// PE32+ section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+} EFI_PE32_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// PIC section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+} EFI_PIC_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// PEIM header section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+} EFI_PEIM_HEADER_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// DEPEX section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+} EFI_DEPEX_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// Version section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+ UINT16 BuildNumber;
+ INT16 VersionString[1];
+} EFI_VERSION_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// User interface section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+ INT16 FileNameString[1];
+} EFI_USER_INTERFACE_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// Code16 section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+} EFI_CODE16_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// Firmware Volume Image section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+} EFI_FIRMWARE_VOLUME_IMAGE_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// Freeform subtype GUID section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+ EFI_GUID SubTypeGuid;
+} EFI_FREEFORM_SUBTYPE_GUID_SECTION;
+
+//
+// ////////////////////////////////////////////////////////////////////////////
+//
+// Raw section
+//
+typedef struct {
+ EFI_COMMON_SECTION_HEADER CommonHeader;
+} EFI_RAW_SECTION;
+
+//
+// undo the pragma from the beginning...
+//
+#pragma pack()
+
+typedef union {
+ EFI_COMMON_SECTION_HEADER *CommonHeader;
+ EFI_COMPRESSION_SECTION *CompressionSection;
+ EFI_GUID_DEFINED_SECTION *GuidDefinedSection;
+ EFI_PE32_SECTION *Pe32Section;
+ EFI_PIC_SECTION *PicSection;
+ EFI_PEIM_HEADER_SECTION *PeimHeaderSection;
+ EFI_DEPEX_SECTION *DependencySection;
+ EFI_VERSION_SECTION *VersionSection;
+ EFI_USER_INTERFACE_SECTION *UISection;
+ EFI_CODE16_SECTION *Code16Section;
+ EFI_FIRMWARE_VOLUME_IMAGE_SECTION *FVImageSection;
+ EFI_FREEFORM_SUBTYPE_GUID_SECTION *FreeformSubtypeSection;
+ EFI_RAW_SECTION *RawSection;
+} EFI_FILE_SECTION_POINTER;
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiInternalFormRepresentation.h b/EDK/Foundation/Framework/Include/EfiInternalFormRepresentation.h
new file mode 100644
index 0000000..8b963fd
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiInternalFormRepresentation.h
@@ -0,0 +1,431 @@
+/*++
+
+Copyright (c) 2004 - 2005, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiInternalFormRepresentation.h
+
+Abstract:
+
+ This file defines the encoding for the VFR (Visual Form Representation) language.
+ IFR is primarily consumed by the EFI presentation engine, and produced by EFI
+ internal application and drivers as well as all add-in card option-ROM drivers
+
+--*/
+
+#ifndef _EFI_INTERNAL_FORM_REPRESENTATION_H_
+#define _EFI_INTERNAL_FORM_REPRESENTATION_H_
+
+//
+// The following types are currently defined:
+//
+typedef UINT32 RELOFST;
+typedef UINT16 STRING_REF;
+typedef CHAR16 *EFI_STRING;
+
+//
+// IFR Op codes
+//
+#define EFI_IFR_FORM_OP 0x01
+#define EFI_IFR_SUBTITLE_OP 0x02
+#define EFI_IFR_TEXT_OP 0x03
+#define EFI_IFR_GRAPHIC_OP 0x04
+#define EFI_IFR_ONE_OF_OP 0x05
+#define EFI_IFR_CHECKBOX_OP 0x06
+#define EFI_IFR_NUMERIC_OP 0x07
+#define EFI_IFR_PASSWORD_OP 0x08
+#define EFI_IFR_ONE_OF_OPTION_OP 0x09 // ONEOF OPTION field
+#define EFI_IFR_SUPPRESS_IF_OP 0x0A
+#define EFI_IFR_END_FORM_OP 0x0B
+#define EFI_IFR_HIDDEN_OP 0x0C
+#define EFI_IFR_END_FORM_SET_OP 0x0D
+#define EFI_IFR_FORM_SET_OP 0x0E
+#define EFI_IFR_REF_OP 0x0F
+#define EFI_IFR_END_ONE_OF_OP 0x10
+#define EFI_IFR_END_OP EFI_IFR_END_ONE_OF_OP
+#define EFI_IFR_INCONSISTENT_IF_OP 0x11
+#define EFI_IFR_EQ_ID_VAL_OP 0x12
+#define EFI_IFR_EQ_ID_ID_OP 0x13
+#define EFI_IFR_EQ_ID_LIST_OP 0x14
+#define EFI_IFR_AND_OP 0x15
+#define EFI_IFR_OR_OP 0x16
+#define EFI_IFR_NOT_OP 0x17
+#define EFI_IFR_END_IF_OP 0x18 // for endif of inconsistentif, suppressif, grayoutif
+#define EFI_IFR_GRAYOUT_IF_OP 0x19
+#define EFI_IFR_DATE_OP 0x1A
+#define EFI_IFR_TIME_OP 0x1B
+#define EFI_IFR_STRING_OP 0x1C
+#define EFI_IFR_LABEL_OP 0x1D
+#define EFI_IFR_SAVE_DEFAULTS_OP 0x1E
+#define EFI_IFR_RESTORE_DEFAULTS_OP 0x1F
+#define EFI_IFR_BANNER_OP 0x20
+#define EFI_IFR_INVENTORY_OP 0x21
+#define EFI_IFR_EQ_VAR_VAL_OP 0x22
+#define EFI_IFR_ORDERED_LIST_OP 0x23
+#define EFI_IFR_VARSTORE_OP 0x24
+#define EFI_IFR_VARSTORE_SELECT_OP 0x25
+#define EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26
+#define EFI_IFR_TRUE_OP 0x27
+#define EFI_IFR_FALSE_OP 0x28
+#define EFI_IFR_GT_OP 0x29
+#define EFI_IFR_GE_OP 0x2A
+#define EFI_IFR_OEM_DEFINED_OP 0x2B
+#define EFI_IFR_LAST_OPCODE EFI_IFR_OEM_DEFINED_OP
+#define EFI_IFR_OEM_OP 0xFE
+#define EFI_IFR_NV_ACCESS_COMMAND 0xFF
+
+//
+// Define values for the flags fields in some VFR opcodes. These are
+// bitmasks.
+//
+#define EFI_IFR_FLAG_DEFAULT 0x01
+#define EFI_IFR_FLAG_MANUFACTURING 0x02
+#define EFI_IFR_FLAG_INTERACTIVE 0x04
+#define EFI_IFR_FLAG_NV_ACCESS 0x08
+#define EFI_IFR_FLAG_RESET_REQUIRED 0x10
+#define EFI_IFR_FLAG_LATE_CHECK 0x20
+
+#define EFI_NON_DEVICE_CLASS 0x00 // Useful when you do not want something in the Device Manager
+#define EFI_DISK_DEVICE_CLASS 0x01
+#define EFI_VIDEO_DEVICE_CLASS 0x02
+#define EFI_NETWORK_DEVICE_CLASS 0x04
+#define EFI_INPUT_DEVICE_CLASS 0x08
+#define EFI_ON_BOARD_DEVICE_CLASS 0x10
+#define EFI_OTHER_DEVICE_CLASS 0x20
+
+#define EFI_SETUP_APPLICATION_SUBCLASS 0x00
+#define EFI_GENERAL_APPLICATION_SUBCLASS 0x01
+#define EFI_FRONT_PAGE_SUBCLASS 0x02
+#define EFI_SINGLE_USE_SUBCLASS 0x03 // Used to display a single entity and then exit
+//
+// Used to flag dynamically created op-codes. This is meaningful to the IFR Library set
+// and the browser since we need to distinguish between compiled NV map data and created data.
+// We do not allow new entries to be created in the NV map dynamically however we still need
+// to display this information correctly. To dynamically create op-codes and assume that their
+// data will be saved, ensure that the NV starting location they refer to is pre-defined in the
+// NV map.
+//
+#define EFI_IFR_FLAG_CREATED 128
+
+#pragma pack(1)
+//
+// IFR Structure definitions
+//
+typedef struct {
+ UINT8 OpCode;
+ UINT8 Length;
+} EFI_IFR_OP_HEADER;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ EFI_GUID Guid;
+ STRING_REF FormSetTitle;
+ STRING_REF Help;
+ EFI_PHYSICAL_ADDRESS CallbackHandle;
+ UINT16 Class;
+ UINT16 SubClass;
+ UINT16 NvDataSize; // set once, size of the NV data as defined in the script
+} EFI_IFR_FORM_SET;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 FormId;
+ STRING_REF FormTitle;
+} EFI_IFR_FORM;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 LabelId;
+} EFI_IFR_LABEL;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ STRING_REF SubTitle;
+} EFI_IFR_SUBTITLE;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ STRING_REF Help;
+ STRING_REF Text;
+ STRING_REF TextTwo;
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code
+} EFI_IFR_TEXT;
+
+//
+// goto
+//
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 FormId;
+ STRING_REF Prompt;
+ STRING_REF Help; // The string Token for the context-help
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code
+} EFI_IFR_REF;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_END_FORM;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_END_FORM_SET;
+
+//
+// Also notice that the IFR_ONE_OF and IFR_CHECK_BOX are identical in structure......code assumes this to be true, if this ever
+// changes we need to revisit the InitializeTagStructures code
+//
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
+ UINT8 Width; // The Size of the Data being saved
+ STRING_REF Prompt; // The String Token for the Prompt
+ STRING_REF Help; // The string Token for the context-help
+} EFI_IFR_ONE_OF;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId; // The offset in NV for storage of the data
+ UINT8 MaxEntries; // The maximum number of options in the ordered list (=size of NVStore)
+ STRING_REF Prompt; // The string token for the prompt
+ STRING_REF Help; // The string token for the context-help
+} EFI_IFR_ORDERED_LIST;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
+ UINT8 Width; // The Size of the Data being saved
+ STRING_REF Prompt; // The String Token for the Prompt
+ STRING_REF Help; // The string Token for the context-help
+ UINT8 Flags; // For now, if non-zero, means that it is the default option, - further definition likely
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code
+} EFI_IFR_CHECK_BOX;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ STRING_REF Option; // The string token describing the option
+ UINT16 Value; // The value associated with this option that is stored in the NVRAM if chosen
+ UINT8 Flags; // For now, if non-zero, means that it is the default option, - further definition likely above
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code
+} EFI_IFR_ONE_OF_OPTION;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
+ UINT8 Width; // The Size of the Data being saved
+ STRING_REF Prompt; // The String Token for the Prompt
+ STRING_REF Help; // The string Token for the context-help
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code
+ UINT16 Minimum;
+ UINT16 Maximum;
+ UINT16 Step; // If step is 0, then manual input is specified, otherwise, left/right arrow selection is called for
+ UINT16 Default;
+} EFI_IFR_NUMERIC;
+
+//
+// There is an interesting twist with regards to Time and Date. This is one of the few items which can accept input from
+// a user, however may or may not need to use storage in the NVRAM space. The decided method for determining if NVRAM space
+// will be used (only for a TimeOp or DateOp) is: If .QuestionId == 0 && .Width == 0 (normally an impossibility) then use system
+// resources to store the data away and not NV resources. In other words, the setup engine will call gRT->SetTime, and gRT->SetDate
+// for the saving of data, and the values displayed will be from the gRT->GetXXXX series of calls.
+//
+typedef struct {
+ EFI_IFR_NUMERIC Hour;
+ EFI_IFR_NUMERIC Minute;
+ EFI_IFR_NUMERIC Second;
+} EFI_IFR_TIME;
+
+typedef struct {
+ EFI_IFR_NUMERIC Year;
+ EFI_IFR_NUMERIC Month;
+ EFI_IFR_NUMERIC Day;
+} EFI_IFR_DATE;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
+ UINT8 Width; // The Size of the Data being saved -- BUGBUG -- remove someday
+ STRING_REF Prompt; // The String Token for the Prompt
+ STRING_REF Help; // The string Token for the context-help
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code
+ UINT8 MinSize; // Minimum allowable sized password
+ UINT8 MaxSize; // Maximum allowable sized password
+ UINT16 Encoding;
+} EFI_IFR_PASSWORD;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name
+ UINT8 Width; // The Size of the Data being saved -- BUGBUG -- remove someday
+ STRING_REF Prompt; // The String Token for the Prompt
+ STRING_REF Help; // The string Token for the context-help
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code
+ UINT8 MinSize; // Minimum allowable sized password
+ UINT8 MaxSize; // Maximum allowable sized password
+} EFI_IFR_STRING;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_END_ONE_OF;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 Value;
+ UINT16 Key;
+} EFI_IFR_HIDDEN;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT8 Flags;
+} EFI_IFR_SUPPRESS;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT8 Flags;
+} EFI_IFR_GRAYOUT;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ STRING_REF Popup;
+ UINT8 Flags;
+} EFI_IFR_INCONSISTENT;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId; // offset into variable storage
+ UINT8 Width; // size of variable storage
+ UINT16 Value; // value to compare against
+} EFI_IFR_EQ_ID_VAL;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId; // offset into variable storage
+ UINT8 Width; // size of variable storage
+ UINT16 ListLength;
+ UINT16 ValueList[1];
+} EFI_IFR_EQ_ID_LIST;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId1; // offset into variable storage for first value to compare
+ UINT8 Width; // size of variable storage (must be same for both)
+ UINT16 QuestionId2; // offset into variable storage for second value to compare
+} EFI_IFR_EQ_ID_ID;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 VariableId; // offset into variable storage
+ UINT16 Value; // value to compare against
+} EFI_IFR_EQ_VAR_VAL;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_AND;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_OR;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_NOT;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_END_IF;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 FormId;
+ STRING_REF Prompt;
+ STRING_REF Help;
+ UINT8 Flags;
+ UINT16 Key;
+} EFI_IFR_SAVE_DEFAULTS;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ STRING_REF Help;
+ STRING_REF Text;
+ STRING_REF TextTwo; // optional text
+} EFI_IFR_INVENTORY;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ EFI_GUID Guid; // GUID for the variable
+ UINT16 VarId; // variable store ID, as referenced elsewhere in the form
+ UINT16 Size; // size of the variable storage
+} EFI_IFR_VARSTORE;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 VarId; // variable store ID, as referenced elsewhere in the form
+} EFI_IFR_VARSTORE_SELECT;
+
+//
+// Used for the ideqid VFR statement where two variable stores may be referenced in the
+// same VFR statement.
+// A browser should treat this as an EFI_IFR_VARSTORE_SELECT statement and assume that all following
+// IFR opcodes use the VarId as defined here.
+//
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 VarId; // variable store ID, as referenced elsewhere in the form
+ UINT16 SecondaryVarId; // variable store ID, as referenced elsewhere in the form
+} EFI_IFR_VARSTORE_SELECT_PAIR;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_TRUE;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_FALSE;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_GT;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+} EFI_IFR_GE;
+
+//
+// Save defaults and restore defaults have same structure
+//
+#define EFI_IFR_RESTORE_DEFAULTS EFI_IFR_SAVE_DEFAULTS
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ STRING_REF Title; // The string token for the banner title
+ UINT16 LineNumber; // 1-based line number
+ UINT8 Alignment; // left, center, or right-aligned
+} EFI_IFR_BANNER;
+
+typedef struct {
+ EFI_IFR_OP_HEADER Header;
+ UINT16 QuestionId; // Offset into the map
+ UINT8 StorageWidth; // Width of the value
+ CHAR8 Data[1]; // The Data itself
+} EFI_IFR_NV_DATA;
+
+#define EFI_IFR_BANNER_ALIGN_LEFT 0
+#define EFI_IFR_BANNER_ALIGN_CENTER 1
+#define EFI_IFR_BANNER_ALIGN_RIGHT 2
+#define EFI_IFR_BANNER_TIMEOUT 0xFF
+
+#pragma pack()
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiPciCfg.h b/EDK/Foundation/Framework/Include/EfiPciCfg.h
new file mode 100644
index 0000000..f65b163
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiPciCfg.h
@@ -0,0 +1,81 @@
+/*++
+
+Copyright (c) 2007 - 2009, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiPciCfg.h
+
+Abstract:
+
+ Abstract the common fields of PciCfg definition between Framework 0.9x
+ and PI 1.0.
+
+--*/
+
+#ifndef _EFI_PCI_CFG_H_
+#define _EFI_PCI_CFG_H_
+
+//
+// Framework specification 0.9x definition.
+//
+typedef enum {
+ PeiPciCfgWidthUint8 = 0,
+ PeiPciCfgWidthUint16 = 1,
+ PeiPciCfgWidthUint32 = 2,
+ PeiPciCfgWidthUint64 = 3,
+ PeiPciCfgWidthMaximum
+} PEI_PCI_CFG_PPI_WIDTH;
+
+#define PEI_PCI_CFG_ADDRESS(bus, dev, func, reg) ( \
+ (UINT64) ((((UINTN) bus) << 24) + (((UINTN) dev) << 16) + (((UINTN) func) << 8) + ((UINTN) reg)) \
+ ) & 0x00000000ffffffff
+
+//
+// PI 1.0 definition.
+//
+typedef enum {
+ EfiPeiPciCfgWidthUint8 = 0,
+ EfiPeiPciCfgWidthUint16 = 1,
+ EfiPeiPciCfgWidthUint32 = 2,
+ EfiPeiPciCfgWidthUint64 = 3,
+ EfiPeiPciCfgWidthMaximum
+} EFI_PEI_PCI_CFG_PPI_WIDTH;
+
+#define EFI_PEI_PCI_CFG_ADDRESS(bus, dev, func, reg) \
+ (UINT64) ((((UINTN) (bus)) << 24) | \
+ (((UINTN) (dev)) << 16) | \
+ (((UINTN) (func)) << 8) | \
+ ((reg) < 256 ? ((UINTN) (reg)): ((UINT64) (reg) << 32)))
+
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+
+typedef struct {
+ UINT8 Register;
+ UINT8 Function;
+ UINT8 Device;
+ UINT8 Bus;
+ UINT8 Reserved[4];
+} PEI_PCI_CFG_PPI_PCI_ADDRESS;
+
+typedef PEI_PCI_CFG_PPI_PCI_ADDRESS EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS;
+
+#else
+
+typedef struct {
+ UINT8 Register;
+ UINT8 Function;
+ UINT8 Device;
+ UINT8 Bus;
+ UINT32 ExtendedRegister;
+} EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS;
+#endif
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiSmbus.h b/EDK/Foundation/Framework/Include/EfiSmbus.h
new file mode 100644
index 0000000..425694c
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiSmbus.h
@@ -0,0 +1,70 @@
+/*++
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiSmbus.h
+
+Abstract:
+
+
+
+--*/
+
+#ifndef _EFI_SMBUS_DEFINITION_H_
+#define _EFI_SMBUS_DEFINITION_H_
+
+//
+// EFI Smbus Device Address, Smbus Device Command, Smbus Operation
+//
+typedef struct {
+ UINTN SmbusDeviceAddress : 7;
+} EFI_SMBUS_DEVICE_ADDRESS;
+
+typedef UINTN EFI_SMBUS_DEVICE_COMMAND;
+
+typedef enum _EFI_SMBUS_OPERATION
+{
+ EfiSmbusQuickRead,
+ EfiSmbusQuickWrite,
+ EfiSmbusReceiveByte,
+ EfiSmbusSendByte,
+ EfiSmbusReadByte,
+ EfiSmbusWriteByte,
+ EfiSmbusReadWord,
+ EfiSmbusWriteWord,
+ EfiSmbusReadBlock,
+ EfiSmbusWriteBlock,
+ EfiSmbusProcessCall,
+ EfiSmbusBWBRProcessCall
+} EFI_SMBUS_OPERATION;
+
+//;;## ...AMI_OVERRIDE... Support PI1.x start
+typedef struct {
+ UINT32 VendorSpecificId;
+ UINT16 SubsystemDeviceId;
+ UINT16 SubsystemVendorId;
+ UINT16 Interface;
+ UINT16 DeviceId;
+ UINT16 VendorId;
+ UINT8 VendorRevision;
+ UINT8 DeviceCapabilities;
+} EFI_SMBUS_UDID;
+
+
+typedef struct {
+ EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;
+ EFI_SMBUS_UDID SmbusDeviceUdid;
+} EFI_SMBUS_DEVICE_MAP;
+//;;## ...AMI_OVERRIDE... Support PI1.x end
+
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiStatusCode.h b/EDK/Foundation/Framework/Include/EfiStatusCode.h
new file mode 100644
index 0000000..cc16c10
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiStatusCode.h
@@ -0,0 +1,961 @@
+/*++
+
+Copyright (c) 2004 - 2011, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiStatusCode.h
+
+Abstract:
+
+ Status Code Definitions, according to Intel Platform Innovation Framework
+ for EFI Status Codes Specification
+ Revision 0.92
+
+ The file is divided into sections for ease of use.
+
+ Section: Contents:
+ 1 General Status Code Definitions
+ 2 Class definitions
+ 3 Computing Unit Subclasses, Progress and Error Codes
+ 4 Peripheral Subclasses, Progress and Error Codes.
+ 5 IO Bus Subclasses, Progress and Error Codes.
+ 6 Software Subclasses, Progress and Error Codes.
+ 7 Debug Codes
+
+--*/
+
+#ifndef _EFI_STATUS_CODE_H_
+#define _EFI_STATUS_CODE_H_
+
+//
+// /////////////////////////////////////////////////////////////////////////////
+// Section 1
+///////////////////////////////////////////////////////////////////////////////
+//
+// Status Code Type Definition
+//
+typedef UINT32 EFI_STATUS_CODE_TYPE;
+
+//
+// A Status Code Type is made up of the code type and severity
+// All values masked by EFI_STATUS_CODE_RESERVED_MASK are
+// reserved for use by this specification.
+//
+#define EFI_STATUS_CODE_TYPE_MASK 0x000000FF
+#define EFI_STATUS_CODE_SEVERITY_MASK 0xFF000000
+#define EFI_STATUS_CODE_RESERVED_MASK 0x00FFFF00
+
+//
+// Definition of code types, all other values masked by
+// EFI_STATUS_CODE_TYPE_MASK are reserved for use by
+// this specification.
+//
+#define EFI_PROGRESS_CODE 0x00000001
+#define EFI_ERROR_CODE 0x00000002
+#define EFI_DEBUG_CODE 0x00000003
+
+//
+// Definitions of severities, all other values masked by
+// EFI_STATUS_CODE_SEVERITY_MASK are reserved for use by
+// this specification.
+//
+#define EFI_ERROR_MINOR 0x40000000
+#define EFI_ERROR_MAJOR 0x80000000
+#define EFI_ERROR_UNRECOVERED 0x90000000
+#define EFI_ERROR_UNCONTAINED 0xA0000000
+
+//
+// Status Code Value Definition
+//
+typedef UINT32 EFI_STATUS_CODE_VALUE;
+
+//
+// A Status Code Value is made up of the class, subclass, and
+// an operation. Classes, subclasses, and operations are defined
+// in the following sections.
+//
+#define EFI_STATUS_CODE_CLASS_MASK 0xFF000000
+#define EFI_STATUS_CODE_SUBCLASS_MASK 0x00FF0000
+#define EFI_STATUS_CODE_OPERATION_MASK 0x0000FFFF
+
+typedef struct {
+ UINT16 HeaderSize;
+ UINT16 Size;
+ EFI_GUID Type;
+} EFI_STATUS_CODE_DATA;
+
+//
+// Data Hub Status Code class record definition
+//
+typedef struct {
+ EFI_STATUS_CODE_TYPE CodeType;
+ EFI_STATUS_CODE_VALUE Value;
+ UINT32 Instance;
+ EFI_GUID CallerId;
+ EFI_STATUS_CODE_DATA Data;
+} DATA_HUB_STATUS_CODE_DATA_RECORD;
+
+//
+// /////////////////////////////////////////////////////////////////////////////
+// Section 2
+///////////////////////////////////////////////////////////////////////////////
+//
+// Class definitions
+// Values of 4-127 are reserved for future use by this
+// specification.
+// Values in the range 128-255 are reserved for OEM use.
+//
+#define EFI_COMPUTING_UNIT 0x00000000
+#define EFI_PERIPHERAL 0x01000000
+#define EFI_IO_BUS 0x02000000
+#define EFI_SOFTWARE 0x03000000
+
+//
+// General partitioning scheme for Progress and Error Codes are
+// 0x0000-0x0FFF - Shared by all sub-classes in a given class
+// 0x1000-0x7FFF - Subclass Specific
+// 0x8000-0xFFFF - OEM specific
+//
+#define EFI_SUBCLASS_SPECIFIC 0x1000
+#define EFI_OEM_SPECIFIC 0x8000
+
+//
+// /////////////////////////////////////////////////////////////////////////////
+// Section 3
+///////////////////////////////////////////////////////////////////////////////
+//
+// Computing Unit Subclass definitions.
+// Values of 7-127 are reserved for future use by this
+// specification.
+// Values of 128-255 are reserved for OEM use.
+//
+#define EFI_COMPUTING_UNIT_UNSPECIFIED (EFI_COMPUTING_UNIT | 0x00000000)
+#define EFI_COMPUTING_UNIT_HOST_PROCESSOR (EFI_COMPUTING_UNIT | 0x00010000)
+#define EFI_COMPUTING_UNIT_FIRMWARE_PROCESSOR (EFI_COMPUTING_UNIT | 0x00020000)
+#define EFI_COMPUTING_UNIT_IO_PROCESSOR (EFI_COMPUTING_UNIT | 0x00030000)
+#define EFI_COMPUTING_UNIT_CACHE (EFI_COMPUTING_UNIT | 0x00040000)
+#define EFI_COMPUTING_UNIT_MEMORY (EFI_COMPUTING_UNIT | 0x00050000)
+#define EFI_COMPUTING_UNIT_CHIPSET (EFI_COMPUTING_UNIT | 0x00060000)
+
+//
+// Computing Unit Class Progress Code definitions.
+// These are shared by all subclasses.
+//
+#define EFI_CU_PC_INIT_BEGIN 0x00000000
+#define EFI_CU_PC_INIT_END 0x00000001
+
+//
+// Computing Unit Unspecified Subclass Progress Code definitions.
+//
+//
+// Computing Unit Host Processor Subclass Progress Code definitions.
+//
+#define EFI_CU_HP_PC_POWER_ON_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_CU_HP_PC_CACHE_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_CU_HP_PC_RAM_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_CU_HP_PC_MEMORY_CONTROLLER_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_CU_HP_PC_IO_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_CU_HP_PC_BSP_SELECT (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+#define EFI_CU_HP_PC_BSP_RESELECT (EFI_SUBCLASS_SPECIFIC | 0x00000006)
+#define EFI_CU_HP_PC_AP_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000007)
+#define EFI_CU_HP_PC_SMM_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000008)
+
+//
+// Computing Unit Firmware Processor Subclass Progress Code definitions.
+//
+//
+// Computing Unit IO Processor Subclass Progress Code definitions.
+//
+//
+// Computing Unit Cache Subclass Progress Code definitions.
+//
+#define EFI_CU_CACHE_PC_PRESENCE_DETECT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_CU_CACHE_PC_CONFIGURATION (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+
+//
+// Computing Unit Memory Subclass Progress Code definitions.
+//
+#define EFI_CU_MEMORY_PC_SPD_READ (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_CU_MEMORY_PC_PRESENCE_DETECT (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_CU_MEMORY_PC_TIMING (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_CU_MEMORY_PC_CONFIGURING (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_CU_MEMORY_PC_OPTIMIZING (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_CU_MEMORY_PC_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+#define EFI_CU_MEMORY_PC_TEST (EFI_SUBCLASS_SPECIFIC | 0x00000006)
+
+//
+// Computing Unit Chipset Subclass Progress Code definitions.
+//
+//
+// Computing Unit Class Error Code definitions.
+// These are shared by all subclasses.
+//
+#define EFI_CU_EC_NON_SPECIFIC 0x00000000
+#define EFI_CU_EC_DISABLED 0x00000001
+#define EFI_CU_EC_NOT_SUPPORTED 0x00000002
+#define EFI_CU_EC_NOT_DETECTED 0x00000003
+#define EFI_CU_EC_NOT_CONFIGURED 0x00000004
+
+//
+// Computing Unit Unspecified Subclass Error Code definitions.
+//
+//
+// Computing Unit Host Processor Subclass Error Code definitions.
+//
+#define EFI_CU_HP_EC_INVALID_TYPE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_CU_HP_EC_INVALID_SPEED (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_CU_HP_EC_MISMATCH (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_CU_HP_EC_TIMER_EXPIRED (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_CU_HP_EC_SELF_TEST (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_CU_HP_EC_INTERNAL (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+#define EFI_CU_HP_EC_THERMAL (EFI_SUBCLASS_SPECIFIC | 0x00000006)
+#define EFI_CU_HP_EC_LOW_VOLTAGE (EFI_SUBCLASS_SPECIFIC | 0x00000007)
+#define EFI_CU_HP_EC_HIGH_VOLTAGE (EFI_SUBCLASS_SPECIFIC | 0x00000008)
+#define EFI_CU_HP_EC_CACHE (EFI_SUBCLASS_SPECIFIC | 0x00000009)
+#define EFI_CU_HP_EC_MICROCODE_UPDATE (EFI_SUBCLASS_SPECIFIC | 0x0000000A)
+#define EFI_CU_HP_EC_CORRECTABLE (EFI_SUBCLASS_SPECIFIC | 0x0000000B)
+#define EFI_CU_HP_EC_UNCORRECTABLE (EFI_SUBCLASS_SPECIFIC | 0x0000000C)
+#define EFI_CU_HP_EC_NO_MICROCODE_UPDATE (EFI_SUBCLASS_SPECIFIC | 0x0000000D)
+
+//
+// Computing Unit Firmware Processor Subclass Error Code definitions.
+//
+#define EFI_CU_FP_EC_HARD_FAIL (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_CU_FP_EC_SOFT_FAIL (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_CU_FP_EC_COMM_ERROR (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+
+//
+// Computing Unit IO Processor Subclass Error Code definitions.
+//
+//
+// Computing Unit Cache Subclass Error Code definitions.
+//
+#define EFI_CU_CACHE_EC_INVALID_TYPE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_CU_CACHE_EC_INVALID_SPEED (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_CU_CACHE_EC_INVALID_SIZE (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_CU_CACHE_EC_MISMATCH (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+
+//
+// Computing Unit Memory Subclass Error Code definitions.
+//
+#define EFI_CU_MEMORY_EC_INVALID_TYPE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_CU_MEMORY_EC_INVALID_SPEED (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_CU_MEMORY_EC_CORRECTABLE (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_CU_MEMORY_EC_UNCORRECTABLE (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_CU_MEMORY_EC_SPD_FAIL (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_CU_MEMORY_EC_INVALID_SIZE (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+#define EFI_CU_MEMORY_EC_MISMATCH (EFI_SUBCLASS_SPECIFIC | 0x00000006)
+#define EFI_CU_MEMORY_EC_S3_RESUME_FAIL (EFI_SUBCLASS_SPECIFIC | 0x00000007)
+#define EFI_CU_MEMORY_EC_UPDATE_FAIL (EFI_SUBCLASS_SPECIFIC | 0x00000008)
+#define EFI_CU_MEMORY_EC_NONE_DETECTED (EFI_SUBCLASS_SPECIFIC | 0x00000009)
+#define EFI_CU_MEMORY_EC_NONE_USEFUL (EFI_SUBCLASS_SPECIFIC | 0x0000000A)
+
+//
+// Computing Unit Chipset Subclass Error Code definitions.
+//
+
+///////////////////////////////////////////////////////////////////////////////
+// Section 4
+///////////////////////////////////////////////////////////////////////////////
+//
+// Peripheral Subclass definitions.
+// Values of 13-127 are reserved for future use by this
+// specification.
+// Values of 128-255 are reserved for OEM use.
+//
+#define EFI_PERIPHERAL_UNSPECIFIED (EFI_PERIPHERAL | 0x00000000)
+#define EFI_PERIPHERAL_KEYBOARD (EFI_PERIPHERAL | 0x00010000)
+#define EFI_PERIPHERAL_MOUSE (EFI_PERIPHERAL | 0x00020000)
+#define EFI_PERIPHERAL_LOCAL_CONSOLE (EFI_PERIPHERAL | 0x00030000)
+#define EFI_PERIPHERAL_REMOTE_CONSOLE (EFI_PERIPHERAL | 0x00040000)
+#define EFI_PERIPHERAL_SERIAL_PORT (EFI_PERIPHERAL | 0x00050000)
+#define EFI_PERIPHERAL_PARALLEL_PORT (EFI_PERIPHERAL | 0x00060000)
+#define EFI_PERIPHERAL_FIXED_MEDIA (EFI_PERIPHERAL | 0x00070000)
+#define EFI_PERIPHERAL_REMOVABLE_MEDIA (EFI_PERIPHERAL | 0x00080000)
+#define EFI_PERIPHERAL_AUDIO_INPUT (EFI_PERIPHERAL | 0x00090000)
+#define EFI_PERIPHERAL_AUDIO_OUTPUT (EFI_PERIPHERAL | 0x000A0000)
+#define EFI_PERIPHERAL_LCD_DEVICE (EFI_PERIPHERAL | 0x000B0000)
+#define EFI_PERIPHERAL_NETWORK (EFI_PERIPHERAL | 0x000C0000)
+
+//
+// Peripheral Class Progress Code definitions.
+// These are shared by all subclasses.
+//
+#define EFI_P_PC_INIT 0x00000000
+#define EFI_P_PC_RESET 0x00000001
+#define EFI_P_PC_DISABLE 0x00000002
+#define EFI_P_PC_PRESENCE_DETECT 0x00000003
+#define EFI_P_PC_ENABLE 0x00000004
+#define EFI_P_PC_RECONFIG 0x00000005
+#define EFI_P_PC_DETECTED 0x00000006
+
+//
+// Peripheral Class Unspecified Subclass Progress Code definitions.
+//
+//
+// Peripheral Class Keyboard Subclass Progress Code definitions.
+//
+#define EFI_P_KEYBOARD_PC_CLEAR_BUFFER (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_P_KEYBOARD_PC_SELF_TEST (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+
+//
+// Peripheral Class Mouse Subclass Progress Code definitions.
+//
+#define EFI_P_MOUSE_PC_SELF_TEST (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+
+//
+// Peripheral Class Local Console Subclass Progress Code definitions.
+//
+//
+// Peripheral Class Remote Console Subclass Progress Code definitions.
+//
+//
+// Peripheral Class Serial Port Subclass Progress Code definitions.
+//
+#define EFI_P_SERIAL_PORT_PC_CLEAR_BUFFER (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+
+//
+// Peripheral Class Parallel Port Subclass Progress Code definitions.
+//
+//
+// Peripheral Class Fixed Media Subclass Progress Code definitions.
+//
+//
+// Peripheral Class Removable Media Subclass Progress Code definitions.
+//
+//
+// Peripheral Class Audio Input Subclass Progress Code definitions.
+//
+//
+// Peripheral Class Audio Output Subclass Progress Code definitions.
+//
+//
+// Peripheral Class LCD Device Subclass Progress Code definitions.
+//
+//
+// Peripheral Class Network Subclass Progress Code definitions.
+//
+//
+// Peripheral Class Error Code definitions.
+// These are shared by all subclasses.
+//
+#define EFI_P_EC_NON_SPECIFIC 0x00000000
+#define EFI_P_EC_DISABLED 0x00000001
+#define EFI_P_EC_NOT_SUPPORTED 0x00000002
+#define EFI_P_EC_NOT_DETECTED 0x00000003
+#define EFI_P_EC_NOT_CONFIGURED 0x00000004
+#define EFI_P_EC_INTERFACE_ERROR 0x00000005
+#define EFI_P_EC_CONTROLLER_ERROR 0x00000006
+#define EFI_P_EC_INPUT_ERROR 0x00000007
+#define EFI_P_EC_OUTPUT_ERROR 0x00000008
+#define EFI_P_EC_RESOURCE_CONFLICT 0x00000009
+
+//
+// Peripheral Class Unspecified Subclass Error Code definitions.
+//
+//
+// Peripheral Class Keyboard Subclass Error Code definitions.
+//
+#define EFI_P_KEYBOARD_EC_LOCKED (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_P_KEYBOARD_EC_STUCK_KEY (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+
+//
+// Peripheral Class Mouse Subclass Error Code definitions.
+//
+#define EFI_P_MOUSE_EC_LOCKED (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+
+//
+// Peripheral Class Local Console Subclass Error Code definitions.
+//
+//
+// Peripheral Class Remote Console Subclass Error Code definitions.
+//
+//
+// Peripheral Class Serial Port Subclass Error Code definitions.
+//
+//
+// Peripheral Class Parallel Port Subclass Error Code definitions.
+//
+//
+// Peripheral Class Fixed Media Subclass Error Code definitions.
+//
+//
+// Peripheral Class Removable Media Subclass Error Code definitions.
+//
+//
+// Peripheral Class Audio Input Subclass Error Code definitions.
+//
+//
+// Peripheral Class Audio Output Subclass Error Code definitions.
+//
+//
+// Peripheral Class LCD Device Subclass Error Code definitions.
+//
+//
+// Peripheral Class Network Subclass Error Code definitions.
+//
+
+///////////////////////////////////////////////////////////////////////////////
+// Section 5
+///////////////////////////////////////////////////////////////////////////////
+//
+// IO Bus Subclass definitions.
+// Values of 13-127 are reserved for future use by this
+// specification.
+// Values of 128-255 are reserved for OEM use.
+//
+#define EFI_IO_BUS_UNSPECIFIED (EFI_IO_BUS | 0x00000000)
+#define EFI_IO_BUS_PCI (EFI_IO_BUS | 0x00010000)
+#define EFI_IO_BUS_USB (EFI_IO_BUS | 0x00020000)
+#define EFI_IO_BUS_IBA (EFI_IO_BUS | 0x00030000)
+#define EFI_IO_BUS_AGP (EFI_IO_BUS | 0x00040000)
+#define EFI_IO_BUS_PC_CARD (EFI_IO_BUS | 0x00050000)
+#define EFI_IO_BUS_LPC (EFI_IO_BUS | 0x00060000)
+#define EFI_IO_BUS_SCSI (EFI_IO_BUS | 0x00070000)
+#define EFI_IO_BUS_ATA_ATAPI (EFI_IO_BUS | 0x00080000)
+#define EFI_IO_BUS_FC (EFI_IO_BUS | 0x00090000)
+#define EFI_IO_BUS_IP_NETWORK (EFI_IO_BUS | 0x000A0000)
+#define EFI_IO_BUS_SMBUS (EFI_IO_BUS | 0x000B0000)
+#define EFI_IO_BUS_I2C (EFI_IO_BUS | 0x000C0000)
+
+//
+// IO Bus Class Progress Code definitions.
+// These are shared by all subclasses.
+//
+#define EFI_IOB_PC_INIT 0x00000000
+#define EFI_IOB_PC_RESET 0x00000001
+#define EFI_IOB_PC_DISABLE 0x00000002
+#define EFI_IOB_PC_DETECT 0x00000003
+#define EFI_IOB_PC_ENABLE 0x00000004
+#define EFI_IOB_PC_RECONFIG 0x00000005
+#define EFI_IOB_PC_HOTPLUG 0x00000006
+
+//
+// IO Bus Class Unspecified Subclass Progress Code definitions.
+//
+//
+// IO Bus Class PCI Subclass Progress Code definitions.
+//
+#define EFI_IOB_PCI_PC_BUS_ENUM (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_IOB_PCI_PC_RES_ALLOC (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_IOB_PCI_PC_HPC_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+
+//
+// IO Bus Class USB Subclass Progress Code definitions.
+//
+//
+// IO Bus Class IBA Subclass Progress Code definitions.
+//
+//
+// IO Bus Class AGP Subclass Progress Code definitions.
+//
+//
+// IO Bus Class PC Card Subclass Progress Code definitions.
+//
+//
+// IO Bus Class LPC Subclass Progress Code definitions.
+//
+//
+// IO Bus Class SCSI Subclass Progress Code definitions.
+//
+//
+// IO Bus Class ATA/ATAPI Subclass Progress Code definitions.
+//
+#define EFI_IOB_ATA_BUS_SMART_ENABLE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_IOB_ATA_BUS_SMART_DISABLE (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_IOB_ATA_BUS_SMART_OVERTHRESHOLD (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_IOB_ATA_BUS_SMART_UNDERTHRESHOLD (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+
+//
+// IO Bus Class FC Subclass Progress Code definitions.
+//
+//
+// IO Bus Class IP Network Subclass Progress Code definitions.
+//
+//
+// IO Bus Class SMBUS Subclass Progress Code definitions.
+//
+//
+// IO Bus Class I2C Subclass Progress Code definitions.
+//
+//
+// IO Bus Class Error Code definitions.
+// These are shared by all subclasses.
+//
+#define EFI_IOB_EC_NON_SPECIFIC 0x00000000
+#define EFI_IOB_EC_DISABLED 0x00000001
+#define EFI_IOB_EC_NOT_SUPPORTED 0x00000002
+#define EFI_IOB_EC_NOT_DETECTED 0x00000003
+#define EFI_IOB_EC_NOT_CONFIGURED 0x00000004
+#define EFI_IOB_EC_INTERFACE_ERROR 0x00000005
+#define EFI_IOB_EC_CONTROLLER_ERROR 0x00000006
+#define EFI_IOB_EC_READ_ERROR 0x00000007
+#define EFI_IOB_EC_WRITE_ERROR 0x00000008
+#define EFI_IOB_EC_RESOURCE_CONFLICT 0x00000009
+
+//
+// IO Bus Class Unspecified Subclass Error Code definitions.
+//
+//
+// IO Bus Class PCI Subclass Error Code definitions.
+//
+#define EFI_IOB_PCI_EC_PERR (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_IOB_PCI_EC_SERR (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+
+//
+// IO Bus Class USB Subclass Error Code definitions.
+//
+//
+// IO Bus Class IBA Subclass Error Code definitions.
+//
+//
+// IO Bus Class AGP Subclass Error Code definitions.
+//
+//
+// IO Bus Class PC Card Subclass Error Code definitions.
+//
+//
+// IO Bus Class LPC Subclass Error Code definitions.
+//
+//
+// IO Bus Class SCSI Subclass Error Code definitions.
+//
+//
+// IO Bus Class ATA/ATAPI Subclass Error Code definitions.
+//
+#define EFI_IOB_ATA_BUS_SMART_NOTSUPPORTED (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_IOB_ATA_BUS_SMART_DISABLED (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+
+//
+// IO Bus Class FC Subclass Error Code definitions.
+//
+//
+// IO Bus Class IP Network Subclass Error Code definitions.
+//
+//
+// IO Bus Class SMBUS Subclass Error Code definitions.
+//
+//
+// IO Bus Class I2C Subclass Error Code definitions.
+//
+
+///////////////////////////////////////////////////////////////////////////////
+// Section 6
+///////////////////////////////////////////////////////////////////////////////
+//
+// Software Subclass definitions.
+// Values of 20-127 are reserved for future use by this
+// specification.
+// Values of 128-255 are reserved for OEM use.
+//
+#define EFI_SOFTWARE_UNSPECIFIED (EFI_SOFTWARE | 0x00000000)
+#define EFI_SOFTWARE_SEC (EFI_SOFTWARE | 0x00010000)
+#define EFI_SOFTWARE_PEI_CORE (EFI_SOFTWARE | 0x00020000)
+#define EFI_SOFTWARE_PEI_MODULE (EFI_SOFTWARE | 0x00030000)
+#define EFI_SOFTWARE_DXE_CORE (EFI_SOFTWARE | 0x00040000)
+#define EFI_SOFTWARE_DXE_BS_DRIVER (EFI_SOFTWARE | 0x00050000)
+#define EFI_SOFTWARE_DXE_RT_DRIVER (EFI_SOFTWARE | 0x00060000)
+#define EFI_SOFTWARE_SMM_DRIVER (EFI_SOFTWARE | 0x00070000)
+#define EFI_SOFTWARE_EFI_APPLICATION (EFI_SOFTWARE | 0x00080000)
+#define EFI_SOFTWARE_EFI_OS_LOADER (EFI_SOFTWARE | 0x00090000)
+#define EFI_SOFTWARE_RT (EFI_SOFTWARE | 0x000A0000)
+#define EFI_SOFTWARE_AL (EFI_SOFTWARE | 0x000B0000)
+#define EFI_SOFTWARE_EBC_EXCEPTION (EFI_SOFTWARE | 0x000C0000)
+#define EFI_SOFTWARE_IA32_EXCEPTION (EFI_SOFTWARE | 0x000D0000)
+#define EFI_SOFTWARE_IPF_EXCEPTION (EFI_SOFTWARE | 0x000E0000)
+#define EFI_SOFTWARE_PEI_SERVICE (EFI_SOFTWARE | 0x000F0000)
+#define EFI_SOFTWARE_EFI_BOOT_SERVICE (EFI_SOFTWARE | 0x00100000)
+#define EFI_SOFTWARE_EFI_RUNTIME_SERVICE (EFI_SOFTWARE | 0x00110000)
+#define EFI_SOFTWARE_EFI_DXE_SERVICE (EFI_SOFTWARE | 0x00120000)
+#define EFI_SOFTWARE_X64_EXCEPTION (EFI_SOFTWARE | 0x00130000)
+
+//
+// Software Class Progress Code definitions.
+// These are shared by all subclasses.
+//
+#define EFI_SW_PC_INIT 0x00000000
+#define EFI_SW_PC_LOAD 0x00000001
+#define EFI_SW_PC_INIT_BEGIN 0x00000002
+#define EFI_SW_PC_INIT_END 0x00000003
+#define EFI_SW_PC_AUTHENTICATE_BEGIN 0x00000004
+#define EFI_SW_PC_AUTHENTICATE_END 0x00000005
+#define EFI_SW_PC_INPUT_WAIT 0x00000006
+#define EFI_SW_PC_USER_SETUP 0x00000007
+
+//
+// Software Class Unspecified Subclass Progress Code definitions.
+//
+//
+// Software Class SEC Subclass Progress Code definitions.
+//
+#define EFI_SW_SEC_PC_ENTRY_POINT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_SEC_PC_HANDOFF_TO_NEXT (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+
+//
+// Software Class PEI Core Subclass Progress Code definitions.
+//
+#define EFI_SW_PEI_CORE_PC_ENTRY_POINT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_PEI_CORE_PC_HANDOFF_TO_NEXT (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_PEI_CORE_PC_RETURN_TO_LAST (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+
+//
+// Software Class PEI Module Subclass Progress Code definitions.
+//
+#define EFI_SW_PEIM_PC_RECOVERY_BEGIN (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_PEIM_PC_CAPSULE_LOAD (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_PEIM_PC_CAPSULE_START (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_SW_PEIM_PC_RECOVERY_USER (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_SW_PEIM_PC_RECOVERY_AUTO (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+
+//
+// Software Class DXE Core Subclass Progress Code definitions.
+//
+#define EFI_SW_DXE_CORE_PC_ENTRY_POINT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_DXE_CORE_PC_HANDOFF_TO_NEXT (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_DXE_CORE_PC_RETURN_TO_LAST (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_SW_DXE_CORE_PC_START_DRIVER (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+
+//
+// Software Class DXE BS Driver Subclass Progress Code definitions.
+//
+#define EFI_SW_DXE_BS_PC_LEGACY_OPROM_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_DXE_BS_PC_LEGACY_BOOT_EVENT (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_SW_DXE_BS_PC_EXIT_BOOT_SERVICES_EVENT (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_SW_DXE_BS_PC_VIRTUAL_ADDRESS_CHANGE_EVENT (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_SW_DXE_BS_PC_BEGIN_CONNECTING_DRIVERS (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+#define EFI_SW_DXE_BS_PC_VERIFYING_PASSWORD (EFI_SUBCLASS_SPECIFIC | 0x00000006)
+
+//
+// Software Class DXE RT Driver Subclass Progress Code definitions.
+//
+#define EFI_SW_DXE_RT_PC_S0 (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_DXE_RT_PC_S1 (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_DXE_RT_PC_S2 (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_SW_DXE_RT_PC_S3 (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_SW_DXE_RT_PC_S4 (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_SW_DXE_RT_PC_S5 (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+
+//
+// Software Class SMM Driver Subclass Progress Code definitions.
+//
+//
+// Software Class EFI Application Subclass Progress Code definitions.
+//
+//
+// Software Class EFI OS Loader Subclass Progress Code definitions.
+//
+//
+// Software Class EFI RT Subclass Progress Code definitions.
+//
+#define EFI_SW_RT_PC_ENTRY_POINT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_RT_PC_HANDOFF_TO_NEXT (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_RT_PC_RETURN_TO_LAST (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+
+//
+// Software Class EFI AL Subclass Progress Code definitions.
+//
+#define EFI_SW_AL_PC_ENTRY_POINT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_AL_PC_RETURN_TO_LAST (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+
+//
+// Software Class EBC Exception Subclass Progress Code definitions.
+//
+//
+// Software Class IA32 Exception Subclass Progress Code definitions.
+//
+//
+// Software Class X64 Exception Subclass Progress Code definitions.
+//
+//
+// Software Class IPF Exception Subclass Progress Code definitions.
+//
+//
+// Software Class PEI Services Subclass Progress Code definitions.
+//
+#define EFI_SW_PS_PC_INSTALL_PPI (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_PS_PC_REINSTALL_PPI (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_PS_PC_LOCATE_PPI (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_SW_PS_PC_NOTIFY_PPI (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_SW_PS_PC_GET_BOOT_MODE (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_SW_PS_PC_SET_BOOT_MODE (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+#define EFI_SW_PS_PC_GET_HOB_LIST (EFI_SUBCLASS_SPECIFIC | 0x00000006)
+#define EFI_SW_PS_PC_CREATE_HOB (EFI_SUBCLASS_SPECIFIC | 0x00000007)
+#define EFI_SW_PS_PC_FFS_FIND_NEXT_VOLUME (EFI_SUBCLASS_SPECIFIC | 0x00000008)
+#define EFI_SW_PS_PC_FFS_FIND_NEXT_FILE (EFI_SUBCLASS_SPECIFIC | 0x00000009)
+#define EFI_SW_PS_PC_FFS_FIND_SECTION_DATA (EFI_SUBCLASS_SPECIFIC | 0x0000000A)
+#define EFI_SW_PS_PC_INSTALL_PEI_MEMORY (EFI_SUBCLASS_SPECIFIC | 0x0000000B)
+#define EFI_SW_PS_PC_ALLOCATE_PAGES (EFI_SUBCLASS_SPECIFIC | 0x0000000C)
+#define EFI_SW_PS_PC_ALLOCATE_POOL (EFI_SUBCLASS_SPECIFIC | 0x0000000D)
+#define EFI_SW_PS_PC_COPY_MEM (EFI_SUBCLASS_SPECIFIC | 0x0000000E)
+#define EFI_SW_PS_PC_SET_MEM (EFI_SUBCLASS_SPECIFIC | 0x0000000F)
+
+//
+// Software Class EFI Boot Services Subclass Progress Code definitions.
+//
+#define EFI_SW_BS_PC_RAISE_TPL (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_BS_PC_RESTORE_TPL (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_BS_PC_ALLOCATE_PAGES (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_SW_BS_PC_FREE_PAGES (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_SW_BS_PC_GET_MEMORY_MAP (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_SW_BS_PC_ALLOCATE_POOL (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+#define EFI_SW_BS_PC_FREE_POOL (EFI_SUBCLASS_SPECIFIC | 0x00000006)
+#define EFI_SW_BS_PC_CREATE_EVENT (EFI_SUBCLASS_SPECIFIC | 0x00000007)
+#define EFI_SW_BS_PC_SET_TIMER (EFI_SUBCLASS_SPECIFIC | 0x00000008)
+#define EFI_SW_BS_PC_WAIT_FOR_EVENT (EFI_SUBCLASS_SPECIFIC | 0x00000009)
+#define EFI_SW_BS_PC_SIGNAL_EVENT (EFI_SUBCLASS_SPECIFIC | 0x0000000A)
+#define EFI_SW_BS_PC_CLOSE_EVENT (EFI_SUBCLASS_SPECIFIC | 0x0000000B)
+#define EFI_SW_BS_PC_CHECK_EVENT (EFI_SUBCLASS_SPECIFIC | 0x0000000C)
+#define EFI_SW_BS_PC_INSTALL_PROTOCOL_INTERFACE (EFI_SUBCLASS_SPECIFIC | 0x0000000D)
+#define EFI_SW_BS_PC_REINSTALL_PROTOCOL_INTERFACE (EFI_SUBCLASS_SPECIFIC | 0x0000000E)
+#define EFI_SW_BS_PC_UNINSTALL_PROTOCOL_INTERFACE (EFI_SUBCLASS_SPECIFIC | 0x0000000F)
+#define EFI_SW_BS_PC_HANDLE_PROTOCOL (EFI_SUBCLASS_SPECIFIC | 0x00000010)
+#define EFI_SW_BS_PC_PC_HANDLE_PROTOCOL (EFI_SUBCLASS_SPECIFIC | 0x00000011)
+#define EFI_SW_BS_PC_REGISTER_PROTOCOL_NOTIFY (EFI_SUBCLASS_SPECIFIC | 0x00000012)
+#define EFI_SW_BS_PC_LOCATE_HANDLE (EFI_SUBCLASS_SPECIFIC | 0x00000013)
+#define EFI_SW_BS_PC_INSTALL_CONFIGURATION_TABLE (EFI_SUBCLASS_SPECIFIC | 0x00000014)
+#define EFI_SW_BS_PC_LOAD_IMAGE (EFI_SUBCLASS_SPECIFIC | 0x00000015)
+#define EFI_SW_BS_PC_START_IMAGE (EFI_SUBCLASS_SPECIFIC | 0x00000016)
+#define EFI_SW_BS_PC_EXIT (EFI_SUBCLASS_SPECIFIC | 0x00000017)
+#define EFI_SW_BS_PC_UNLOAD_IMAGE (EFI_SUBCLASS_SPECIFIC | 0x00000018)
+#define EFI_SW_BS_PC_EXIT_BOOT_SERVICES (EFI_SUBCLASS_SPECIFIC | 0x00000019)
+#define EFI_SW_BS_PC_GET_NEXT_MONOTONIC_COUNT (EFI_SUBCLASS_SPECIFIC | 0x0000001A)
+#define EFI_SW_BS_PC_STALL (EFI_SUBCLASS_SPECIFIC | 0x0000001B)
+#define EFI_SW_BS_PC_SET_WATCHDOG_TIMER (EFI_SUBCLASS_SPECIFIC | 0x0000001C)
+#define EFI_SW_BS_PC_CONNECT_CONTROLLER (EFI_SUBCLASS_SPECIFIC | 0x0000001D)
+#define EFI_SW_BS_PC_DISCONNECT_CONTROLLER (EFI_SUBCLASS_SPECIFIC | 0x0000001E)
+#define EFI_SW_BS_PC_OPEN_PROTOCOL (EFI_SUBCLASS_SPECIFIC | 0x0000001F)
+#define EFI_SW_BS_PC_CLOSE_PROTOCOL (EFI_SUBCLASS_SPECIFIC | 0x00000020)
+#define EFI_SW_BS_PC_OPEN_PROTOCOL_INFORMATION (EFI_SUBCLASS_SPECIFIC | 0x00000021)
+#define EFI_SW_BS_PC_PROTOCOLS_PER_HANDLE (EFI_SUBCLASS_SPECIFIC | 0x00000022)
+#define EFI_SW_BS_PC_LOCATE_HANDLE_BUFFER (EFI_SUBCLASS_SPECIFIC | 0x00000023)
+#define EFI_SW_BS_PC_LOCATE_PROTOCOL (EFI_SUBCLASS_SPECIFIC | 0x00000024)
+#define EFI_SW_BS_PC_INSTALL_MULTIPLE_INTERFACES (EFI_SUBCLASS_SPECIFIC | 0x00000025)
+#define EFI_SW_BS_PC_UNINSTALL_MULTIPLE_INTERFACES (EFI_SUBCLASS_SPECIFIC | 0x00000026)
+#define EFI_SW_BS_PC_CALCULATE_CRC_32 (EFI_SUBCLASS_SPECIFIC | 0x00000027)
+#define EFI_SW_BS_PC_COPY_MEM (EFI_SUBCLASS_SPECIFIC | 0x00000028)
+#define EFI_SW_BS_PC_SET_MEM (EFI_SUBCLASS_SPECIFIC | 0x00000029)
+
+//
+// Software Class EFI Runtime Services Subclass Progress Code definitions.
+//
+#define EFI_SW_RS_PC_GET_TIME (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_RS_PC_SET_TIME (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_RS_PC_GET_WAKEUP_TIME (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_SW_RS_PC_SET_WAKEUP_TIME (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_SW_RS_PC_SET_VIRTUAL_ADDRESS_MAP (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_SW_RS_PC_CONVERT_POINTER (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+#define EFI_SW_RS_PC_GET_VARIABLE (EFI_SUBCLASS_SPECIFIC | 0x00000006)
+#define EFI_SW_RS_PC_GET_NEXT_VARIABLE_NAME (EFI_SUBCLASS_SPECIFIC | 0x00000007)
+#define EFI_SW_RS_PC_SET_VARIABLE (EFI_SUBCLASS_SPECIFIC | 0x00000008)
+#define EFI_SW_RS_PC_GET_NEXT_HIGH_MONOTONIC_COUNT (EFI_SUBCLASS_SPECIFIC | 0x00000009)
+#define EFI_SW_RS_PC_RESET_SYSTEM (EFI_SUBCLASS_SPECIFIC | 0x0000000A)
+
+//
+// Software Class EFI DXE Services Subclass Progress Code definitions
+//
+#define EFI_SW_DS_PC_ADD_MEMORY_SPACE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_DS_PC_ALLOCATE_MEMORY_SPACE (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+#define EFI_SW_DS_PC_FREE_MEMORY_SPACE (EFI_SUBCLASS_SPECIFIC | 0x00000002)
+#define EFI_SW_DS_PC_REMOVE_MEMORY_SPACE (EFI_SUBCLASS_SPECIFIC | 0x00000003)
+#define EFI_SW_DS_PC_GET_MEMORY_SPACE_DESCRIPTOR (EFI_SUBCLASS_SPECIFIC | 0x00000004)
+#define EFI_SW_DS_PC_SET_MEMORY_SPACE_ATTRIBUTES (EFI_SUBCLASS_SPECIFIC | 0x00000005)
+#define EFI_SW_DS_PC_GET_MEMORY_SPACE_MAP (EFI_SUBCLASS_SPECIFIC | 0x00000006)
+#define EFI_SW_DS_PC_ADD_IO_SPACE (EFI_SUBCLASS_SPECIFIC | 0x00000007)
+#define EFI_SW_DS_PC_ALLOCATE_IO_SPACE (EFI_SUBCLASS_SPECIFIC | 0x00000008)
+#define EFI_SW_DS_PC_FREE_IO_SPACE (EFI_SUBCLASS_SPECIFIC | 0x00000009)
+#define EFI_SW_DS_PC_REMOVE_IO_SPACE (EFI_SUBCLASS_SPECIFIC | 0x0000000A)
+#define EFI_SW_DS_PC_GET_IO_SPACE_DESCRIPTOR (EFI_SUBCLASS_SPECIFIC | 0x0000000B)
+#define EFI_SW_DS_PC_GET_IO_SPACE_MAP (EFI_SUBCLASS_SPECIFIC | 0x0000000C)
+#define EFI_SW_DS_PC_DISPATCH (EFI_SUBCLASS_SPECIFIC | 0x0000000D)
+#define EFI_SW_DS_PC_SCHEDULE (EFI_SUBCLASS_SPECIFIC | 0x0000000E)
+#define EFI_SW_DS_PC_TRUST (EFI_SUBCLASS_SPECIFIC | 0x0000000F)
+#define EFI_SW_DS_PC_PROCESS_FIRMWARE_VOLUME (EFI_SUBCLASS_SPECIFIC | 0x00000010)
+
+//
+// Software Class Error Code definitions.
+// These are shared by all subclasses.
+//
+#define EFI_SW_EC_NON_SPECIFIC 0x00000000
+#define EFI_SW_EC_LOAD_ERROR 0x00000001
+#define EFI_SW_EC_INVALID_PARAMETER 0x00000002
+#define EFI_SW_EC_UNSUPPORTED 0x00000003
+#define EFI_SW_EC_INVALID_BUFFER 0x00000004
+#define EFI_SW_EC_OUT_OF_RESOURCES 0x00000005
+#define EFI_SW_EC_ABORTED 0x00000006
+#define EFI_SW_EC_ILLEGAL_SOFTWARE_STATE 0x00000007
+#define EFI_SW_EC_ILLEGAL_HARDWARE_STATE 0x00000008
+#define EFI_SW_EC_START_ERROR 0x00000009
+#define EFI_SW_EC_BAD_DATE_TIME 0x0000000A
+#define EFI_SW_EC_CFG_INVALID 0x0000000B
+#define EFI_SW_EC_CFG_CLR_REQUEST 0x0000000C
+#define EFI_SW_EC_CFG_DEFAULT 0x0000000D
+#define EFI_SW_EC_PWD_INVALID 0x0000000E
+#define EFI_SW_EC_PWD_CLR_REQUEST 0x0000000F
+#define EFI_SW_EC_PWD_CLEARED 0x00000010
+#define EFI_SW_EC_EVENT_LOG_FULL 0x00000011
+
+//
+// Software Class Unspecified Subclass Error Code definitions.
+//
+//
+// Software Class SEC Subclass Error Code definitions.
+//
+//
+// Software Class PEI Core Subclass Error Code definitions.
+//
+#define EFI_SW_PEI_CORE_EC_DXE_CORRUPT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+
+//
+// Software Class PEI Module Subclass Error Code definitions.
+//
+#define EFI_SW_PEIM_EC_NO_RECOVERY_CAPSULE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+#define EFI_SW_PEIM_EC_INVALID_CAPSULE_DESCRIPTOR (EFI_SUBCLASS_SPECIFIC | 0x00000001)
+
+//
+// Software Class DXE Core Subclass Error Code definitions.
+//
+#define EFI_SW_CSM_LEGACY_ROM_INIT (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+//
+// Software Class DXE Boot Service Driver Subclass Error Code definitions.
+//
+#define EFI_SW_DXE_BS_EC_LEGACY_OPROM_NO_SPACE (EFI_SUBCLASS_SPECIFIC | 0x00000000)
+
+//
+// Software Class DXE Runtime Service Driver Subclass Error Code definitions.
+//
+//
+// Software Class SMM Driver Subclass Error Code definitions.
+//
+//
+// Software Class EFI Application Subclass Error Code definitions.
+//
+//
+// Software Class EFI OS Loader Subclass Error Code definitions.
+//
+//
+// Software Class EFI RT Subclass Error Code definitions.
+//
+//
+// Software Class EFI AL Subclass Error Code definitions.
+//
+//
+// Software Class EBC Exception Subclass Error Code definitions.
+// These exceptions are derived from the debug protocol definitions in the EFI
+// specification.
+//
+#define EFI_SW_EC_EBC_UNDEFINED (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_UNDEFINED)
+#define EFI_SW_EC_EBC_DIVIDE_ERROR (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_DIVIDE_ERROR)
+#define EFI_SW_EC_EBC_DEBUG (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_DEBUG)
+#define EFI_SW_EC_EBC_BREAKPOINT (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_BREAKPOINT)
+#define EFI_SW_EC_EBC_OVERFLOW (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_OVERFLOW)
+#define EFI_SW_EC_EBC_INVALID_OPCODE (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_INVALID_OPCODE)
+#define EFI_SW_EC_EBC_STACK_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_STACK_FAULT)
+#define EFI_SW_EC_EBC_ALIGNMENT_CHECK (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_ALIGNMENT_CHECK)
+#define EFI_SW_EC_EBC_INSTRUCTION_ENCODING (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_INSTRUCTION_ENCODING)
+#define EFI_SW_EC_EBC_BAD_BREAK (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_BAD_BREAK)
+#define EFI_SW_EC_EBC_STEP (EFI_SUBCLASS_SPECIFIC | EXCEPT_EBC_STEP)
+
+//
+// Software Class IA32 Exception Subclass Error Code definitions.
+// These exceptions are derived from the debug protocol definitions in the EFI
+// specification.
+//
+#define EFI_SW_EC_IA32_DIVIDE_ERROR (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_DIVIDE_ERROR)
+#define EFI_SW_EC_IA32_DEBUG (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_DEBUG)
+#define EFI_SW_EC_IA32_NMI (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_NMI)
+#define EFI_SW_EC_IA32_BREAKPOINT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_BREAKPOINT)
+#define EFI_SW_EC_IA32_OVERFLOW (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_OVERFLOW)
+#define EFI_SW_EC_IA32_BOUND (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_BOUND)
+#define EFI_SW_EC_IA32_INVALID_OPCODE (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_INVALID_OPCODE)
+#define EFI_SW_EC_IA32_DOUBLE_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_DOUBLE_FAULT)
+#define EFI_SW_EC_IA32_INVALID_TSS (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_INVALID_TSS)
+#define EFI_SW_EC_IA32_SEG_NOT_PRESENT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_SEG_NOT_PRESENT)
+#define EFI_SW_EC_IA32_STACK_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_STACK_FAULT)
+#define EFI_SW_EC_IA32_GP_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_GP_FAULT)
+#define EFI_SW_EC_IA32_PAGE_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_PAGE_FAULT)
+#define EFI_SW_EC_IA32_FP_ERROR (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_FP_ERROR)
+#define EFI_SW_EC_IA32_ALIGNMENT_CHECK (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_ALIGNMENT_CHECK)
+#define EFI_SW_EC_IA32_MACHINE_CHECK (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_MACHINE_CHECK)
+#define EFI_SW_EC_IA32_SIMD (EFI_SUBCLASS_SPECIFIC | EXCEPT_IA32_SIMD)
+
+//
+// Software Class X64 Exception Subclass Error Code definitions.
+// These exceptions are derived from the debug protocol definitions in the EFI
+// specification.
+//
+#define EFI_SW_EC_X64_DIVIDE_ERROR (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_DIVIDE_ERROR)
+#define EFI_SW_EC_X64_DEBUG (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_DEBUG)
+#define EFI_SW_EC_X64_NMI (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_NMI)
+#define EFI_SW_EC_X64_BREAKPOINT (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_BREAKPOINT)
+#define EFI_SW_EC_X64_OVERFLOW (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_OVERFLOW)
+#define EFI_SW_EC_X64_BOUND (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_BOUND)
+#define EFI_SW_EC_X64_INVALID_OPCODE (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_INVALID_OPCODE)
+#define EFI_SW_EC_X64_DOUBLE_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_DOUBLE_FAULT)
+#define EFI_SW_EC_X64_INVALID_TSS (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_INVALID_TSS)
+#define EFI_SW_EC_X64_SEG_NOT_PRESENT (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_SEG_NOT_PRESENT)
+#define EFI_SW_EC_X64_STACK_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_STACK_FAULT)
+#define EFI_SW_EC_X64_GP_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_GP_FAULT)
+#define EFI_SW_EC_X64_PAGE_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_PAGE_FAULT)
+#define EFI_SW_EC_X64_FP_ERROR (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_FP_ERROR)
+#define EFI_SW_EC_X64_ALIGNMENT_CHECK (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_ALIGNMENT_CHECK)
+#define EFI_SW_EC_X64_MACHINE_CHECK (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_MACHINE_CHECK)
+#define EFI_SW_EC_X64_SIMD (EFI_SUBCLASS_SPECIFIC | EXCEPT_X64_SIMD)
+
+//
+// Software Class IPF Exception Subclass Error Code definitions.
+// These exceptions are derived from the debug protocol definitions in the EFI
+// specification.
+//
+#define EFI_SW_EC_IPF_ALT_DTLB (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_ALT_DTLB)
+#define EFI_SW_EC_IPF_DNESTED_TLB (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_DNESTED_TLB)
+#define EFI_SW_EC_IPF_BREAKPOINT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_BREAKPOINT)
+#define EFI_SW_EC_IPF_EXTERNAL_INTERRUPT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_EXTERNAL_INTERRUPT)
+#define EFI_SW_EC_IPF_GEN_EXCEPT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_GEN_EXCEPT)
+#define EFI_SW_EC_IPF_NAT_CONSUMPTION (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_NAT_CONSUMPTION)
+#define EFI_SW_EC_IPF_DEBUG_EXCEPT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_DEBUG_EXCEPT)
+#define EFI_SW_EC_IPF_UNALIGNED_ACCESS (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_UNALIGNED_ACCESS)
+#define EFI_SW_EC_IPF_FP_FAULT (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_FP_FAULT)
+#define EFI_SW_EC_IPF_FP_TRAP (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_FP_TRAP)
+#define EFI_SW_EC_IPF_TAKEN_BRANCH (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_TAKEN_BRANCH)
+#define EFI_SW_EC_IPF_SINGLE_STEP (EFI_SUBCLASS_SPECIFIC | EXCEPT_IPF_SINGLE_STEP)
+
+//
+// Software Class PEI Service Subclass Error Code definitions.
+//
+//
+// Software Class EFI Boot Service Subclass Error Code definitions.
+//
+//
+// Software Class EFI Runtime Service Subclass Error Code definitions.
+//
+//
+// Software Class EFI DXE Service Subclass Error Code definitions.
+//
+
+///////////////////////////////////////////////////////////////////////////////
+// Section 7
+///////////////////////////////////////////////////////////////////////////////
+//
+// Debug Code definitions for all classes and subclass
+// Only one debug code is defined at this point and should
+// be used for anything that gets sent to debug stream.
+//
+#define EFI_DC_UNSPECIFIED 0x0
+
+//
+// Progress code for S3 suspend start and S3 suspend end is not defined,
+// the following are the implementation specific definition.
+//
+#define PROGRESS_CODE_S3_SUSPEND_START (EFI_SOFTWARE_SMM_DRIVER | (EFI_OEM_SPECIFIC | 0x00000000))
+#define PROGRESS_CODE_S3_SUSPEND_END (EFI_SOFTWARE_SMM_DRIVER | (EFI_OEM_SPECIFIC | 0x00000001))
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/EfiVariable.h b/EDK/Foundation/Framework/Include/EfiVariable.h
new file mode 100644
index 0000000..6879f60
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/EfiVariable.h
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EfiVariable.h
+
+Abstract:
+
+
+
+--*/
+
+#ifndef _EFI_VARIABLE_DEFINITION_H_
+#define _EFI_VARIABLE_DEFINITION_H_
+
+//
+// Variable attributes
+//
+#define EFI_VARIABLE_NON_VOLATILE 0x00000001
+#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
+#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
+#define EFI_VARIABLE_READ_ONLY 0x00000008
+
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/PeiApi.h b/EDK/Foundation/Framework/Include/PeiApi.h
new file mode 100644
index 0000000..f21b6da
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/PeiApi.h
@@ -0,0 +1,632 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PeiApi.h
+
+Abstract:
+
+ Tiano PEI intrinsic definitions. This includes all Pei Services APIs.
+
+ Peims are passed in a pointer to a pointer to the PEI Services table.
+ The PEI Services table contains pointers to the PEI services exported
+ by the PEI Core.
+
+--*/
+
+#ifndef _PEI_API_H_
+#define _PEI_API_H_
+
+#include "PeiHob.h"
+#include "EfiFirmwareFileSystem.h"
+#include "EfiFirmwareVolumeHeader.h"
+#include EFI_PPI_DEFINITION (FirmwareVolumeInfo) //;;## ...AMI_OVERRIDE... Support PI1.x
+#include EFI_PPI_DEFINITION (FirmwareVolume) //;;## ...AMI_OVERRIDE... Support PI1.x
+#include EFI_PPI_DEFINITION (Decompress) //;;## ...AMI_OVERRIDE... Support PI1.x
+
+
+//
+// Declare forward referenced data structures
+//
+EFI_FORWARD_DECLARATION (EFI_PEI_NOTIFY_DESCRIPTOR);
+EFI_FORWARD_DECLARATION (EFI_PEI_SERVICES);
+
+#include EFI_PPI_DEFINITION (CpuIo)
+#include EFI_PPI_DEFINITION (PciCfg)
+#include EFI_PPI_DEFINITION (PciCfg2)
+#include EFI_PPI_DEFINITION (EcpPciCfg)
+
+//
+// PEI Specification Revision information
+//
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+#define PEI_SPECIFICATION_MAJOR_REVISION 0
+#define PEI_SPECIFICATION_MINOR_REVISION 91
+#else
+#define PEI_SPECIFICATION_MAJOR_REVISION 1
+#define PEI_SPECIFICATION_MINOR_REVISION 00
+#endif
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEIM_ENTRY_POINT)(IN EFI_FFS_FILE_HEADER * FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEIM_NOTIFY_ENTRY_POINT) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR * NotifyDescriptor,
+ IN VOID *Ppi
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_VERIFICATION) (
+ IN UINTN SectionAddress
+ );
+
+//
+// PEI Ppi Services List Descriptors
+//
+#define EFI_PEI_PPI_DESCRIPTOR_PIC 0x00000001
+#define EFI_PEI_PPI_DESCRIPTOR_PPI 0x00000010
+#define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK 0x00000020
+#define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH 0x00000040
+#define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_TYPES 0x00000060
+#define EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST 0x80000000
+
+typedef struct {
+ UINTN Flags;
+ EFI_GUID *Guid;
+ VOID *Ppi;
+} EFI_PEI_PPI_DESCRIPTOR;
+
+typedef struct _EFI_PEI_NOTIFY_DESCRIPTOR {
+ UINTN Flags;
+ EFI_GUID *Guid;
+ EFI_PEIM_NOTIFY_ENTRY_POINT Notify;
+} EFI_PEI_NOTIFY_DESCRIPTOR;
+
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_INSTALL_PPI) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_PPI_DESCRIPTOR * PpiList
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_REINSTALL_PPI) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_PPI_DESCRIPTOR * OldPpi,
+ IN EFI_PEI_PPI_DESCRIPTOR * NewPpi
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_LOCATE_PPI) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_GUID * Guid,
+ IN UINTN Instance,
+ IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,
+ IN OUT VOID **Ppi
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_NOTIFY_PPI) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR * NotifyList
+ );
+
+//
+// EFI PEI Boot Mode Services
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_BOOT_MODE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT EFI_BOOT_MODE * BootMode
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SET_BOOT_MODE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_BOOT_MODE BootMode
+ );
+
+//
+// PEI HOB Services
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_HOB_LIST) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT VOID **HobList
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_CREATE_HOB) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN UINT16 Type,
+ IN UINT16 Length,
+ IN OUT VOID **Hob
+ );
+
+//
+// FFS Fw Volume support functions
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN UINTN Instance,
+ IN OUT EFI_FIRMWARE_VOLUME_HEADER **FwVolHeader
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_NEXT_FILE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_FV_FILETYPE SearchType,
+ IN EFI_FIRMWARE_VOLUME_HEADER * FwVolHeader,
+ IN OUT EFI_FFS_FILE_HEADER **FileHeader
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_SECTION_DATA) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_SECTION_TYPE SectionType,
+ IN EFI_FFS_FILE_HEADER * FfsFileHeader,
+ IN OUT VOID **SectionData
+ );
+
+//
+// Memory Services
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_INSTALL_PEI_MEMORY) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PHYSICAL_ADDRESS MemoryBegin,
+ IN UINT64 MemoryLength
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_ALLOCATE_PAGES) (
+
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_MEMORY_TYPE MemoryType,
+ IN UINTN Pages,
+ IN OUT EFI_PHYSICAL_ADDRESS * Memory
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_ALLOCATE_POOL) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN UINTN Size,
+ OUT VOID **Buffer
+ );
+
+typedef
+VOID
+(EFIAPI *EFI_PEI_COPY_MEM) (
+ IN VOID *Destination,
+ IN VOID *Source,
+ IN UINTN Length
+ );
+
+typedef
+VOID
+(EFIAPI *EFI_PEI_SET_MEM) (
+ IN VOID *Buffer,
+ IN UINTN Size,
+ IN UINT8 Value
+ );
+
+//
+// Status Code
+//
+//
+// Definition of Status Code extended data header
+//
+// HeaderSize The size of the architecture. This is specified to enable
+// the future expansion
+//
+// Size The size of the data in bytes. This does not include the size
+// of the header structure.
+//
+// Type A GUID defining the type of the data
+//
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_REPORT_STATUS_CODE) (
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID * CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA * Data OPTIONAL
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_REPORT_STATUS_CODE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID * CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA * Data OPTIONAL
+ );
+
+//
+// PEI Reset
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_RESET_SYSTEM) (
+ IN EFI_PEI_SERVICES **PeiServices
+ );
+
+
+
+#else
+
+//
+// PEI PPI Services
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_INSTALL_PPI) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN CONST EFI_PEI_PPI_DESCRIPTOR * PpiList
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_REINSTALL_PPI) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN CONST EFI_PEI_PPI_DESCRIPTOR * OldPpi,
+ IN CONST EFI_PEI_PPI_DESCRIPTOR * NewPpi
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_LOCATE_PPI) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN CONST EFI_GUID * Guid,
+ IN UINTN Instance,
+ IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor OPTIONAL,
+ IN OUT VOID **Ppi
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_NOTIFY_PPI) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN CONST EFI_PEI_NOTIFY_DESCRIPTOR * NotifyList
+ );
+
+//
+// PEI Boot Mode Services
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_BOOT_MODE) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN OUT EFI_BOOT_MODE * BootMode
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SET_BOOT_MODE) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_BOOT_MODE BootMode
+ );
+
+//
+// PEI HOB Services
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_HOB_LIST) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN OUT VOID **HobList
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_CREATE_HOB) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN UINT16 Type,
+ IN UINT16 Length,
+ IN OUT VOID **Hob
+ );
+
+
+
+ //
+ // PEI Firmware Volume Services
+ //
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME2) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN UINTN Instance,
+ IN OUT EFI_PEI_FV_HANDLE *VolumeHandle
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_NEXT_FILE2) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_FV_FILETYPE SearchType,
+ IN CONST EFI_PEI_FV_HANDLE FvHandle,
+ IN OUT EFI_PEI_FILE_HANDLE *FileHandle
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_SECTION_DATA2) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_SECTION_TYPE SectionType,
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ OUT VOID **SectionData
+ );
+
+
+ //
+ // PEI Memory Services
+ //
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_INSTALL_PEI_MEMORY) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PHYSICAL_ADDRESS MemoryBegin,
+ IN UINT64 MemoryLength
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_ALLOCATE_PAGES) (
+
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN EFI_MEMORY_TYPE MemoryType,
+ IN UINTN Pages,
+ IN OUT EFI_PHYSICAL_ADDRESS * Memory
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_ALLOCATE_POOL) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN UINTN Size,
+ OUT VOID **Buffer
+ );
+
+typedef
+VOID
+(EFIAPI *EFI_PEI_COPY_MEM) (
+ IN VOID *Destination,
+ IN VOID *Source,
+ IN UINTN Length
+ );
+
+typedef
+VOID
+(EFIAPI *EFI_PEI_SET_MEM) (
+ IN VOID *Buffer,
+ IN UINTN Size,
+ IN UINT8 Value
+ );
+
+ //
+ // New interfaceas added by the PI 1.0
+ //
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_BY_NAME) (
+ IN CONST EFI_GUID *FileName,
+ IN EFI_PEI_FV_HANDLE VolumeHandle,
+ OUT EFI_PEI_FILE_HANDLE *FileHandle
+ );
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_GET_FILE_INFO) (
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ OUT EFI_FV_FILE_INFO *FileInfo
+ );
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_GET_VOLUME_INFO) (
+ IN EFI_PEI_FV_HANDLE VolumeHandle,
+ OUT EFI_FV_INFO *VolumeInfo
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_REGISTER_FOR_SHADOW) (
+ IN EFI_PEI_FILE_HANDLE FileHandle
+ );
+
+//
+// PEI Status Code Service
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_REPORT_STATUS_CODE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ );
+
+//
+// PEI Reset Service
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_RESET_SYSTEM) (
+ IN EFI_PEI_SERVICES **PeiServices
+ );
+
+#endif
+
+
+//
+// EFI PEI Services Table
+//
+#define PEI_SERVICES_SIGNATURE 0x5652455320494550
+#define PEI_SERVICES_REVISION ((PEI_SPECIFICATION_MAJOR_REVISION << 16) | (PEI_SPECIFICATION_MINOR_REVISION))
+typedef PEI_CPU_IO_PPI EFI_PEI_CPU_IO_PPI; //;;## ...AMI_OVERRIDE... Support PI1.x
+
+typedef struct _EFI_PEI_SERVICES {
+ EFI_TABLE_HEADER Hdr;
+
+ //
+ // PPI Functions
+ //
+ EFI_PEI_INSTALL_PPI InstallPpi;
+ EFI_PEI_REINSTALL_PPI ReInstallPpi;
+ EFI_PEI_LOCATE_PPI LocatePpi;
+ EFI_PEI_NOTIFY_PPI NotifyPpi;
+
+ //
+ // Boot Mode Functions
+ //
+ EFI_PEI_GET_BOOT_MODE GetBootMode;
+ EFI_PEI_SET_BOOT_MODE SetBootMode;
+
+ //
+ // HOB Functions
+ //
+ EFI_PEI_GET_HOB_LIST GetHobList;
+ EFI_PEI_CREATE_HOB CreateHob;
+
+ //
+ // Filesystem Functions
+ //
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+ EFI_PEI_FFS_FIND_NEXT_VOLUME FfsFindNextVolume;
+ EFI_PEI_FFS_FIND_NEXT_FILE FfsFindNextFile;
+ EFI_PEI_FFS_FIND_SECTION_DATA FfsFindSectionData;
+#else
+ EFI_PEI_FFS_FIND_NEXT_VOLUME2 FfsFindNextVolume;
+ EFI_PEI_FFS_FIND_NEXT_FILE2 FfsFindNextFile;
+ EFI_PEI_FFS_FIND_SECTION_DATA2 FfsFindSectionData;
+#endif
+ //
+ // Memory Functions
+ //
+ EFI_PEI_INSTALL_PEI_MEMORY InstallPeiMemory;
+ EFI_PEI_ALLOCATE_PAGES AllocatePages;
+ EFI_PEI_ALLOCATE_POOL AllocatePool;
+ EFI_PEI_COPY_MEM CopyMem;
+ EFI_PEI_SET_MEM SetMem;
+
+ //
+ // Status Code
+ //
+ EFI_PEI_REPORT_STATUS_CODE PeiReportStatusCode;
+
+ //
+ // Reset
+ //
+ EFI_PEI_RESET_SYSTEM PeiResetSystem;
+
+ //
+ // Pointer to PPI interface
+ //
+//;;## ...AMI_OVERRIDE... Support PI1.x start
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+
+ PEI_CPU_IO_PPI *CpuIo;
+#if defined (SUPPORT_DEPRECATED_PCI_CFG_PPI)
+ PEI_PCI_CFG_PPI *PciCfg;
+#else
+ ECP_PEI_PCI_CFG_PPI *PciCfg;
+#endif
+#else
+ EFI_PEI_CPU_IO_PPI *CpuIo;
+#if defined (SUPPORT_DEPRECATED_PCI_CFG_PPI)
+ EFI_PEI_PCI_CFG2_PPI *PciCfg;
+#else
+ ECP_PEI_PCI_CFG_PPI *PciCfg;
+#endif
+ //
+ // New interfaceas added by the PI 1.0
+ //
+ EFI_PEI_FFS_FIND_BY_NAME FfsFindFileByName;
+ EFI_PEI_FFS_GET_FILE_INFO FfsGetFileInfo;
+ EFI_PEI_FFS_GET_VOLUME_INFO FfsGetVolumeInfo;
+ EFI_PEI_REGISTER_FOR_SHADOW RegisterForShadow;
+#endif
+//;;## ...AMI_OVERRIDE... Support PI1.x end
+} EFI_PEI_SERVICES;
+
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+
+typedef struct {
+ UINTN BootFirmwareVolume;
+ UINTN SizeOfCacheAsRam;
+ EFI_PEI_PPI_DESCRIPTOR *DispatchTable;
+} EFI_PEI_STARTUP_DESCRIPTOR;
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_MAIN_ENTRY_POINT) (
+ IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor
+ );
+
+#else
+
+typedef struct _EFI_SEC_PEI_HAND_OFF{
+ UINT16 DataSize;
+ VOID *BootFirmwareVolumeBase;
+ UINTN BootFirmwareVolumeSize;
+ VOID *TemporaryRamBase;
+ UINTN TemporaryRamSize;
+ VOID *PeiTemporaryRamBase;
+ UINTN PeiTemporaryRamSize;
+ VOID *StackBase;
+ UINTN StackSize;
+}EFI_SEC_PEI_HAND_OFF;
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_MAIN_ENTRY_POINT) (
+ IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData,
+ IN CONST EFI_PEI_PPI_DESCRIPTOR *PpList
+ );
+
+#endif
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/PeiHob.h b/EDK/Foundation/Framework/Include/PeiHob.h
new file mode 100644
index 0000000..a11709b
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/PeiHob.h
@@ -0,0 +1,253 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PeiHob.h
+
+Abstract:
+
+ PEI Hand Off Block (HOB) definition.
+
+ The HOB is a memory data structure used to hand-off system information from
+ PEI to DXE (the next phase).
+
+--*/
+
+#ifndef _PEI_HOB_H_
+#define _PEI_HOB_H_
+
+#include "BootMode.h"
+
+//
+// Every Hob must start with this data structure.
+//
+typedef struct {
+ UINT16 HobType;
+ UINT16 HobLength;
+ UINT32 Reserved;
+} EFI_HOB_GENERIC_HEADER;
+
+//
+// End of HOB List HOB
+//
+#define EFI_HOB_TYPE_END_OF_HOB_LIST 0xffff
+
+//
+// Handoff Information Table HOB
+//
+#define EFI_HOB_TYPE_HANDOFF 0x0001
+
+#define EFI_HOB_HANDOFF_TABLE_VERSION 0x0009
+
+typedef UINT32 EFI_BOOT_MODE;
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ UINT32 Version;
+ EFI_BOOT_MODE BootMode;
+ EFI_PHYSICAL_ADDRESS EfiMemoryTop;
+ EFI_PHYSICAL_ADDRESS EfiMemoryBottom;
+ EFI_PHYSICAL_ADDRESS EfiFreeMemoryTop;
+ EFI_PHYSICAL_ADDRESS EfiFreeMemoryBottom;
+ EFI_PHYSICAL_ADDRESS EfiEndOfHobList;
+} EFI_HOB_HANDOFF_INFO_TABLE;
+
+//
+// Memory Descriptor HOB
+//
+#define EFI_HOB_TYPE_MEMORY_ALLOCATION 0x0002
+
+typedef struct {
+ EFI_GUID Name;
+ EFI_PHYSICAL_ADDRESS MemoryBaseAddress;
+ UINT64 MemoryLength;
+ EFI_MEMORY_TYPE MemoryType;
+ UINT8 Reserved[4];
+} EFI_HOB_MEMORY_ALLOCATION_HEADER;
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor;
+ //
+ // Additional data pertaining to the "Name" Guid memory
+ // may go here.
+ //
+} EFI_HOB_MEMORY_ALLOCATION;
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor;
+} EFI_HOB_MEMORY_ALLOCATION_BSP_STORE;
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor;
+} EFI_HOB_MEMORY_ALLOCATION_STACK;
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ EFI_HOB_MEMORY_ALLOCATION_HEADER MemoryAllocationHeader;
+ EFI_GUID ModuleName;
+ EFI_PHYSICAL_ADDRESS EntryPoint;
+} EFI_HOB_MEMORY_ALLOCATION_MODULE;
+
+#define EFI_HOB_TYPE_RESOURCE_DESCRIPTOR 0x0003
+
+typedef UINT32 EFI_RESOURCE_TYPE;
+
+#define EFI_RESOURCE_SYSTEM_MEMORY 0
+#define EFI_RESOURCE_MEMORY_MAPPED_IO 1
+#define EFI_RESOURCE_IO 2
+#define EFI_RESOURCE_FIRMWARE_DEVICE 3
+#define EFI_RESOURCE_MEMORY_MAPPED_IO_PORT 4
+#define EFI_RESOURCE_MEMORY_RESERVED 5
+#define EFI_RESOURCE_IO_RESERVED 6
+#define EFI_RESOURCE_MAX_MEMORY_TYPE 7
+
+typedef UINT32 EFI_RESOURCE_ATTRIBUTE_TYPE;
+
+#define EFI_RESOURCE_ATTRIBUTE_PRESENT 0x00000001
+#define EFI_RESOURCE_ATTRIBUTE_INITIALIZED 0x00000002
+#define EFI_RESOURCE_ATTRIBUTE_TESTED 0x00000004
+#define EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC 0x00000008
+#define EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC 0x00000010
+#define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1 0x00000020
+#define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2 0x00000040
+#define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED 0x00000080
+#define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED 0x00000100
+#define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED 0x00000200
+#define EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE 0x00000400
+#define EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE 0x00000800
+#define EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE 0x00001000
+#define EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE 0x00002000
+#define EFI_RESOURCE_ATTRIBUTE_16_BIT_IO 0x00004000
+#define EFI_RESOURCE_ATTRIBUTE_32_BIT_IO 0x00008000
+#define EFI_RESOURCE_ATTRIBUTE_64_BIT_IO 0x00010000
+#define EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED 0x00020000
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ EFI_GUID Owner;
+ EFI_RESOURCE_TYPE ResourceType;
+ EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute;
+ EFI_PHYSICAL_ADDRESS PhysicalStart;
+ UINT64 ResourceLength;
+} EFI_HOB_RESOURCE_DESCRIPTOR;
+
+//
+// GUID Extension HOB
+// The HobLength is variable as it includes the GUID specific data.
+//
+#define EFI_HOB_TYPE_GUID_EXTENSION 0x0004
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ EFI_GUID Name;
+
+ //
+ // Guid specific data goes here
+ //
+} EFI_HOB_GUID_TYPE;
+
+//
+// Firmware Volume HOB
+//
+#define EFI_HOB_TYPE_FV 0x0005
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ EFI_PHYSICAL_ADDRESS BaseAddress;
+ UINT64 Length;
+} EFI_HOB_FIRMWARE_VOLUME;
+
+//
+// CPU HOB
+//
+#define EFI_HOB_TYPE_CPU 0x0006
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ UINT8 SizeOfMemorySpace;
+ UINT8 SizeOfIoSpace;
+ UINT8 Reserved[6];
+} EFI_HOB_CPU;
+
+//
+// PEI Core Memory Pool HOB
+// The HobLength is variable as the HOB contains pool allocations by
+// the PeiServices AllocatePool function
+//
+#define EFI_HOB_TYPE_PEI_MEMORY_POOL 0x0007
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+} EFI_HOB_MEMORY_POOL;
+
+//
+// Capsule volume HOB -- identical to a firmware volume
+//
+#define EFI_HOB_TYPE_CV 0x0008
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ EFI_PHYSICAL_ADDRESS BaseAddress;
+ UINT64 Length;
+} EFI_HOB_CAPSULE_VOLUME;
+
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION >= 0x00010000)
+
+#define EFI_HOB_TYPE_FV2 0x0009
+
+typedef struct {
+ EFI_HOB_GENERIC_HEADER Header;
+ EFI_PHYSICAL_ADDRESS BaseAddress;
+ UINT64 Length;
+ EFI_GUID FvName;
+ EFI_GUID FileName;
+} EFI_HOB_FIRMWARE_VOLUME2;
+
+#define EFI_HOB_TYPE_LOAD_PEIM 0x000A
+
+#endif
+
+#define EFI_HOB_TYPE_UNUSED 0xFFFE
+
+//
+// Union of all the possible HOB Types
+//
+typedef union {
+ EFI_HOB_GENERIC_HEADER *Header;
+ EFI_HOB_HANDOFF_INFO_TABLE *HandoffInformationTable;
+ EFI_HOB_MEMORY_ALLOCATION *MemoryAllocation;
+ EFI_HOB_MEMORY_ALLOCATION_BSP_STORE *MemoryAllocationBspStore;
+ EFI_HOB_MEMORY_ALLOCATION_STACK *MemoryAllocationStack;
+ EFI_HOB_MEMORY_ALLOCATION_MODULE *MemoryAllocationModule;
+ EFI_HOB_RESOURCE_DESCRIPTOR *ResourceDescriptor;
+ EFI_HOB_GUID_TYPE *Guid;
+ EFI_HOB_FIRMWARE_VOLUME *FirmwareVolume;
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION >= 0x00010000)
+ EFI_HOB_FIRMWARE_VOLUME2 *FirmwareVolume2;
+#endif
+ EFI_HOB_CPU *Cpu;
+ EFI_HOB_MEMORY_POOL *Pool;
+ EFI_HOB_CAPSULE_VOLUME *CapsuleVolume;
+ UINT8 *Raw;
+} EFI_PEI_HOB_POINTERS;
+
+#define GET_HOB_TYPE(Hob) ((Hob).Header->HobType)
+#define GET_HOB_LENGTH(Hob) ((Hob).Header->HobLength)
+#define GET_NEXT_HOB(Hob) ((Hob).Raw + GET_HOB_LENGTH (Hob))
+#define END_OF_HOB_LIST(Hob) (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_END_OF_HOB_LIST)
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/TianoSpecApi.h b/EDK/Foundation/Framework/Include/TianoSpecApi.h
new file mode 100644
index 0000000..2279eda
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/TianoSpecApi.h
@@ -0,0 +1,590 @@
+/*++
+
+Copyright (c) 2004 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ TianoSpecApi.h
+
+Abstract:
+
+ Tiano intrinsic definitions in Tiano spec.
+
+
+--*/
+
+#ifndef _TIANO_SPEC_API_H_
+#define _TIANO_SPEC_API_H_
+
+
+#if ((TIANO_RELEASE_VERSION != 0) && (EFI_SPECIFICATION_VERSION < 0x00020000))
+//
+// Prior to UEFI 2.0 Tiano extended these enums. This was replaced by
+// CreateEventEx() Event Groups in UEFI 2.0
+//
+#define EFI_EVENT_NOTIFY_SIGNAL_ALL 0x00000400
+
+#define EFI_EVENT_SIGNAL_READY_TO_BOOT 0x00000203
+#define EFI_EVENT_SIGNAL_LEGACY_BOOT 0x00000204
+#endif
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_ADD_MEMORY_SPACE) (
+ IN EFI_GCD_MEMORY_TYPE GcdMemoryType,
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length,
+ IN UINT64 Capabilities
+ )
+/*++
+
+Routine Description:
+
+ Adds reserved memory, system memory, or memory-mapped I/O resources to the
+global coherency domain of the processor.
+
+Arguments:
+
+ GcdMemoryType - Memory type of the memory space.
+
+ BaseAddress - Base address of the memory space.
+
+ Length - Length of the memory space.
+
+ Capabilities - alterable attributes of the memory space.
+
+Returns:
+
+ EFI_SUCCESS - Merged this memory space into GCD map.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_ALLOCATE_MEMORY_SPACE) (
+ IN EFI_GCD_ALLOCATE_TYPE GcdAllocateType,
+ IN EFI_GCD_MEMORY_TYPE GcdMemoryType,
+ IN UINTN Alignment,
+ IN UINT64 Length,
+ IN OUT EFI_PHYSICAL_ADDRESS * BaseAddress,
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_HANDLE DeviceHandle OPTIONAL
+ )
+/*++
+
+Routine Description:
+
+ Allocates nonexistent memory, reserved memory, system memory, or memorymapped
+I/O resources from the global coherency domain of the processor.
+
+Arguments:
+
+ GcdAllocateType - The type of allocate operation
+
+ GcdMemoryType - The desired memory type
+
+ Alignment - Align with 2^Alignment
+
+ Length - Length to allocate
+
+ BaseAddress - Base address to allocate
+
+ Imagehandle - The image handle consume the allocated space.
+
+ DeviceHandle - The device handle consume the allocated space.
+
+Returns:
+
+ EFI_INVALID_PARAMETER - Invalid parameter.
+
+ EFI_NOT_FOUND - No descriptor contains the desired space.
+
+ EFI_SUCCESS - Memory space successfully allocated.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_FREE_MEMORY_SPACE) (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length
+ )
+/*++
+
+Routine Description:Routine Description:
+
+ Frees nonexistent memory, reserved memory, system memory, or memory-mapped
+I/O resources from the global coherency domain of the processor.
+
+Arguments:
+
+ BaseAddress - Base address of the segment.
+
+ Length - Length of the segment.
+
+Returns:
+
+ EFI_SUCCESS - Space successfully freed.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_REMOVE_MEMORY_SPACE) (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length
+ )
+/*++
+
+Routine Description:Routine Description:
+
+ Removes reserved memory, system memory, or memory-mapped I/O resources from
+the global coherency domain of the processor.
+
+Arguments:
+
+ BaseAddress - Base address of the memory space.
+
+ Length - Length of the memory space.
+
+Returns:
+
+ EFI_SUCCESS - Successfully remove a segment of memory space.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_GET_MEMORY_SPACE_DESCRIPTOR) (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ OUT EFI_GCD_MEMORY_SPACE_DESCRIPTOR * Descriptor
+ )
+/*++
+
+Routine Description:
+
+ Retrieves the descriptor for a memory region containing a specified address.
+
+Arguments:
+
+ BaseAddress - Specified start address
+
+ Descriptor - Specified length
+
+Returns:
+
+ EFI_INVALID_PARAMETER - Invalid parameter
+
+ EFI_SUCCESS - Successfully get memory space descriptor.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_SET_MEMORY_SPACE_ATTRIBUTES) (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length,
+ IN UINT64 Attributes
+ )
+/*++
+
+Routine Description:
+
+ Modifies the attributes for a memory region in the global coherency domain of the
+processor.
+
+Arguments:
+
+ BaseAddress - Specified start address
+
+ Length - Specified length
+
+ Attributes - Specified attributes
+
+Returns:
+
+ EFI_SUCCESS - Successfully set attribute of a segment of memory space.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_GET_MEMORY_SPACE_MAP) (
+ OUT UINTN *NumberOfDescriptors,
+ OUT EFI_GCD_MEMORY_SPACE_DESCRIPTOR **MemorySpaceMap
+ )
+/*++
+
+Routine Description:
+
+ Returns a map of the memory resources in the global coherency domain of the
+processor.
+
+Arguments:
+
+ NumberOfDescriptors - Number of descriptors.
+
+ MemorySpaceMap - Descriptor array
+
+Returns:
+
+ EFI_INVALID_PARAMETER - Invalid parameter
+
+ EFI_OUT_OF_RESOURCES - No enough buffer to allocate
+
+ EFI_SUCCESS - Successfully get memory space map.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_ADD_IO_SPACE) (
+ IN EFI_GCD_IO_TYPE GcdIoType,
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length
+ )
+/*++
+
+Routine Description:
+
+ Adds reserved I/O or I/O resources to the global coherency domain of the processor.
+
+Arguments:
+
+ GcdIoType - IO type of the segment.
+
+ BaseAddress - Base address of the segment.
+
+ Length - Length of the segment.
+
+Returns:
+
+ EFI_SUCCESS - Merged this segment into GCD map.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_ALLOCATE_IO_SPACE) (
+ IN EFI_GCD_ALLOCATE_TYPE GcdAllocateType,
+ IN EFI_GCD_IO_TYPE GcdIoType,
+ IN UINTN Alignment,
+ IN UINT64 Length,
+ IN OUT EFI_PHYSICAL_ADDRESS * BaseAddress,
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_HANDLE DeviceHandle OPTIONAL
+ )
+/*++
+
+Routine Description:
+
+ Allocates nonexistent I/O, reserved I/O, or I/O resources from the global coherency
+domain of the processor.
+
+Arguments:
+
+ GcdAllocateType - The type of allocate operation
+
+ GcdIoType - The desired IO type
+
+ Alignment - Align with 2^Alignment
+
+ Length - Length to allocate
+
+ BaseAddress - Base address to allocate
+
+ Imagehandle - The image handle consume the allocated space.
+
+ DeviceHandle - The device handle consume the allocated space.
+
+Returns:
+
+ EFI_INVALID_PARAMETER - Invalid parameter.
+
+ EFI_NOT_FOUND - No descriptor contains the desired space.
+
+ EFI_SUCCESS - IO space successfully allocated.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_FREE_IO_SPACE) (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length
+ )
+/*++
+
+Routine Description:Routine Description:
+
+ Frees nonexistent I/O, reserved I/O, or I/O resources from the global coherency
+domain of the processor.
+
+Arguments:
+
+ BaseAddress - Base address of the segment.
+
+ Length - Length of the segment.
+
+Returns:
+
+ EFI_SUCCESS - Space successfully freed.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_REMOVE_IO_SPACE) (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ IN UINT64 Length
+ )
+/*++
+
+Routine Description:Routine Description:
+
+ Removes reserved I/O or I/O resources from the global coherency domain of the
+processor.
+
+Arguments:
+
+ BaseAddress - Base address of the segment.
+
+ Length - Length of the segment.
+
+Returns:
+
+ EFI_SUCCESS - Successfully removed a segment of IO space.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_GET_IO_SPACE_DESCRIPTOR) (
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,
+ OUT EFI_GCD_IO_SPACE_DESCRIPTOR * Descriptor
+ )
+/*++
+
+Routine Description:
+
+ Retrieves the descriptor for an I/O region containing a specified address.
+
+Arguments:
+
+ BaseAddress - Specified start address
+
+ Descriptor - Specified length
+
+Returns:
+
+ EFI_INVALID_PARAMETER - Descriptor is NULL.
+
+ EFI_SUCCESS - Successfully get the IO space descriptor.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_GET_IO_SPACE_MAP) (
+ OUT UINTN *NumberOfDescriptors,
+ OUT EFI_GCD_IO_SPACE_DESCRIPTOR **IoSpaceMap
+ )
+/*++
+
+Routine Description:
+
+ Returns a map of the I/O resources in the global coherency domain of the processor.
+
+Arguments:
+
+ NumberOfDescriptors - Number of descriptors.
+
+ MemorySpaceMap - Descriptor array
+
+Returns:
+
+ EFI_INVALID_PARAMETER - Invalid parameter
+
+ EFI_OUT_OF_RESOURCES - No enough buffer to allocate
+
+ EFI_SUCCESS - Successfully get IO space map.
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_DISPATCH) (VOID)
+/*++
+
+Routine Description:
+
+ Loads and executed DXE drivers from firmware volumes.
+
+Arguments:
+
+ None
+
+Returns:
+
+ Status code
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_SCHEDULE) (
+ IN EFI_HANDLE FirmwareVolumeHandle,
+ IN EFI_GUID * DriverName
+ )
+/*++
+
+Routine Description:
+
+ Clears the Schedule on Request (SOR) flag for a component that is stored in a firmware volume.
+
+Arguments:
+
+ FirmwareVolumeHandle - The handle of the firmware volume that contains the file specified by FileName.
+
+ DriverName - A pointer to the name of the file in a firmware volume.
+
+Returns:
+
+ Status code
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_TRUST) (
+ IN EFI_HANDLE FirmwareVolumeHandle,
+ IN EFI_GUID * DriverName
+ )
+/*++
+
+Routine Description:
+
+ Promotes a file stored in a firmware volume from the untrusted to the trusted state.
+
+Arguments:
+
+ FirmwareVolumeHandle - The handle of the firmware volume that contains the file specified by FileName.
+
+ DriverName - A pointer to the name of the file in a firmware volume.
+
+Returns:
+
+ Status code
+
+--*/
+;
+
+typedef
+EFI_BOOTSERVICE
+EFI_STATUS
+(EFIAPI *EFI_PROCESS_FIRMWARE_VOLUME) (
+ IN VOID *FvHeader,
+ IN UINTN Size,
+ OUT EFI_HANDLE * FirmwareVolumeHandle
+ )
+/*++
+
+Routine Description:
+
+ Creates a firmware volume handle for a firmware volume that is present in system memory.
+
+Arguments:
+
+ FirmwareVolumeHeader - A pointer to the header of the firmware volume.
+ Size - The size, in bytes, of the firmware volume.
+ FirmwareVolumeHandle - On output, a pointer to the created handle.
+
+Returns:
+
+ Status code
+
+--*/
+;
+
+//
+// DXE Services Table
+//
+#define EFI_DXE_SERVICES_SIGNATURE 0x565245535f455844
+//;;## ...AMI_OVERRIDE... Support PI1.x
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+#define EFI_DXE_SERVICES_REVISION ((0 << 16) | (90))
+#else
+#define EFI_DXE_SERVICES_REVISION ((1 << 16) | (00))
+#endif
+
+typedef struct {
+ EFI_TABLE_HEADER Hdr;
+
+ //
+ // Global Coherency Domain Services
+ //
+ EFI_ADD_MEMORY_SPACE AddMemorySpace;
+ EFI_ALLOCATE_MEMORY_SPACE AllocateMemorySpace;
+ EFI_FREE_MEMORY_SPACE FreeMemorySpace;
+ EFI_REMOVE_MEMORY_SPACE RemoveMemorySpace;
+ EFI_GET_MEMORY_SPACE_DESCRIPTOR GetMemorySpaceDescriptor;
+ EFI_SET_MEMORY_SPACE_ATTRIBUTES SetMemorySpaceAttributes;
+ EFI_GET_MEMORY_SPACE_MAP GetMemorySpaceMap;
+ EFI_ADD_IO_SPACE AddIoSpace;
+ EFI_ALLOCATE_IO_SPACE AllocateIoSpace;
+ EFI_FREE_IO_SPACE FreeIoSpace;
+ EFI_REMOVE_IO_SPACE RemoveIoSpace;
+ EFI_GET_IO_SPACE_DESCRIPTOR GetIoSpaceDescriptor;
+ EFI_GET_IO_SPACE_MAP GetIoSpaceMap;
+
+ //
+ // Dispatcher Services
+ //
+ EFI_DISPATCH Dispatch;
+ EFI_SCHEDULE Schedule;
+ EFI_TRUST Trust;
+ //
+ // Service to process a single firmware volume found in a capsule
+ //
+ EFI_PROCESS_FIRMWARE_VOLUME ProcessFirmwareVolume;
+} EFI_DXE_SERVICES;
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/TianoSpecDevicePath.h b/EDK/Foundation/Framework/Include/TianoSpecDevicePath.h
new file mode 100644
index 0000000..efe7eaf
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/TianoSpecDevicePath.h
@@ -0,0 +1,32 @@
+/*++
+
+Copyright (c) 2004 - 2008, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ TianoSpecDevicePath.h
+
+Abstract:
+
+ Tiano Device Path definitions in Tiano Spec.
+
+--*/
+
+#ifndef _TIANO_SPEC_DEVICE_PATH_H
+#define _TIANO_SPEC_DEVICE_PATH_H
+
+#include "EfiDevicePath.h"
+
+//
+// MEDIA_FW_VOL_FILEPATH_DEVICE_PATH and MEDIA_FW_VOL_DEVICE_PATH are defined in
+// EfiDevicePath.h
+//
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/TianoSpecError.h b/EDK/Foundation/Framework/Include/TianoSpecError.h
new file mode 100644
index 0000000..815cdf4
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/TianoSpecError.h
@@ -0,0 +1,41 @@
+/*++
+
+Copyright (c) 2004 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ TianoSpecError.h
+
+Abstract:
+
+ Tiano error codes defined in Tiano spec.
+
+--*/
+
+#ifndef _TIANO_SPEC_ERROR_H_
+#define _TIANO_SPEC_ERROR_H_
+
+#include "EfiBind.h"
+#define TIANO_ERROR(a) (MAX_2_BITS | (a))
+
+//
+// Tiano added a couple of return types. These are owned by UEFI specification
+// and Tiano can not use them. Thus for UEFI 2.0/R8.6 support we moved the values
+// to a UEFI OEM extension range to conform to UEFI specification.
+//
+#if (EFI_SPECIFICATION_VERSION < 0x00020000)
+ #define EFI_NOT_AVAILABLE_YET EFIERR (28)
+ #define EFI_UNLOAD_IMAGE EFIERR (29)
+#else
+ #define EFI_NOT_AVAILABLE_YET TIANO_ERROR (0)
+ #define EFI_UNLOAD_IMAGE TIANO_ERROR (1)
+#endif
+
+#endif
diff --git a/EDK/Foundation/Framework/Include/TianoSpecTypes.h b/EDK/Foundation/Framework/Include/TianoSpecTypes.h
new file mode 100644
index 0000000..e7ff834
--- /dev/null
+++ b/EDK/Foundation/Framework/Include/TianoSpecTypes.h
@@ -0,0 +1,75 @@
+/*++
+
+Copyright (c) 2004 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ TianoSpecTypes.h
+
+Abstract:
+
+ Tiano types defined in Tiano spec.
+
+--*/
+
+#ifndef _TIANO_SPEC_TYPES_H_
+#define _TIANO_SPEC_TYPES_H_
+
+//
+// Modifier for EFI DXE Services
+//
+#define EFI_DXESERVICE
+
+//
+// Global Coherencey Domain types
+//
+typedef enum {
+ EfiGcdMemoryTypeNonExistent,
+ EfiGcdMemoryTypeReserved,
+ EfiGcdMemoryTypeSystemMemory,
+ EfiGcdMemoryTypeMemoryMappedIo,
+ EfiGcdMemoryTypeMaximum
+} EFI_GCD_MEMORY_TYPE;
+
+typedef enum {
+ EfiGcdIoTypeNonExistent,
+ EfiGcdIoTypeReserved,
+ EfiGcdIoTypeIo,
+ EfiGcdIoTypeMaximum
+} EFI_GCD_IO_TYPE;
+
+typedef enum {
+ EfiGcdAllocateAnySearchBottomUp,
+ EfiGcdAllocateMaxAddressSearchBottomUp,
+ EfiGcdAllocateAddress,
+ EfiGcdAllocateAnySearchTopDown,
+ EfiGcdAllocateMaxAddressSearchTopDown,
+ EfiGcdMaxAllocateType
+} EFI_GCD_ALLOCATE_TYPE;
+
+typedef struct {
+ EFI_PHYSICAL_ADDRESS BaseAddress;
+ UINT64 Length;
+ UINT64 Capabilities;
+ UINT64 Attributes;
+ EFI_GCD_MEMORY_TYPE GcdMemoryType;
+ EFI_HANDLE ImageHandle;
+ EFI_HANDLE DeviceHandle;
+} EFI_GCD_MEMORY_SPACE_DESCRIPTOR;
+
+typedef struct {
+ EFI_PHYSICAL_ADDRESS BaseAddress;
+ UINT64 Length;
+ EFI_GCD_IO_TYPE GcdIoType;
+ EFI_HANDLE ImageHandle;
+ EFI_HANDLE DeviceHandle;
+} EFI_GCD_IO_SPACE_DESCRIPTOR;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/BlockIo/BlockIo.c b/EDK/Foundation/Framework/Ppi/BlockIo/BlockIo.c
new file mode 100644
index 0000000..b8b0953
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/BlockIo/BlockIo.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ BlockIo.c
+
+Abstract:
+
+ BlockIo PPI GUID as defined in EFI 2.0
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (BlockIo)
+
+EFI_GUID gPeiBlockIoPpiGuid = PEI_BLOCK_IO_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiBlockIoPpiGuid, "BlockIo", "PEI Block I/O PPI");
diff --git a/EDK/Foundation/Framework/Ppi/BlockIo/BlockIo.h b/EDK/Foundation/Framework/Ppi/BlockIo/BlockIo.h
new file mode 100644
index 0000000..c518b37
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/BlockIo/BlockIo.h
@@ -0,0 +1,88 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ BlockIo.h
+
+Abstract:
+
+ BlockIo PPI as defined in EFI 2.0
+
+ Used to access block-oriented storage devices
+
+--*/
+
+#ifndef _PEI_BLOCK_IO_H_
+#define _PEI_BLOCK_IO_H_
+
+#define PEI_BLOCK_IO_PPI_GUID \
+ { \
+ 0x695d8aa1, 0x42ee, 0x4c46, 0x80, 0x5c, 0x6e, 0xa6, 0xbc, 0xe7, 0x99, 0xe3 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_RECOVERY_BLOCK_IO_INTERFACE);
+
+typedef UINT64 PEI_LBA;
+
+typedef enum {
+ LegacyFloppy = 0,
+ IdeCDROM = 1,
+ IdeLS120 = 2,
+ UsbMassStorage= 3,
+ MaxDeviceType
+} PEI_BLOCK_DEVICE_TYPE;
+
+typedef struct {
+ PEI_BLOCK_DEVICE_TYPE DeviceType;
+ BOOLEAN MediaPresent;
+ UINTN LastBlock;
+ UINTN BlockSize;
+} PEI_BLOCK_IO_MEDIA;
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GET_NUMBER_BLOCK_DEVICES) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_RECOVERY_BLOCK_IO_INTERFACE * This,
+ OUT UINTN *NumberBlockDevices
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GET_DEVICE_MEDIA_INFORMATION) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_RECOVERY_BLOCK_IO_INTERFACE * This,
+ IN UINTN DeviceIndex,
+ OUT PEI_BLOCK_IO_MEDIA * MediaInfo
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_READ_BLOCKS) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_RECOVERY_BLOCK_IO_INTERFACE * This,
+ IN UINTN DeviceIndex,
+ IN PEI_LBA StartLBA,
+ IN UINTN BufferSize,
+ OUT VOID *Buffer
+ );
+
+typedef struct _PEI_RECOVERY_BLOCK_IO_INTERFACE {
+ PEI_GET_NUMBER_BLOCK_DEVICES GetNumberOfBlockDevices;
+ PEI_GET_DEVICE_MEDIA_INFORMATION GetBlockDeviceMediaInfo;
+ PEI_READ_BLOCKS ReadBlocks;
+} PEI_RECOVERY_BLOCK_IO_INTERFACE;
+
+extern EFI_GUID gPeiBlockIoPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/BootInRecoveryMode/BootInRecoveryMode.c b/EDK/Foundation/Framework/Ppi/BootInRecoveryMode/BootInRecoveryMode.c
new file mode 100644
index 0000000..e5840a8
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/BootInRecoveryMode/BootInRecoveryMode.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootInRecoveryMode.c
+
+Abstract:
+
+ Boot Mode PPI GUID as defined in PEI EAS
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (BootInRecoveryMode)
+
+EFI_GUID gPeiBootInRecoveryModePpiGuid = PEI_BOOT_IN_RECOVERY_MODE_PEIM_PPI;
+
+EFI_GUID_STRING(&gPeiMasterBootModePpiGuid, "BootMode", "Master Boot Mode PPI");
diff --git a/EDK/Foundation/Framework/Ppi/BootInRecoveryMode/BootInRecoveryMode.h b/EDK/Foundation/Framework/Ppi/BootInRecoveryMode/BootInRecoveryMode.h
new file mode 100644
index 0000000..15ca5ca
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/BootInRecoveryMode/BootInRecoveryMode.h
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootInRecoveryMode.h
+
+Abstract:
+
+ Boot Mode PPI as defined in Tiano
+
+--*/
+
+#ifndef _PEI_BOOT_IN_RECOVERY_MODE_PPI_H
+#define _PEI_BOOT_IN_RECOVERY_MODE_PPI_H
+
+#define PEI_BOOT_IN_RECOVERY_MODE_PEIM_PPI \
+ { \
+ 0x17ee496a, 0xd8e4, 0x4b9a, 0x94, 0xd1, 0xce, 0x82, 0x72, 0x30, 0x8, 0x50 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_BOOT_IN_RECOVERY_MODE_PPI);
+
+extern EFI_GUID gPeiBootInRecoveryModePpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/BootMode/BootMode.c b/EDK/Foundation/Framework/Ppi/BootMode/BootMode.c
new file mode 100644
index 0000000..f88b757
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/BootMode/BootMode.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootMode.c
+
+Abstract:
+
+ Boot Mode PPI GUID as defined in PEI EAS
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (BootMode)
+
+EFI_GUID gPeiMasterBootModePpiGuid = PEI_MASTER_BOOT_MODE_PEIM_PPI;
+
+EFI_GUID_STRING(&gPeiMasterBootModePpiGuid, "BootMode", "Master Boot Mode PPI");
diff --git a/EDK/Foundation/Framework/Ppi/BootMode/BootMode.h b/EDK/Foundation/Framework/Ppi/BootMode/BootMode.h
new file mode 100644
index 0000000..552ed23
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/BootMode/BootMode.h
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootMode.h
+
+Abstract:
+
+ Boot Mode PPI as defined in Tiano
+
+--*/
+
+#ifndef _PEI_MASTER_BOOT_MODE_PPI_H
+#define _PEI_MASTER_BOOT_MODE_PPI_H
+
+#define PEI_MASTER_BOOT_MODE_PEIM_PPI \
+ { \
+ 0x7408d748, 0xfc8c, 0x4ee6, 0x92, 0x88, 0xc4, 0xbe, 0xc0, 0x92, 0xa4, 0x10 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_MASTER_BOOT_MODE_PPI);
+
+extern EFI_GUID gPeiMasterBootModePpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/BootScriptExecuter/BootScriptExecuter.c b/EDK/Foundation/Framework/Ppi/BootScriptExecuter/BootScriptExecuter.c
new file mode 100644
index 0000000..bcb7d48
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/BootScriptExecuter/BootScriptExecuter.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2001 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootScriptExecuter.c
+
+Abstract:
+
+ Boot Script Executer PPI GUID as defined in EFI 2.0
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (BootScriptExecuter)
+
+EFI_GUID gPeiBootScriptExecuterPpiGuid = PEI_BOOT_SCRIPT_EXECUTER_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiBootScriptExecuterPpiGuid, "BootScriptExecuter", "Boot Script Executer PPI");
diff --git a/EDK/Foundation/Framework/Ppi/BootScriptExecuter/BootScriptExecuter.h b/EDK/Foundation/Framework/Ppi/BootScriptExecuter/BootScriptExecuter.h
new file mode 100644
index 0000000..72540f0
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/BootScriptExecuter/BootScriptExecuter.h
@@ -0,0 +1,50 @@
+/*++
+
+Copyright (c) 2001 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootScriptExecuter.h
+
+Abstract:
+
+ Boot Script Executer PPI as defined in EFI 2.0
+
+--*/
+
+#ifndef _PEI_BOOT_SCRIPT_EXECUTER_PPI_H
+#define _PEI_BOOT_SCRIPT_EXECUTER_PPI_H
+
+#define PEI_BOOT_SCRIPT_EXECUTER_PPI_GUID \
+ { \
+ 0xabd42895, 0x78cf, 0x4872, 0x84, 0x44, 0x1b, 0x5c, 0x18, 0x0b, 0xfb, 0xff \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_BOOT_SCRIPT_EXECUTER_PPI);
+
+#define PEI_BOOT_SCRIPT_EXECUTER_PPI_REVISION 0x00000001
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_BOOT_SCRIPT_EXECUTE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_BOOT_SCRIPT_EXECUTER_PPI * This,
+ IN EFI_PHYSICAL_ADDRESS Address,
+ IN EFI_GUID * FvFile OPTIONAL
+ );
+
+typedef struct _PEI_BOOT_SCRIPT_EXECUTER_PPI {
+ UINT64 Revision;
+ PEI_BOOT_SCRIPT_EXECUTE Execute;
+} PEI_BOOT_SCRIPT_EXECUTER_PPI;
+
+extern EFI_GUID gPeiBootScriptExecuterPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/CpuIo/CpuIo.c b/EDK/Foundation/Framework/Ppi/CpuIo/CpuIo.c
new file mode 100644
index 0000000..10daaf3
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/CpuIo/CpuIo.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ CpuIO.c
+
+Abstract:
+
+ CPU IO PPI GUID as defined in Tiano
+
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (CpuIo)
+
+EFI_GUID gPeiCpuIoPpiInServiceTableGuid = PEI_CPU_IO_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiCpuIoPpiInServiceTableGuid, "CPU IO", "CPU IO PPI");
diff --git a/EDK/Foundation/Framework/Ppi/CpuIo/CpuIo.h b/EDK/Foundation/Framework/Ppi/CpuIo/CpuIo.h
new file mode 100644
index 0000000..b99fca9
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/CpuIo/CpuIo.h
@@ -0,0 +1,250 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ CpuIo.h
+
+Abstract:
+
+ CPU IO PPI defined in Tiano
+ CPU IO PPI abstracts CPU IO access
+
+
+--*/
+
+#ifndef _PEI_CPUIO_PPI_H_
+#define _PEI_CPUIO_PPI_H_
+
+#define PEI_CPU_IO_PPI_GUID \
+ { \
+ 0xe6af1f7b, 0xfc3f, 0x46da, 0xa8, 0x28, 0xa3, 0xb4, 0x57, 0xa4, 0x42, 0x82 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_CPU_IO_PPI);
+
+//
+// *******************************************************
+// PEI_CPU_IO_PPI_WIDTH
+// *******************************************************
+//
+typedef enum {
+ PeiCpuIoWidthUint8,
+ PeiCpuIoWidthUint16,
+ PeiCpuIoWidthUint32,
+ PeiCpuIoWidthUint64,
+ PeiCpuIoWidthFifoUint8,
+ PeiCpuIoWidthFifoUint16,
+ PeiCpuIoWidthFifoUint32,
+ PeiCpuIoWidthFifoUint64,
+ PeiCpuIoWidthFillUint8,
+ PeiCpuIoWidthFillUint16,
+ PeiCpuIoWidthFillUint32,
+ PeiCpuIoWidthFillUint64,
+ PeiCpuIoWidthMaximum
+} PEI_CPU_IO_PPI_WIDTH;
+
+//
+// *******************************************************
+// PEI_CPU_IO_PPI_IO_MEM
+// *******************************************************
+//
+typedef
+EFI_STATUS
+(EFIAPI *PEI_CPU_IO_PPI_IO_MEM) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN PEI_CPU_IO_PPI_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ );
+
+//
+// *******************************************************
+// PEI_CPU_IO_PPI_ACCESS
+// *******************************************************
+//
+typedef struct {
+ PEI_CPU_IO_PPI_IO_MEM Read;
+ PEI_CPU_IO_PPI_IO_MEM Write;
+} PEI_CPU_IO_PPI_ACCESS;
+
+//
+// *******************************************************
+// Base IO Class Functions
+// *******************************************************
+//
+typedef
+UINT8
+(EFIAPI *PEI_CPU_IO_PPI_IO_READ8) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address
+ );
+
+typedef
+UINT16
+(EFIAPI *PEI_CPU_IO_PPI_IO_READ16) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address
+ );
+
+typedef
+UINT32
+(EFIAPI *PEI_CPU_IO_PPI_IO_READ32) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address
+ );
+
+typedef
+UINT64
+(EFIAPI *PEI_CPU_IO_PPI_IO_READ64) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_CPU_IO_PPI_IO_WRITE8) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address,
+ IN UINT8 Data
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_CPU_IO_PPI_IO_WRITE16) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address,
+ IN UINT16 Data
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_CPU_IO_PPI_IO_WRITE32) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address,
+ IN UINT32 Data
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_CPU_IO_PPI_IO_WRITE64) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address,
+ IN UINT64 Data
+ );
+
+typedef
+UINT8
+(EFIAPI *PEI_CPU_IO_PPI_MEM_READ8) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address
+ );
+
+typedef
+UINT16
+(EFIAPI *PEI_CPU_IO_PPI_MEM_READ16) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address
+ );
+
+typedef
+UINT32
+(EFIAPI *PEI_CPU_IO_PPI_MEM_READ32) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address
+ );
+
+typedef
+UINT64
+(EFIAPI *PEI_CPU_IO_PPI_MEM_READ64) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_CPU_IO_PPI_MEM_WRITE8) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address,
+ IN UINT8 Data
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_CPU_IO_PPI_MEM_WRITE16) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address,
+ IN UINT16 Data
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_CPU_IO_PPI_MEM_WRITE32) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address,
+ IN UINT32 Data
+ );
+
+typedef
+VOID
+(EFIAPI *PEI_CPU_IO_PPI_MEM_WRITE64) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_CPU_IO_PPI * This,
+ IN UINT64 Address,
+ IN UINT64 Data
+ );
+
+//
+// *******************************************************
+// PEI_CPU_IO_PPI
+// *******************************************************
+//
+typedef struct _PEI_CPU_IO_PPI {
+ PEI_CPU_IO_PPI_ACCESS Mem;
+ PEI_CPU_IO_PPI_ACCESS Io;
+ PEI_CPU_IO_PPI_IO_READ8 IoRead8;
+ PEI_CPU_IO_PPI_IO_READ16 IoRead16;
+ PEI_CPU_IO_PPI_IO_READ32 IoRead32;
+ PEI_CPU_IO_PPI_IO_READ64 IoRead64;
+ PEI_CPU_IO_PPI_IO_WRITE8 IoWrite8;
+ PEI_CPU_IO_PPI_IO_WRITE16 IoWrite16;
+ PEI_CPU_IO_PPI_IO_WRITE32 IoWrite32;
+ PEI_CPU_IO_PPI_IO_WRITE64 IoWrite64;
+ PEI_CPU_IO_PPI_MEM_READ8 MemRead8;
+ PEI_CPU_IO_PPI_MEM_READ16 MemRead16;
+ PEI_CPU_IO_PPI_MEM_READ32 MemRead32;
+ PEI_CPU_IO_PPI_MEM_READ64 MemRead64;
+ PEI_CPU_IO_PPI_MEM_WRITE8 MemWrite8;
+ PEI_CPU_IO_PPI_MEM_WRITE16 MemWrite16;
+ PEI_CPU_IO_PPI_MEM_WRITE32 MemWrite32;
+ PEI_CPU_IO_PPI_MEM_WRITE64 MemWrite64;
+} PEI_CPU_IO_PPI;
+
+extern EFI_GUID gPeiCpuIoPpiInServiceTableGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/Decompress/Decompress.c b/EDK/Foundation/Framework/Ppi/Decompress/Decompress.c
new file mode 100644
index 0000000..4b95013
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Decompress/Decompress.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Decompress.c
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (Decompress)
+
+
+EFI_GUID gEfiPeiDecompressPpiGuid = EFI_PEI_DECOMPRESS_PPI_GUID;
+EFI_GUID_STRING(&gEfiPeiDecompressPpiGuid, "PeiDecompress", "PeiDecompress PPI");
diff --git a/EDK/Foundation/Framework/Ppi/Decompress/Decompress.h b/EDK/Foundation/Framework/Ppi/Decompress/Decompress.h
new file mode 100644
index 0000000..7007576
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Decompress/Decompress.h
@@ -0,0 +1,49 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Decompress.h
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#ifndef __DECOMPRESS_PPI_H__
+#define __DECOMPRESS_PPI_H__
+
+
+#define EFI_PEI_DECOMPRESS_PPI_GUID \
+ { 0x1a36e4e7, 0xfab6, 0x476a, 0x8e, 0x75, 0x69, 0x5a, 0x5, 0x76, 0xfd, 0xd7}
+
+EFI_FORWARD_DECLARATION (EFI_PEI_DECOMPRESS_PPI);
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_DECOMPRESS_DECOMPRESS)(
+ IN CONST EFI_PEI_DECOMPRESS_PPI *This,
+ IN CONST EFI_COMPRESSION_SECTION *InputSection,
+ OUT VOID **OutputBuffer,
+ OUT UINTN *OutputSize
+ );
+
+typedef struct _EFI_PEI_DECOMPRESS_PPI {
+ EFI_PEI_DECOMPRESS_DECOMPRESS Decompress;
+} EFI_PEI_DECOMPRESS_PPI;
+
+
+
+extern EFI_GUID gEfiPeiDecompressPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/DeviceRecoveryModule/DeviceRecoveryModule.c b/EDK/Foundation/Framework/Ppi/DeviceRecoveryModule/DeviceRecoveryModule.c
new file mode 100644
index 0000000..909b8d7
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/DeviceRecoveryModule/DeviceRecoveryModule.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ DeviceRecoveryModule.c
+
+Abstract:
+
+ Device Recovery Module PPI GUID as defined in PEI EAS
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (DeviceRecoveryModule)
+
+EFI_GUID gPeiDeviceRecoveryModulePpiGuid = PEI_DEVICE_RECOVERY_MODULE_INTERFACE_PPI;
+
+EFI_GUID_STRING(&gPeiDeviceRecoveryModulePpiGuid, "DeviceRecoveryModule", "Device Recovery Module PPI");
diff --git a/EDK/Foundation/Framework/Ppi/DeviceRecoveryModule/DeviceRecoveryModule.h b/EDK/Foundation/Framework/Ppi/DeviceRecoveryModule/DeviceRecoveryModule.h
new file mode 100644
index 0000000..40d0602
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/DeviceRecoveryModule/DeviceRecoveryModule.h
@@ -0,0 +1,68 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ DeviceRecoveryModule.h
+
+Abstract:
+
+ Device Recovery Module PPI as defined in EFI 2.0
+
+--*/
+
+#ifndef _PEI_DEVICE_RECOVERY_MODULE_PPI_H
+#define _PEI_DEVICE_RECOVERY_MODULE_PPI_H
+
+#define PEI_DEVICE_RECOVERY_MODULE_INTERFACE_PPI \
+ { \
+ 0x0DE2CE25, 0x446A, 0x45a7, 0xBF, 0xC9, 0x37, 0xDA, 0x26, 0x34, 0x4B, 0x37 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_DEVICE_RECOVERY_MODULE_INTERFACE);
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_DEVICE_GET_NUMBER_RECOVERY_CAPSULE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_DEVICE_RECOVERY_MODULE_INTERFACE * This,
+ OUT UINTN *NumberRecoveryCapsules
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_DEVICE_GET_RECOVERY_CAPSULE_INFO) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_DEVICE_RECOVERY_MODULE_INTERFACE * This,
+ IN UINTN CapsuleInstance,
+ OUT UINTN *Size,
+ OUT EFI_GUID * CapsuleType
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_DEVICE_LOAD_RECOVERY_CAPSULE) (
+ IN OUT EFI_PEI_SERVICES **PeiServices,
+ IN PEI_DEVICE_RECOVERY_MODULE_INTERFACE * This,
+ IN UINTN CapsuleInstance,
+ OUT VOID *Buffer
+ );
+
+typedef struct _PEI_DEVICE_RECOVERY_MODULE_INTERFACE {
+ PEI_DEVICE_GET_NUMBER_RECOVERY_CAPSULE GetNumberRecoveryCapsules;
+ PEI_DEVICE_GET_RECOVERY_CAPSULE_INFO GetRecoveryCapsuleInfo;
+ PEI_DEVICE_LOAD_RECOVERY_CAPSULE LoadRecoveryCapsule;
+} PEI_DEVICE_RECOVERY_MODULE_INTERFACE;
+
+extern EFI_GUID gPeiDeviceRecoveryModulePpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/DxeIpl/DxeIpl.c b/EDK/Foundation/Framework/Ppi/DxeIpl/DxeIpl.c
new file mode 100644
index 0000000..4884011
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/DxeIpl/DxeIpl.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DxeIpl.c
+
+Abstract:
+
+ DXE Initial Program Load PPI GUID as defined in Tiano
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (DxeIpl)
+
+EFI_GUID gEfiDxeIplPpiGuid = EFI_DXE_IPL_PPI_GUID;
+
+EFI_GUID_STRING(&gEfiDxeIplPpiGuid, "DxeIpl", "DXE IPL PPI");
diff --git a/EDK/Foundation/Framework/Ppi/DxeIpl/DxeIpl.h b/EDK/Foundation/Framework/Ppi/DxeIpl/DxeIpl.h
new file mode 100644
index 0000000..688ec8a
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/DxeIpl/DxeIpl.h
@@ -0,0 +1,51 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DxeIpl.h
+
+Abstract:
+
+ DXE Initial Program Load PPI as defined in Tiano
+
+ When the PEI core is done it calls the DXE IPL via this PPI.
+
+--*/
+
+#ifndef _DXE_IPL_H_
+#define _DXE_IPL_H_
+
+#include "Tiano.h"
+#include "PeiHob.h"
+
+#define EFI_DXE_IPL_PPI_GUID \
+ { \
+ 0xae8ce5d, 0xe448, 0x4437, 0xa8, 0xd7, 0xeb, 0xf5, 0xf1, 0x94, 0xf7, 0x31 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_DXE_IPL_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_DXE_IPL_ENTRY) (
+ IN EFI_DXE_IPL_PPI * This,
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_HOB_POINTERS HobList
+ );
+
+typedef struct _EFI_DXE_IPL_PPI {
+ EFI_DXE_IPL_ENTRY Entry;
+} EFI_DXE_IPL_PPI;
+
+extern EFI_GUID gEfiDxeIplPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/EcpPciCfg/EcpPciCfg.c b/EDK/Foundation/Framework/Ppi/EcpPciCfg/EcpPciCfg.c
new file mode 100644
index 0000000..6a2194e
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/EcpPciCfg/EcpPciCfg.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EcpPciCfg.c
+
+Abstract:
+
+ This PPI which is same with PciCfg PPI. But Modify API is removed.
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (EcpPciCfg)
+
+EFI_GUID gEcpPeiPciCfgPpiGuid = ECP_PEI_PCI_CFG_PPI_GUID;
+
+EFI_GUID_STRING(&gEcpPeiPciCfgPpiGuid, "Ecp PciCfg", "Ecp PciCfg PPI");
diff --git a/EDK/Foundation/Framework/Ppi/EcpPciCfg/EcpPciCfg.h b/EDK/Foundation/Framework/Ppi/EcpPciCfg/EcpPciCfg.h
new file mode 100644
index 0000000..eddd9bb
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/EcpPciCfg/EcpPciCfg.h
@@ -0,0 +1,50 @@
+/*++
+
+Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PciCfg.h
+
+Abstract:
+
+ This PPI which is same with PciCfg PPI. But Modify API is removed.
+
+--*/
+
+#ifndef _ECP_PEI_PCI_CFG_H_
+#define _ECP_PEI_PCI_CFG_H_
+#include EFI_PPI_DEFINITION (PciCfg)
+
+#define ECP_PEI_PCI_CFG_PPI_GUID \
+ {0xb0ee53d4, 0xa049, 0x4a79, { 0xb2, 0xff, 0x19, 0xd9, 0xfa, 0xef, 0xaa, 0x94 }}
+
+EFI_FORWARD_DECLARATION (ECP_PEI_PCI_CFG_PPI);
+
+
+typedef
+EFI_STATUS
+(EFIAPI *ECP_PEI_PCI_CFG_PPI_IO) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN ECP_PEI_PCI_CFG_PPI *This,
+ IN PEI_PCI_CFG_PPI_WIDTH Width,
+ IN UINT64 Address,
+ IN OUT VOID *Buffer
+ );
+
+struct _ECP_PEI_PCI_CFG_PPI {
+ ECP_PEI_PCI_CFG_PPI_IO Read;
+ ECP_PEI_PCI_CFG_PPI_IO Write;
+};
+
+extern EFI_GUID gEcpPeiPciCfgPpiGuid;
+
+#endif
+
diff --git a/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.cif b/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.cif
new file mode 100644
index 0000000..fecf03f
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.cif
@@ -0,0 +1,74 @@
+<component>
+ name = "EdkFrameworkPpiLib"
+ category = ModulePart
+ LocalRoot = "Edk\Foundation\Framework\Ppi\"
+ RefName = "EdkFrameworkPpiLib"
+[files]
+"EdkFrameworkPpiLib.sdl"
+"EdkFrameworkPpiLib.mak"
+"BlockIo\BlockIo.h"
+"BlockIo\BlockIo.c"
+"BootInRecoveryMode\BootInRecoveryMode.h"
+"BootInRecoveryMode\BootInRecoveryMode.c"
+"BootMode\BootMode.h"
+"BootMode\BootMode.c"
+"BootScriptExecuter\BootScriptExecuter.h"
+"BootScriptExecuter\BootScriptExecuter.c"
+"CpuIo\CpuIo.h"
+"CpuIo\CpuIo.c"
+"DeviceRecoveryModule\DeviceRecoveryModule.h"
+"DeviceRecoveryModule\DeviceRecoveryModule.c"
+"DxeIpl\DxeIpl.h"
+"DxeIpl\DxeIpl.c"
+"EndOfPeiSignal\EndOfPeiSignal.h"
+"EndOfPeiSignal\EndOfPeiSignal.c"
+"FindFv\FindFv.h"
+"FindFv\FindFv.c"
+"LoadFile\LoadFile.h"
+"LoadFile\LoadFile.c"
+"MemoryDiscovered\MemoryDiscovered.h"
+"MemoryDiscovered\MemoryDiscovered.c"
+"PciCfg\PciCfg.h"
+"PciCfg\PciCfg.c"
+"PciCfg2\PciCfg2.h"
+"PciCfg2\PciCfg2.c"
+"RecoveryModule\RecoveryModule.h"
+"RecoveryModule\RecoveryModule.c"
+"Reset\Reset.h"
+"Reset\Reset.c"
+"S3Resume\S3Resume.h"
+"S3Resume\S3Resume.c"
+"SecPlatformInformation\SecPlatformInformation.h"
+"SecPlatformInformation\SecPlatformInformation.c"
+"SectionExtraction\SectionExtraction.h"
+"SectionExtraction\SectionExtraction.c"
+"Security\Security.h"
+"Security\Security.c"
+"Smbus\Smbus.h"
+"Smbus\Smbus.c"
+"Smbus2\Smbus2.h"
+"Smbus2\Smbus2.c"
+"Stall\Stall.h"
+"Stall\Stall.c"
+"StatusCode\StatusCode.h"
+"StatusCode\StatusCode.c"
+"Variable\Variable.h"
+"Variable\Variable.c"
+"Variable2\Variable2.h"
+"Variable2\Variable2.c"
+"Decompress\Decompress.h"
+"Decompress\Decompress.c"
+"FirmwareVolumeInfo\FirmwareVolumeInfo.h"
+"FirmwareVolumeInfo\FirmwareVolumeInfo.c"
+"LoadFile2\LoadFile2.h"
+"LoadFile2\LoadFile2.c"
+"Security2\Security2.h"
+"Security2\Security2.c"
+"FirmwareVolume\FirmwareVolume.h"
+"FirmwareVolume\FirmwareVolume.c"
+"GuidedSectionExtraction\GuidedSectionExtraction.h"
+"GuidedSectionExtraction\GuidedSectionExtraction.c"
+"EdkFrameworkPpiLib.inf"
+"EcpPciCfg\EcpPciCfg.c"
+"EcpPciCfg\EcpPciCfg.h"
+<endComponent>
diff --git a/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.inf b/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.inf
new file mode 100644
index 0000000..95e2542
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.inf
@@ -0,0 +1,91 @@
+#/*++
+#
+# Copyright (c) 2004, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+# EdkFrameworkPpiLib.inf
+#
+# Abstract:
+#
+# Component description file.
+#
+#--*/
+
+[defines]
+BASE_NAME= EdkFrameworkPpiLib
+COMPONENT_TYPE= LIBRARY
+
+[includes.common]
+ $(EDK_SOURCE)\Foundation\Framework
+ $(EDK_SOURCE)\Foundation\Efi
+ $(EDK_SOURCE)\Foundation\Include
+ $(EDK_SOURCE)\Foundation\Efi\Include
+ $(EDK_SOURCE)\Foundation\Framework\Include
+ $(EDK_SOURCE)\Foundation\Include\IndustryStandard
+ $(EDK_SOURCE)\Foundation\Include\Pei
+ $(EDK_SOURCE)\Foundation\Library\Pei\Include
+ $(EDK_SOURCE)\Foundation\Core\Dxe
+ $(EDK_SOURCE)\Foundation\Library\Dxe\Include
+
+[nmake.common]
+C_STD_INCLUDE=
+
+[sources.common]
+ BlockIo\BlockIo.h
+ BlockIo\BlockIo.c
+ BootInRecoveryMode\BootInRecoveryMode.h
+ BootInRecoveryMode\BootInRecoveryMode.c
+ BootMode\BootMode.h
+ BootMode\BootMode.c
+ BootScriptExecuter\BootScriptExecuter.h
+ BootScriptExecuter\BootScriptExecuter.c
+ CpuIo\CpuIo.h
+ CpuIo\CpuIo.c
+ DeviceRecoveryModule\DeviceRecoveryModule.h
+ DeviceRecoveryModule\DeviceRecoveryModule.c
+ DxeIpl\DxeIpl.h
+ DxeIpl\DxeIpl.c
+ EndOfPeiSignal\EndOfPeiSignal.h
+ EndOfPeiSignal\EndOfPeiSignal.c
+ FindFv\FindFv.h
+ FindFv\FindFv.c
+ LoadFile\LoadFile.h
+ LoadFile\LoadFile.c
+ MemoryDiscovered\MemoryDiscovered.h
+ MemoryDiscovered\MemoryDiscovered.c
+ PciCfg\PciCfg.h
+ PciCfg\PciCfg.c
+ PciCfg2\PciCfg2.h
+ PciCfg2\PciCfg2.c
+ RecoveryModule\RecoveryModule.h
+ RecoveryModule\RecoveryModule.c
+ Reset\Reset.h
+ Reset\Reset.c
+ S3Resume\S3Resume.h
+ S3Resume\S3Resume.c
+ SecPlatformInformation\SecPlatformInformation.h
+ SecPlatformInformation\SecPlatformInformation.c
+ SectionExtraction\SectionExtraction.h
+ SectionExtraction\SectionExtraction.c
+ Security\Security.h
+ Security\Security.c
+ Smbus\Smbus.h
+ Smbus\Smbus.c
+ Stall\Stall.h
+ Stall\Stall.c
+ StatusCode\StatusCode.h
+ StatusCode\StatusCode.c
+ Variable\Variable.h
+ Variable\Variable.c
+ FirmwareVolumeInfo\FirmwareVolumeInfo.h
+ FirmwareVolumeInfo\FirmwareVolumeInfo.c
+ EcpPciCfg\EcpPciCfg.h
+ EcpPciCfg\EcpPciCfg.c
diff --git a/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.mak b/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.mak
new file mode 100644
index 0000000..1aec2e0
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.mak
@@ -0,0 +1,70 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+
+#**********************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/EdkFrameworkPpiLib/EdkFrameworkPpiLib.mak 2 3/27/12 4:26a Jeffch $
+#
+# $Revision: 2 $
+#
+# $Date: 3/27/12 4:26a $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/EdkFrameworkPpiLib/EdkFrameworkPpiLib.mak $
+#
+# 2 3/27/12 4:26a Jeffch
+#
+# 1 1/20/12 4:03a Jeffch
+# Create Intel EDK 1117 Patch 7.
+#
+# 1 9/27/11 6:26a Wesleychen
+# Intel EDK initially releases.
+#
+# 2 9/02/09 3:19a Iminglin
+# EIP24919
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: EdkFrameworkPpiLib.mak
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+
+$(EDKFRAMEWORKPPILIB) : EdkFrameworkPpiLib
+
+EdkFrameworkPpiLib : $(BUILD_DIR)\EdkFrameworkPpiLib.mak EdkFrameworkPpiLibBin
+
+$(BUILD_DIR)\EdkFrameworkPpiLib.mak : $(EdkFrameworkPpiLib_DIR)\$(@B).cif $(EdkFrameworkPpiLib_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(EdkFrameworkPpiLib_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+EdkFrameworkPpiLibBin : $(EDKPPILIB)
+ $(MAKE) /$(MAKEFLAGS) $(EDK_DEFAULTS)\
+ /f $(BUILD_DIR)\EdkFrameworkPpiLib.mak all\
+ TYPE=PEI_LIBRARY \
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#********************************************************************** \ No newline at end of file
diff --git a/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.sdl b/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.sdl
new file mode 100644
index 0000000..5485bc0
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/EdkFrameworkPpiLib.sdl
@@ -0,0 +1,26 @@
+TOKEN
+ Name = "EdkFrameworkPpiLib_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable EdkFrameworkPpiLib support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "EDKFRAMEWORKPPILIB"
+ Value = "$(BUILD_DIR)\EdkFrameworkPpiLib.lib"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+PATH
+ Name = "EdkFrameworkPpiLib_DIR"
+End
+
+MODULE
+ Help = "Includes EdkFrameworkPpiLib.mak to Project"
+ File = "EdkFrameworkPpiLib.mak"
+End
+
diff --git a/EDK/Foundation/Framework/Ppi/EndOfPeiSignal/EndOfPeiSignal.c b/EDK/Foundation/Framework/Ppi/EndOfPeiSignal/EndOfPeiSignal.c
new file mode 100644
index 0000000..eb43147
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/EndOfPeiSignal/EndOfPeiSignal.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EndOfPeiSignal.c
+
+Abstract:
+
+ This is installed prior to DXE taking over the memory map
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (EndOfPeiSignal)
+
+EFI_GUID gEndOfPeiSignalPpiGuid = PEI_END_OF_PEI_PHASE_PPI_GUID;
+
+EFI_GUID_STRING(&gEndOfPeiSignalPpiGuid, "EndOfPeiSignal", "End of PEI Phase Signalled PPI");
diff --git a/EDK/Foundation/Framework/Ppi/EndOfPeiSignal/EndOfPeiSignal.h b/EDK/Foundation/Framework/Ppi/EndOfPeiSignal/EndOfPeiSignal.h
new file mode 100644
index 0000000..155ed82
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/EndOfPeiSignal/EndOfPeiSignal.h
@@ -0,0 +1,35 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ EndOfPeiSignal.h
+
+Abstract:
+
+ PPI to be used to signal when the PEI ownership of the memory map
+ officially ends and DXE will take over
+
+--*/
+
+#ifndef _PEI_END_OF_PEI_SIGNAL_PPI_H
+#define _PEI_END_OF_PEI_SIGNAL_PPI_H
+
+#define PEI_END_OF_PEI_PHASE_PPI_GUID \
+ { \
+ 0x605EA650, 0xC65C, 0x42e1, 0xBA, 0x80, 0x91, 0xA5, 0x2A, 0xB6, 0x18, 0xC6 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_END_OF_PEI_SIGNAL_PPI);
+
+extern EFI_GUID gEndOfPeiSignalPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/FindFv/FindFv.c b/EDK/Foundation/Framework/Ppi/FindFv/FindFv.c
new file mode 100644
index 0000000..91b06fd
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/FindFv/FindFv.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FindFv.c
+
+Abstract:
+
+ FindFv PPI GUID as defined in Tiano
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (FindFv)
+
+EFI_GUID gEfiFindFvPpiGuid = EFI_FIND_FV_PPI_GUID;
+
+EFI_GUID_STRING(&gEfiFindFvPpiGuid, "FindFv", "FindFv PPI");
diff --git a/EDK/Foundation/Framework/Ppi/FindFv/FindFv.h b/EDK/Foundation/Framework/Ppi/FindFv/FindFv.h
new file mode 100644
index 0000000..da87115
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/FindFv/FindFv.h
@@ -0,0 +1,51 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FindFv.h
+
+Abstract:
+
+ FindFv PPI as defined in Tiano
+
+ Used to locate FVs that contain PEIMs in PEI
+
+--*/
+
+#ifndef _FIND_FV_H_
+#define _FIND_FV_H_
+
+#include "EfiFirmwareVolumeHeader.h"
+
+#define EFI_FIND_FV_PPI_GUID \
+ { \
+ 0x36164812, 0xa023, 0x44e5, 0xbd, 0x85, 0x5, 0xbf, 0x3c, 0x77, 0x0, 0xaa \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_FIND_FV_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FIND_FV_FINDFV) (
+ IN EFI_FIND_FV_PPI * This,
+ IN EFI_PEI_SERVICES **PeiServices,
+ UINT8 *FvNumber,
+ EFI_FIRMWARE_VOLUME_HEADER **FVAddress
+ );
+
+typedef struct _EFI_FIND_FV_PPI {
+ EFI_FIND_FV_FINDFV FindFv;
+} EFI_FIND_FV_PPI;
+
+extern EFI_GUID gEfiFindFvPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/FirmwareVolume/FirmwareVolume.c b/EDK/Foundation/Framework/Ppi/FirmwareVolume/FirmwareVolume.c
new file mode 100644
index 0000000..5afe01f
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/FirmwareVolume/FirmwareVolume.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolume.c
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (FirmwareVolume)
+
+//
+// There is no PPI Guid definition here, since the guid of
+// this ppi is the same as the firmware volume format Guid.
+// \ No newline at end of file
diff --git a/EDK/Foundation/Framework/Ppi/FirmwareVolume/FirmwareVolume.h b/EDK/Foundation/Framework/Ppi/FirmwareVolume/FirmwareVolume.h
new file mode 100644
index 0000000..0c8b508
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/FirmwareVolume/FirmwareVolume.h
@@ -0,0 +1,112 @@
+/*++
+
+Copyright (c) 2007 - 2009, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolume.h
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#ifndef __FIRMWARE_VOLUME_H__
+#define __FIRMWARE_VOLUME_H__
+
+EFI_FORWARD_DECLARATION (EFI_PEI_FIRMWARE_VOLUME_PPI);
+
+typedef UINT32 EFI_FV_FILE_ATTRIBUTES;
+typedef VOID * EFI_PEI_FILE_HANDLE;
+typedef VOID * EFI_PEI_FV_HANDLE;
+
+
+typedef struct {
+ EFI_GUID FileName;
+ EFI_FV_FILETYPE FileType;
+ EFI_FV_FILE_ATTRIBUTES FileAttributes;
+ VOID *Buffer;
+ UINT32 BufferSize;
+} EFI_FV_FILE_INFO;
+
+typedef struct {
+ EFI_FVB_ATTRIBUTES FvAttributes;
+ EFI_GUID FvFormat;
+ EFI_GUID FvName;
+ VOID *FvStart;
+ UINT64 FvSize;
+} EFI_FV_INFO;
+
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FV_PROCESS_FV) (
+ IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This,
+ IN VOID *Buffer,
+ IN UINTN BufferSize,
+ OUT EFI_PEI_FV_HANDLE *FvHandle
+ );
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FV_FIND_FILE_TYPE) (
+ IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This,
+ IN EFI_FV_FILETYPE SearchType,
+ IN EFI_PEI_FV_HANDLE FvHandle,
+ IN OUT EFI_PEI_FILE_HANDLE *FileHandle
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FV_FIND_FILE_NAME) (
+ IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This,
+ IN CONST EFI_GUID *FileName,
+ IN OUT EFI_PEI_FV_HANDLE *FvHandle,
+ OUT EFI_PEI_FILE_HANDLE *FileHandle
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FV_GET_FILE_INFO) (
+ IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This,
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ OUT EFI_FV_FILE_INFO *FileInfo
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FV_GET_INFO)(
+ IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This,
+ IN EFI_PEI_FV_HANDLE FvHandle,
+ OUT EFI_FV_INFO *VolumeInfo
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FV_FIND_SECTION) (
+ IN CONST EFI_PEI_FIRMWARE_VOLUME_PPI *This,
+ IN EFI_SECTION_TYPE SearchType,
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ OUT VOID **SectionData
+ );
+
+typedef struct _EFI_PEI_FIRMWARE_VOLUME_PPI {
+ EFI_PEI_FV_PROCESS_FV ProcessVolume;
+ EFI_PEI_FV_FIND_FILE_TYPE FindFileByType;
+ EFI_PEI_FV_FIND_FILE_NAME FindFileByName;
+ EFI_PEI_FV_GET_FILE_INFO GetFileInfo;
+ EFI_PEI_FV_GET_INFO GetVolumeInfo;
+ EFI_PEI_FV_FIND_SECTION FindSectionByType;
+} EFI_PEI_FIRMWARE_VOLUME_PPI;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/FirmwareVolumeInfo/FirmwareVolumeInfo.c b/EDK/Foundation/Framework/Ppi/FirmwareVolumeInfo/FirmwareVolumeInfo.c
new file mode 100644
index 0000000..ed00f62
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/FirmwareVolumeInfo/FirmwareVolumeInfo.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolumeInfo.c
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (FirmwareVolumeInfo)
+
+EFI_GUID gEfiFirmwareVolumeInfoPpiGuid = EFI_PEI_FIRMWARE_VOLUME_INFO_PPI_GUID;
+EFI_GUID_STRING(&gEfiFirmwareVolumeInfoPpiGuid, "FirmwareVolumeInfo", "FirmwareVolumeInfo PPI");
diff --git a/EDK/Foundation/Framework/Ppi/FirmwareVolumeInfo/FirmwareVolumeInfo.h b/EDK/Foundation/Framework/Ppi/FirmwareVolumeInfo/FirmwareVolumeInfo.h
new file mode 100644
index 0000000..f1a49ee
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/FirmwareVolumeInfo/FirmwareVolumeInfo.h
@@ -0,0 +1,46 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolumeInfo.h
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#ifndef __FIRMWARE_VOLUME_INFO_PPI__
+#define __FIRMWARE_VOLUME_INFO_PPI__
+
+EFI_FORWARD_DECLARATION (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI);
+
+
+//
+// The PPI GUID must match the EFI_GUID FvFormat value
+//
+#define EFI_PEI_FIRMWARE_VOLUME_INFO_PPI_GUID \
+ { 0x49edb1c1, 0xbf21, 0x4761, { 0xbb, 0x12, 0xeb, 0x0, 0x31, 0xaa, 0xbb, 0x39 } }
+
+
+struct _EFI_PEI_FIRMWARE_VOLUME_INFO_PPI {
+ EFI_GUID FvFormat;
+ VOID *FvInfo;
+ UINT32 FvInfoSize;
+ EFI_GUID *ParentFvName;
+ EFI_GUID *ParentFileName;
+};
+
+
+extern EFI_GUID gEfiFirmwareVolumeInfoPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/GuidedSectionExtraction/GuidedSectionExtraction.c b/EDK/Foundation/Framework/Ppi/GuidedSectionExtraction/GuidedSectionExtraction.c
new file mode 100644
index 0000000..a7460ac
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/GuidedSectionExtraction/GuidedSectionExtraction.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ GuidedSectionExtraction.c
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (GuidedSectionExtraction)
+
+//
+// There is no PPI Guid definition here since this PPI is for
+// extract EFI_SECTION_GUID_DEFINED type section.
+// \ No newline at end of file
diff --git a/EDK/Foundation/Framework/Ppi/GuidedSectionExtraction/GuidedSectionExtraction.h b/EDK/Foundation/Framework/Ppi/GuidedSectionExtraction/GuidedSectionExtraction.h
new file mode 100644
index 0000000..b53ffa6
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/GuidedSectionExtraction/GuidedSectionExtraction.h
@@ -0,0 +1,42 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ GuidedSectionExtraction.h
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+
+#ifndef __GUIDED_SECTION_EXTRACTION_PPI_H__
+#define __GUIDED_SECTION_EXTRACTION_PPI_H__
+
+EFI_FORWARD_DECLARATION (EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_EXTRACT_GUIDED_SECTION)(
+ IN CONST EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI *This,
+ IN CONST VOID *InputSection,
+ OUT VOID **OutputBuffer,
+ OUT UINTN *OutputSize,
+ OUT UINT32 *AuthenticationStatus
+ );
+
+typedef struct _EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI {
+ EFI_PEI_EXTRACT_GUIDED_SECTION ExtractSection;
+} EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/LoadFile/LoadFile.c b/EDK/Foundation/Framework/Ppi/LoadFile/LoadFile.c
new file mode 100644
index 0000000..e8a4065
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/LoadFile/LoadFile.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ LoadFile.c
+
+Abstract:
+
+ Load File PPI GUID.
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (LoadFile)
+
+EFI_GUID gPeiFvFileLoaderPpiGuid = EFI_PEI_FV_FILE_LOADER_GUID;
+
+EFI_GUID_STRING(&gPeiFvFileLoaderPpiGuid, "FvFileLoader", "Fv File Loader Support PPI");
diff --git a/EDK/Foundation/Framework/Ppi/LoadFile/LoadFile.h b/EDK/Foundation/Framework/Ppi/LoadFile/LoadFile.h
new file mode 100644
index 0000000..6cd4b1d
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/LoadFile/LoadFile.h
@@ -0,0 +1,48 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ LoadFile.h
+
+Abstract:
+
+ Load image file from fv to memory.
+
+--*/
+
+#ifndef _PEI_FV_FILE_LOADER_PPI_H
+#define _PEI_FV_FILE_LOADER_PPI_H
+
+#define EFI_PEI_FV_FILE_LOADER_GUID \
+ { \
+ 0x7e1f0d85, 0x4ff, 0x4bb2, 0x86, 0x6a, 0x31, 0xa2, 0x99, 0x6a, 0x48, 0xa8 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_PEI_FV_FILE_LOADER_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FV_LOAD_FILE) (
+ IN EFI_PEI_FV_FILE_LOADER_PPI * This,
+ IN EFI_FFS_FILE_HEADER * FfsHeader,
+ OUT EFI_PHYSICAL_ADDRESS * ImageAddress,
+ OUT UINT64 *ImageSize,
+ OUT EFI_PHYSICAL_ADDRESS * EntryPoint
+ );
+
+typedef struct _EFI_PEI_FV_FILE_LOADER_PPI {
+ EFI_PEI_FV_LOAD_FILE FvLoadFile;
+} EFI_PEI_FV_FILE_LOADER_PPI;
+
+extern EFI_GUID gPeiFvFileLoaderPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/LoadFile2/LoadFile2.c b/EDK/Foundation/Framework/Ppi/LoadFile2/LoadFile2.c
new file mode 100644
index 0000000..9e63e7b
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/LoadFile2/LoadFile2.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ LoadFile2.c
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (LoadFile2)
+
+
+EFI_GUID gEfiLoadFile2PpiGuid = EFI_PEI_LOAD_FILE_GUID;
+EFI_GUID_STRING(&gEfiLoadFile2PpiGuid, "PeiLoadFile2", "PeiLoadFile2 PPI");
diff --git a/EDK/Foundation/Framework/Ppi/LoadFile2/LoadFile2.h b/EDK/Foundation/Framework/Ppi/LoadFile2/LoadFile2.h
new file mode 100644
index 0000000..4646b1c
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/LoadFile2/LoadFile2.h
@@ -0,0 +1,49 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ LoadFile2.h
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#ifndef __LOAD_FILE_PPI_H__
+#define __LOAD_FILE_PPI_H__
+
+EFI_FORWARD_DECLARATION (EFI_PEI_LOAD_FILE_PPI);
+
+#define EFI_PEI_LOAD_FILE_GUID \
+ { 0xb9e0abfe, 0x5979, 0x4914, 0x97, 0x7f, 0x6d, 0xee, 0x78, 0xc2, 0x78, 0xa6}
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_LOAD_FILE) (
+ IN CONST EFI_PEI_LOAD_FILE_PPI *This,
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ OUT EFI_PHYSICAL_ADDRESS *ImageAddress,
+ OUT UINT64 *ImageSize,
+ OUT EFI_PHYSICAL_ADDRESS *EntryPoint,
+ OUT UINT32 *AuthenticationState
+ );
+
+
+typedef struct _EFI_PEI_LOAD_FILE_PPI {
+ EFI_PEI_LOAD_FILE LoadFile;
+} EFI_PEI_LOAD_FILE_PPI;
+
+
+extern EFI_GUID gEfiLoadFile2PpiGuid;
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/MemoryDiscovered/MemoryDiscovered.c b/EDK/Foundation/Framework/Ppi/MemoryDiscovered/MemoryDiscovered.c
new file mode 100644
index 0000000..8a4779f
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/MemoryDiscovered/MemoryDiscovered.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ MemoryDiscovered.c
+
+Abstract:
+
+ Memory Discovered PPI GUID as defined in PEI EAS
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (MemoryDiscovered)
+
+EFI_GUID gPeiMemoryDiscoveredPpiGuid = PEI_PERMANENT_MEMORY_INSTALLED_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiMemoryDiscoveredPpiGuid, "MemoryDiscovered", "Memory Discovered PPI");
diff --git a/EDK/Foundation/Framework/Ppi/MemoryDiscovered/MemoryDiscovered.h b/EDK/Foundation/Framework/Ppi/MemoryDiscovered/MemoryDiscovered.h
new file mode 100644
index 0000000..7cde19a
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/MemoryDiscovered/MemoryDiscovered.h
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ MemoryDiscovered.h
+
+Abstract:
+
+ Memory Discovered PPI as defined in Tiano
+
+--*/
+
+#ifndef _PEI_MEMORY_DISCOVERED_PPI_H
+#define _PEI_MEMORY_DISCOVERED_PPI_H
+
+#define PEI_PERMANENT_MEMORY_INSTALLED_PPI_GUID \
+ { \
+ 0xf894643d, 0xc449, 0x42d1, 0x8e, 0xa8, 0x85, 0xbd, 0xd8, 0xc6, 0x5b, 0xde \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_PERMANENT_MEMORY_INSTALLED_PPI);
+
+extern EFI_GUID gPeiMemoryDiscoveredPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/PciCfg/PciCfg.c b/EDK/Foundation/Framework/Ppi/PciCfg/PciCfg.c
new file mode 100644
index 0000000..5bc6f68
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/PciCfg/PciCfg.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PciCfg.c
+
+Abstract:
+
+ PciCfg PPI GUID as defined in PEI CIS specification.
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (PciCfg)
+
+EFI_GUID gPeiPciCfgPpiInServiceTableGuid = PEI_PCI_CFG_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiPciCfgPpiInServiceTableGuid, "PciCfg", "PciCfg PPI");
diff --git a/EDK/Foundation/Framework/Ppi/PciCfg/PciCfg.h b/EDK/Foundation/Framework/Ppi/PciCfg/PciCfg.h
new file mode 100644
index 0000000..d116b50
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/PciCfg/PciCfg.h
@@ -0,0 +1,65 @@
+/*++
+
+Copyright (c) 2004 - 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PciCfg.h
+
+Abstract:
+
+ PciCfg PPI as defined in PEI CIS specification
+
+ Used to access PCI configuration space in PEI
+
+--*/
+
+#ifndef _PEI_PCI_CFG_H_
+#define _PEI_PCI_CFG_H_
+#include "EfiPciCfg.h"
+
+#define PEI_PCI_CFG_PPI_GUID \
+ { \
+ 0xe1f2eba0, 0xf7b9, 0x4a26, 0x86, 0x20, 0x13, 0x12, 0x21, 0x64, 0x2a, 0x90 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_PCI_CFG_PPI);
+
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PCI_CFG_PPI_IO) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_PCI_CFG_PPI * This,
+ IN PEI_PCI_CFG_PPI_WIDTH Width,
+ IN UINT64 Address,
+ IN OUT VOID *Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_PCI_CFG_PPI_RW) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_PCI_CFG_PPI * This,
+ IN PEI_PCI_CFG_PPI_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN SetBits,
+ IN UINTN ClearBits
+ );
+
+typedef struct _PEI_PCI_CFG_PPI {
+ PEI_PCI_CFG_PPI_IO Read;
+ PEI_PCI_CFG_PPI_IO Write;
+ PEI_PCI_CFG_PPI_RW Modify;
+} PEI_PCI_CFG_PPI;
+
+extern EFI_GUID gPeiPciCfgPpiInServiceTableGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/PciCfg2/PciCfg2.c b/EDK/Foundation/Framework/Ppi/PciCfg2/PciCfg2.c
new file mode 100644
index 0000000..e733d74
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/PciCfg2/PciCfg2.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PciCfg2.c
+
+Abstract:
+
+ PciCfg2 PPI GUID as defined in PI1.0 specification.
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (PciCfg2)
+
+EFI_GUID gPeiPciCfg2PpiGuid = EFI_PEI_PCI_CFG2_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiPciCfg2PpiGuid, "PciCfg2", "PciCfg2 PPI");
diff --git a/EDK/Foundation/Framework/Ppi/PciCfg2/PciCfg2.h b/EDK/Foundation/Framework/Ppi/PciCfg2/PciCfg2.h
new file mode 100644
index 0000000..285f97c
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/PciCfg2/PciCfg2.h
@@ -0,0 +1,67 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PciCfg2.h
+
+Abstract:
+
+ PciCfg2 PPI as defined in PI1.0 specification
+
+ Used to access PCI configuration space in PEI
+
+--*/
+
+#ifndef _PEI_PCI_CFG2_H_
+#define _PEI_PCI_CFG2_H_
+#include "EfiPciCfg.h"
+
+//;;## ...AMI_OVERRIDE... Fixed Build error issue.
+#define EFI_PEI_PCI_CFG2_PPI_GUID \
+ { \
+ 0x57a449a, 0x1fdc, 0x4c06, 0xbf, 0xc9, 0xf5, 0x3f, 0x6a, 0x99, 0xbb, 0x92 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_PEI_PCI_CFG2_PPI);
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_PCI_CFG_PPI_IO) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN CONST EFI_PEI_PCI_CFG2_PPI *This,
+ IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,
+ IN UINT64 Address,
+ IN OUT VOID *Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_PCI_CFG_PPI_RW) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN CONST EFI_PEI_PCI_CFG2_PPI *This,
+ IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,
+ IN UINT64 Address,
+ IN VOID *SetBits,
+ IN VOID *ClearBits
+ );
+
+struct _EFI_PEI_PCI_CFG2_PPI {
+ EFI_PEI_PCI_CFG_PPI_IO Read;
+ EFI_PEI_PCI_CFG_PPI_IO Write;
+ EFI_PEI_PCI_CFG_PPI_RW Modify;
+ UINT16 Segment;
+};
+
+extern EFI_GUID gPeiPciCfg2PpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/RecoveryModule/RecoveryModule.c b/EDK/Foundation/Framework/Ppi/RecoveryModule/RecoveryModule.c
new file mode 100644
index 0000000..ad53fe3
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/RecoveryModule/RecoveryModule.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ RecoveryModule.c
+
+Abstract:
+
+ Recovery Module PPI GUID as defined in PEI EAS
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (RecoveryModule)
+
+EFI_GUID gPeiRecoveryModulePpiGuid = PEI_RECOVERY_MODULE_INTERFACE_PPI;
+
+EFI_GUID_STRING(&gPeiRecoveryModulePpiGuid, "RecoveryModule", "Recovery Module PPI");
diff --git a/EDK/Foundation/Framework/Ppi/RecoveryModule/RecoveryModule.h b/EDK/Foundation/Framework/Ppi/RecoveryModule/RecoveryModule.h
new file mode 100644
index 0000000..c36e914
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/RecoveryModule/RecoveryModule.h
@@ -0,0 +1,45 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ RecoveryModule.h
+
+Abstract:
+
+ Recovery Module PPI as defined in Tiano
+
+--*/
+
+#ifndef _PEI_RECOVERY_MODULE_PPI_H
+#define _PEI_RECOVERY_MODULE_PPI_H
+
+#define PEI_RECOVERY_MODULE_INTERFACE_PPI \
+ { \
+ 0xFB6D9542, 0x612D, 0x4f45, 0x87, 0x2F, 0x5C, 0xFF, 0x52, 0xE9, 0x3D, 0xCF \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_RECOVERY_MODULE_INTERFACE);
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_LOAD_RECOVERY_CAPSULE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_RECOVERY_MODULE_INTERFACE * This
+ );
+
+typedef struct _PEI_RECOVERY_MODULE_INTERFACE {
+ PEI_LOAD_RECOVERY_CAPSULE LoadRecoveryCapsule;
+} PEI_RECOVERY_MODULE_INTERFACE;
+
+extern EFI_GUID gPeiRecoveryModulePpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/Reset/Reset.c b/EDK/Foundation/Framework/Ppi/Reset/Reset.c
new file mode 100644
index 0000000..6f680b2
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Reset/Reset.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Reset.c
+
+Abstract:
+
+ Reset Service PPI GUID as defined in Tiano
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (Reset)
+
+EFI_GUID gPeiResetPpiGuid = PEI_RESET_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiResetPpiGuid, "Reset", "Reset PPI");
diff --git a/EDK/Foundation/Framework/Ppi/Reset/Reset.h b/EDK/Foundation/Framework/Ppi/Reset/Reset.h
new file mode 100644
index 0000000..8239b42
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Reset/Reset.h
@@ -0,0 +1,54 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Reset.h
+
+Abstract:
+
+ Reset PPI as defined in Tiano
+
+ Used to reset the platform from PEI
+
+--*/
+
+#ifndef _PEI_RESET_H_
+#define _PEI_RESET_H_
+
+#define PEI_RESET_PPI_GUID \
+ { \
+ 0xef398d58, 0x9dfd, 0x4103, 0xbf, 0x94, 0x78, 0xc6, 0xf4, 0xfe, 0x71, 0x2f \
+ }
+
+//
+// *******************************************************
+// PEI_RESET_TYPE
+// *******************************************************
+//
+typedef enum {
+ PeiResetCold,
+ PeiResetWarm,
+} PEI_RESET_TYPE;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_RESET_SYSTEM) (
+ IN EFI_PEI_SERVICES **PeiServices
+ );
+
+typedef struct {
+ EFI_PEI_RESET_SYSTEM ResetSystem;
+} PEI_RESET_PPI;
+
+extern EFI_GUID gPeiResetPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/S3Resume/S3Resume.c b/EDK/Foundation/Framework/Ppi/S3Resume/S3Resume.c
new file mode 100644
index 0000000..12b8e56
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/S3Resume/S3Resume.c
@@ -0,0 +1,29 @@
+/*++
+
+ Copyright (c) 2004, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ S3Resume.c
+
+Abstract:
+
+ Boot Script Executer PPI GUID as defined in Tiano
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (S3Resume)
+
+EFI_GUID gPeiS3ResumePpiGuid = PEI_S3_RESUME_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiS3ResumePpiGuid, "S3Resume", "S3 Resume PPI");
diff --git a/EDK/Foundation/Framework/Ppi/S3Resume/S3Resume.h b/EDK/Foundation/Framework/Ppi/S3Resume/S3Resume.h
new file mode 100644
index 0000000..43a2afb
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/S3Resume/S3Resume.h
@@ -0,0 +1,44 @@
+/*++
+
+ Copyright (c) 2004, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ S3Resume.h
+
+Abstract:
+
+ S3 Resume PPI
+
+--*/
+
+#ifndef _PEI_S3_RESUME_PPI_H
+#define _PEI_S3_RESUME_PPI_H
+
+#define PEI_S3_RESUME_PPI_GUID \
+ { \
+ 0x4426CCB2, 0xE684, 0x4a8a, 0xAE, 0x40, 0x20, 0xD4, 0xB0, 0x25, 0xB7, 0x10 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_S3_RESUME_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_S3_RESUME_PPI_RESTORE_CONFIG) (
+ IN EFI_PEI_SERVICES **PeiServices
+ );
+
+typedef struct _PEI_S3_RESUME_PPI {
+ PEI_S3_RESUME_PPI_RESTORE_CONFIG S3RestoreConfig;
+} PEI_S3_RESUME_PPI;
+
+extern EFI_GUID gPeiS3ResumePpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/SecPlatformInformation/SecPlatformInformation.c b/EDK/Foundation/Framework/Ppi/SecPlatformInformation/SecPlatformInformation.c
new file mode 100644
index 0000000..ecc0c34
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/SecPlatformInformation/SecPlatformInformation.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ SecPlatformInformation.c
+
+Abstract:
+
+ Sec Platform Information as defined in PEI EAS
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (SecPlatformInformation)
+
+EFI_GUID gEfiSecPlatformInformationPpiGuid = EFI_SEC_PLATFORM_INFORMATION_GUID;
+
+EFI_GUID_STRING(&gEfiSecPlatformInformationPpiGuid, "SecPlatformInformation", "Sec Platform Information");
diff --git a/EDK/Foundation/Framework/Ppi/SecPlatformInformation/SecPlatformInformation.h b/EDK/Foundation/Framework/Ppi/SecPlatformInformation/SecPlatformInformation.h
new file mode 100644
index 0000000..f9ea0e6
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/SecPlatformInformation/SecPlatformInformation.h
@@ -0,0 +1,57 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ SecPlatformInformation.h
+
+Abstract:
+
+ Sec Platform Information PPI as defined in Tiano
+
+--*/
+
+#ifndef _PEI_SEC_PLATFORM_INFORMATION_PPI_H
+#define _PEI_SEC_PLATFORM_INFORMATION_PPI_H
+
+#define EFI_SEC_PLATFORM_INFORMATION_GUID \
+ { \
+ 0x6f8c2b35, 0xfef4, 0x448d, 0x82, 0x56, 0xe1, 0x1b, 0x19, 0xd6, 0x10, 0x77 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SEC_PLATFORM_INFORMATION_PPI);
+
+extern EFI_GUID gEfiSecPlatformInformationPpiGuid;
+
+typedef struct {
+ UINTN HealthFlags;
+} SEC_PLATFORM_INFORMATION_RECORD;
+
+typedef struct {
+ UINTN BootPhase; // entry r20 value
+ UINTN UniqueId; // PAL arbitration ID
+ UINTN HealthStat; // Health Status
+ UINTN PALRetAddress; // return address to PAL
+} IPF_HANDOFF_STATUS;
+
+typedef
+EFI_STATUS
+(EFIAPI *SEC_PLATFORM_INFORMATION) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT UINT64 *StructureSize,
+ IN OUT SEC_PLATFORM_INFORMATION_RECORD * PlatformInformationRecord
+ );
+
+typedef struct _EFI_SEC_PLATFORM_INFORMATION_PPI {
+ SEC_PLATFORM_INFORMATION PlatformInformation;
+} EFI_SEC_PLATFORM_INFORMATION_PPI;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/SectionExtraction/SectionExtraction.c b/EDK/Foundation/Framework/Ppi/SectionExtraction/SectionExtraction.c
new file mode 100644
index 0000000..7f3d962
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/SectionExtraction/SectionExtraction.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ SectionExtraction.c
+
+Abstract:
+
+ Section Extraction Protocol PPI GUID as defined in Tiano
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (SectionExtraction)
+
+EFI_GUID gPeiSectionExtractionPpiGuid = EFI_PEI_SECTION_EXTRACTION_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiSectionExtractionPpiGuid, "Section Extraction PPI", "Section Extraction PPI");
diff --git a/EDK/Foundation/Framework/Ppi/SectionExtraction/SectionExtraction.h b/EDK/Foundation/Framework/Ppi/SectionExtraction/SectionExtraction.h
new file mode 100644
index 0000000..1e1a501
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/SectionExtraction/SectionExtraction.h
@@ -0,0 +1,59 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ SectionExtraction.h
+
+Abstract:
+
+ Section Extraction PPI as defined in Tiano
+
+--*/
+
+#ifndef _SECTION_EXTRACTION_PPI_H_
+#define _SECTION_EXTRACTION_PPI_H_
+
+#define EFI_PEI_SECTION_EXTRACTION_PPI_GUID \
+ { \
+ 0x4F89E208, 0xE144, 0x4804, 0x9E, 0xC8, 0x0F, 0x89, 0x4F, 0x7E, 0x36, 0xD7 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_PEI_SECTION_EXTRACTION_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_SECTION) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_SECTION_EXTRACTION_PPI * This,
+ IN EFI_SECTION_TYPE * SectionType,
+ IN EFI_GUID * SectionDefinitionGuid, OPTIONAL
+ IN UINTN SectionInstance,
+ IN VOID **Buffer,
+ IN OUT UINT32 *BufferSize,
+ OUT UINT32 *AuthenticationStatus
+ );
+
+//
+// Bit values for AuthenticationStatus
+//
+#define EFI_PEI_AUTH_STATUS_PLATFORM_OVERRIDE 0x01
+#define EFI_PEI_AUTH_STATUS_IMAGE_SIGNED 0x02
+#define EFI_PEI_AUTH_STATUS_NOT_TESTED 0x04
+#define EFI_PEI_AUTH_STATUS_TEST_FAILED 0x08
+
+typedef struct _EFI_PEI_SECTION_EXTRACTION_PPI {
+ EFI_PEI_GET_SECTION PeiGetSection;
+} EFI_PEI_SECTION_EXTRACTION_PPI;
+
+extern EFI_GUID gPeiSectionExtractionPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/Security/Security.c b/EDK/Foundation/Framework/Ppi/Security/Security.c
new file mode 100644
index 0000000..9d18044
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Security/Security.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Security.c
+
+Abstract:
+
+ Security Architectural Protocol PPI GUID as defined in Tiano
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (Security)
+
+EFI_GUID gPeiSecurityPpiGuid = PEI_SECURITY_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiSecurityPpiGuid, "Security PPI", "Security Arch PPI");
diff --git a/EDK/Foundation/Framework/Ppi/Security/Security.h b/EDK/Foundation/Framework/Ppi/Security/Security.h
new file mode 100644
index 0000000..ec72ffa
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Security/Security.h
@@ -0,0 +1,48 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Security.h
+
+Abstract:
+
+ Security Architectural PPI as defined in Tiano
+
+--*/
+
+#ifndef _SECURITY_PPI_H_
+#define _SECURITY_PPI_H_
+
+#define PEI_SECURITY_PPI_GUID \
+ { \
+ 0x1388066e, 0x3a57, 0x4efa, 0x98, 0xf3, 0xc1, 0x2f, 0x3a, 0x95, 0x8a, 0x29 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_SECURITY_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_SECURITY_AUTHENTICATION_STATE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_SECURITY_PPI * This,
+ IN UINT32 AuthenticationStatus,
+ IN EFI_FFS_FILE_HEADER * FfsFileHeader,
+ IN OUT BOOLEAN *StartCrisisRecovery
+ );
+
+typedef struct _PEI_SECURITY_PPI {
+ PEI_SECURITY_AUTHENTICATION_STATE AuthenticationState;
+} PEI_SECURITY_PPI;
+
+extern EFI_GUID gPeiSecurityPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/Security2/Security2.c b/EDK/Foundation/Framework/Ppi/Security2/Security2.c
new file mode 100644
index 0000000..b2ada7f
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Security2/Security2.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Security2.c
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (Security2)
+
+EFI_GUID gEfiPeiSecurity2PpiGuid = EFI_PEI_SECURITY2_PPI_GUID;
+
+EFI_GUID_STRING(&gEfiPeiSecurity2PpiGuid, "Security2 PPI", "Security2 Arch PPI");
diff --git a/EDK/Foundation/Framework/Ppi/Security2/Security2.h b/EDK/Foundation/Framework/Ppi/Security2/Security2.h
new file mode 100644
index 0000000..55d2031
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Security2/Security2.h
@@ -0,0 +1,50 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Security2.h
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+
+#ifndef __SECURITY2_PPI_H__
+#define __SECURITY2_PPI_H__
+
+#define EFI_PEI_SECURITY2_PPI_GUID \
+ { 0xdcd0be23, 0x9586, 0x40f4, 0xb6, 0x43, 0x6, 0x52, 0x2c, 0xed, 0x4e, 0xde}
+
+
+EFI_FORWARD_DECLARATION (EFI_PEI_SECURITY2_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SECURITY_AUTHENTICATION_STATE) (
+ IN CONST EFI_PEI_SERVICES **PeiServices,
+ IN CONST EFI_PEI_SECURITY2_PPI *This,
+ IN UINT32 AuthenticationStatus,
+ IN EFI_PEI_FV_HANDLE FvHandle,
+ IN EFI_PEI_FILE_HANDLE FileHandle,
+ IN OUT BOOLEAN *DeferExection
+ );
+
+typedef struct _EFI_PEI_SECURITY2_PPI {
+ EFI_PEI_SECURITY_AUTHENTICATION_STATE AuthenticationState;
+} EFI_PEI_SECURITY2_PPI;
+
+
+extern EFI_GUID gEfiPeiSecurity2PpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/Smbus/Smbus.c b/EDK/Foundation/Framework/Ppi/Smbus/Smbus.c
new file mode 100644
index 0000000..ad2340c
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Smbus/Smbus.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ Smbus.c
+
+Abstract:
+
+ Smbus PPI GUID as defined in EFI 2.0
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (Smbus)
+
+EFI_GUID gPeiSmbusPpiGuid = PEI_SMBUS_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiSmbusPpiGuid, "Smbus", "Smbus PPI");
diff --git a/EDK/Foundation/Framework/Ppi/Smbus/Smbus.h b/EDK/Foundation/Framework/Ppi/Smbus/Smbus.h
new file mode 100644
index 0000000..c4c6fbe
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Smbus/Smbus.h
@@ -0,0 +1,115 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ Smbus.h
+
+Abstract:
+
+ Smbus PPI as defined in EFI 2.0
+
+--*/
+
+#ifndef _PEI_SMBUS_PPI_H
+#define _PEI_SMBUS_PPI_H
+
+#include "EfiSmbus.h"
+
+#define PEI_SMBUS_PPI_GUID \
+ { \
+ 0xabd42895, 0x78cf, 0x4872, 0x84, 0x44, 0x1b, 0x5c, 0x18, 0xb, 0xfb, 0xda \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_SMBUS_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_SMBUS_PPI_EXECUTE_OPERATION) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_SMBUS_PPI * This,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN EFI_SMBUS_DEVICE_COMMAND Command,
+ IN EFI_SMBUS_OPERATION Operation,
+ IN BOOLEAN PecCheck,
+ IN OUT UINTN *Length,
+ IN OUT VOID *Buffer
+ );
+
+//;;## ...AMI_OVERRIDE... Support PI1.x typedef struct {
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT32 VendorSpecificId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 SubsystemDeviceId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 SubsystemVendorId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 Interface;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 DeviceId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 VendorId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT8 VendorRevision;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT8 DeviceCapabilities;
+//;;## ...AMI_OVERRIDE... Support PI1.x } EFI_SMBUS_UDID;
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_SMBUS_NOTIFY_FUNCTION) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_SMBUS_PPI * SmbusPpi,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN UINTN Data
+ );
+
+//
+// If ArpAll is TRUE, SmbusUdid/SlaveAddress is Optional.
+// If FALSE, ArpDevice will enum SmbusUdid and the address will be at SlaveAddress
+//
+typedef
+EFI_STATUS
+(EFIAPI *PEI_SMBUS_PPI_ARP_DEVICE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_SMBUS_PPI * This,
+ IN BOOLEAN ArpAll,
+ IN EFI_SMBUS_UDID * SmbusUdid, OPTIONAL
+ IN OUT EFI_SMBUS_DEVICE_ADDRESS * SlaveAddress OPTIONAL
+ );
+
+//;;## ...AMI_OVERRIDE... Support PI1.x typedef struct {
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_SMBUS_UDID SmbusDeviceUdid;
+//;;## ...AMI_OVERRIDE... Support PI1.x } EFI_SMBUS_DEVICE_MAP;
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_SMBUS_PPI_GET_ARP_MAP) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_SMBUS_PPI * This,
+ IN OUT UINTN *Length,
+ IN OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_SMBUS_PPI_NOTIFY) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_SMBUS_PPI * This,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN UINTN Data,
+ IN PEI_SMBUS_NOTIFY_FUNCTION NotifyFunction
+ );
+
+typedef struct _PEI_SMBUS_PPI {
+ PEI_SMBUS_PPI_EXECUTE_OPERATION Execute;
+ PEI_SMBUS_PPI_ARP_DEVICE ArpDevice;
+ PEI_SMBUS_PPI_GET_ARP_MAP GetArpMap;
+ PEI_SMBUS_PPI_NOTIFY Notify;
+} PEI_SMBUS_PPI;
+
+extern EFI_GUID gPeiSmbusPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/Smbus2/Smbus2.c b/EDK/Foundation/Framework/Ppi/Smbus2/Smbus2.c
new file mode 100644
index 0000000..bbd372a
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Smbus2/Smbus2.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ Smbus2.c
+
+Abstract:
+
+ Smbus2 PPI GUID as defined in PI1.0
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (Smbus2)
+
+EFI_GUID gPeiSmbus2PpiGuid = PEI_SMBUS2_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiSmbus2PpiGuid, "Smbus2", "Smbus2 PPI");
diff --git a/EDK/Foundation/Framework/Ppi/Smbus2/Smbus2.h b/EDK/Foundation/Framework/Ppi/Smbus2/Smbus2.h
new file mode 100644
index 0000000..23bfa93
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Smbus2/Smbus2.h
@@ -0,0 +1,96 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ Smbus2.h
+
+Abstract:
+
+ Smbus2 PPI as defined in PI 1.0
+
+--*/
+
+#ifndef _PEI_SMBUS2_PPI_H
+#define _PEI_SMBUS2_PPI_H
+
+#include "EfiSmbus.h"
+
+#define PEI_SMBUS2_PPI_GUID \
+ { \
+ 0x9ca93627, 0xb65b, 0x4324, 0xa2, 0x2, 0xc0, 0xb4, 0x61, 0x76, 0x45, 0x43 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_PEI_SMBUS2_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS2_PPI_EXECUTE_OPERATION) (
+ IN CONST EFI_PEI_SMBUS2_PPI * This,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN EFI_SMBUS_DEVICE_COMMAND Command,
+ IN EFI_SMBUS_OPERATION Operation,
+ IN BOOLEAN PecCheck,
+ IN OUT UINTN *Length,
+ IN OUT VOID *Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS_NOTIFY2_FUNCTION) (
+ IN CONST EFI_PEI_SMBUS2_PPI * SmbusPpi,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN UINTN Data
+ );
+
+//
+// If ArpAll is TRUE, SmbusUdid/SlaveAddress is Optional.
+// If FALSE, ArpDevice will enum SmbusUdid and the address will be at SlaveAddress
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS2_PPI_ARP_DEVICE) (
+ IN CONST EFI_PEI_SMBUS2_PPI * This,
+ IN BOOLEAN ArpAll,
+ IN EFI_SMBUS_UDID * SmbusUdid, OPTIONAL
+ IN OUT EFI_SMBUS_DEVICE_ADDRESS * SlaveAddress OPTIONAL
+ );
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS2_PPI_GET_ARP_MAP) (
+ IN CONST EFI_PEI_SMBUS2_PPI * This,
+ IN OUT UINTN *Length,
+ IN OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS2_PPI_NOTIFY) (
+ IN CONST EFI_PEI_SMBUS2_PPI * This,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN UINTN Data,
+ IN EFI_PEI_SMBUS_NOTIFY2_FUNCTION NotifyFunction
+ );
+
+typedef struct _EFI_PEI_SMBUS2_PPI {
+ EFI_PEI_SMBUS2_PPI_EXECUTE_OPERATION Execute;
+ EFI_PEI_SMBUS2_PPI_ARP_DEVICE ArpDevice;
+ EFI_PEI_SMBUS2_PPI_GET_ARP_MAP GetArpMap;
+ EFI_PEI_SMBUS2_PPI_NOTIFY Notify;
+ EFI_GUID Identifier;
+} EFI_PEI_SMBUS2_PPI;
+
+extern EFI_GUID gPeiSmbus2PpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/Stall/Stall.c b/EDK/Foundation/Framework/Ppi/Stall/Stall.c
new file mode 100644
index 0000000..8d00347
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Stall/Stall.c
@@ -0,0 +1,28 @@
+/*++
+
+ Copyright (c) 1999 - 2002, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Stall.c
+
+Abstract:
+
+ Stall PPI
+
+--*/
+
+#include "Tiano.h"
+#include "Pei.h"
+#include EFI_PPI_DEFINITION (Stall)
+
+EFI_GUID gPeiStallPpiGuid = PEI_STALL_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiStallPpiGuid, "Stall", "Stall PPI");
diff --git a/EDK/Foundation/Framework/Ppi/Stall/Stall.h b/EDK/Foundation/Framework/Ppi/Stall/Stall.h
new file mode 100644
index 0000000..c878a63
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Stall/Stall.h
@@ -0,0 +1,47 @@
+/*++
+
+ Copyright (c) 1999 - 2002, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Stall.h
+
+Abstract:
+
+ Stall PPI
+
+--*/
+
+#ifndef _PEI_STALL_PPI_H_
+#define _PEI_STALL_PPI_H_
+
+#define PEI_STALL_PPI_GUID \
+ { \
+ 0x1f4c6f90, 0xb06b, 0x48d8, 0xa2, 0x01, 0xba, 0xe5, 0xf1, 0xcd, 0x7d, 0x56 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_STALL_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_STALL) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_STALL_PPI * This,
+ IN UINTN Microseconds
+ );
+
+typedef struct _PEI_STALL_PPI {
+ UINTN Resolution;
+ PEI_STALL Stall;
+} PEI_STALL_PPI;
+
+extern EFI_GUID gPeiStallPpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/StatusCode/StatusCode.c b/EDK/Foundation/Framework/Ppi/StatusCode/StatusCode.c
new file mode 100644
index 0000000..6fc697c
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/StatusCode/StatusCode.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ StatusCode.c
+
+Abstract:
+
+ Status Code PPI GUID as defined in PEI EAS
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (StatusCode)
+
+EFI_GUID gPeiStatusCodePpiGuid = PEI_STATUS_CODE_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiProgressCodePpiGuid, "StatusCode", "Status Code PPI");
diff --git a/EDK/Foundation/Framework/Ppi/StatusCode/StatusCode.h b/EDK/Foundation/Framework/Ppi/StatusCode/StatusCode.h
new file mode 100644
index 0000000..a19800b
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/StatusCode/StatusCode.h
@@ -0,0 +1,49 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ StatusCode.h
+
+Abstract:
+
+ Status Code PPI as defined in Tiano
+
+--*/
+
+#ifndef _PEI_STATUS_CODE_PPI_H
+#define _PEI_STATUS_CODE_PPI_H
+
+#define PEI_STATUS_CODE_PPI_GUID \
+ { \
+ 0x229832d3, 0x7a30, 0x4b36, 0xb8, 0x27, 0xf4, 0xc, 0xb7, 0xd4, 0x54, 0x36 \
+ }
+
+EFI_FORWARD_DECLARATION (PEI_STATUS_CODE_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_REPORT_STATUS_CODE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID * CallerId,
+ IN EFI_STATUS_CODE_DATA * Data OPTIONAL
+ );
+
+typedef struct _PEI_STATUS_CODE_PPI {
+ PEI_REPORT_STATUS_CODE ReportStatusCode;
+} PEI_STATUS_CODE_PPI;
+
+extern EFI_GUID gPeiStatusCodePpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/Variable/Variable.c b/EDK/Foundation/Framework/Ppi/Variable/Variable.c
new file mode 100644
index 0000000..77d8359
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Variable/Variable.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Variable.c
+
+Abstract:
+
+ Boot Mode PPI GUID as defined in PEI EAS
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (Variable)
+
+EFI_GUID gPeiReadOnlyVariablePpiGuid = PEI_READ_ONLY_VARIABLE_ACCESS_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiReadOnlyVariablePpiGuid, "Variable", "Read Only Variable PPI");
diff --git a/EDK/Foundation/Framework/Ppi/Variable/Variable.h b/EDK/Foundation/Framework/Ppi/Variable/Variable.h
new file mode 100644
index 0000000..90965cb
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Variable/Variable.h
@@ -0,0 +1,69 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Variable.h
+
+Abstract:
+
+ Read-only Variable Service PPI as defined in Tiano
+
+--*/
+
+#ifndef _PEI_READ_ONLY_VARIABLE_PPI_H
+#define _PEI_READ_ONLY_VARIABLE_PPI_H
+
+#include "EfiVariable.h" //;;## ...AMI_OVERRIDE... Support PI1.x
+
+#define PEI_READ_ONLY_VARIABLE_ACCESS_PPI_GUID \
+ { \
+ 0x3cdc90c6, 0x13fb, 0x4a75, 0x9e, 0x79, 0x59, 0xe9, 0xdd, 0x78, 0xb9, 0xfa \
+ }
+
+//
+// Variable attributes
+//
+//;;## ...AMI_OVERRIDE... Support PI1.x #define EFI_VARIABLE_NON_VOLATILE 0x00000001
+//;;## ...AMI_OVERRIDE... Support PI1.x #define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
+//;;## ...AMI_OVERRIDE... Support PI1.x #define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
+//;;## ...AMI_OVERRIDE... Support PI1.x #define EFI_VARIABLE_READ_ONLY 0x00000008
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GET_VARIABLE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN CHAR16 *VariableName,
+ IN EFI_GUID * VendorGuid,
+ OUT UINT32 *Attributes OPTIONAL,
+ IN OUT UINTN *DataSize,
+ OUT VOID *Data
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PEI_GET_NEXT_VARIABLE_NAME) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT UINTN *VariableNameSize,
+ IN OUT CHAR16 *VariableName,
+ IN OUT EFI_GUID * VendorGuid
+ );
+
+typedef struct PEI_READ_ONLY_VARIABLE_PPI {
+ PEI_GET_VARIABLE PeiGetVariable;
+ PEI_GET_NEXT_VARIABLE_NAME PeiGetNextVariableName;
+} PEI_READ_ONLY_VARIABLE_PPI;
+
+EFI_FORWARD_DECLARATION (PEI_MASTER_BOOT_MODE_PPI);
+
+extern EFI_GUID gPeiReadOnlyVariablePpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Ppi/Variable2/Variable2.c b/EDK/Foundation/Framework/Ppi/Variable2/Variable2.c
new file mode 100644
index 0000000..3f4d57a
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Variable2/Variable2.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Variable2.c
+
+Abstract:
+
+ Read-only Variable2 Service PPI as defined in PI1.0
+
+--*/
+
+#include "Tiano.h"
+#include "PeiBind.h"
+#include "PeiApi.h"
+#include EFI_PPI_DEFINITION (Variable2)
+
+EFI_GUID gPeiReadOnlyVariable2PpiGuid = EFI_PEI_READ_ONLY_VARIABLE2_PPI_GUID;
+
+EFI_GUID_STRING(&gPeiReadOnlyVariable2PpiGuid, "Variable2", "Read Only Variable2 PPI");
diff --git a/EDK/Foundation/Framework/Ppi/Variable2/Variable2.h b/EDK/Foundation/Framework/Ppi/Variable2/Variable2.h
new file mode 100644
index 0000000..31020ed
--- /dev/null
+++ b/EDK/Foundation/Framework/Ppi/Variable2/Variable2.h
@@ -0,0 +1,61 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Variable2.h
+
+Abstract:
+
+ Read-only Variable2 Service PPI as defined in PI1.0
+
+--*/
+
+#ifndef _PEI_READ_ONLY_VARIABLE2_PPI_H
+#define _PEI_READ_ONLY_VARIABLE2_PPI_H
+
+#include "EfiVariable.h"
+
+#define EFI_PEI_READ_ONLY_VARIABLE2_PPI_GUID \
+ { \
+ 0x2ab86ef5, 0xecb5, 0x4134, 0xb5, 0x56, 0x38, 0x54, 0xca, 0x1f, 0xe1, 0xb4 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_PEI_READ_ONLY_VARIABLE2_PPI);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_VARIABLE2) (
+ IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
+ IN CONST CHAR16 *VariableName,
+ IN CONST EFI_GUID *VariableGuid,
+ OUT UINT32 *Attributes,
+ IN OUT UINTN *DataSize,
+ OUT VOID *Data
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_NEXT_VARIABLE_NAME2) (
+ IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
+ IN OUT UINTN *VariableNameSize,
+ IN OUT CHAR16 *VariableName,
+ IN OUT EFI_GUID *VariableGuid
+ );
+
+typedef struct _EFI_PEI_READ_ONLY_VARIABLE2_PPI {
+ EFI_PEI_GET_VARIABLE2 GetVariable;
+ EFI_PEI_GET_NEXT_VARIABLE_NAME2 GetNextVariableName;
+} EFI_PEI_READ_ONLY_VARIABLE2_PPI;
+
+extern EFI_GUID gPeiReadOnlyVariable2PpiGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/AcpiS3Save/AcpiS3Save.c b/EDK/Foundation/Framework/Protocol/AcpiS3Save/AcpiS3Save.c
new file mode 100644
index 0000000..cca3c2f
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/AcpiS3Save/AcpiS3Save.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ AcpiS3Save.c
+
+Abstract:
+
+ Tiano Tiano S3 Save Protocol
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (AcpiS3Save)
+
+EFI_GUID gEfiAcpiS3SaveGuid = EFI_ACPI_S3_SAVE_GUID;
+
+EFI_GUID_STRING(&gEfiAcpiS3SaveGuid, "EFI Acpi S3 Save Protocol", "Tiano Acpi S3 Save Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/AcpiS3Save/AcpiS3Save.h b/EDK/Foundation/Framework/Protocol/AcpiS3Save/AcpiS3Save.h
new file mode 100644
index 0000000..bdd61b4
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/AcpiS3Save/AcpiS3Save.h
@@ -0,0 +1,68 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ AcpiS3Save.h
+
+Abstract:
+
+
+--*/
+
+#ifndef _ACPI_S3_SAVE_PROTOCOL_H
+#define _ACPI_S3_SAVE_PROTOCOL_H
+
+//
+// Includes
+//
+#include "Tiano.h"
+
+//
+// Forward reference for pure ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_ACPI_S3_SAVE_PROTOCOL);
+
+//
+// S3 Save Protocol GUID
+//
+#define EFI_ACPI_S3_SAVE_GUID \
+ { \
+ 0x125f2de1, 0xfb85, 0x440c, 0xa5, 0x4c, 0x4d, 0x99, 0x35, 0x8a, 0x8d, 0x38 \
+ }
+
+//
+// Protocol Data Structures
+//
+typedef
+EFI_STATUS
+EFI_BOOTSERVICE
+(EFIAPI *EFI_ACPI_S3_SAVE) (
+ IN EFI_ACPI_S3_SAVE_PROTOCOL * This,
+ IN VOID * LegacyMemoryAddress
+ );
+
+typedef
+EFI_STATUS
+EFI_BOOTSERVICE
+(EFIAPI *EFI_ACPI_GET_LEGACY_MEMORY_SIZE) (
+ IN EFI_ACPI_S3_SAVE_PROTOCOL * This,
+ OUT UINTN * Size
+);
+
+typedef struct _EFI_ACPI_S3_SAVE_PROTOCOL {
+ EFI_ACPI_GET_LEGACY_MEMORY_SIZE GetLegacyMemorySize;
+ EFI_ACPI_S3_SAVE S3Save;
+} EFI_ACPI_S3_SAVE_PROTOCOL;
+
+extern EFI_GUID gEfiAcpiS3SaveGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/AcpiSupport/AcpiSupport.c b/EDK/Foundation/Framework/Protocol/AcpiSupport/AcpiSupport.c
new file mode 100644
index 0000000..7723b32
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/AcpiSupport/AcpiSupport.c
@@ -0,0 +1,29 @@
+/*++
+
+Copyright (c) 1999 - 2005, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ AcpiSupport.c
+
+Abstract:
+
+ Tiano EFI 2.0 ACPI Support Protocol
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (AcpiSupport)
+
+EFI_GUID gEfiAcpiSupportGuid = EFI_ACPI_SUPPORT_GUID;
+
+EFI_GUID_STRING(&gEfiAcpiSupportGuid, "ACPI Support Protocol", "EFI 2.0 ACPI Support Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/AcpiSupport/AcpiSupport.h b/EDK/Foundation/Framework/Protocol/AcpiSupport/AcpiSupport.h
new file mode 100644
index 0000000..10205fa
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/AcpiSupport/AcpiSupport.h
@@ -0,0 +1,128 @@
+/*++
+
+Copyright (c) 1999 - 2005, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ AcpiSupport.h
+
+Abstract:
+
+ Definition of the ACPI Support protocol. This is defined in the
+ Tiano ACPI External Product Specification, revision 0.5.1.
+
+--*/
+
+#ifndef _ACPI_SUPPORT_PROTOCOL_H_
+#define _ACPI_SUPPORT_PROTOCOL_H_
+
+//
+// Includes
+//
+#include "Tiano.h"
+
+//
+// Forward reference for pure ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_ACPI_SUPPORT_PROTOCOL);
+
+//
+// ACPI Support Protocol GUID
+//
+#define EFI_ACPI_SUPPORT_GUID \
+ { \
+ 0xdbff9d55, 0x89b7, 0x46da, 0xbd, 0xdf, 0x67, 0x7d, 0x3d, 0xc0, 0x24, 0x1d \
+ }
+
+//
+// Extern the GUID for protocol users.
+//
+extern EFI_GUID gEfiAcpiSupportGuid;
+
+//
+// Protocol Data Definitions
+//
+//
+// ACPI Version bitmap definition:
+//
+// EFI_ACPI_TABLE_VERSION_1_0B - ACPI Version 1.0b
+// EFI_ACPI_TABLE_VERSION_2_0 - ACPI Version 2.0
+// EFI_ACPI_TABLE_VERSION_3_0 - ACPI Version 3.0
+// EFI_ACPI_TABLE_VERSION_NONE - No ACPI Versions. This might be used
+// to create memory-based operation regions or other information
+// that is not part of the ACPI "tree" but must still be found
+// in ACPI memory space and/or managed by the core ACPI driver.
+//
+// Note that EFI provides discrete GUIDs for each version of ACPI
+// that is supported. It is expected that each EFI GUIDed
+// version of ACPI will also have a corresponding bitmap
+// definition. This allows maintenance of separate ACPI trees
+// for each distinctly different version of ACPI.
+//
+#define EFI_ACPI_TABLE_VERSION UINT32
+
+#define EFI_ACPI_TABLE_VERSION_NONE (1 << 0)
+#define EFI_ACPI_TABLE_VERSION_1_0B (1 << 1)
+#define EFI_ACPI_TABLE_VERSION_2_0 (1 << 2)
+#define EFI_ACPI_TABLE_VERSION_3_0 (1 << 3)
+
+//
+// Protocol Member Functions
+//
+//
+// Retrieve a copy of an ACPI table and the handle of the table.
+//
+typedef
+EFI_STATUS
+EFI_BOOTSERVICE
+(EFIAPI *EFI_ACPI_GET_ACPI_TABLE) (
+ IN EFI_ACPI_SUPPORT_PROTOCOL * This,
+ IN INTN Index,
+ OUT VOID **Table,
+ OUT EFI_ACPI_TABLE_VERSION * Version,
+ OUT UINTN *Handle
+ );
+
+//
+// Add, update, or remove a table.
+//
+typedef
+EFI_STATUS
+EFI_BOOTSERVICE
+(EFIAPI *EFI_ACPI_SET_ACPI_TABLE) (
+ IN EFI_ACPI_SUPPORT_PROTOCOL * This,
+ IN VOID *Table OPTIONAL,
+ IN BOOLEAN Checksum,
+ IN EFI_ACPI_TABLE_VERSION Version,
+ IN OUT UINTN *Handle
+ );
+
+//
+// Publish tables to the outside world
+//
+typedef
+EFI_STATUS
+EFI_BOOTSERVICE
+(EFIAPI *EFI_ACPI_PUBLISH_TABLES) (
+ IN EFI_ACPI_SUPPORT_PROTOCOL * This,
+ IN EFI_ACPI_TABLE_VERSION Version
+ );
+
+//
+// ACPI Support Protocol
+//
+typedef struct _EFI_ACPI_SUPPORT_PROTOCOL {
+ EFI_ACPI_GET_ACPI_TABLE GetAcpiTable;
+ EFI_ACPI_SET_ACPI_TABLE SetAcpiTable;
+ EFI_ACPI_PUBLISH_TABLES PublishTables;
+} EFI_ACPI_SUPPORT_PROTOCOL;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/BootScriptSave/BootScriptSave.c b/EDK/Foundation/Framework/Protocol/BootScriptSave/BootScriptSave.c
new file mode 100644
index 0000000..d196780
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/BootScriptSave/BootScriptSave.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootScriptSave.c
+
+Abstract:
+
+ S3 Save Protocol
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (BootScriptSave)
+
+EFI_GUID gEfiBootScriptSaveGuid = EFI_BOOT_SCRIPT_SAVE_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiBootScriptSaveGuid, "EFI Boot Script Save Protocol", "EFI Boot Script Save Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/BootScriptSave/BootScriptSave.h b/EDK/Foundation/Framework/Protocol/BootScriptSave/BootScriptSave.h
new file mode 100644
index 0000000..ff103e8
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/BootScriptSave/BootScriptSave.h
@@ -0,0 +1,75 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ BootScriptSave.h
+
+Abstract:
+
+ S3 Save Protocol
+
+--*/
+
+#ifndef _BOOT_SCRIPT_SAVE_PROTOCOL_H
+#define _BOOT_SCRIPT_SAVE_PROTOCOL_H
+
+//
+// Includes
+//
+#include "Tiano.h"
+
+//
+// Forward reference for pure ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_BOOT_SCRIPT_SAVE_PROTOCOL);
+
+//
+// S3 Save Protocol GUID
+//
+#define EFI_BOOT_SCRIPT_SAVE_PROTOCOL_GUID \
+ { \
+ 0x470e1529, 0xb79e, 0x4e32, 0xa0, 0xfe, 0x6a, 0x15, 0x6d, 0x29, 0xf9, 0xb2 \
+ }
+
+//
+// Protocol Data Structures
+//
+typedef
+EFI_STATUS
+EFI_BOOTSERVICE
+(EFIAPI *EFI_BOOT_SCRIPT_WRITE) (
+ IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL * This,
+ IN UINT16 TableName,
+ IN UINT16 OpCode,
+ ...
+ );
+
+typedef
+EFI_STATUS
+EFI_BOOTSERVICE
+(EFIAPI *EFI_BOOT_SCRIPT_CLOSE_TABLE) (
+ IN EFI_BOOT_SCRIPT_SAVE_PROTOCOL * This,
+ IN UINT16 TableName,
+ OUT EFI_PHYSICAL_ADDRESS * Address
+ );
+
+//
+// S3 Save Protocol data structure
+//
+typedef struct _EFI_BOOT_SCRIPT_SAVE_PROTOCOL {
+ EFI_BOOT_SCRIPT_WRITE Write;
+ EFI_BOOT_SCRIPT_CLOSE_TABLE CloseTable;
+} EFI_BOOT_SCRIPT_SAVE_PROTOCOL;
+
+extern EFI_GUID gEfiBootScriptSaveGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/CpuIo/CpuIo.c b/EDK/Foundation/Framework/Protocol/CpuIo/CpuIo.c
new file mode 100644
index 0000000..f3044b3
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/CpuIo/CpuIo.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ CpuIO.c
+
+Abstract:
+
+ CPU IO Protocol GUID as defined in Tiano
+
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (CpuIo)
+
+EFI_GUID gEfiCpuIoProtocolGuid = EFI_CPU_IO_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiCpuIoProtocolGuid, "CPU IO", "CPU IO Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/CpuIo/CpuIo.h b/EDK/Foundation/Framework/Protocol/CpuIo/CpuIo.h
new file mode 100644
index 0000000..1e8fb70
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/CpuIo/CpuIo.h
@@ -0,0 +1,93 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ CpuIO.h
+
+Abstract:
+
+ CPU IO Protocol as defined in Tiano
+
+ This code abstracts the CPU IO Protocol
+
+--*/
+
+#ifndef _CPUIO_H_
+#define _CPUIO_H_
+
+#define EFI_CPU_IO_PROTOCOL_GUID \
+ { \
+ 0xB0732526, 0x38C8, 0x4b40, 0x88, 0x77, 0x61, 0xC7, 0xB0, 0x6A, 0xAC, 0x45 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_CPU_IO_PROTOCOL);
+
+//
+// *******************************************************
+// EFI_CPU_IO_PROTOCOL_WIDTH
+// *******************************************************
+//
+typedef enum {
+ EfiCpuIoWidthUint8,
+ EfiCpuIoWidthUint16,
+ EfiCpuIoWidthUint32,
+ EfiCpuIoWidthUint64,
+ EfiCpuIoWidthFifoUint8,
+ EfiCpuIoWidthFifoUint16,
+ EfiCpuIoWidthFifoUint32,
+ EfiCpuIoWidthFifoUint64,
+ EfiCpuIoWidthFillUint8,
+ EfiCpuIoWidthFillUint16,
+ EfiCpuIoWidthFillUint32,
+ EfiCpuIoWidthFillUint64,
+ EfiCpuIoWidthMaximum
+} EFI_CPU_IO_PROTOCOL_WIDTH;
+
+//
+// *******************************************************
+// EFI_CPU_IO_PROTOCOL_IO_MEM
+// *******************************************************
+//
+typedef
+EFI_STATUS
+EFI_RUNTIMESERVICE
+(EFIAPI *EFI_CPU_IO_PROTOCOL_IO_MEM) (
+ IN EFI_CPU_IO_PROTOCOL * This,
+ IN EFI_CPU_IO_PROTOCOL_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ );
+
+//
+// *******************************************************
+// EFI_CPU_IO_PROTOCOL_ACCESS
+// *******************************************************
+//
+typedef struct {
+ EFI_CPU_IO_PROTOCOL_IO_MEM Read;
+ EFI_CPU_IO_PROTOCOL_IO_MEM Write;
+} EFI_CPU_IO_PROTOCOL_ACCESS;
+
+//
+// *******************************************************
+// EFI_CPU_IO_PROTOCOL
+// *******************************************************
+//
+typedef struct _EFI_CPU_IO_PROTOCOL {
+ EFI_CPU_IO_PROTOCOL_ACCESS Mem;
+ EFI_CPU_IO_PROTOCOL_ACCESS Io;
+} EFI_CPU_IO_PROTOCOL;
+
+extern EFI_GUID gEfiCpuIoProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/DataHub/DataHub.c b/EDK/Foundation/Framework/Protocol/DataHub/DataHub.c
new file mode 100644
index 0000000..7cc5e29
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/DataHub/DataHub.c
@@ -0,0 +1,32 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DataHub.c
+
+Abstract:
+
+ The logging hub protocol is used both by agents wishing to log
+ errors and those wishing to be made aware of all information that
+ has been logged.
+
+ For more information please look at Intel Platform Innovation
+ Framework for EFI Data Hub Specification.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (DataHub)
+
+EFI_GUID gEfiDataHubProtocolGuid = EFI_DATA_HUB_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiDataHubProtocolGuid, "DataHub Protocol", "EFI Data Hub Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/DataHub/DataHub.h b/EDK/Foundation/Framework/Protocol/DataHub/DataHub.h
new file mode 100644
index 0000000..5245eca
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/DataHub/DataHub.h
@@ -0,0 +1,125 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ DataHub.h
+
+Abstract:
+
+ The data hub protocol is used both by agents wishing to log
+ data and those wishing to be made aware of all information that
+ has been logged.
+
+ For more information please look at Intel Platform Innovation
+ Framework for EFI Data Hub Specification.
+
+--*/
+
+#ifndef __DATA_HUB_H__
+#define __DATA_HUB_H__
+
+#define EFI_DATA_HUB_PROTOCOL_GUID \
+ { \
+ 0xae80d021, 0x618e, 0x11d4, 0xbc, 0xd7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 \
+ }
+
+//
+// EFI generic Data Hub Header
+//
+// A Data Record is an EFI_DATA_RECORD_HEADER followed by RecordSize bytes of
+// data. The format of the data is defined by the DataRecordGuid.
+//
+// If EFI_DATA_RECORD_HEADER is extended in the future the Version number must
+// change and the HeaderSize will change if the definition of
+// EFI_DATA_RECORD_HEADER is extended.
+//
+// The logger is responcible for initializing:
+// Version, HeaderSize, RecordSize, DataRecordGuid, DataRecordClass
+//
+// The Data Hub driver is responcible for initializing:
+// LogTime and LogMonotonicCount.
+//
+#define EFI_DATA_RECORD_HEADER_VERSION 0x0100
+typedef struct {
+ UINT16 Version;
+ UINT16 HeaderSize;
+ UINT32 RecordSize;
+ EFI_GUID DataRecordGuid;
+ EFI_GUID ProducerName;
+ UINT64 DataRecordClass;
+ EFI_TIME LogTime;
+ UINT64 LogMonotonicCount;
+} EFI_DATA_RECORD_HEADER;
+
+//
+// Definition of DataRecordClass. These are used to filter out class types
+// at a very high level. The DataRecordGuid still defines the format of
+// the data. See DateHub.doc for rules on what can and can not be a
+// new DataRecordClass
+//
+#define EFI_DATA_RECORD_CLASS_DEBUG 0x0000000000000001
+#define EFI_DATA_RECORD_CLASS_ERROR 0x0000000000000002
+#define EFI_DATA_RECORD_CLASS_DATA 0x0000000000000004
+#define EFI_DATA_RECORD_CLASS_PROGRESS_CODE 0x0000000000000008
+
+//
+// Forward reference for pure ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_DATA_HUB_PROTOCOL);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_DATA_HUB_LOG_DATA) (
+ IN EFI_DATA_HUB_PROTOCOL * This,
+ IN EFI_GUID * DataRecordGuid,
+ IN EFI_GUID * ProducerName,
+ IN UINT64 DataRecordClass,
+ IN VOID *RawData,
+ IN UINT32 RawDataSize
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_DATA_HUB_GET_NEXT_RECORD) (
+ IN EFI_DATA_HUB_PROTOCOL * This,
+ IN OUT UINT64 *MonotonicCount,
+ IN EFI_EVENT * FilterDriver OPTIONAL,
+ OUT EFI_DATA_RECORD_HEADER **Record
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_DATA_HUB_REGISTER_FILTER_DRIVER) (
+ IN EFI_DATA_HUB_PROTOCOL * This,
+ IN EFI_EVENT FilterEvent,
+ IN EFI_TPL FilterTpl,
+ IN UINT64 FilterClass,
+ IN EFI_GUID * FilterDataRecordGuid OPTIONAL
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_DATA_HUB_UNREGISTER_FILTER_DRIVER) (
+ IN EFI_DATA_HUB_PROTOCOL * This,
+ IN EFI_EVENT FilterEvent
+ );
+
+typedef struct _EFI_DATA_HUB_PROTOCOL {
+ EFI_DATA_HUB_LOG_DATA LogData;
+ EFI_DATA_HUB_GET_NEXT_RECORD GetNextRecord;
+ EFI_DATA_HUB_REGISTER_FILTER_DRIVER RegisterFilterDriver;
+ EFI_DATA_HUB_UNREGISTER_FILTER_DRIVER UnregisterFilterDriver;
+} EFI_DATA_HUB_PROTOCOL;
+
+extern EFI_GUID gEfiDataHubProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.cif b/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.cif
new file mode 100644
index 0000000..25fe8c8
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.cif
@@ -0,0 +1,87 @@
+<component>
+ name = "EdkFrameworkProtocolLib"
+ category = ModulePart
+ LocalRoot = "Edk\Foundation\Framework\Protocol\"
+ RefName = "EdkFrameworkProtocolLib"
+[files]
+"EdkFrameworkProtocolLib.sdl"
+"EdkFrameworkProtocolLib.mak"
+"AcpiS3Save\AcpiS3Save.h"
+"AcpiS3Save\AcpiS3Save.c"
+"AcpiSupport\AcpiSupport.h"
+"AcpiSupport\AcpiSupport.c"
+"BootScriptSave\BootScriptSave.h"
+"BootScriptSave\BootScriptSave.c"
+"CpuIo\CpuIo.h"
+"CpuIo\CpuIo.c"
+"DataHub\DataHub.h"
+"DataHub\DataHub.c"
+"ExitPmAuth\ExitPmAuth.h"
+"ExitPmAuth\ExitPmAuth.c"
+"FirmwareVolume\FirmwareVolume.h"
+"FirmwareVolume\FirmwareVolume.c"
+"FirmwareVolume2\FirmwareVolume2.h"
+"FirmwareVolume2\FirmwareVolume2.c"
+"FirmwareVolumeBlock\FirmwareVolumeBlock.h"
+"FirmwareVolumeBlock\FirmwareVolumeBlock.c"
+"FormBrowser\FormBrowser.h"
+"FormBrowser\FormBrowser.c"
+"FormCallback\FormCallback.h"
+"FormCallback\FormCallback.c"
+"Hii\Hii.h"
+"Hii\Hii.c"
+"IdeControllerInit\IdeControllerInit.h"
+"IdeControllerInit\IdeControllerInit.c"
+"IncompatiblePciDeviceSupport\IncompatiblePciDeviceSupport.h"
+"IncompatiblePciDeviceSupport\IncompatiblePciDeviceSupport.c"
+"Legacy8259\Legacy8259.h"
+"Legacy8259\Legacy8259.c"
+"LegacyBios\LegacyBios.h"
+"LegacyBios\LegacyBios.c"
+"LegacyBiosPlatform\LegacyBiosPlatform.h"
+"LegacyBiosPlatform\LegacyBiosPlatform.c"
+"LegacyInterrupt\LegacyInterrupt.h"
+"LegacyInterrupt\LegacyInterrupt.c"
+"LegacyRegion\LegacyRegion.h"
+"LegacyRegion\LegacyRegion.c"
+"PciHostBridgeResourceAllocation\PciHostBridgeResourceAllocation.h"
+"PciHostBridgeResourceAllocation\PciHostBridgeResourceAllocation.c"
+"PciHotPlugInit\PciHotPlugInit.h"
+"PciHotPlugInit\PciHotPlugInit.c"
+"PciPlatform\PciPlatform.h"
+"PciPlatform\PciPlatform.c"
+"SectionExtraction\SectionExtraction.h"
+"SectionExtraction\SectionExtraction.c"
+"SecurityPolicy\SecurityPolicy.h"
+"SecurityPolicy\SecurityPolicy.c"
+"Smbus\Smbus.h"
+"Smbus\Smbus.c"
+"SmmAccess\SmmAccess.h"
+"SmmAccess\SmmAccess.c"
+"SmmBase\SmmBase.h"
+"SmmBase\SmmBase.c"
+"SmmControl\SmmControl.h"
+"SmmControl\SmmControl.c"
+"SmmCpuState\CpuSaveState.h"
+"SmmCpuState\SmmCpuState.h"
+"SmmCpuState\SmmCpuState.c"
+"SmmGpiDispatch\SmmGpiDispatch.h"
+"SmmGpiDispatch\SmmGpiDispatch.c"
+"SmmIchnDispatch\SmmIchnDispatch.h"
+"SmmIchnDispatch\SmmIchnDispatch.c"
+"SmmPeriodicTimerDispatch\SmmPeriodicTimerDispatch.h"
+"SmmPeriodicTimerDispatch\SmmPeriodicTimerDispatch.c"
+"SmmPowerButtonDispatch\SmmPowerButtonDispatch.h"
+"SmmPowerButtonDispatch\SmmPowerButtonDispatch.c"
+"SmmStandbyButtonDispatch\SmmStandbyButtonDispatch.h"
+"SmmStandbyButtonDispatch\SmmStandbyButtonDispatch.c"
+"SmmStatusCode\SmmStatusCode.h"
+"SmmStatusCode\SmmStatusCode.c"
+"SmmSwDispatch\SmmSwDispatch.h"
+"SmmSwDispatch\SmmSwDispatch.c"
+"SmmSxDispatch\SmmSxDispatch.h"
+"SmmSxDispatch\SmmSxDispatch.c"
+"SmmUsbDispatch\SmmUsbDispatch.h"
+"SmmUsbDispatch\SmmUsbDispatch.c"
+"EdkFrameworkProtocolLib.inf"
+<endComponent>
diff --git a/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.inf b/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.inf
new file mode 100644
index 0000000..2e1b3e6
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.inf
@@ -0,0 +1,117 @@
+#/*++
+#
+# Copyright (c) 2004, Intel Corporation
+# All rights reserved. This program and the accompanying materials
+# are licensed and made available under the terms and conditions of the BSD License
+# which accompanies this distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+# Module Name:
+#
+# EdkFrameworkProtocolLib.inf
+#
+# Abstract:
+#
+# Component description file.
+#
+#--*/
+
+[defines]
+BASE_NAME= EdkFrameworkProtocolLib
+COMPONENT_TYPE= LIBRARY
+
+[includes.common]
+ $(EDK_SOURCE)\Foundation\Framework
+ $(EDK_SOURCE)\Foundation\Efi
+ $(EDK_SOURCE)\Foundation\Include
+ $(EDK_SOURCE)\Foundation\Efi\Include
+ $(EDK_SOURCE)\Foundation\Framework\Include
+ $(EDK_SOURCE)\Foundation\Include\IndustryStandard
+ $(EDK_SOURCE)\Foundation\Include\Pei
+ $(EDK_SOURCE)\Foundation\Library\Pei\Include
+ $(EDK_SOURCE)\Foundation\Core\Dxe
+ $(EDK_SOURCE)\Foundation\Library\Dxe\Include
+
+[nmake.common]
+C_STD_INCLUDE=
+
+[sources.common]
+ AcpiS3Save\AcpiS3Save.h
+ AcpiS3Save\AcpiS3Save.c
+ AcpiSupport\AcpiSupport.h
+ AcpiSupport\AcpiSupport.c
+ BootScriptSave\BootScriptSave.h
+ BootScriptSave\BootScriptSave.c
+ CpuIo\CpuIo.h
+ CpuIo\CpuIo.c
+ DataHub\DataHub.h
+ DataHub\DataHub.c
+ ExitPmAuth\ExitPmAuth.h
+ ExitPmAuth\ExitPmAuth.c
+ FirmwareVolume\FirmwareVolume.h
+ FirmwareVolume\FirmwareVolume.c
+ FirmwareVolumeBlock\FirmwareVolumeBlock.h
+ FirmwareVolumeBlock\FirmwareVolumeBlock.c
+ FormBrowser\FormBrowser.h
+ FormBrowser\FormBrowser.c
+ FormCallback\FormCallback.h
+ FormCallback\FormCallback.c
+ Hii\Hii.h
+ Hii\Hii.c
+ IdeControllerInit\IdeControllerInit.h
+ IdeControllerInit\IdeControllerInit.c
+ IncompatiblePciDeviceSupport\IncompatiblePciDeviceSupport.h
+ IncompatiblePciDeviceSupport\IncompatiblePciDeviceSupport.c
+ Legacy8259\Legacy8259.h
+ Legacy8259\Legacy8259.c
+ LegacyBios\LegacyBios.h
+ LegacyBios\LegacyBios.c
+ LegacyBiosPlatform\LegacyBiosPlatform.h
+ LegacyBiosPlatform\LegacyBiosPlatform.c
+ LegacyInterrupt\LegacyInterrupt.h
+ LegacyInterrupt\LegacyInterrupt.c
+ LegacyRegion\LegacyRegion.h
+ LegacyRegion\LegacyRegion.c
+ PciHostBridgeResourceAllocation\PciHostBridgeResourceAllocation.h
+ PciHostBridgeResourceAllocation\PciHostBridgeResourceAllocation.c
+ PciHotPlugInit\PciHotPlugInit.h
+ PciHotPlugInit\PciHotPlugInit.c
+ PciPlatform\PciPlatform.h
+ PciPlatform\PciPlatform.c
+ SectionExtraction\SectionExtraction.h
+ SectionExtraction\SectionExtraction.c
+ SecurityPolicy\SecurityPolicy.h
+ SecurityPolicy\SecurityPolicy.c
+ Smbus\Smbus.h
+ Smbus\Smbus.c
+
+[sources.ia32,sources.x64]
+ SmmAccess\SmmAccess.h
+ SmmAccess\SmmAccess.c
+ SmmBase\SmmBase.h
+ SmmBase\SmmBase.c
+ SmmControl\SmmControl.h
+ SmmControl\SmmControl.c
+ SmmCpuState\SmmCpuState.h
+ SmmCpuState\SmmCpuState.c
+ SmmGpiDispatch\SmmGpiDispatch.h
+ SmmGpiDispatch\SmmGpiDispatch.c
+ SmmIchnDispatch\SmmIchnDispatch.h
+ SmmIchnDispatch\SmmIchnDispatch.c
+ SmmPeriodicTimerDispatch\SmmPeriodicTimerDispatch.h
+ SmmPeriodicTimerDispatch\SmmPeriodicTimerDispatch.c
+ SmmPowerButtonDispatch\SmmPowerButtonDispatch.h
+ SmmPowerButtonDispatch\SmmPowerButtonDispatch.c
+ SmmStandbyButtonDispatch\SmmStandbyButtonDispatch.h
+ SmmStandbyButtonDispatch\SmmStandbyButtonDispatch.c
+ SmmStatusCode\SmmStatusCode.h
+ SmmStatusCode\SmmStatusCode.c
+ SmmSwDispatch\SmmSwDispatch.h
+ SmmSwDispatch\SmmSwDispatch.c
+ SmmSxDispatch\SmmSxDispatch.h
+ SmmSxDispatch\SmmSxDispatch.c
+ SmmUsbDispatch\SmmUsbDispatch.h
+ SmmUsbDispatch\SmmUsbDispatch.c \ No newline at end of file
diff --git a/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.mak b/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.mak
new file mode 100644
index 0000000..4545cd9
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.mak
@@ -0,0 +1,68 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+
+#**********************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/EdkFrameworkProtocolLib/EdkFrameworkProtocolLib.mak 1 1/20/12 4:03a Jeffch $
+#
+# $Revision: 1 $
+#
+# $Date: 1/20/12 4:03a $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/EdkFrameworkProtocolLib/EdkFrameworkProtocolLib.mak $
+#
+# 1 1/20/12 4:03a Jeffch
+#
+# 1 9/27/11 6:27a Wesleychen
+# Intel EDK initially releases.
+#
+# 2 9/02/09 3:20a Iminglin
+# EIP24919
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: EdkFrameworkProtocolLib.mak
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+$(EDKFRAMEWORKPROTOCOLLIB) : EdkFrameworkProtocolLib
+
+$(BUILD_DIR)\EdkFrameworkProtocolLib.lib : EdkFrameworkProtocolLib
+
+EdkFrameworkProtocolLib : $(BUILD_DIR)\EdkFrameworkProtocolLib.mak EdkFrameworkProtocolLibBin
+
+$(BUILD_DIR)\EdkFrameworkProtocolLib.mak : $(EdkFrameworkProtocolLib_DIR)\$(@B).cif $(EdkFrameworkProtocolLib_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(EdkFrameworkProtocolLib_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+EdkFrameworkProtocolLibBin :
+ $(MAKE) /$(MAKEFLAGS) $(EDK_DEFAULTS)\
+ /f $(BUILD_DIR)\EdkFrameworkProtocolLib.mak all\
+ TYPE=LIBRARY \
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2009, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#********************************************************************** \ No newline at end of file
diff --git a/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.sdl b/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.sdl
new file mode 100644
index 0000000..5471689
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/EdkFrameworkProtocolLib.sdl
@@ -0,0 +1,26 @@
+TOKEN
+ Name = "EdkFrameworkProtocolLib_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable EdkFrameworkProtocolLib support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "EDKFRAMEWORKPROTOCOLLIB"
+ Value = "$(BUILD_DIR)\EdkFrameworkProtocolLib.lib"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+PATH
+ Name = "EdkFrameworkProtocolLib_DIR"
+End
+
+MODULE
+ Help = "Includes EdkFrameworkProtocolLib.mak to Project"
+ File = "EdkFrameworkProtocolLib.mak"
+End
+
diff --git a/EDK/Foundation/Framework/Protocol/ExitPmAuth/ExitPmAuth.c b/EDK/Foundation/Framework/Protocol/ExitPmAuth/ExitPmAuth.c
new file mode 100644
index 0000000..9e1624a
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/ExitPmAuth/ExitPmAuth.c
@@ -0,0 +1,35 @@
+/*++
+ This file contains 'Framework Code' and is licensed as such
+ under the terms of your license agreement with Intel or your
+ vendor. This file may not be modified, except as allowed by
+ additional terms of your license agreement.
+--*/
+/*++
+
+Copyright (c) 2009 Intel Corporation. All rights reserved
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+
+Module Name:
+
+ ExitPmAuth.c
+
+Abstract:
+
+
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (ExitPmAuth)
+
+EFI_GUID gExitPmAuthProtocolGuid = EXIT_PM_AUTH_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gExitPmAuthProtocolGuid, "Exit PM Auth Protocol", "Exit PM Auth Protocol");
+
diff --git a/EDK/Foundation/Framework/Protocol/ExitPmAuth/ExitPmAuth.h b/EDK/Foundation/Framework/Protocol/ExitPmAuth/ExitPmAuth.h
new file mode 100644
index 0000000..d27689b
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/ExitPmAuth/ExitPmAuth.h
@@ -0,0 +1,40 @@
+//
+// This file contains 'Framework Code' and is licensed as such
+// under the terms of your license agreement with Intel or your
+// vendor. This file may not be modified, except as allowed by
+// additional terms of your license agreement.
+//
+/*++
+
+Copyright (c) 2009 Intel Corporation. All rights reserved
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+
+Module Name:
+
+ ExitPmAuth.h
+
+Abstract:
+
+
+--*/
+
+#ifndef _EXIT_PM_AUTH_PROTOCOL_H_
+#define _EXIT_PM_AUTH_PROTOCOL_H_
+
+#include "Tiano.h"
+
+#define EXIT_PM_AUTH_PROTOCOL_GUID \
+ { \
+ 0xd088a413, 0xa70, 0x4217, 0xba, 0x55, 0x9a, 0x3c, 0xb6, 0x5c, 0x41, 0xb3 \
+ }
+
+extern EFI_GUID gExitPmAuthProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/FirmwareVolume/FirmwareVolume.c b/EDK/Foundation/Framework/Protocol/FirmwareVolume/FirmwareVolume.c
new file mode 100644
index 0000000..c64d73a
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FirmwareVolume/FirmwareVolume.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolume.c
+
+Abstract:
+
+ Firmware Volume protocol as defined in the Tiano Firmware Volume
+ specification.
+
+ File level access layered on top of Firmware File System protocol. This
+ protocol exists to provide a hook for a filter driver for a firmware volume.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (FirmwareVolume)
+
+EFI_GUID gEfiFirmwareVolumeProtocolGuid = EFI_FIRMWARE_VOLUME_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiFirmwareVolumeProtocolGuid, "FirmwareVolume Protocol", "Firmware Volume protocol");
diff --git a/EDK/Foundation/Framework/Protocol/FirmwareVolume/FirmwareVolume.h b/EDK/Foundation/Framework/Protocol/FirmwareVolume/FirmwareVolume.h
new file mode 100644
index 0000000..fadc1b8
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FirmwareVolume/FirmwareVolume.h
@@ -0,0 +1,334 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolume.h
+
+Abstract:
+
+ Firmware Volume protocol as defined in the Tiano Firmware Volume
+ specification.
+
+--*/
+
+#ifndef _FW_VOL_H_
+#define _FW_VOL_H_
+
+//
+// Statements that include other files
+//
+#include "EfiFirmwareVolumeHeader.h"
+#include "EfiFirmwareFileSystem.h"
+#include "EfiFirmwareVolume.h" //;;## ...AMI_OVERRIDE... Support PI1.x
+//
+// Firmware Volume Protocol GUID definition
+//
+#define EFI_FIRMWARE_VOLUME_PROTOCOL_GUID \
+ { \
+ 0x389F751F, 0x1838, 0x4388, 0x83, 0x90, 0xCD, 0x81, 0x54, 0xBD, 0x27, 0xF8 \
+ }
+
+//;;## ...AMI_OVERRIDE... Support PI1.x #define FV_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('_', 'F', 'V', '_')
+
+EFI_FORWARD_DECLARATION (EFI_FIRMWARE_VOLUME_PROTOCOL);
+
+//
+// EFI_FV_ATTRIBUTES bit definitions
+//
+//;;## ...AMI_OVERRIDE... Support PI1.x typedef UINT64 EFI_FV_ATTRIBUTES;
+
+//
+// ************************************************************
+// EFI_FV_ATTRIBUTES bit definitions
+// ************************************************************
+//
+#define EFI_FV_READ_DISABLE_CAP 0x0000000000000001
+#define EFI_FV_READ_ENABLE_CAP 0x0000000000000002
+#define EFI_FV_READ_STATUS 0x0000000000000004
+
+#define EFI_FV_WRITE_DISABLE_CAP 0x0000000000000008
+#define EFI_FV_WRITE_ENABLE_CAP 0x0000000000000010
+#define EFI_FV_WRITE_STATUS 0x0000000000000020
+
+#define EFI_FV_LOCK_CAP 0x0000000000000040
+#define EFI_FV_LOCK_STATUS 0x0000000000000080
+#define EFI_FV_WRITE_POLICY_RELIABLE 0x0000000000000100
+
+#define EFI_FV_ALIGNMENT_CAP 0x0000000000008000
+#define EFI_FV_ALIGNMENT_2 0x0000000000010000
+#define EFI_FV_ALIGNMENT_4 0x0000000000020000
+#define EFI_FV_ALIGNMENT_8 0x0000000000040000
+#define EFI_FV_ALIGNMENT_16 0x0000000000080000
+#define EFI_FV_ALIGNMENT_32 0x0000000000100000
+#define EFI_FV_ALIGNMENT_64 0x0000000000200000
+#define EFI_FV_ALIGNMENT_128 0x0000000000400000
+#define EFI_FV_ALIGNMENT_256 0x0000000000800000
+#define EFI_FV_ALIGNMENT_512 0x0000000001000000
+#define EFI_FV_ALIGNMENT_1K 0x0000000002000000
+#define EFI_FV_ALIGNMENT_2K 0x0000000004000000
+#define EFI_FV_ALIGNMENT_4K 0x0000000008000000
+#define EFI_FV_ALIGNMENT_8K 0x0000000010000000
+#define EFI_FV_ALIGNMENT_16K 0x0000000020000000
+#define EFI_FV_ALIGNMENT_32K 0x0000000040000000
+#define EFI_FV_ALIGNMENT_64K 0x0000000080000000
+
+//
+// Protocol API definitions
+//
+//
+// Forward declaration of protocol data structure
+//
+typedef struct _EFI_FIRMWARE_VOLUME_PROTOCOL EFI_FIRMWARE_VOLUME_PROTOCOL;
+
+typedef
+EFI_STATUS
+//;;## ...AMI_OVERRIDE... Support PI1.x (EFIAPI *EFI_FV_GET_ATTRIBUTES) (
+(EFIAPI *FV_GET_ATTRIBUTES) (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
+ OUT EFI_FV_ATTRIBUTES * Attributes
+ );
+
+/*++
+
+Routine Description:
+ Retrieves attributes, insures positive polarity of attribute bits, returns
+ resulting attributes in output parameter
+
+Arguments:
+ This - Calling context
+ Attributes - output buffer which contains attributes
+
+Returns:
+ EFI_INVALID_PARAMETER
+ EFI_SUCCESS
+
+--*/
+typedef
+EFI_STATUS
+//;;## ...AMI_OVERRIDE... Support PI1.x (EFIAPI *EFI_FV_SET_ATTRIBUTES) (
+(EFIAPI *FV_SET_ATTRIBUTES) (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
+ IN OUT EFI_FV_ATTRIBUTES * Attributes
+ );
+
+/*++
+
+Routine Description:
+ Sets volume attributes
+
+Arguments:
+ This Calling context
+ Attributes Buffer which contains attributes
+
+Returns:
+ EFI_INVALID_PARAMETER
+ EFI_DEVICE_ERROR
+ EFI_SUCCESS
+
+--*/
+//;;## ...AMI_OVERRIDE... Support PI1.x typedef UINT32 EFI_FV_FILE_ATTRIBUTES;
+
+//;;## ...AMI_OVERRIDE... Support PI1.x #define EFI_FV_FILE_ATTRIB_ALIGNMENT 0x0000001F
+
+typedef
+EFI_STATUS
+//;;## ...AMI_OVERRIDE... Support PI1.x (EFIAPI *EFI_FV_READ_FILE) (
+(EFIAPI *FV_READ_FILE) (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
+ IN EFI_GUID * NameGuid,
+ IN OUT VOID **Buffer,
+ IN OUT UINTN *BufferSize,
+ OUT EFI_FV_FILETYPE * FoundType,
+ OUT EFI_FV_FILE_ATTRIBUTES * FileAttributes,
+ OUT UINT32 *AuthenticationStatus
+ );
+
+/*++
+
+Routine Description:
+ Read the requested file (NameGuid) and returns data in Buffer.
+
+Arguments:
+ This - Calling context
+ NameGuid - Filename identifying which file to read
+ Buffer - Pointer to pointer to buffer in which contents of file are returned.
+
+ If Buffer is NULL, only type, attributes, and size are returned as
+ there is no output buffer.
+
+ If Buffer != NULL and *Buffer == NULL, the output buffer is allocated
+ from BS pool by ReadFile
+
+ If Buffer != NULL and *Buffer != NULL, the output buffer has been
+ allocated by the caller and is being passed in.
+
+ BufferSize - Indicates the buffer size passed in, and on output the size
+ required to complete the read
+ FoundType - Indicates the type of the file who's data is returned
+ FileAttributes - Indicates the attributes of the file who's data is resturned
+ AuthenticationStatus - Indicates the authentication status of the data
+
+Returns:
+ EFI_SUCCESS
+ EFI_WARN_BUFFER_TOO_SMALL
+ EFI_NOT_FOUND
+ EFI_DEVICE_ERROR
+ EFI_ACCESS_DENIED
+
+--*/
+typedef
+EFI_STATUS
+//;;## ...AMI_OVERRIDE... Support PI1.x (EFIAPI *EFI_FV_READ_SECTION) (
+(EFIAPI *FV_READ_SECTION) (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
+ IN EFI_GUID * NameGuid,
+ IN EFI_SECTION_TYPE SectionType,
+ IN UINTN SectionInstance,
+ IN OUT VOID **Buffer,
+ IN OUT UINTN *BufferSize,
+ OUT UINT32 *AuthenticationStatus
+ );
+
+/*++
+
+Routine Description:
+ Read the requested section from the specified file and returns data in Buffer.
+
+Arguments:
+ This - Calling context
+ NameGuid - Filename identifying the file from which to read
+ SectionType - Indicates what section type to retrieve
+ SectionInstance - Indicates which instance of SectionType to retrieve
+ Buffer - Pointer to pointer to buffer in which contents of file are returned.
+
+ If Buffer is NULL, only type, attributes, and size are returned as
+ there is no output buffer.
+
+ If Buffer != NULL and *Buffer == NULL, the output buffer is allocated
+ from BS pool by ReadFile
+
+ If Buffer != NULL and *Buffer != NULL, the output buffer has been
+ allocated by the caller and is being passed in.
+
+ BufferSize - Indicates the buffer size passed in, and on output the size
+ required to complete the read
+ AuthenticationStatus - Indicates the authentication status of the data
+
+Returns:
+ EFI_SUCCESS
+ EFI_WARN_BUFFER_TOO_SMALL
+ EFI_OUT_OF_RESOURCES
+ EFI_NOT_FOUND
+ EFI_DEVICE_ERROR
+ EFI_ACCESS_DENIED
+
+--*/
+//;;## ...AMI_OVERRIDE... Support PI1.x typedef UINT32 EFI_FV_WRITE_POLICY;
+
+//;;## ...AMI_OVERRIDE... Support PI1.x #define EFI_FV_UNRELIABLE_WRITE 0x00000000
+//;;## ...AMI_OVERRIDE... Support PI1.x #define EFI_FV_RELIABLE_WRITE 0x00000001
+
+//;;## ...AMI_OVERRIDE... Support PI1.x typedef struct {
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_GUID *NameGuid;
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_FV_FILETYPE Type;
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_FV_FILE_ATTRIBUTES FileAttributes;
+//;;## ...AMI_OVERRIDE... Support PI1.x VOID *Buffer;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT32 BufferSize;
+//;;## ...AMI_OVERRIDE... Support PI1.x } EFI_FV_WRITE_FILE_DATA;
+
+typedef
+EFI_STATUS
+//;;## ...AMI_OVERRIDE... Support PI1.x (EFIAPI *EFI_FV_WRITE_FILE) (
+(EFIAPI *FV_WRITE_FILE) (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
+ IN UINT32 NumberOfFiles,
+ IN EFI_FV_WRITE_POLICY WritePolicy,
+ IN EFI_FV_WRITE_FILE_DATA * FileData
+ );
+
+/*++
+
+Routine Description:
+ Write the supplied file (NameGuid) to the FV.
+
+Arguments:
+ This - Calling context
+ NumberOfFiles - Indicates the number of file records pointed to by FileData
+ WritePolicy - Indicates the level of reliability of the write with respect to
+ things like power failure events.
+ FileData - A pointer to an array of EFI_FV_WRITE_FILE_DATA structures. Each
+ element in the array indicates a file to write, and there are
+ NumberOfFiles elements in the input array.
+
+Returns:
+ EFI_SUCCESS
+ EFI_OUT_OF_RESOURCES
+ EFI_DEVICE_ERROR
+ EFI_WRITE_PROTECTED
+ EFI_NOT_FOUND
+ EFI_INVALID_PARAMETER
+
+--*/
+typedef
+EFI_STATUS
+//;;## ...AMI_OVERRIDE... Support PI1.x (EFIAPI *EFI_FV_GET_NEXT_FILE) (
+(EFIAPI *FV_GET_NEXT_FILE) (
+ IN EFI_FIRMWARE_VOLUME_PROTOCOL * This,
+ IN OUT VOID *Key,
+ IN OUT EFI_FV_FILETYPE * FileType,
+ OUT EFI_GUID * NameGuid,
+ OUT EFI_FV_FILE_ATTRIBUTES * Attributes,
+ OUT UINTN *Size
+ );
+
+/*++
+
+Routine Description:
+ Given the input key, search for the next matching file in the volume.
+
+Arguments:
+ This - Calling context
+ Key - Pointer to a caller allocated buffer that contains an implementation
+ specific key that is used to track where to begin searching on
+ successive calls.
+ FileType - Indicates the file type to filter for
+ NameGuid - Guid filename of the file found
+ Attributes - Attributes of the file found
+ Size - Size in bytes of the file found
+
+Returns:
+ EFI_SUCCESS
+ EFI_NOT_FOUND
+ EFI_DEVICE_ERROR
+ EFI_ACCESS_DENIED
+
+--*/
+typedef struct _EFI_FIRMWARE_VOLUME_PROTOCOL {
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_FV_GET_ATTRIBUTES GetVolumeAttributes;
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_FV_SET_ATTRIBUTES SetVolumeAttributes;
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_FV_READ_FILE ReadFile;
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_FV_READ_SECTION ReadSection;
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_FV_WRITE_FILE WriteFile;
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_FV_GET_NEXT_FILE GetNextFile;
+ FV_GET_ATTRIBUTES GetVolumeAttributes;
+ FV_SET_ATTRIBUTES SetVolumeAttributes;
+ FV_READ_FILE ReadFile;
+ FV_READ_SECTION ReadSection;
+ FV_WRITE_FILE WriteFile;
+ FV_GET_NEXT_FILE GetNextFile;
+ UINT32 KeySize;
+ EFI_HANDLE ParentHandle;
+} EFI_FIRMWARE_VOLUME_PROTOCOL;
+
+extern EFI_GUID gEfiFirmwareVolumeProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/FirmwareVolume2/FirmwareVolume2.c b/EDK/Foundation/Framework/Protocol/FirmwareVolume2/FirmwareVolume2.c
new file mode 100644
index 0000000..9e284b2
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FirmwareVolume2/FirmwareVolume2.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolume2.c
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (FirmwareVolume2)
+
+ //;;## ...AMI_ADD FILE... Support PI1.x
+EFI_GUID gEfiFirmwareVolume2ProtocolGuid = EFI_FIRMWARE_VOLUME2_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiFirmwareVolume2ProtocolGuid, "FirmwareVolume2Protocol", "Efi FirmwareVolume2Protocol"); \ No newline at end of file
diff --git a/EDK/Foundation/Framework/Protocol/FirmwareVolume2/FirmwareVolume2.h b/EDK/Foundation/Framework/Protocol/FirmwareVolume2/FirmwareVolume2.h
new file mode 100644
index 0000000..766cc94
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FirmwareVolume2/FirmwareVolume2.h
@@ -0,0 +1,195 @@
+/*++
+
+Copyright (c) 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolume2.h
+
+Abstract:
+
+ PI 1.0 spec definition.
+
+--*/
+
+#ifndef __FIRMWARE_VOLUME2_H__
+#define __FIRMWARE_VOLUME2_H__
+#include "EfiImageFormat.h"
+#include "EfiFirmwareVolume.h"
+ //;;## ...AMI_ADD FILE... Support PI1.x
+//
+// Firmware Volume Protocol GUID definition
+//
+#define EFI_FIRMWARE_VOLUME2_PROTOCOL_GUID \
+ { 0x220e73b6, 0x6bdb, 0x4413, 0x84, 0x5, 0xb9, 0x74, 0xb1, 0x8, 0x61, 0x9a }
+
+
+EFI_FORWARD_DECLARATION (EFI_FIRMWARE_VOLUME2_PROTOCOL);
+
+
+//
+// ************************************************************
+// EFI_FV2_ATTRIBUTES bit definitions
+// ************************************************************
+//
+#define EFI_FV2_READ_DISABLE_CAP 0x0000000000000001
+#define EFI_FV2_READ_ENABLE_CAP 0x0000000000000002
+#define EFI_FV2_READ_STATUS 0x0000000000000004
+
+#define EFI_FV2_WRITE_DISABLE_CAP 0x0000000000000008
+#define EFI_FV2_WRITE_ENABLE_CAP 0x0000000000000010
+#define EFI_FV2_WRITE_STATUS 0x0000000000000020
+
+#define EFI_FV2_LOCK_CAP 0x0000000000000040
+#define EFI_FV2_LOCK_STATUS 0x0000000000000080
+#define EFI_FV2_WRITE_POLICY_RELIABLE 0x0000000000000100
+
+#define EFI_FV2_READ_LOCK_CAP 0x0000000000001000
+#define EFI_FV2_READ_LOCK_STATUS 0x0000000000002000
+#define EFI_FV2_WRITE_LOCK_CAP 0x0000000000004000
+#define EFI_FV2_WRITE_LOCK_STATUS 0x0000000000008000
+#define EFI_FV2_ALIGNMENT 0x00000000001F0000
+
+
+#define EFI_FV2_ALIGNMENT_1 0x0000000000000000
+#define EFI_FV2_ALIGNMENT_2 0x0000000000010000
+#define EFI_FV2_ALIGNMENT_4 0x0000000000020000
+#define EFI_FV2_ALIGNMENT_8 0x0000000000030000
+#define EFI_FV2_ALIGNMENT_16 0x0000000000040000
+#define EFI_FV2_ALIGNMENT_32 0x0000000000050000
+#define EFI_FV2_ALIGNMENT_64 0x0000000000060000
+#define EFI_FV2_ALIGNMENT_128 0x0000000000070000
+#define EFI_FV2_ALIGNMENT_256 0x0000000000080000
+#define EFI_FV2_ALIGNMENT_512 0x0000000000090000
+#define EFI_FV2_ALIGNMENT_1K 0x00000000000A0000
+#define EFI_FV2_ALIGNMENT_2K 0x00000000000B0000
+#define EFI_FV2_ALIGNMENT_4K 0x00000000000C0000
+#define EFI_FV2_ALIGNMENT_8K 0x00000000000D0000
+#define EFI_FV2_ALIGNMENT_16K 0x00000000000E0000
+#define EFI_FV2_ALIGNMENT_32K 0x00000000000F0000
+#define EFI_FV2_ALIGNMENT_64K 0x0000000000100000
+#define EFI_FV2_ALIGNMENT_128K 0x0000000000110000
+#define EFI_FV2_ALIGNMENT_256K 0x0000000000120000
+#define EFI_FV2_ALIGNMENT_512K 0x0000000000130000
+#define EFI_FV2_ALIGNMENT_1M 0x0000000000140000
+#define EFI_FV2_ALIGNMENT_2M 0x0000000000150000
+#define EFI_FV2_ALIGNMENT_4M 0x0000000000160000
+#define EFI_FV2_ALIGNMENT_8M 0x0000000000170000
+#define EFI_FV2_ALIGNMENT_16M 0x0000000000180000
+#define EFI_FV2_ALIGNMENT_32M 0x0000000000190000
+#define EFI_FV2_ALIGNMENT_64M 0x00000000001A0000
+#define EFI_FV2_ALIGNMENT_128M 0x00000000001B0000
+#define EFI_FV2_ALIGNMENT_256M 0x00000000001C0000
+#define EFI_FV2_ALIGNMENT_512M 0x00000000001D0000
+#define EFI_FV2_ALIGNMENT_1G 0x00000000001E0000
+#define EFI_FV2_ALIGNMENT_2G 0x00000000001F0000
+
+#define EFI_FV_FILE_ATTRIB_FIXED 0x00000100
+#define EFI_FV_FILE_ATTRIB_MEMORY_MAPPED 0x00000200
+
+
+//
+// Protocol API definitions
+//
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_GET_ATTRIBUTES) (
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ OUT EFI_FV_ATTRIBUTES *Attributes
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_SET_ATTRIBUTES) (
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN OUT EFI_FV_ATTRIBUTES *Attributes
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_READ_FILE) (
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN CONST EFI_GUID *NameGuid,
+ IN OUT VOID **Buffer,
+ IN OUT UINTN *BufferSize,
+ OUT EFI_FV_FILETYPE *FoundType,
+ OUT EFI_FV_FILE_ATTRIBUTES *FileAttributes,
+ OUT UINT32 *AuthenticationStatus
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_READ_SECTION) (
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN CONST EFI_GUID *NameGuid,
+ IN EFI_SECTION_TYPE SectionType,
+ IN UINTN SectionInstance,
+ IN OUT VOID **Buffer,
+ IN OUT UINTN *BufferSize,
+ OUT UINT32 *AuthenticationStatus
+ );
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_WRITE_FILE) (
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN UINT32 NumberOfFiles,
+ IN EFI_FV_WRITE_POLICY WritePolicy,
+ IN EFI_FV_WRITE_FILE_DATA *FileData
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_GET_NEXT_FILE) (
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN OUT VOID *Key,
+ IN OUT EFI_FV_FILETYPE *FileType,
+ OUT EFI_GUID *NameGuid,
+ OUT EFI_FV_FILE_ATTRIBUTES *Attributes,
+ OUT UINTN *Size
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_GET_INFO) (
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN CONST EFI_GUID *InformationType,
+ IN OUT UINTN *BufferSize,
+ OUT VOID *Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FV_SET_INFO) (
+ IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,
+ IN CONST EFI_GUID *InformationType,
+ IN UINTN BufferSize,
+ IN CONST VOID *Buffer
+ );
+
+
+typedef struct _EFI_FIRMWARE_VOLUME2_PROTOCOL {
+ EFI_FV_GET_ATTRIBUTES GetVolumeAttributes;
+ EFI_FV_SET_ATTRIBUTES SetVolumeAttributes;
+ EFI_FV_READ_FILE ReadFile;
+ EFI_FV_READ_SECTION ReadSection;
+ EFI_FV_WRITE_FILE WriteFile;
+ EFI_FV_GET_NEXT_FILE GetNextFile;
+ UINT32 KeySize;
+ EFI_HANDLE ParentHandle;
+ EFI_FV_GET_INFO GetInfo;
+ EFI_FV_SET_INFO SetInfo;
+} EFI_FIRMWARE_VOLUME2_PROTOCOL;
+
+extern EFI_GUID gEfiFirmwareVolume2ProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.c b/EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.c
new file mode 100644
index 0000000..17c37df
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.c
@@ -0,0 +1,35 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolumeBlock.c
+
+Abstract:
+
+ Firmware Volume Block protocol as defined in the Tiano Firmware Volume
+ specification.
+
+ Low level firmware device access routines to abstract firmware device
+ hardware.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (FirmwareVolumeBlock)
+
+EFI_GUID gFramerworkEfiFirmwareVolumeBlockProtocolGuid = FRAMEWORK_EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID; //;;## ...AMI_OVERRIDE... Support PI1.x
+EFI_GUID gEfiFirmwareVolumeBlockProtocolGuid = EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID;
+EFI_GUID gEfiFirmwareVolumeBlock2ProtocolGuid = EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL_GUID; //;;## ...AMI_OVERRIDE... Support PI1.x
+
+EFI_GUID_STRING(&gFramerworkEfiFirmwareVolumeBlockProtocolGuid, "FirmwareVolumeBlock Protocol", "Framework Firmware Volume Block protocol"); //;;## ...AMI_OVERRIDE... Support PI1.x
+EFI_GUID_STRING(&gEfiFirmwareVolumeBlock2ProtocolGuid, "FirmwareVolumeBlock2 Protocol", "Firmware Volume Block2 protocol"); //;;## ...AMI_OVERRIDE... Support PI1.x
+
diff --git a/EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h b/EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h
new file mode 100644
index 0000000..12599f6
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FirmwareVolumeBlock/FirmwareVolumeBlock.h
@@ -0,0 +1,270 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FirmwareVolumeBlock.h
+
+Abstract:
+
+ Firmware Volume Block protocol as defined in the Tiano Firmware Volume
+ specification.
+
+ Low level firmware device access routines to abstract firmware device
+ hardware.
+
+--*/
+
+#ifndef _FW_VOL_BLOCK_H_
+#define _FW_VOL_BLOCK_H_
+
+#include "EfiFirmwareVolumeHeader.h"
+//;;## ...AMI_OVERRIDE... Support PI1.x start
+#define FRAMEWORK_EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID \
+ { \
+ 0xDE28BC59, 0x6228, 0x41BD, 0xBD, 0xF6, 0xA3, 0xB9, 0xAD, 0xB5, 0x8D, 0xA1 \
+ }
+
+#define EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL_GUID \
+ { \
+ 0x8f644fa9, 0xe850, 0x4db1, 0x9c, 0xe2, 0xb, 0x44, 0x69, 0x8e, 0x8d, 0xa4 \
+ }
+
+#if (PI_SPECIFICATION_VERSION < 0x00010000)
+#define EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID FRAMEWORK_EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID
+#else
+//
+// EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL is defined in PI 1.0 spec and its GUID value
+// is later updated to be the same as that of EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL
+// defined in PI 1.2 spec.
+//
+#define EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL_GUID
+#endif
+
+EFI_FORWARD_DECLARATION (EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL);
+typedef EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL;
+//;;## ...AMI_OVERRIDE... Support PI1.x end
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FVB_GET_ATTRIBUTES) (
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
+ OUT EFI_FVB_ATTRIBUTES * Attributes
+ )
+/*++
+
+Routine Description:
+ Retrieves Volume attributes. No polarity translations are done.
+
+Arguments:
+ This - Calling context
+ Attributes - output buffer which contains attributes
+
+Returns:
+ EFI_INVALID_PARAMETER
+ EFI_SUCCESS
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FVB_SET_ATTRIBUTES) (
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
+ IN OUT EFI_FVB_ATTRIBUTES * Attributes
+ )
+/*++
+
+Routine Description:
+ Sets Volume attributes. No polarity translations are done.
+
+Arguments:
+ This - Calling context
+ Attributes - On input: contains new attributes
+ On output: contains current attributes of FV
+
+Returns:
+ EFI_INVALID_PARAMETER
+ EFI_SUCCESS
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FVB_GET_PHYSICAL_ADDRESS) (
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
+ OUT EFI_PHYSICAL_ADDRESS * Address
+ )
+/*++
+
+Routine Description:
+ Retrieves the physical address of a memory mapped FV.
+
+Arguments:
+ This - Calling context
+ Attributes - Address is a pointer to a caller allocated EFI_PHYSICAL_ADDRESS
+ that on successful return from GetPhysicalAddress() contains the
+ base address of the firmware volume.
+
+Returns:
+ EFI_UNSUPPORTED
+ EFI_SUCCESS
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FVB_GET_BLOCK_SIZE) (
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
+ IN EFI_LBA Lba,
+ OUT UINTN *BlockSize,
+ OUT UINTN *NumberOfBlocks
+ )
+/*++
+
+Routine Description:
+ Retrieves the size in bytes of a specific block within an FV.
+
+Arguments:
+ This - Calling context.
+ Lba - Indicates which block to return the size for.
+ BlockSize - BlockSize is a pointer to a caller allocated
+ UINTN in which the size of the block is returned.
+ NumberOfBlocks - NumberOfBlocks is a pointer to a caller allocated
+ UINTN in which the number of consecutive blocks
+ starting with Lba is returned. All blocks in this
+ range have a size of BlockSize.
+
+Returns:
+ EFI_INVALID_PARAMETER
+ EFI_SUCCESS
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FVB_READ) (
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
+ IN EFI_LBA Lba,
+ IN UINTN Offset,
+ IN OUT UINTN *NumBytes,
+ OUT UINT8 *Buffer
+ )
+/*++
+
+Routine Description:
+ Reads data beginning at Lba:Offset from FV and places the data in Buffer.
+ The read terminates either when *NumBytes of data have been read, or when
+ a block boundary is reached. *NumBytes is updated to reflect the actual
+ number of bytes read.
+
+Arguments:
+ This - Calling context
+ Lba - Block in which to begin read
+ Offset - Offset in the block at which to begin read
+ NumBytes - At input, indicates the requested read size. At output, indicates
+ the actual number of bytes read.
+ Buffer - Data buffer in which to place data read.
+
+Returns:
+ EFI_INVALID_PARAMETER
+ EFI_NOT_FOUND
+ EFI_DEVICE_ERROR
+ EFI_SUCCESS
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FVB_WRITE) (
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
+ IN EFI_LBA Lba,
+ IN UINTN Offset,
+ IN OUT UINTN *NumBytes,
+ IN UINT8 *Buffer
+ )
+/*++
+
+Routine Description:
+
+ Writes data beginning at Lba:Offset from FV. The write terminates either
+ when *NumBytes of data have been written, or when a block boundary is
+ reached. *NumBytes is updated to reflect the actual number of bytes
+ written.
+
+Arguments:
+ This - Calling context
+ Lba - Block in which to begin write
+ Offset - Offset in the block at which to begin write
+ NumBytes - At input, indicates the requested write size. At output, indicates
+ the actual number of bytes written.
+ Buffer - Buffer containing source data for the write.
+
+Returns:
+ EFI_INVALID_PARAMETER
+ EFI_NOT_FOUND
+ EFI_DEVICE_ERROR
+ EFI_SUCCESS
+
+--*/
+;
+
+#define EFI_LBA_LIST_TERMINATOR 0xFFFFFFFFFFFFFFFF
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FVB_ERASE_BLOCKS) (
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * This,
+ ...
+ )
+/*++
+
+Routine Description:
+ The EraseBlock() function erases one or more blocks as denoted by the
+variable argument list. The entire parameter list of blocks must be verified
+prior to erasing any blocks. If a block is requested that does not exist
+within the associated firmware volume (it has a larger index than the last
+block of the firmware volume), the EraseBlock() function must return
+EFI_INVALID_PARAMETER without modifying the contents of the firmware volume.
+
+Arguments:
+ This - Calling context
+ ... - Starting LBA followed by Number of Lba to erase. a -1 to terminate
+ the list.
+
+Returns:
+ EFI_INVALID_PARAMETER
+ EFI_DEVICE_ERROR
+ EFI_SUCCESS
+ EFI_ACCESS_DENIED
+
+--*/
+;
+
+typedef struct _EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL {
+ EFI_FVB_GET_ATTRIBUTES GetVolumeAttributes;
+ EFI_FVB_SET_ATTRIBUTES SetVolumeAttributes;
+ EFI_FVB_GET_PHYSICAL_ADDRESS GetPhysicalAddress;
+ EFI_FVB_GET_BLOCK_SIZE GetBlockSize;
+ EFI_FVB_READ Read;
+ EFI_FVB_WRITE Write;
+ EFI_FVB_ERASE_BLOCKS EraseBlocks;
+ EFI_HANDLE ParentHandle;
+} EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL;
+
+extern EFI_GUID gEfiFirmwareVolumeBlockProtocolGuid;
+extern EFI_GUID gEfiFirmwareVolumeBlock2ProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/FormBrowser/FormBrowser.c b/EDK/Foundation/Framework/Protocol/FormBrowser/FormBrowser.c
new file mode 100644
index 0000000..f8c5843
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FormBrowser/FormBrowser.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FormBrowser.c
+
+Abstract:
+
+ The EFI_FORM_BROWSER_PROTOCOL is the interface to the EFI
+ Configuration Driver. This will allow the caller to direct the
+ configuration driver to use either the HII database or use the passed
+ in packet of data. This will also allow the caller to post messages
+ into the configuration drivers internal mailbox.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (FormBrowser)
+
+EFI_GUID gEfiFormBrowserProtocolGuid = EFI_FORM_BROWSER_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiFormBrowserProtocolGuid, "Form Browser Protocol", "Form Browser 1.0 protocol");
diff --git a/EDK/Foundation/Framework/Protocol/FormBrowser/FormBrowser.h b/EDK/Foundation/Framework/Protocol/FormBrowser/FormBrowser.h
new file mode 100644
index 0000000..5f1e3ba
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FormBrowser/FormBrowser.h
@@ -0,0 +1,97 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FormBrowser.h
+
+Abstract:
+
+ The EFI_FORM_BROWSER_PROTOCOL is the interface to the EFI
+ Configuration Driver. This will allow the caller to direct the
+ configuration driver to use either the HII database or use the passed
+ in packet of data. This will also allow the caller to post messages
+ into the configuration drivers internal mailbox.
+
+--*/
+
+#ifndef _FORM_BROWSER_H_
+#define _FORM_BROWSER_H_
+
+#include EFI_PROTOCOL_DEFINITION (Hii)
+
+#define EFI_FORM_BROWSER_PROTOCOL_GUID \
+ { \
+ 0xe5a1333e, 0xe1b4, 0x4d55, 0xce, 0xeb, 0x35, 0xc3, 0xef, 0x13, 0x34, 0x43 \
+ }
+
+//
+// Forward reference for pure ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_FORM_BROWSER_PROTOCOL);
+
+typedef struct _EFI_FORM_BROWSER_PROTOCOL EFI_FORM_BROWSER_PROTOCOL;
+
+typedef struct {
+ UINT32 Length;
+ UINT16 Type;
+ UINT8 Data[1];
+} EFI_HII_PACKET;
+
+typedef struct {
+ EFI_HII_IFR_PACK *IfrData;
+ EFI_HII_STRING_PACK *StringData;
+} EFI_IFR_PACKET;
+
+typedef struct {
+ UINTN LeftColumn;
+ UINTN RightColumn;
+ UINTN TopRow;
+ UINTN BottomRow;
+} SCREEN_DESCRIPTOR;
+
+//
+// The following types are currently defined:
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SEND_FORM) (
+ IN EFI_FORM_BROWSER_PROTOCOL * This,
+ IN BOOLEAN UseDatabase,
+ IN EFI_HII_HANDLE * Handle,
+ IN UINTN HandleCount,
+ IN EFI_IFR_PACKET * Packet,
+ IN EFI_HANDLE CallbackHandle,
+ IN UINT8 *NvMapOverride,
+ IN SCREEN_DESCRIPTOR * ScreenDimensions,
+ OUT BOOLEAN *ResetRequired OPTIONAL
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CREATE_POP_UP) (
+ IN UINTN NumberOfLines,
+ IN BOOLEAN HotKey,
+ IN UINTN MaximumStringSize,
+ OUT CHAR16 *StringBuffer,
+ OUT EFI_INPUT_KEY * KeyValue,
+ IN CHAR16 *String,
+ ...
+ );
+
+typedef struct _EFI_FORM_BROWSER_PROTOCOL {
+ EFI_SEND_FORM SendForm;
+ EFI_CREATE_POP_UP CreatePopUp;
+} EFI_FORM_BROWSER_PROTOCOL;
+
+extern EFI_GUID gEfiFormBrowserProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/FormCallback/FormCallback.c b/EDK/Foundation/Framework/Protocol/FormCallback/FormCallback.c
new file mode 100644
index 0000000..3563117
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FormCallback/FormCallback.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FormCallback.c
+
+Abstract:
+
+ The EFI_FORM_CALLBACK_PROTOCOL is the defined interface for access to custom
+ NV storage devices as well as communication of user selections in a more
+ interactive environment. This protocol should be published by hardware
+ specific drivers which want to export access to custom hardware storage or
+ publish IFR which has a requirement to call back the original driver.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (FormCallback)
+
+EFI_GUID gEfiFormCallbackProtocolGuid = EFI_FORM_CALLBACK_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiFormCallbackProtocolGuid, "Form Callback Protocol", "Form Callback 1.0 protocol");
diff --git a/EDK/Foundation/Framework/Protocol/FormCallback/FormCallback.h b/EDK/Foundation/Framework/Protocol/FormCallback/FormCallback.h
new file mode 100644
index 0000000..7595981
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/FormCallback/FormCallback.h
@@ -0,0 +1,120 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ FormCallback.h
+
+Abstract:
+
+ The EFI_FORM_CALLBACK_PROTOCOL is the defined interface for access to custom
+ NV storage devices as well as communication of user selections in a more
+ interactive environment. This protocol should be published by hardware
+ specific drivers which want to export access to custom hardware storage or
+ publish IFR which has a requirement to call back the original driver.
+
+--*/
+
+#ifndef _FORM_CALLBACK_H_
+#define _FORM_CALLBACK_H_
+
+#include EFI_PROTOCOL_DEFINITION (FormBrowser)
+
+#define EFI_FORM_CALLBACK_PROTOCOL_GUID \
+ { \
+ 0xf3e4543d, 0xcf35, 0x6cef, 0x35, 0xc4, 0x4f, 0xe6, 0x34, 0x4d, 0xfc, 0x54 \
+ }
+
+//
+// Forward reference for pure ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_FORM_CALLBACK_PROTOCOL);
+
+typedef struct _EFI_FORM_CALLBACK_PROTOCOL EFI_FORM_CALLBACK_PROTOCOL;
+
+#define RESET_REQUIRED 1 // Flags setting to signify that the callback operation resulted in an eventual
+// reset to be done upon exit of the browser
+//
+#define EXIT_REQUIRED 2 // Flags setting to signify that after the processing of the callback results - exit the browser
+#define SAVE_REQUIRED 4 // Flags setting to signify that after the processing of the callback results - save the NV data
+#define NV_CHANGED 8 // Flags setting to signify that after the processing of the callback results - turn the NV flag on
+#define NV_NOT_CHANGED 16 // Flags setting to signify that after the processing of the callback results - turn the NV flag off
+#pragma pack(1)
+typedef struct {
+ UINT8 OpCode; // Likely a string, numeric, or one-of
+ UINT8 Length; // Length of the EFI_IFR_DATA_ENTRY packet
+ UINT16 Flags; // Flags settings to determine what behavior is desired from the browser after the callback
+ VOID *Data; // The data in the form based on the op-code type - this is not a pointer to the data, the data follows immediately
+ // If the OpCode is a OneOf or Numeric type - Data is a UINT16 value
+ // If the OpCode is a String type - Data is a CHAR16[x] type
+ // If the OpCode is a Checkbox type - Data is a UINT8 value
+ // If the OpCode is a NV Access type - Data is a EFI_IFR_NV_DATA structure
+ //
+} EFI_IFR_DATA_ENTRY;
+
+typedef struct {
+ VOID *NvRamMap; // If the flag of the op-code specified retrieval of a copy of the NVRAM map,
+ // this is a pointer to a buffer copy
+ //
+ UINT32 EntryCount; // How many EFI_IFR_DATA_ENTRY entries
+ EFI_IFR_DATA_ENTRY Data[1]; // The in-line Data entries.
+} EFI_IFR_DATA_ARRAY;
+
+typedef union {
+ EFI_IFR_DATA_ARRAY DataArray; // Primarily used by those who call back to their drivers and use HII as a repository
+ EFI_IFR_PACKET DataPacket; // Primarily used by those which do not use HII as a repository
+ CHAR16 String[1]; // If returning an error - fill the string with null-terminated contents
+} EFI_HII_CALLBACK_PACKET;
+#pragma pack()
+//
+// The following types are currently defined:
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_NV_READ) (
+ IN EFI_FORM_CALLBACK_PROTOCOL * This,
+ IN CHAR16 *VariableName,
+ IN EFI_GUID * VendorGuid,
+ OUT UINT32 *Attributes OPTIONAL,
+ IN OUT UINTN *DataSize,
+ OUT VOID *Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_NV_WRITE) (
+ IN EFI_FORM_CALLBACK_PROTOCOL * This,
+ IN CHAR16 *VariableName,
+ IN EFI_GUID * VendorGuid,
+ IN UINT32 Attributes,
+ IN UINTN DataSize,
+ IN VOID *Buffer,
+ OUT BOOLEAN *ResetRequired
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_FORM_CALLBACK) (
+ IN EFI_FORM_CALLBACK_PROTOCOL * This,
+ IN UINT16 KeyValue,
+ IN EFI_IFR_DATA_ARRAY * Data,
+ OUT EFI_HII_CALLBACK_PACKET **Packet
+ );
+
+typedef struct _EFI_FORM_CALLBACK_PROTOCOL {
+ EFI_NV_READ NvRead;
+ EFI_NV_WRITE NvWrite;
+ EFI_FORM_CALLBACK Callback;
+} EFI_FORM_CALLBACK_PROTOCOL;
+
+extern EFI_GUID gEfiFormCallbackProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/Hii/Hii.c b/EDK/Foundation/Framework/Protocol/Hii/Hii.c
new file mode 100644
index 0000000..917d89b
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/Hii/Hii.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Hii.c
+
+Abstract:
+
+ This file defines the Human Interface Infrastructure protocol which will
+ be used by resources which want to publish IFR/Font/String data and have it
+ collected by the Configuration engine.
+
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (Hii)
+
+EFI_GUID gEfiHiiProtocolGuid = EFI_HII_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiHiiProtocolGuid, "Human Interface Infrastructure Protocol", "HII 1.0 protocol");
diff --git a/EDK/Foundation/Framework/Protocol/Hii/Hii.h b/EDK/Foundation/Framework/Protocol/Hii/Hii.h
new file mode 100644
index 0000000..ee1341b
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/Hii/Hii.h
@@ -0,0 +1,618 @@
+/*++
+
+Copyright (c) 2004 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ Hii.h
+
+Abstract:
+
+ This file defines the Human Interface Infrastructure protocol which will
+ be used by resources which want to publish IFR/Font/String data and have it
+ collected by the Configuration engine.
+
+--*/
+
+#ifndef _HII_H_
+#define _HII_H_
+
+#include "EfiInternalFormRepresentation.h"
+#include EFI_PROTOCOL_DEFINITION (UgaDraw)
+#include EFI_PROTOCOL_DEFINITION (GraphicsOutput)
+
+//*** AMI PORTING BEGIN ***//
+//#define EFI_HII_PROTOCOL_GUID \
+// { \
+// 0xd7ad636e, 0xb997, 0x459b, 0xbf, 0x3f, 0x88, 0x46, 0x89, 0x79, 0x80, 0xe1 \
+// }
+
+#define EFI_HII_NEW_PROTOCOL_GUID \
+ { 0xea816d2c, 0xcee5, 0x4f02, 0x99, 0xb5, 0xd3, 0x90, 0x5c, 0xbb, 0xd0, 0x77 }
+#define EFI_HII_PROTOCOL_GUID EFI_HII_NEW_PROTOCOL_GUID
+//*** AMI PORTING END *****//
+//
+// Forward reference for pure ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_HII_PROTOCOL);
+
+typedef struct _EFI_HII_PROTOCOL EFI_HII_PROTOCOL;
+
+//
+// Global definition
+//
+#define NARROW_CHAR 0xFFF0
+#define WIDE_CHAR 0xFFF1
+#define NON_BREAKING_CHAR 0xFFF2
+#define GLYPH_WIDTH 8
+#define GLYPH_HEIGHT 19
+
+#define EFI_HII_FONT 1
+#define EFI_HII_STRING 2
+#define EFI_HII_IFR 3
+#define EFI_HII_KEYBOARD 4
+#define EFI_HII_HANDLES 5
+#define EFI_HII_VARIABLE 6
+#define EFI_HII_DEVICE_PATH 7
+
+#define HANG(foo) { \
+ volatile INT32 __iii; \
+ __iii = foo; \
+ while (__iii) \
+ ; \
+ }
+//
+// #define HANG(foo)
+//
+// References to string tokens must use this macro to enable scanning for
+// token usages.
+//
+#define STRING_TOKEN(t) t
+
+//
+// The following types are currently defined:
+//
+typedef UINT16 EFI_FORM_ID;
+typedef UINT16 EFI_FORM_LABEL;
+typedef UINT16 EFI_HII_HANDLE;
+
+#pragma pack(1)
+
+typedef struct {
+ UINT32 Length;
+ UINT16 Type;
+} EFI_HII_PACK_HEADER;
+
+//
+// A form list consists of a large variety of structure
+// possibilities so to represent the binary blob of data
+// associated with a package of forms, we will assume a
+// pointer to a self-describing data buffer.
+//
+typedef struct {
+ EFI_HII_PACK_HEADER Header;
+} EFI_HII_IFR_PACK;
+
+typedef struct {
+ EFI_HII_PACK_HEADER Header; // Must be filled in
+ EFI_HANDLE ImageHandle; // Must be filled in
+ EFI_HANDLE DeviceHandle; // Optional
+ EFI_HANDLE ControllerHandle; // Optional
+ EFI_HANDLE CallbackHandle; // Optional
+ EFI_HANDLE COBExportHandle; // Optional
+} EFI_HII_HANDLE_PACK;
+
+//
+// ********************************************************
+// EFI_VARIABLE_CONTENTS
+// ********************************************************
+//
+typedef struct {
+ EFI_HII_PACK_HEADER Header;
+ EFI_GUID VariableGuid;
+ UINT32 VariableNameLength;
+ UINT16 VariableId;
+ //
+ // CHAR16 VariableName[]; //Null-terminated
+ //
+} EFI_HII_VARIABLE_PACK;
+
+//
+// ********************************************************
+// EFI_DEVICE_PATH_PACK
+// ********************************************************
+//
+typedef struct {
+ EFI_HII_PACK_HEADER Header;
+ //
+ // EFI_DEVICE_PATH DevicePath[];
+ //
+} EFI_HII_DEVICE_PATH_PACK;
+
+//
+// ********************************************************
+// EFI_HII_DATA_TABLE
+// ********************************************************
+//
+typedef struct {
+ EFI_HII_HANDLE HiiHandle;
+ EFI_GUID PackageGuid;
+ UINT32 DataTableSize;
+ UINT32 IfrDataOffset;
+ UINT32 StringDataOffset;
+ UINT32 VariableDataOffset;
+ UINT32 DevicePathOffset;
+ UINT32 NumberOfVariableData;
+ UINT32 NumberOfLanguages;
+ //
+ // EFI_HII_DEVICE_PATH_PACK DevicePath[];
+ // EFI_HII_VARIABLE_PACK VariableData[];
+ // EFI_HII_IFR_PACK IfrData;
+ // EFI_HII_STRING_PACK StringData[];
+ //
+} EFI_HII_DATA_TABLE;
+
+//
+// ********************************************************
+// EFI_HII_EXPORT_TABLE
+// ********************************************************
+//
+typedef struct {
+ UINT16 NumberOfHiiDataTables;
+ EFI_GUID Revision;
+ //
+ // EFI_HII_DATA_TABLE HiiDataTable[];
+ //
+} EFI_HII_EXPORT_TABLE;
+
+typedef struct {
+ BOOLEAN FormSetUpdate; // If TRUE, next variable is significant
+ EFI_PHYSICAL_ADDRESS FormCallbackHandle; // If not 0, will update Formset with this info
+ BOOLEAN FormUpdate; // If TRUE, next variable is significant
+ STRING_REF FormTitle; // If not 0, will update Form with this info
+ UINT16 DataCount; // The number of Data entries in this structure
+ UINT8 *Data; // An array of 1+ op-codes, specified by DataCount
+} EFI_HII_UPDATE_DATA;
+
+//
+// String attributes
+//
+#define LANG_RIGHT_TO_LEFT 0x00000001
+
+//
+// A string package is used to localize strings to a particular
+// language. The package is associated with a particular driver
+// or set of drivers. Tools are used to associate tokens with
+// string references in forms and in programs. These tokens are
+// language agnostic. When paired with a language pack (directly
+// or indirectly), the string token resolves into an actual
+// UNICODE string. The NumStringPointers determines how many
+// StringPointers (offset values) there are as well as the total
+// number of Strings that are defined.
+//
+typedef struct {
+ EFI_HII_PACK_HEADER Header;
+ RELOFST LanguageNameString;
+ RELOFST PrintableLanguageName;
+ UINT32 NumStringPointers;
+ UINT32 Attributes;
+ //
+ // RELOFST StringPointers[];
+ // EFI_STRING Strings[];
+ //
+} EFI_HII_STRING_PACK;
+
+//
+// We use this one to get the real size of the header
+//
+typedef struct {
+ EFI_HII_PACK_HEADER Header;
+ RELOFST LanguageNameString;
+ RELOFST PrintableLanguageName;
+ UINT32 NumStringPointers;
+ UINT32 Attributes;
+} EFI_HII_STRING_PACK_HEADER;
+
+//
+// Glyph Attributes
+//
+#define GLYPH_NON_SPACING 1
+#define GLYPH_NON_BREAKING 2
+
+typedef struct {
+ CHAR16 UnicodeWeight;
+ UINT8 Attributes;
+ UINT8 GlyphCol1[GLYPH_HEIGHT];
+} EFI_NARROW_GLYPH;
+
+typedef struct {
+ CHAR16 UnicodeWeight;
+ UINT8 Attributes;
+ UINT8 GlyphCol1[GLYPH_HEIGHT];
+ UINT8 GlyphCol2[GLYPH_HEIGHT];
+ UINT8 Pad[3];
+} EFI_WIDE_GLYPH;
+
+//
+// A font list consists of a font header followed by a series
+// of glyph structures. Note that fonts are not language specific.
+//
+typedef struct {
+ EFI_HII_PACK_HEADER Header;
+ UINT16 NumberOfNarrowGlyphs;
+ UINT16 NumberOfWideGlyphs;
+} EFI_HII_FONT_PACK;
+
+//
+// The IfrData in the EFI_HII_IFR_PACK structure definition
+// is variable length, and not really part of the header. To
+// simplify from code the size of the header, define an
+// identical structure that does not include the IfrData field.
+// Then use sizeof() this new structure to determine the
+// actual size of the header.
+//
+typedef struct {
+ EFI_HII_PACK_HEADER Header;
+} EFI_HII_IFR_PACK_HEADER;
+
+//
+// pedef EFI_HII_PACK_HEADER EFI_HII_IFR_PACK_HEADER;
+//
+typedef enum {
+ EfiKeyLCtrl,
+ EfiKeyA0,
+ EfiKeyLAlt,
+ EfiKeySpaceBar,
+ EfiKeyA2,
+ EfiKeyA3,
+ EfiKeyA4,
+ EfiKeyRCtrl,
+ EfiKeyLeftArrow,
+ EfiKeyDownArrow,
+ EfiKeyRightArrow,
+ EfiKeyZero,
+ EfiKeyPeriod,
+ EfiKeyEnter,
+ EfiKeyLShift,
+ EfiKeyB0,
+ EfiKeyB1,
+ EfiKeyB2,
+ EfiKeyB3,
+ EfiKeyB4,
+ EfiKeyB5,
+ EfiKeyB6,
+ EfiKeyB7,
+ EfiKeyB8,
+ EfiKeyB9,
+ EfiKeyB10,
+ EfiKeyRshift,
+ EfiKeyUpArrow,
+ EfiKeyOne,
+ EfiKeyTwo,
+ EfiKeyThree,
+ EfiKeyCapsLock,
+ EfiKeyC1,
+ EfiKeyC2,
+ EfiKeyC3,
+ EfiKeyC4,
+ EfiKeyC5,
+ EfiKeyC6,
+ EfiKeyC7,
+ EfiKeyC8,
+ EfiKeyC9,
+ EfiKeyC10,
+ EfiKeyC11,
+ EfiKeyC12,
+ EfiKeyFour,
+ EfiKeyFive,
+ EfiKeySix,
+ EfiKeyPlus,
+ EfiKeyTab,
+ EfiKeyD1,
+ EfiKeyD2,
+ EfiKeyD3,
+ EfiKeyD4,
+ EfiKeyD5,
+ EfiKeyD6,
+ EfiKeyD7,
+ EfiKeyD8,
+ EfiKeyD9,
+ EfiKeyD10,
+ EfiKeyD11,
+ EfiKeyD12,
+ EfiKeyD13,
+ EfiKeyDel,
+ EfiKeyEnd,
+ EfiKeyPgDn,
+ EfiKeySeven,
+ EfiKeyEight,
+ EfiKeyNine,
+ EfiKeyE0,
+ EfiKeyE1,
+ EfiKeyE2,
+ EfiKeyE3,
+ EfiKeyE4,
+ EfiKeyE5,
+ EfiKeyE6,
+ EfiKeyE7,
+ EfiKeyE8,
+ EfiKeyE9,
+ EfiKeyE10,
+ EfiKeyE11,
+ EfiKeyE12,
+ EfiKeyBackSpace,
+ EfiKeyIns,
+ EfiKeyHome,
+ EfiKeyPgUp,
+ EfiKeyNLck,
+ EfiKeySlash,
+ EfiKeyAsterisk,
+ EfiKeyMinus,
+ EfiKeyEsc,
+ EfiKeyF1,
+ EfiKeyF2,
+ EfiKeyF3,
+ EfiKeyF4,
+ EfiKeyF5,
+ EfiKeyF6,
+ EfiKeyF7,
+ EfiKeyF8,
+ EfiKeyF9,
+ EfiKeyF10,
+ EfiKeyF11,
+ EfiKeyF12,
+ EfiKeyPrint,
+ EfiKeySLck,
+ EfiKeyPause
+} EFI_KEY;
+
+typedef struct {
+ EFI_KEY Key;
+ CHAR16 Unicode;
+ CHAR16 ShiftedUnicode;
+ CHAR16 AltGrUnicode;
+ CHAR16 ShiftedAltGrUnicode;
+ UINT16 Modifier;
+} EFI_KEY_DESCRIPTOR;
+
+//
+// This structure allows a sparse set of keys to be redefined
+// or a complete redefinition of the keyboard layout. Most
+// keyboards have a lot of commonality in their layouts, therefore
+// only defining those keys that need to change from the default
+// minimizes the passed in information.
+//
+// Additionally, when an update occurs, the active keyboard layout
+// will be switched to the newly updated keyboard layout. This
+// allows for situations that when a keyboard layout driver is
+// loaded as part of system initialization, the system will default
+// the keyboard behavior to the new layout.
+//
+// Each call to update the keyboard mapping should contain the
+// complete set of key descriptors to be updated, since every
+// call to the HII which contains an EFI_HII_KEYBOARD_PACK will
+// wipe the previous set of overrides. A call to
+//
+typedef struct {
+ EFI_HII_PACK_HEADER Header;
+ EFI_KEY_DESCRIPTOR *Descriptor;
+ UINT8 DescriptorCount;
+} EFI_HII_KEYBOARD_PACK;
+
+//
+// The EFI_HII_PACKAGES can contain different types of packages just
+// after the structure as inline data.
+//
+typedef struct {
+ UINTN NumberOfPackages;
+ EFI_GUID *GuidId;
+ //
+ // EFI_HII_HANDLE_PACK *HandlePack; // Only one pack.
+ // EFI_HII_IFR_PACK *IfrPack; // Only one pack.
+ // EFI_HII_FONT_PACK *FontPack[]; // Multiple packs ok
+ // EFI_HII_STRING_PACK *StringPack[]; // Multiple packs ok
+ // EFI_HII_KEYBOARD_PACK *KeyboardPack[]; // Multiple packs ok
+ //
+} EFI_HII_PACKAGES;
+
+typedef struct _EFI_HII_VARIABLE_PACK_LIST {
+ struct _EFI_HII_VARIABLE_PACK_LIST *NextVariablePack;
+ EFI_HII_VARIABLE_PACK *VariablePack;
+} EFI_HII_VARIABLE_PACK_LIST;
+
+#pragma pack()
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_NEW_PACK) (
+ IN EFI_HII_PROTOCOL * This,
+ IN EFI_HII_PACKAGES * Packages,
+ OUT EFI_HII_HANDLE * Handle
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_REMOVE_PACK) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_FIND_HANDLES) (
+ IN EFI_HII_PROTOCOL *This,
+ IN OUT UINT16 *HandleBufferLength,
+ OUT EFI_HII_HANDLE *Handle
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_EXPORT) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle,
+ IN OUT UINTN *BufferSize,
+ OUT VOID *Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_RESET_STRINGS) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_TEST_STRING) (
+ IN EFI_HII_PROTOCOL *This,
+ IN CHAR16 *StringToTest,
+ IN OUT UINT32 *FirstMissing,
+ OUT UINT32 *GlyphBufferSize
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_GET_GLYPH) (
+ IN EFI_HII_PROTOCOL *This,
+ IN CHAR16 *Source,
+ IN OUT UINT16 *Index,
+ OUT UINT8 **GlyphBuffer,
+ OUT UINT16 *BitWidth,
+ IN OUT UINT32 *InternalStatus
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_GLYPH_TO_BLT) (
+ IN EFI_HII_PROTOCOL *This,
+ IN UINT8 *GlyphBuffer,
+ IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,
+ IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,
+ IN UINTN Count,
+ IN UINTN Width,
+ IN UINTN Height,
+ IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_NEW_STRING) (
+ IN EFI_HII_PROTOCOL *This,
+ IN CHAR16 *Language,
+ IN EFI_HII_HANDLE Handle,
+ IN OUT STRING_REF *Reference,
+ IN CHAR16 *NewString
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_GET_PRI_LANGUAGES) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle,
+ OUT EFI_STRING *LanguageString
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_GET_SEC_LANGUAGES) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle,
+ IN CHAR16 *PrimaryLanguage,
+ OUT EFI_STRING *LanguageString
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_GET_STRING) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle,
+ IN STRING_REF Token,
+ IN BOOLEAN Raw,
+ IN CHAR16 *LanguageString,
+ IN OUT UINTN *BufferLength,
+ OUT EFI_STRING StringBuffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_GET_LINE) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle,
+ IN STRING_REF Token,
+ IN OUT UINT16 *Index,
+ IN UINT16 LineWidth,
+ IN CHAR16 *LanguageString,
+ IN OUT UINT16 *BufferLength,
+ OUT EFI_STRING StringBuffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_GET_FORMS) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle,
+ IN EFI_FORM_ID FormId,
+ IN OUT UINTN *BufferLength,
+ OUT UINT8 *Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_GET_DEFAULT_IMAGE) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle,
+ IN UINTN DefaultMask,
+ OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_UPDATE_FORM) (
+ IN EFI_HII_PROTOCOL *This,
+ IN EFI_HII_HANDLE Handle,
+ IN EFI_FORM_LABEL Label,
+ IN BOOLEAN AddData,
+ IN EFI_HII_UPDATE_DATA *Data
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_HII_GET_KEYBOARD_LAYOUT) (
+ IN EFI_HII_PROTOCOL * This,
+ OUT UINT16 *DescriptorCount,
+ OUT EFI_KEY_DESCRIPTOR * Descriptor
+ );
+
+typedef struct _EFI_HII_PROTOCOL {
+ EFI_HII_NEW_PACK NewPack;
+ EFI_HII_REMOVE_PACK RemovePack;
+ EFI_HII_FIND_HANDLES FindHandles;
+ EFI_HII_EXPORT ExportDatabase;
+
+ EFI_HII_TEST_STRING TestString;
+ EFI_HII_GET_GLYPH GetGlyph;
+ EFI_HII_GLYPH_TO_BLT GlyphToBlt;
+
+ EFI_HII_NEW_STRING NewString;
+ EFI_HII_GET_PRI_LANGUAGES GetPrimaryLanguages;
+ EFI_HII_GET_SEC_LANGUAGES GetSecondaryLanguages;
+ EFI_HII_GET_STRING GetString;
+ EFI_HII_RESET_STRINGS ResetStrings;
+ EFI_HII_GET_LINE GetLine;
+ EFI_HII_GET_FORMS GetForms;
+ EFI_HII_GET_DEFAULT_IMAGE GetDefaultImage;
+ EFI_HII_UPDATE_FORM UpdateForm;
+
+ EFI_HII_GET_KEYBOARD_LAYOUT GetKeyboardLayout;
+} EFI_HII_PROTOCOL;
+
+extern EFI_GUID gEfiHiiProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/IdeControllerInit/IdeControllerInit.c b/EDK/Foundation/Framework/Protocol/IdeControllerInit/IdeControllerInit.c
new file mode 100644
index 0000000..5ae8b2b
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/IdeControllerInit/IdeControllerInit.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ IdeControllerInit.c
+
+Abstract:
+
+ EFI IDE Controller Init Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (IdeControllerInit)
+
+EFI_GUID gEfiIdeControllerInitProtocolGuid = EFI_IDE_CONTROLLER_INIT_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiIdeControllerInitProtocolGuid, "IDE Controller Init Protocol", "Platform IDE Init Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/IdeControllerInit/IdeControllerInit.h b/EDK/Foundation/Framework/Protocol/IdeControllerInit/IdeControllerInit.h
new file mode 100644
index 0000000..09cbc96
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/IdeControllerInit/IdeControllerInit.h
@@ -0,0 +1,348 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ IdeControllerInit.h
+
+Abstract:
+
+ EFI Platform IDE Init Protocol
+
+Revision History
+
+ 0.01 - Draft, 5-01-2002
+ Add Atapi6 Identify structure definition, 8-14-2002
+
+--*/
+
+#ifndef _EFI_IDE_CONTROLLER_INIT_PROTOCOL_H
+#define _EFI_IDE_CONTROLLER_INIT_PROTOCOL_H
+
+//
+// Global ID for the EFI Platform IDE Protocol GUID
+//
+#define EFI_IDE_CONTROLLER_INIT_PROTOCOL_GUID \
+ { 0xa1e37052, 0x80d9, 0x4e65, 0xa3, 0x17, 0x3e, 0x9a, 0x55, 0xc4, 0x3e, 0xc9 }
+
+////////////////////////////////////////////////////////////////////////////////////////
+// Forward reference, ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_IDE_CONTROLLER_INIT_PROTOCOL);
+
+//
+//////////////////////////////////////////////////////////////////////////////////////////
+// EFI_IDE_BUS_ENUMERATION_PHASE
+// EFI_IDE_CONTROLLER_ENUM_PHASE
+//
+typedef enum{
+ EfiIdeBeforeChannelEnumeration,
+ EfiIdeAfterChannelEnumeration,
+ EfiIdeBeforeChannelReset,
+ EfiIdeAfterChannelReset,
+ EfiIdeBusBeforeDevicePresenceDetection,
+ EfiIdeBusAfterDevicePresenceDetection,
+ EfiIdeResetMode,
+ EfiIdeBusPhaseMaximum
+} EFI_IDE_CONTROLLER_ENUM_PHASE;
+
+//
+//******************************************************
+// EFI_ATA_EXT_TRANSFER_PROTOCOL
+//******************************************************
+//
+// This extended mode describes the SATA physical protocol.
+// SATA physical layers can operate at different speeds.
+// These speeds are defined below. Various PATA protocols
+// and associated modes are not applicable to SATA devices.
+//
+
+typedef enum {
+ EfiAtaSataTransferProtocol
+} EFI_ATA_EXT_TRANSFER_PROTOCOL;
+
+#define EFI_SATA_AUTO_SPEED 0
+#define EFI_SATA_GEN1_SPEED 1
+#define EFI_SATA_GEN2_SPEED 2
+
+//
+//*******************************************************
+// EFI_IDE_CABLE_TYPE
+//*******************************************************
+//
+typedef enum {
+ EfiIdeCableTypeUnknown,
+ EfiIdeCableType40pin,
+ EfiIdeCableType80Pin,
+ EfiIdeCableTypeSerial,
+ EfiIdeCableTypeMaximum
+} EFI_IDE_CABLE_TYPE;
+
+//
+//******************************************************
+// EFI_ATA_MODE
+//******************************************************
+//
+typedef struct {
+ BOOLEAN Valid;
+ UINT32 Mode;
+} EFI_ATA_MODE;
+
+//
+//******************************************************
+// EFI_ATA_EXTENDED_MODE
+//******************************************************
+//
+typedef struct {
+ EFI_ATA_EXT_TRANSFER_PROTOCOL TransferProtocol;
+ UINT32 Mode;
+} EFI_ATA_EXTENDED_MODE;
+
+//
+//******************************************************
+// EFI_ATA_COLLECTIVE_MODE
+//******************************************************
+//
+typedef struct {
+ EFI_ATA_MODE PioMode;
+ EFI_ATA_MODE SingleWordDmaMode;
+ EFI_ATA_MODE MultiWordDmaMode;
+ EFI_ATA_MODE UdmaMode;
+ UINT32 ExtModeCount;
+ EFI_ATA_EXTENDED_MODE ExtMode[1];
+} EFI_ATA_COLLECTIVE_MODE;
+
+//
+//*******************************************************
+// EFI_ATA_IDENTIFY_DATA
+//*******************************************************
+//
+
+#pragma pack(1)
+
+typedef struct {
+ UINT16 config; // General Configuration
+ UINT16 cylinders; // Number of Cylinders
+ UINT16 reserved_2;
+ UINT16 heads; //Number of logical heads
+ UINT16 vendor_data1;
+ UINT16 vendor_data2;
+ UINT16 sectors_per_track;
+ UINT16 vendor_specific_7_9[3];
+ CHAR8 SerialNo[20]; // ASCII
+ UINT16 vendor_specific_20_21[2];
+ UINT16 ecc_bytes_available;
+ CHAR8 FirmwareVer[8]; // ASCII
+ CHAR8 ModelName[40]; // ASCII
+ UINT16 multi_sector_cmd_max_sct_cnt;
+ UINT16 reserved_48;
+ UINT16 capabilities;
+ UINT16 reserved_50;
+ UINT16 pio_cycle_timing;
+ UINT16 reserved_52;
+ UINT16 field_validity;
+ UINT16 current_cylinders;
+ UINT16 current_heads;
+ UINT16 current_sectors;
+ UINT16 CurrentCapacityLsb;
+ UINT16 CurrentCapacityMsb;
+ UINT16 reserved_59;
+ UINT16 user_addressable_sectors_lo;
+ UINT16 user_addressable_sectors_hi;
+ UINT16 reserved_62;
+ UINT16 multi_word_dma_mode;
+ UINT16 advanced_pio_modes;
+ UINT16 min_multi_word_dma_cycle_time;
+ UINT16 rec_multi_word_dma_cycle_time;
+ UINT16 min_pio_cycle_time_without_flow_control;
+ UINT16 min_pio_cycle_time_with_flow_control;
+ UINT16 reserved_69_79[11];
+ UINT16 major_version_no;
+ UINT16 minor_version_no;
+ UINT16 command_set_supported_82; // word 82
+ UINT16 command_set_supported_83; // word 83
+ UINT16 command_set_feature_extn; // word 84
+ UINT16 command_set_feature_enb_85; // word 85
+ UINT16 command_set_feature_enb_86; // word 86
+ UINT16 command_set_feature_default; // word 87
+ UINT16 ultra_dma_mode; // word 88
+ UINT16 reserved_89_127[39];
+ UINT16 security_status;
+ UINT16 vendor_data_129_159[31];
+ UINT16 reserved_160_255[96];
+} EFI_ATA_IDENTIFY_DATA;
+
+#pragma pack()
+//
+//*******************************************************
+// EFI_ATAPI_IDENTIFY_DATA
+//*******************************************************
+//
+#pragma pack(1)
+typedef struct {
+ UINT16 config; // General Configuration
+ UINT16 obsolete_1;
+ UINT16 specific_config;
+ UINT16 obsolete_3;
+ UINT16 retired_4_5[2];
+ UINT16 obsolete_6;
+ UINT16 cfa_reserved_7_8[2];
+ UINT16 retired_9;
+ CHAR8 SerialNo[20]; // ASCII
+ UINT16 retired_20_21[2];
+ UINT16 obsolete_22;
+ CHAR8 FirmwareVer[8]; // ASCII
+ CHAR8 ModelName[40]; // ASCII
+ UINT16 multi_sector_cmd_max_sct_cnt;
+ UINT16 reserved_48;
+ UINT16 capabilities_49;
+ UINT16 capabilities_50;
+ UINT16 obsolete_51_52[2];
+ UINT16 field_validity;
+ UINT16 obsolete_54_58[5];
+ UINT16 mutil_sector_setting;
+ UINT16 user_addressable_sectors_lo;
+ UINT16 user_addressable_sectors_hi;
+ UINT16 obsolete_62;
+ UINT16 multi_word_dma_mode;
+ UINT16 advanced_pio_modes;
+ UINT16 min_multi_word_dma_cycle_time;
+ UINT16 rec_multi_word_dma_cycle_time;
+ UINT16 min_pio_cycle_time_without_flow_control;
+ UINT16 min_pio_cycle_time_with_flow_control;
+ UINT16 reserved_69_74[6];
+ UINT16 queue_depth;
+ UINT16 reserved_76_79[4];
+ UINT16 major_version_no;
+ UINT16 minor_version_no;
+ UINT16 cmd_set_support_82;
+ UINT16 cmd_set_support_83;
+ UINT16 cmd_feature_support;
+ UINT16 cmd_feature_enable_85;
+ UINT16 cmd_feature_enable_86;
+ UINT16 cmd_feature_default;
+ UINT16 ultra_dma_select;
+ UINT16 time_required_for_sec_erase;
+ UINT16 time_required_for_enhanced_sec_erase;
+ UINT16 current_advanced_power_mgmt_value;
+ UINT16 master_pwd_revison_code;
+ UINT16 hardware_reset_result;
+ UINT16 current_auto_acoustic_mgmt_value;
+ UINT16 reserved_95_99[5];
+ UINT16 max_user_lba_for_48bit_addr[4];
+ UINT16 reserved_104_126[23];
+ UINT16 removable_media_status_notification_support;
+ UINT16 security_status;
+ UINT16 vendor_data_129_159[31];
+ UINT16 cfa_power_mode;
+ UINT16 cfa_reserved_161_175[15];
+ UINT16 current_media_serial_no[30];
+ UINT16 reserved_206_254[49];
+ UINT16 integrity_word;
+} EFI_ATAPI_IDENTIFY_DATA;
+
+#pragma pack()
+//
+//*******************************************************
+// EFI_IDENTIFY_DATA
+//*******************************************************
+//
+typedef union {
+ EFI_ATA_IDENTIFY_DATA AtaData;
+ EFI_ATAPI_IDENTIFY_DATA AtapiData;
+} EFI_IDENTIFY_DATA;
+
+#define EFI_ATAPI_DEVICE_IDENTIFY_DATA 0x8000
+
+//
+/////////////////////////////////////////////////////////////////////////////////////////
+// Function prototype declaration, for ANSI compatability
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_IDE_CONTROLLER_GET_CHANNEL_INFO) (
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
+ IN UINT8 Channel,
+ OUT BOOLEAN *Enabled,
+ OUT UINT8 *MaxDevices
+
+);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_IDE_CONTROLLER_NOTIFY_PHASE) (
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
+ IN EFI_IDE_CONTROLLER_ENUM_PHASE Phase,
+ IN UINT8 Channel
+);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_IDE_CONTROLLER_SUBMIT_DATA) (
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
+ IN UINT8 Channel,
+ IN UINT8 Device,
+ IN EFI_IDENTIFY_DATA *IdentifyData
+);
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_IDE_CONTROLLER_DISQUALIFY_MODE) (
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
+ IN UINT8 Channel,
+ IN UINT8 Device,
+ IN EFI_ATA_COLLECTIVE_MODE *BadModes
+);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_IDE_CONTROLLER_CALCULATE_MODE) (
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
+ IN UINT8 Channel,
+ IN UINT8 Device,
+ OUT EFI_ATA_COLLECTIVE_MODE **SupportedModes
+);
+
+//
+// ?? What happen to EFI_IDE_CONTROLLER_SET_TIMING ???
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_IDE_CONTROLLER_SET_TIMING) (
+ IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
+ IN UINT8 Channel,
+ IN UINT8 Device,
+ IN EFI_ATA_COLLECTIVE_MODE *Modes
+);
+
+//
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Interface structure
+// EFI_IDE_CONTROLLER_INIT_PROTOCOL protocol provides the chipset specific information to the IDE bus driver.
+// An IDE Bus driver wants to manage an IDE bus and possible IDE devices will have to retrieve the
+// EFI_IDE_CONTROLLER_INIT_PROTOCOL instances.
+//
+typedef struct _EFI_IDE_CONTROLLER_INIT_PROTOCOL {
+ EFI_IDE_CONTROLLER_GET_CHANNEL_INFO GetChannelInfo;
+ EFI_IDE_CONTROLLER_NOTIFY_PHASE NotifyPhase;
+ EFI_IDE_CONTROLLER_SUBMIT_DATA SubmitData;
+ EFI_IDE_CONTROLLER_DISQUALIFY_MODE DisqualifyMode;
+ EFI_IDE_CONTROLLER_CALCULATE_MODE CalculateMode;
+ EFI_IDE_CONTROLLER_SET_TIMING SetTiming;
+ BOOLEAN EnumAll;
+ UINT8 ChannelCount;
+} EFI_IDE_CONTROLLER_INIT_PROTOCOL;
+
+
+extern EFI_GUID gEfiIdeControllerInitProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/IncompatiblePciDeviceSupport/IncompatiblePciDeviceSupport.c b/EDK/Foundation/Framework/Protocol/IncompatiblePciDeviceSupport/IncompatiblePciDeviceSupport.c
new file mode 100644
index 0000000..020331b
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/IncompatiblePciDeviceSupport/IncompatiblePciDeviceSupport.c
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ IncompatiblePciDeviceSupport.c
+
+Abstract:
+
+ EFI Incompatible PCI Device Support Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (IncompatiblePciDeviceSupport)
+
+EFI_GUID gEfiIncompatiblePciDeviceSupportProtocolGuid = EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL_GUID;
+
+EFI_GUID_STRING
+ (
+ &gEfiIncompatiblePciDeviceSupportProtocolGuid, "Incompatible PCI Device Support Protocol",
+ "Tiano Incompatible PCI Device Support Protocol"
+ );
diff --git a/EDK/Foundation/Framework/Protocol/IncompatiblePciDeviceSupport/IncompatiblePciDeviceSupport.h b/EDK/Foundation/Framework/Protocol/IncompatiblePciDeviceSupport/IncompatiblePciDeviceSupport.h
new file mode 100644
index 0000000..c8b946d
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/IncompatiblePciDeviceSupport/IncompatiblePciDeviceSupport.h
@@ -0,0 +1,55 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ IncompatiblePciDeviceSupport.h
+
+Abstract:
+
+ EFI Incompatible PCI Device Support Protocol
+
+Revision History
+
+--*/
+
+#ifndef _INCOMPATIBLE_PCI_DEVICE_SUPPORT_H_
+#define _INCOMPATIBLE_PCI_DEVICE_SUPPORT_H_
+
+#define EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL_GUID \
+ {0xeb23f55a, 0x7863, 0x4ac2, 0x8d, 0x3d, 0x95, 0x65, 0x35, 0xde, 0x03, 0x75}
+
+EFI_FORWARD_DECLARATION (EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT);
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_CHECK_DEVICE) (
+ IN EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT *This,
+ IN UINTN VendorId,
+ IN UINTN DeviceId,
+ IN UINTN Revision,
+ IN UINTN SubVendorId,OPTIONAL
+ IN UINTN SubDeviceId,OPTIONAL
+ OUT VOID *Configuration
+);
+
+
+//
+// Interface structure for the Incompatible PCI Device Support Protocol
+//
+typedef struct _EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT {
+ EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_CHECK_DEVICE CheckDevice;
+} EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL;
+
+extern EFI_GUID gEfiIncompatiblePciDeviceSupportProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/Legacy8259/Legacy8259.c b/EDK/Foundation/Framework/Protocol/Legacy8259/Legacy8259.c
new file mode 100644
index 0000000..f52c030
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/Legacy8259/Legacy8259.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ Legacy8259.c
+
+Abstract:
+
+ EFI Legacy Region Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (Legacy8259)
+
+EFI_GUID gEfiLegacy8259ProtocolGuid = EFI_LEGACY_8259_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiLegacy8259ProtocolGuid, "Legacy 8259 Protocol", "Legacy 8259 Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/Legacy8259/Legacy8259.h b/EDK/Foundation/Framework/Protocol/Legacy8259/Legacy8259.h
new file mode 100644
index 0000000..2819a5e
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/Legacy8259/Legacy8259.h
@@ -0,0 +1,317 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ Legacy8259.h
+
+Abstract:
+
+ This protocol abstracts the 8259 interrupt controller. This includes
+ PCI IRQ routing need to program the PCI Interrupt Line register.
+
+Revision History
+
+ The EFI Legacy 8259 Protocol is compliant with CSM spec 0.96.
+
+--*/
+
+#ifndef _EFI_LEGACY_8259_H
+#define _EFI_LEGACY_8259_H
+
+#define EFI_LEGACY_8259_PROTOCOL_GUID \
+ { \
+ 0x38321dba, 0x4fe0, 0x4e17, 0x8a, 0xec, 0x41, 0x30, 0x55, 0xea, 0xed, 0xc1 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_LEGACY_8259_PROTOCOL);
+
+typedef enum {
+ Efi8259Irq0,
+ Efi8259Irq1,
+ Efi8259Irq2,
+ Efi8259Irq3,
+ Efi8259Irq4,
+ Efi8259Irq5,
+ Efi8259Irq6,
+ Efi8259Irq7,
+ Efi8259Irq8,
+ Efi8259Irq9,
+ Efi8259Irq10,
+ Efi8259Irq11,
+ Efi8259Irq12,
+ Efi8259Irq13,
+ Efi8259Irq14,
+ Efi8259Irq15,
+ Efi8259IrqMax
+} EFI_8259_IRQ;
+
+typedef enum {
+ Efi8259LegacyMode,
+ Efi8259ProtectedMode,
+ Efi8259MaxMode
+} EFI_8259_MODE;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_8259_SET_VECTOR_BASE) (
+ IN EFI_LEGACY_8259_PROTOCOL * This,
+ IN UINT8 MasterBase,
+ IN UINT8 SlaveBase
+ )
+/*++
+
+ Routine Description:
+ Get the 8259 interrupt masks for Irq0 - Irq15. A different mask exists for
+ the legacy mode mask and the protected mode mask. The base address for the 8259
+ is different for legacy and protected mode, so two masks are required.
+
+ Arguments:
+ This - Protocol instance pointer.
+ MasterBase - The base vector for the Master PIC in the 8259 controller
+ Slavebase - The base vector for the Master PIC in the 8259 controller
+
+ Returns:
+ EFI_SUCCESS - The new bases were programmed
+ EFI_DEVICE_ERROR - A device erro occured programming the vector bases
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_8259_GET_MASK) (
+ IN EFI_LEGACY_8259_PROTOCOL * This,
+ OUT UINT16 *LegacyMask, OPTIONAL
+ OUT UINT16 *LegacyEdgeLevel, OPTIONAL
+ OUT UINT16 *ProtectedMask, OPTIONAL
+ OUT UINT16 *ProtectedEdgeLevel OPTIONAL
+ )
+/*++
+
+ Routine Description:
+ Get the 8259 interrupt masks for Irq0 - Irq15. A different mask exists for
+ the legacy mode mask and the protected mode mask. The base address for the 8259
+ is different for legacy and protected mode, so two masks are required.
+
+ Arguments:
+ This - Protocol instance pointer.
+ LegacyMask - Bit 0 is Irq0 - Bit 15 is Irq15
+ LegacyEdgeLevel - Bit 0 is Irq0 - Bit 15 is Irq15
+ ProtectedMask - Bit 0 is Irq0 - Bit 15 is Irq15
+ ProtectedEdgeLevel - Bit 0 is Irq0 - Bit 15 is Irq15
+
+ Returns:
+ EFI_SUCCESS - 8259 status returned
+ EFI_DEVICE_ERROR - Error reading 8259
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_8259_SET_MASK) (
+ IN EFI_LEGACY_8259_PROTOCOL * This,
+ IN UINT16 *LegacyMask, OPTIONAL
+ IN UINT16 *LegacyEdgeLevel, OPTIONAL
+ IN UINT16 *ProtectedMask, OPTIONAL
+ IN UINT16 *ProtectedEdgeLevel OPTIONAL
+ )
+/*++
+
+ Routine Description:
+ Set the 8259 interrupt masks for Irq0 - Irq15. A different mask exists for
+ the legacy mode mask and the protected mode mask. The base address for the 8259
+ is different for legacy and protected mode, so two masks are required.
+ Also set the edge/level masks.
+
+ Arguments:
+ This - Protocol instance pointer.
+ LegacyMask - Bit 0 is Irq0 - Bit 15 is Irq15
+ LegacyEdgeLevel - Bit 0 is Irq0 - Bit 15 is Irq15
+ ProtectedMask - Bit 0 is Irq0 - Bit 15 is Irq15
+ ProtectedEdgeLevel - Bit 0 is Irq0 - Bit 15 is Irq15
+
+ Returns:
+ EFI_SUCCESS - 8259 status returned
+ EFI_DEVICE_ERROR - Error reading 8259
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_8259_SET_MODE) (
+ IN EFI_LEGACY_8259_PROTOCOL * This,
+ IN EFI_8259_MODE Mode,
+ IN UINT16 *Mask, OPTIONAL
+ IN UINT16 *EdgeLevel OPTIONAL
+ )
+/*++
+
+ Routine Description:
+ Set the 8259 mode of operation. The base address for the 8259 is different for
+ legacy and protected mode. The legacy mode requires the master 8259 to have a
+ master base of 0x08 and the slave base of 0x70. The protected mode base locations
+ are not defined. Interrupts must be masked by the caller before this function
+ is called. The interrupt mask from the current mode is saved. The interrupt
+ mask for the new mode is Mask, or if Mask does not exist the previously saved
+ mask is used.
+
+
+ Arguments:
+ This - Protocol instance pointer.
+ Mode - Mode of operation. i.e. real mode or protected mode
+ Mask - Optional interupt mask for the new mode.
+ EdgeLevel - Optional trigger mask for the new mode.
+
+ Returns:
+ EFI_SUCCESS - 8259 programmed
+ EFI_DEVICE_ERROR - Error writting to 8259
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_8259_GET_VECTOR) (
+ IN EFI_LEGACY_8259_PROTOCOL * This,
+ IN EFI_8259_IRQ Irq,
+ OUT UINT8 *Vector
+ )
+/*++
+
+ Routine Description:
+ Convert from IRQ to processor interrupt vector number.
+
+ Arguments:
+ This - Protocol instance pointer.
+ Irq - 8259 IRQ0 - IRQ15
+ Vector - Processor vector number that matches Irq
+
+ Returns:
+ EFI_SUCCESS - The Vector matching Irq is returned
+ EFI_INVALID_PARAMETER - Irq not valid
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_8259_ENABLE_IRQ) (
+ IN EFI_LEGACY_8259_PROTOCOL * This,
+ IN EFI_8259_IRQ Irq,
+ IN BOOLEAN LevelTriggered
+ )
+/*++
+
+ Routine Description:
+ Enable Irq by unmasking interrupt in 8259
+
+ Arguments:
+ This - Protocol instance pointer.
+ Irq - 8259 IRQ0 - IRQ15
+ LevelTriggered - TRUE if level triggered. FALSE if edge triggered.
+
+ Returns:
+ EFI_SUCCESS - Irq enabled on 8259
+ EFI_INVALID_PARAMETER - Irq not valid
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_8259_DISABLE_IRQ) (
+ IN EFI_LEGACY_8259_PROTOCOL * This,
+ IN EFI_8259_IRQ Irq
+ )
+/*++
+
+ Routine Description:
+ Disable Irq by masking interrupt in 8259
+
+ Arguments:
+ This - Protocol instance pointer.
+ Irq - 8259 IRQ0 - IRQ15
+
+ Returns:
+ EFI_SUCCESS - Irq disabled on 8259
+ EFI_INVALID_PARAMETER - Irq not valid
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_8259_GET_INTERRUPT_LINE) (
+ IN EFI_LEGACY_8259_PROTOCOL * This,
+ IN EFI_HANDLE PciHandle,
+ OUT UINT8 *Vector
+ )
+/*++
+
+ Routine Description:
+ PciHandle represents a PCI config space of a PCI function. Vector
+ represents Interrupt Pin (from PCI config space) and it is the data
+ that is programmed into the Interrupt Line (from the PCI config space)
+ register.
+
+ Arguments:
+ This - Protocol instance pointer.
+ PciHandle - PCI function to return vector for
+ Vector - Vector for fucntion that matches
+
+ Returns:
+ EFI_SUCCESS - A valid Vector is returned
+ EFI_INVALID_PARAMETER - PciHandle not valid
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_8259_END_OF_INTERRUPT) (
+ IN EFI_LEGACY_8259_PROTOCOL * This,
+ IN EFI_8259_IRQ Irq
+ )
+/*++
+
+ Routine Description:
+ Send an EOI to 8259
+
+ Arguments:
+ This - Protocol instance pointer.
+ Irq - 8259 IRQ0 - IRQ15
+
+ Returns:
+ EFI_SUCCESS - EOI successfully sent to 8259
+ EFI_INVALID_PARAMETER - Irq not valid
+
+--*/
+;
+
+typedef struct _EFI_LEGACY_8259_PROTOCOL {
+ EFI_LEGACY_8259_SET_VECTOR_BASE SetVectorBase;
+ EFI_LEGACY_8259_GET_MASK GetMask;
+ EFI_LEGACY_8259_SET_MASK SetMask;
+ EFI_LEGACY_8259_SET_MODE SetMode;
+ EFI_LEGACY_8259_GET_VECTOR GetVector;
+ EFI_LEGACY_8259_ENABLE_IRQ EnableIrq;
+ EFI_LEGACY_8259_DISABLE_IRQ DisableIrq;
+ EFI_LEGACY_8259_GET_INTERRUPT_LINE GetInterruptLine;
+ EFI_LEGACY_8259_END_OF_INTERRUPT EndOfInterrupt;
+} EFI_LEGACY_8259_PROTOCOL;
+
+extern EFI_GUID gEfiLegacy8259ProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/LegacyBios/LegacyBios.c b/EDK/Foundation/Framework/Protocol/LegacyBios/LegacyBios.c
new file mode 100644
index 0000000..bfeaf00
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/LegacyBios/LegacyBios.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ LegacyBios.c
+
+Abstract:
+
+ EFI Legacy BIOS Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (LegacyBios)
+
+EFI_GUID gEfiLegacyBiosProtocolGuid = EFI_LEGACY_BIOS_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiLegacyBiosProtocolGuid, "Legacy BIOS Protocol", "Legacy BIOS Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/LegacyBios/LegacyBios.h b/EDK/Foundation/Framework/Protocol/LegacyBios/LegacyBios.h
new file mode 100644
index 0000000..d145be8
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/LegacyBios/LegacyBios.h
@@ -0,0 +1,714 @@
+/*++
+
+Copyright (c) 2004 - 2007, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ LegacyBios.h
+
+Abstract:
+
+ The EFI Legacy BIOS Protocol is used to abstract legacy Option ROM usage
+ under EFI and Legacy OS boot.
+
+ Note: The names for EFI_IA32_REGISTER_SET elements were picked to follow
+ well known naming conventions.
+
+ Thunk - A thunk is a transition from one processor mode to another. A Thunk
+ is a transition from native EFI mode to 16-bit mode. A reverse thunk
+ would be a transition from 16-bit mode to native EFI mode.
+
+
+ Note: Note: Note: Note: Note: Note: Note:
+
+ You most likely should not use this protocol! Find the EFI way to solve the
+ problem to make your code portable
+
+ Note: Note: Note: Note: Note: Note: Note:
+
+Revision History
+
+ The EFI Legacy BIOS Protocol is compliant with CSM spec 0.96.
+
+--*/
+
+#ifndef _EFI_LEGACY_BIOS_H
+#define _EFI_LEGACY_BIOS_H
+
+#define EFI_LEGACY_BIOS_PROTOCOL_GUID \
+ { \
+ 0xdb9a1e3d, 0x45cb, 0x4abb, 0x85, 0x3b, 0xe5, 0x38, 0x7f, 0xdb, 0x2e, 0x2d \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_LEGACY_BIOS_PROTOCOL);
+
+//
+// Convert from 32-bit address (_Adr) to Segment:Offset 16-bit form
+//
+#define EFI_SEGMENT(_Adr) (UINT16) ((UINT16) (((UINTN) (_Adr)) >> 4) & 0xf000)
+#define EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xffff)
+#define BYTE_GRANULARITY 0x01
+#define WORD_GRANULARITY 0x02
+#define DWORD_GRANULARITY 0x04
+#define QWORD_GRANULARITY 0x08
+#define PARAGRAPH_GRANULARITY 0x10
+
+#define CARRY_FLAG 0x01
+
+typedef struct {
+ UINT32 CF:1;
+ UINT32 Reserved1:1;
+ UINT32 PF:1;
+ UINT32 Reserved2:1;
+ UINT32 AF:1;
+ UINT32 Reserved3:1;
+ UINT32 ZF:1;
+ UINT32 SF:1;
+ UINT32 TF:1;
+ UINT32 IF:1;
+ UINT32 DF:1;
+ UINT32 OF:1;
+ UINT32 IOPL:2;
+ UINT32 NT:1;
+ UINT32 Reserved4:2;
+ UINT32 VM:1;
+ UINT32 Reserved5:14;
+} EFI_EFLAGS_REG;
+
+typedef struct {
+ UINT16 CF : 1;
+ UINT16 Reserved1 : 1;
+ UINT16 PF : 1;
+ UINT16 Reserved2 : 1;
+ UINT16 AF : 1;
+ UINT16 Reserved3 : 1;
+ UINT16 ZF : 1;
+ UINT16 SF : 1;
+ UINT16 TF : 1;
+ UINT16 IF : 1;
+ UINT16 DF : 1;
+ UINT16 OF : 1;
+ UINT16 IOPL : 2;
+ UINT16 NT : 1;
+ UINT16 Reserved4 : 1;
+} EFI_FLAGS_REG;
+
+typedef struct {
+ UINT32 EAX;
+ UINT32 EBX;
+ UINT32 ECX;
+ UINT32 EDX;
+ UINT32 ESI;
+ UINT32 EDI;
+ EFI_EFLAGS_REG EFlags;
+ UINT16 ES;
+ UINT16 CS;
+ UINT16 SS;
+ UINT16 DS;
+ UINT16 FS;
+ UINT16 GS;
+ UINT32 EBP;
+ UINT32 ESP;
+} EFI_DWORD_REGS;
+
+typedef struct {
+ UINT16 AX;
+ UINT16 ReservedAX;
+ UINT16 BX;
+ UINT16 ReservedBX;
+ UINT16 CX;
+ UINT16 ReservedCX;
+ UINT16 DX;
+ UINT16 ReservedDX;
+ UINT16 SI;
+ UINT16 ReservedSI;
+ UINT16 DI;
+ UINT16 ReservedDI;
+ EFI_FLAGS_REG Flags;
+ UINT16 ReservedFlags;
+ UINT16 ES;
+ UINT16 CS;
+ UINT16 SS;
+ UINT16 DS;
+ UINT16 FS;
+ UINT16 GS;
+ UINT16 BP;
+ UINT16 ReservedBP;
+ UINT16 SP;
+ UINT16 ReservedSP;
+} EFI_WORD_REGS;
+
+typedef struct {
+ UINT8 AL;
+ UINT8 AH;
+ UINT16 ReservedAX;
+ UINT8 BL;
+ UINT8 BH;
+ UINT16 ReservedBX;
+ UINT8 CL;
+ UINT8 CH;
+ UINT16 ReservedCX;
+ UINT8 DL;
+ UINT8 DH;
+ UINT16 ReservedDX;
+} EFI_BYTE_REGS;
+
+typedef union {
+ EFI_DWORD_REGS E;
+ EFI_WORD_REGS X;
+ EFI_BYTE_REGS H;
+} EFI_IA32_REGISTER_SET;
+
+#pragma pack(1)
+//
+// $EFI table created by Legacy16 code and consumed by EFI Legacy driver
+//
+typedef struct {
+ UINT32 Signature; // "$EFI"
+ UINT8 TableChecksum;
+ UINT8 TableLength;
+ UINT8 EfiMajorRevision;
+ UINT8 EfiMinorRevision;
+ UINT8 TableMajorRevision;
+ UINT8 TableMinorRevision;
+ UINT16 Reserved;
+ UINT16 Compatibility16CallSegment;
+ UINT16 Compatibility16CallOffset;
+
+ UINT16 PnPInstallationCheckSegment;
+ UINT16 PnPInstallationCheckOffset;
+
+ UINT32 EfiSystemTable; // IPF - CSM Integration
+ UINT32 OemIdStringPointer;
+ UINT32 AcpiRsdPtrPointer;
+ UINT16 OemRevision;
+ UINT32 E820Pointer;
+ UINT32 E820Length;
+ UINT32 IrqRoutingTablePointer;
+ UINT32 IrqRoutingTableLength;
+ UINT32 MpTablePtr;
+ UINT32 MpTableLength;
+ UINT16 OemIntSegment;
+ UINT16 OemIntOffset;
+ UINT16 Oem32Segment;
+ UINT16 Oem32Offset;
+ UINT16 Oem16Segment;
+ UINT16 Oem16Offset;
+ UINT16 TpmSegment;
+ UINT16 TpmOffset;
+ UINT32 IbvPointer;
+ UINT32 PciExpressBase;
+ UINT8 LastPciBus;
+
+} EFI_COMPATIBILITY16_TABLE;
+
+typedef enum {
+ Compatibility16InitializeYourself = 0x0000,
+ Compatibility16UpdateBbs = 0x0001,
+ Compatibility16PrepareToBoot = 0x0002,
+ Compatibility16Boot = 0x0003,
+ Compatibility16RetrieveLastBootDevice = 0x0004,
+ Compatibility16DispatchOprom = 0x0005,
+ Compatibility16GetTableAddress = 0x0006,
+ Compatibility16SetKeyboardLeds = 0x0007,
+ Compatibility16InstallPciHandler = 0x0008,
+} EFI_COMPATIBILITY_FUNCTIONS;
+
+//
+// define maximum number of HDD system supports
+//
+#define MAX_HDD_ENTRIES 0x30
+
+typedef struct {
+ UINT16 Raw[256];
+} ATAPI_IDENTIFY;
+
+//
+// HDD_INFO status
+//
+#define HDD_PRIMARY 0x01
+#define HDD_SECONDARY 0x02
+#define HDD_MASTER_ATAPI_CDROM 0x04
+#define HDD_SLAVE_ATAPI_CDROM 0x08
+#define HDD_MASTER_IDE 0x20
+#define HDD_SLAVE_IDE 0x40
+#define HDD_MASTER_ATAPI_ZIPDISK 0x10
+#define HDD_SLAVE_ATAPI_ZIPDISK 0x80
+
+typedef struct {
+ UINT16 Status;
+ UINT32 Bus;
+ UINT32 Device;
+ UINT32 Function;
+ UINT16 CommandBaseAddress;
+ UINT16 ControlBaseAddress;
+ UINT16 BusMasterAddress;
+ UINT8 HddIrq;
+ ATAPI_IDENTIFY IdentifyDrive[2];
+} HDD_INFO;
+
+//
+// Parties data structures
+//
+typedef struct {
+ UINT8 DirectoryServiceValidity : 1;
+ UINT8 RabcaUsedFlag : 1;
+ UINT8 ExecuteHddDiagnosticsFlag : 1;
+ UINT8 Reserved : 5;
+} UDC_ATTRIBUTES;
+
+typedef struct {
+ UDC_ATTRIBUTES Attributes;
+ UINT8 DeviceNumber;
+ UINT8 BbsTableEntryNumberForParentDevice;
+ UINT8 BbsTableEntryNumberForBoot;
+ UINT8 BbsTableEntryNumberForHddDiag;
+ UINT8 BeerData[128];
+ UINT8 ServiceAreaData[64];
+} UD_TABLE;
+
+//
+// define BBS Device Types
+//
+#define BBS_FLOPPY 0x01
+#define BBS_HARDDISK 0x02
+#define BBS_CDROM 0x03
+#define BBS_PCMCIA 0x04
+#define BBS_USB 0x05
+#define BBS_EMBED_NETWORK 0x06
+#define BBS_BEV_DEVICE 0x80
+#define BBS_UNKNOWN 0xff
+
+typedef struct {
+ UINT16 OldPosition : 4;
+ UINT16 Reserved1 : 4;
+ UINT16 Enabled : 1;
+ UINT16 Failed : 1;
+ UINT16 MediaPresent : 2;
+ UINT16 Reserved2 : 4;
+} BBS_STATUS_FLAGS;
+
+#define MAX_BBS_ENTRIES 0x100
+//
+// BBS_IGNORE_ENTRY is placed in the BootPriority field if the entry is to
+// be skipped.
+// BBS_UNPRIORITIZED_ENTRY is placed in the BootPriority field before
+// priority has been assigned but indicates valid entry.
+// BBS_LOWEST_PRIORITY is normally used for removable media with no media
+// inserted. This allows the 16-bit CSM to allocate a drive letter to
+// the device.
+// BBS_DO_NOT_BOOT_FROM is used for devices that the 16-bit CSM is to assign
+// a drive letter to but never boot from.
+//
+// AdditionalIrq??Handler usage is IBV specific. The fields have been added
+// for:
+// 1. Saving non-BBS card info about IRQs taken by card.
+// 2. For BBS compliant cards that hook IRQs in order to have their SETUP
+// executed.
+//
+#define BBS_DO_NOT_BOOT_FROM 0xFFFC
+#define BBS_LOWEST_PRIORITY 0xFFFD
+#define BBS_UNPRIORITIZED_ENTRY 0xFFFE
+#define BBS_IGNORE_ENTRY 0xFFFF
+
+typedef struct {
+ UINT16 BootPriority;
+ UINT32 Bus;
+ UINT32 Device;
+ UINT32 Function;
+ UINT8 Class;
+ UINT8 SubClass;
+ UINT16 MfgStringOffset;
+ UINT16 MfgStringSegment;
+ UINT16 DeviceType;
+ BBS_STATUS_FLAGS StatusFlags;
+ UINT16 BootHandlerOffset;
+ UINT16 BootHandlerSegment;
+ UINT16 DescStringOffset;
+ UINT16 DescStringSegment;
+ UINT32 InitPerReserved;
+ UINT32 AdditionalIrq13Handler;
+ UINT32 AdditionalIrq18Handler;
+ UINT32 AdditionalIrq19Handler;
+ UINT32 AdditionalIrq40Handler;
+ UINT8 AssignedDriveNumber;
+ UINT32 AdditionalIrq41Handler;
+ UINT32 AdditionalIrq46Handler;
+ UINT32 IBV1;
+ UINT32 IBV2;
+} BBS_TABLE;
+
+#pragma pack()
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_LEGACY_BIOS_INT86) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ IN UINT8 BiosInt,
+ IN OUT EFI_IA32_REGISTER_SET * Regs
+ )
+/*++
+
+ Routine Description:
+ Thunk to 16-bit real mode and execute a software interrupt with a vector
+ of BiosInt. Regs will contain the 16-bit register context on entry and
+ exit.
+
+ Arguments:
+ This - Protocol instance pointer.
+ BiosInt - Processor interrupt vector to invoke
+ Reg - Register contexted passed into (and returned) from thunk to
+ 16-bit mode
+
+ Returns:
+ FALSE - Thunk completed, and there were no BIOS errors in the target code.
+ See Regs for status.
+ TRUE - There was a BIOS erro in the target code.
+
+--*/
+;
+
+typedef
+BOOLEAN
+(EFIAPI *EFI_LEGACY_BIOS_FARCALL86) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ IN UINT16 Segment,
+ IN UINT16 Offset,
+ IN EFI_IA32_REGISTER_SET * Regs,
+ IN VOID *Stack,
+ IN UINTN StackSize
+ )
+/*++
+
+ Routine Description:
+ Thunk to 16-bit real mode and call Segment:Offset. Regs will contain the
+ 16-bit register context on entry and exit. Arguments can be passed on
+ the Stack argument
+
+ Arguments:
+ This - Protocol instance pointer.
+ Segment - Segemnt of 16-bit mode call
+ Offset - Offset of 16-bit mdoe call
+ Reg - Register contexted passed into (and returned) from thunk to
+ 16-bit mode
+ Stack - Caller allocated stack used to pass arguments
+ StackSize - Size of Stack in bytes
+
+ Returns:
+ FALSE - Thunk completed, and there were no BIOS errors in the target code.
+ See Regs for status.
+ TRUE - There was a BIOS erro in the target code.
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_CHECK_ROM) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ IN EFI_HANDLE PciHandle,
+ OUT VOID **RomImage, OPTIONAL
+ OUT UINTN *RomSize, OPTIONAL
+ OUT UINTN *Flags
+
+ )
+/*++
+
+ Routine Description:
+ Test to see if a legacy PCI ROM exists for this device. Optionally return
+ the Legacy ROM instance for this PCI device.
+
+ Arguments:
+ This - Protocol instance pointer.
+ PciHandle - The PCI PC-AT OPROM from this devices ROM BAR will be loaded
+ RomImage - Return the legacy PCI ROM for this device
+ RomSize - Size of ROM Image
+ Flags - Indicates if ROM found and if PC-AT.
+
+ Returns:
+ EFI_SUCCESS - Legacy Option ROM availible for this device
+ EFI_UNSUPPORTED - Legacy Option ROM not supported.
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_INSTALL_ROM) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ IN EFI_HANDLE PciHandle,
+ IN VOID **RomImage,
+ OUT UINTN *Flags,
+ OUT UINT8 *DiskStart, OPTIONAL
+ OUT UINT8 *DiskEnd, OPTIONAL
+ OUT VOID **RomShadowAddress, OPTIONAL
+ OUT UINT32 *ShadowedRomSize OPTIONAL
+ )
+/*++
+
+ Routine Description:
+ Load a legacy PC-AT OPROM on the PciHandle device. Return information
+ about how many disks were added by the OPROM and the shadow address and
+ size. DiskStart & DiskEnd are INT 13h drive letters. Thus 0x80 is C:
+
+ Arguments:
+ This - Protocol instance pointer.
+ PciHandle - The PCI PC-AT OPROM from this devices ROM BAR will be loaded.
+ This value is NULL if RomImage is non-NULL. This is the normal
+ case.
+ RomImage - A PCI PC-AT ROM image. This argument is non-NULL if there is
+ no hardware associated with the ROM and thus no PciHandle,
+ otherwise is must be NULL.
+ Example is PXE base code.
+ Flags - Return Status if ROM was found and if was Legacy OPROM.
+ DiskStart - Disk number of first device hooked by the ROM. If DiskStart
+ is the same as DiskEnd no disked were hooked.
+ DiskEnd - Disk number of the last device hooked by the ROM.
+ RomShadowAddress - Shadow address of PC-AT ROM
+ RomShadowSize - Size of RomShadowAddress in bytes
+
+ Returns:
+ EFI_SUCCESS - Thunk completed, see Regs for status.
+ EFI_INVALID_PARAMETER - PciHandle not found
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_BOOT) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ IN BBS_BBS_DEVICE_PATH * BootOption,
+ IN UINT32 LoadOptionsSize,
+ IN VOID *LoadOptions
+ )
+/*++
+
+ Routine Description:
+ Attempt to legacy boot the BootOption. If the EFI contexted has been
+ compromised this function will not return.
+
+ Arguments:
+ This - Protocol instance pointer.
+ BootOption - EFI Device Path from BootXXXX variable.
+ LoadOptionSize - Size of LoadOption in size.
+ LoadOption - LoadOption from BootXXXX variable
+
+ Returns:
+ EFI_SUCCESS - Removable media not present
+
+--*/
+;
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ IN UINT8 Leds
+ )
+/*++
+
+ Routine Description:
+ Update BDA with current Scroll, Num & Cap lock LEDS
+
+ Arguments:
+ This - Protocol instance pointer.
+ Leds - Status of current Scroll, Num & Cap lock LEDS
+ Bit 0 is Scroll Lock 0 = Not locked
+ Bit 1 is Num Lock
+ Bit 2 is Caps Lock
+
+ Returns:
+ EFI_SUCCESS - Removable media not present
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_GET_BBS_INFO) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ OUT UINT16 *HddCount,
+ OUT HDD_INFO **HddInfo,
+ OUT UINT16 *BbsCount,
+ IN OUT BBS_TABLE **BbsTable
+ )
+/*++
+
+ Routine Description:
+ Retrieve legacy BBS info and assign boot priority.
+
+ Arguments:
+ This - Protocol instance pointer.
+ HddCount - Number of HDD_INFO structures
+ HddInfo - Onboard IDE controller information
+ BbsCount - Number of BBS_TABLE structures
+ BbsTable - List BBS entries
+
+ Returns:
+ EFI_SUCCESS - Tables returned
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ OUT UINT16 *BbsCount,
+ OUT BBS_TABLE **BbsTable
+ )
+/*++
+
+ Routine Description:
+ Assign drive number to legacy HDD drives prior to booting an EFI
+ aware OS so the OS can access drives without an EFI driver.
+
+ Arguments:
+ This - Protocol instance pointer.
+ BbsCount - Number of BBS_TABLE structures
+ BbsTable - List BBS entries
+
+ Returns:
+ EFI_SUCCESS - Drive numbers assigned
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ IN UDC_ATTRIBUTES Attributes,
+ IN UINTN BbsEntry,
+ IN VOID *BeerData,
+ IN VOID *ServiceAreaData
+ )
+/*++
+
+ Routine Description:
+ To boot from an unconventional device like parties and/or execute
+ HDD diagnostics.
+
+ Arguments:
+ This - Protocol instance pointer.
+ Attributes - How to interpret the other input parameters
+ BbsEntry - The 0-based index into the BbsTable for the parent
+ device.
+ BeerData - Pointer to the 128 bytes of ram BEER data.
+ ServiceAreaData - Pointer to the 64 bytes of raw Service Area data. The
+ caller must provide a pointer to the specific Service
+ Area and not the start all Service Areas.
+ Returns:
+ EFI_INVALID_PARAMETER if error. Does NOT return if no error.
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This
+ )
+/*++
+
+ Routine Description:
+ Shadow all legacy16 OPROMs that haven't been shadowed.
+ Warning: Use this with caution. This routine disconnects all EFI
+ drivers. If used externally then caller must re-connect EFI
+ drivers.
+ Arguments:
+
+ Returns:
+ EFI_SUCCESS - OPROMs shadowed
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_GET_LEGACY_REGION) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ IN UINTN LegacyMemorySize,
+ IN UINTN Region,
+ IN UINTN Alignment,
+ OUT VOID **LegacyMemoryAddress
+ )
+/*++
+
+Routine Description:
+ Get a region from the LegacyBios for S3 usage.
+
+Arguments:
+ This - Protocol instance pointer.
+ LegacyMemorySize - Size of required region
+ Region - Region to use.
+ 00 = Either 0xE0000 or 0xF0000 block
+ Bit0 = 1 0xF0000 block
+ Bit1 = 1 0xE0000 block
+ Alignment - Address alignment. Bit mapped. First non-zero
+ bit from right is alignment.
+ LegacyMemoryAddress - Region Assigned
+
+Returns:
+
+ EFI_SUCCESS - Region assigned
+
+ Other - Region not assigned
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_COPY_LEGACY_REGION) (
+ IN EFI_LEGACY_BIOS_PROTOCOL * This,
+ IN UINTN LegacyMemorySize,
+ IN VOID *LegacyMemoryAddress,
+ IN VOID *LegacyMemorySourceAddress
+ )
+/*++
+
+Routine Description:
+ Get a region from the LegacyBios for Tiano usage. Can only be invoked once.
+
+Arguments:
+ This - Protocol instance pointer.
+ LegacyMemorySize - Size of data to copy
+ LegacyMemoryAddress - Legacy Region destination address
+ Note: must be in region assigned by
+ LegacyBiosGetLegacyRegion
+ LegacyMemorySourceAddress - Source of data
+
+Returns:
+
+ EFI_SUCCESS - Region assigned
+ EFI_ACCESS_DENIED - Destination outside assigned region
+
+--*/
+;
+
+typedef struct _EFI_LEGACY_BIOS_PROTOCOL {
+ EFI_LEGACY_BIOS_INT86 Int86;
+ EFI_LEGACY_BIOS_FARCALL86 FarCall86;
+ EFI_LEGACY_BIOS_CHECK_ROM CheckPciRom;
+ EFI_LEGACY_BIOS_INSTALL_ROM InstallPciRom;
+ EFI_LEGACY_BIOS_BOOT LegacyBoot;
+ EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS UpdateKeyboardLedStatus;
+ EFI_LEGACY_BIOS_GET_BBS_INFO GetBbsInfo;
+ EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS ShadowAllLegacyOproms;
+ EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI PrepareToBootEfi;
+ EFI_LEGACY_BIOS_GET_LEGACY_REGION GetLegacyRegion;
+ EFI_LEGACY_BIOS_COPY_LEGACY_REGION CopyLegacyRegion;
+ EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE BootUnconventionalDevice;
+} EFI_LEGACY_BIOS_PROTOCOL;
+
+extern EFI_GUID gEfiLegacyBiosProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/LegacyBiosPlatform/LegacyBiosPlatform.c b/EDK/Foundation/Framework/Protocol/LegacyBiosPlatform/LegacyBiosPlatform.c
new file mode 100644
index 0000000..4581935
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/LegacyBiosPlatform/LegacyBiosPlatform.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ LegacyBiosPlatform.c
+
+Abstract:
+
+ EFI Legacy BIOS Platform Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (LegacyBiosPlatform)
+
+EFI_GUID gEfiLegacyBiosPlatformProtocolGuid = EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiLegacyBiosPlatformProtocolGuid, "Legacy BIOS Platform Protocol", "Legacy BIOS Platform Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/LegacyBiosPlatform/LegacyBiosPlatform.h b/EDK/Foundation/Framework/Protocol/LegacyBiosPlatform/LegacyBiosPlatform.h
new file mode 100644
index 0000000..d727fe5
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/LegacyBiosPlatform/LegacyBiosPlatform.h
@@ -0,0 +1,349 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ LegacyBiosPlatform.h
+
+Abstract:
+
+ The EFI Legacy BIOS Patform Protocol is used to mate a Legacy16
+ implementation with this EFI code. The EFI driver that produces
+ the Legacy BIOS protocol is generic and consumes this protocol.
+ A driver that matches the Legacy16 produces this protocol
+
+Revision History
+
+ The EFI Legacy BIOS Platform Protocol is compliant with CSM spec 0.96.
+
+--*/
+
+#ifndef _EFI_LEGACY_BIOS_PLATFORM_H
+#define _EFI_LEGACY_BIOS_PLATFORM_H
+
+#define EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID \
+ { \
+ 0x783658a3, 0x4172, 0x4421, 0xa2, 0x99, 0xe0, 0x9, 0x7, 0x9c, 0xc, 0xb4 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_LEGACY_BIOS_PLATFORM_PROTOCOL);
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (LegacyBios)
+
+#pragma pack(1)
+//
+// Define structures for GetOemIntData
+// Note:
+// OemIntDataElenent is an array of structures from 0 to Count-1.
+// RawData is an array of bytes from 0 to RamDataLength-1.
+//
+typedef struct {
+ UINT16 Int;
+ UINT16 Ax;
+ UINT32 RawDataLength;
+ UINT8 RawData[1];
+} EFI_OEM_INT_DATA_ELEMENT;
+
+typedef struct {
+ UINT16 Count;
+ EFI_OEM_INT_DATA_ELEMENT OemIntDataElement[1];
+} EFI_OEM_INT_DATA;
+#pragma pack()
+
+typedef enum {
+ EfiGetPlatformBinaryMpTable = 0,
+ EfiGetPlatformBinaryOemIntData = 1,
+ EfiGetPlatformBinaryOem16Data = 2,
+ EfiGetPlatformBinaryOem32Data = 3,
+ EfiGetPlatformBinaryTpmBinary = 4,
+ EfiGetPlatformBinarySystemRom = 5,
+ EfiGetPlatformPciExpressBase = 6,
+ EfiGetPlatformPmmSize = 7,
+ EfiGetPlatformEndOfOpromShadowAddr = 8
+} EFI_GET_PLATFORM_INFO_MODE;
+
+typedef enum {
+ EfiGetPlatformVgaHandle = 0,
+ EfiGetPlatformIdeHandle = 1,
+ EfiGetPlatformIsaBusHandle = 2,
+ EfiGetPlatformUsbHandle = 3
+} EFI_GET_PLATFORM_HANDLE_MODE;
+
+typedef enum {
+ EfiPlatformHookPrepareToScanRom = 0,
+ EfiPlatformHookShadowServiceRoms= 1,
+ EfiPlatformHookAfterRomInit = 2
+} EFI_GET_PLATFORM_HOOK_MODE;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO) (
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
+ IN EFI_GET_PLATFORM_INFO_MODE Mode,
+ OUT VOID **Table,
+ OUT UINTN *TableSize,
+ OUT UINTN *Location,
+ OUT UINTN *Alignment,
+ IN UINT16 LegacySegment,
+ IN UINT16 LegacyOffset
+ )
+/*++
+
+ Routine Description:
+ Return a System ROM image for the platform
+
+ Arguments:
+ This - Protocol instance pointer.
+ Mode - Specifies what data to return
+ Table - Pointer to MP table.
+ TableSize - Size in bytes of table.
+ Location - Legacy region requested
+ 0x00 = Any location
+ Bit 0 = 0xF0000 region
+ Bit 1 = 0xE0000 region
+ Multiple bits can be set
+ Alignment - Address alignment for allocation.
+ Bit mapped. First non-zero bit from right
+ is alignment.
+
+ LegacySegment - Segment in LegacyBios where Table is stored
+ LegacyOffset - Offset in LegacyBios where Table is stored
+
+ Returns:
+ EFI_SUCCESS - Data was returned successfully.
+ EFI_UNSUPPORTED - Mode is not supported on the platform.
+ EFI_NOT_FOUND - Binary image or table not found.
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE) (
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
+ IN EFI_GET_PLATFORM_HANDLE_MODE Mode,
+ IN UINT16 Type,
+ OUT EFI_HANDLE **HandleBuffer,
+ OUT UINTN *HandleCount,
+ IN VOID **AdditionalData OPTIONAL
+ )
+/*++
+
+ Routine Description:
+ Return the Legacy16 policy for which device should be the VGA controller
+ used during a Legacy16 boot.
+
+ Arguments:
+ This - Protocol instance pointer.
+ Mode - Specifies what handle to return.
+ Type - Type from Device Path for Handle to represent.
+ HandleBuffer - Handles of the device/controller in priority order
+ with HandleBuffer[0] highest priority.
+ HandleCount - Number of handles in the buffer.
+ AdditionalData - Mode specific.
+
+
+ Returns:
+ EFI_SUCCESS - Handle is valid
+ EFI_UNSUPPORTED - Mode is not supported on the platform.
+ EFI_NOT_FOUND - Handle is not known
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_SMM_INIT) (
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
+ IN VOID *EfiToLegacy16BootTable
+ );
+
+/*++
+
+ Routine Description:
+ Load and initialize the Legacy BIOS SMM handler.
+
+ Arguments:
+ This - Protocol instance pointer.
+ EfiToLegacy16BootTable - Pointer to Legacy16 boot table.
+ Returns:
+ EFI_SUCCESS - SMM code loaded.
+ EFI_DEVICE_ERROR - SMM code failed to load
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_HOOKS) (
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
+ IN EFI_GET_PLATFORM_HOOK_MODE Mode,
+ IN UINT16 Type,
+ IN EFI_HANDLE DeviceHandle,
+ IN OUT UINTN *ShadowAddress,
+ IN EFI_COMPATIBILITY16_TABLE * Compatibility16Table,
+ IN VOID **AdditionalData OPTIONAL
+ )
+/*++
+
+ Routine Description:
+ Prepare to scan a ROM.
+
+ Arguments:
+ This - Protocol instance pointer.
+ Handle - Device handle
+ ShadowAddress - Address that ROM is shadowed at prior to
+ initialization or first free ROM address,
+ depending upon mode.
+ Compatibility16Table - Pointer to Compatibility16Table.
+ AdditionalData - Mode specific.
+
+
+ Returns:
+ EFI_SUCCESS - RomImage is valid
+ EFI_UNSUPPORTED - Mode is not supported on the platform or platform
+ policy is to not install this OPROM.
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE) (
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
+ OUT VOID **RoutingTable,
+ OUT UINTN *RoutingTableEntries,
+ OUT VOID **LocalPirqTable, OPTIONAL
+ OUT UINTN *PirqTableSize, OPTIONAL
+ OUT VOID **LocalIrqPriorityTable, OPTIONAL
+ OUT UINTN *IrqPriorityTableEntries OPTIONAL
+ )
+/*++
+
+ Routine Description:
+ 1. List of IRQ routing entries and number of entries.
+ 2. Pointer to Entire $PIR table and length.
+ 3. List of IRQs to assign to PCI in priority.
+
+ Arguments:
+ This - Protocol instance pointer.
+ RoutingTable - Pointer to PCI IRQ Routing table.
+ RoutingTableEntries - Number of entries in table.
+ LocalPirqTable - $PIR table
+ PirqTableSize - $PIR table size
+ LocalIrqPriorityTable - List of interrupts in priority order to assign
+ IrqPriorityTableEntries- Number of entries in priority table
+
+ Returns:
+ EFI_SUCCESS - Table pointer returned
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ) (
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
+ IN UINTN PciBus,
+ IN UINTN PciDevice,
+ IN UINTN PciFunction,
+ IN OUT UINT8 *Pirq,
+ OUT UINT8 *PciIrq
+ )
+/*++
+
+ Routine Description:
+ Translate the PIRQ reported by the PCI device into the true PIRQ
+ from the internal IRQ routing information and IRQ assigned or to be
+ assigned to device.
+
+ Arguments:
+ This - Protocol instance pointer.
+ Base as defined below is the bus,device, function in
+ IRQ routing table.
+ PciBus - Base Bus for this device.
+ PciDevice - Base Device for this device.
+ PciFunction - Base Function for this device.
+ Pirq - Input is PIRQ reported by device, output is true PIRQ.
+ PciIrq - The IRQ already assigned to the PIRQ or the IRQ to be
+ assigned to the PIRQ.
+
+ Returns:
+ EFI_SUCCESS - Irq translated
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT) (
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This,
+ IN BBS_BBS_DEVICE_PATH * BbsDevicePath,
+ IN VOID *BbsTable,
+ IN UINT32 LoadOptionsSize,
+ IN VOID *LoadOptions,
+ IN VOID *EfiToLegacy16BootTable
+ )
+/*++
+
+ Routine Description:
+ Attempt to legacy boot the BootOption. If the EFI contexted has been
+ compromised this function will not return.
+
+ Arguments:
+ This - Protocol instance pointer.
+ BbsDevicePath - EFI Device Path from BootXXXX variable.
+ BbsTable - Internal BBS table.
+ LoadOptionSize - Size of LoadOption in size.
+ LoadOption - LoadOption from BootXXXX variable
+ EfiToLegacy16BootTable - Pointer to BootTable structure
+
+ Returns:
+ EFI_SUCCESS - Removable media not present
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_PERFORM_PLATFORM_TPM_TASKS) (
+ IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL * This
+ )
+/*++
+
+ Routine Description:
+ Perform platform-related TPM tasks.
+
+ Arguments:
+ This - Protocol instance pointer.
+
+ Returns:
+ EFI_SUCCESS - Successfully performed the TPM tasks or TCG service not found.
+ Others - Failed to perform the TPM tasks.
+
+--*/
+;
+
+typedef struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL {
+ EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO GetPlatformInfo;
+ EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE GetPlatformHandle;
+ EFI_LEGACY_BIOS_PLATFORM_SMM_INIT SmmInit;
+ EFI_LEGACY_BIOS_PLATFORM_HOOKS PlatformHooks;
+ EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE GetRoutingTable;
+ EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ TranslatePirq;
+ EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT PrepareToBoot;
+ EFI_LEGACY_BIOS_PLATFORM_PERFORM_PLATFORM_TPM_TASKS PerformPlatformTpmTasks;
+} EFI_LEGACY_BIOS_PLATFORM_PROTOCOL;
+
+extern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/LegacyInterrupt/LegacyInterrupt.c b/EDK/Foundation/Framework/Protocol/LegacyInterrupt/LegacyInterrupt.c
new file mode 100644
index 0000000..605d71e
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/LegacyInterrupt/LegacyInterrupt.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ LegacyInterrupt.c
+
+Abstract:
+
+ EFI Legacy InterruptProtocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (LegacyInterrupt)
+
+EFI_GUID gEfiLegacyInterruptProtocolGuid = EFI_LEGACY_INTERRUPT_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiLegacyInterruptProtocolGuid, "Legacy Interrupt Protocol", "Legacy Interrupt Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/LegacyInterrupt/LegacyInterrupt.h b/EDK/Foundation/Framework/Protocol/LegacyInterrupt/LegacyInterrupt.h
new file mode 100644
index 0000000..5c2783d
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/LegacyInterrupt/LegacyInterrupt.h
@@ -0,0 +1,136 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ LegacyInterrupt.h
+
+Abstract:
+
+ This protocol manages the PIRQ for PCI devices
+
+Revision History
+
+ The EFI Legacy Interrupt Protocol is compliant with CSM spec 0.96.
+
+--*/
+
+#ifndef _EFI_LEGACY_INTERRUPT_H_
+#define _EFI_LEGACY_INTERRUPT_H_
+
+#define EFI_LEGACY_INTERRUPT_PROTOCOL_GUID \
+ { \
+ 0x31ce593d, 0x108a, 0x485d, 0xad, 0xb2, 0x78, 0xf2, 0x1f, 0x29, 0x66, 0xbe \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_LEGACY_INTERRUPT_PROTOCOL);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_INTERRUPT_GET_NUMBER_PIRQS) (
+ IN EFI_LEGACY_INTERRUPT_PROTOCOL * This,
+ OUT UINT8 *NumberPirqs
+ );
+
+/*++
+
+ Routine Description:
+ Return the number of PIRQs this hardware supports.
+
+ Arguments:
+ This - Protocol instance pointer.
+ NumberPirsq - Number of PIRQs.
+
+ Returns:
+ EFI_SUCCESS - Number of PIRQs returned.
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_INTERRUPT_GET_LOCATION) (
+ IN EFI_LEGACY_INTERRUPT_PROTOCOL * This,
+ OUT UINT8 *Bus,
+ OUT UINT8 *Device,
+ OUT UINT8 *Function
+ );
+
+/*++
+
+ Routine Description:
+ Return PCI location of this device. $PIR table requires this info.
+
+ Arguments:
+ This - Protocol instance pointer.
+ Bus - PCI Bus
+ Device - PCI Device
+ Function - PCI Function
+
+ Returns:
+ EFI_SUCCESS - Bus/Device/Function returned
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_INTERRUPT_READ_PIRQ) (
+ IN EFI_LEGACY_INTERRUPT_PROTOCOL * This,
+ IN UINT8 PirqNumber,
+ OUT UINT8 *PirqData
+ );
+
+/*++
+
+ Routine Description:
+ Read the PIRQ register and return the data
+
+ Arguments:
+ This - Protocol instance pointer.
+ PirqNumber - PIRQ register to read
+ PirqData - Data read
+
+ Returns:
+ EFI_SUCCESS - Data was read
+ EFI_INVALID_PARAMETER - Invalid PIRQ number
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_INTERRUPT_WRITE_PIRQ) (
+ IN EFI_LEGACY_INTERRUPT_PROTOCOL * This,
+ IN UINT8 PirqNumber,
+ IN UINT8 PirqData
+ );
+
+/*++
+
+ Routine Description:
+ Write the specified PIRQ register with the given data.
+
+ Arguments:
+ This - Protocol instance pointer.
+ PirqNumber - PIRQ register to read.
+ PirqData - Data written.
+
+ Returns:
+ EFI_SUCCESS - Table pointer returned
+ EFI_INVALID_PARAMETER - Invalid PIRQ number
+
+--*/
+typedef struct _EFI_LEGACY_INTERRUPT_PROTOCOL {
+ EFI_LEGACY_INTERRUPT_GET_NUMBER_PIRQS GetNumberPirqs;
+ EFI_LEGACY_INTERRUPT_GET_LOCATION GetLocation;
+ EFI_LEGACY_INTERRUPT_READ_PIRQ ReadPirq;
+ EFI_LEGACY_INTERRUPT_WRITE_PIRQ WritePirq;
+} EFI_LEGACY_INTERRUPT_PROTOCOL;
+
+extern EFI_GUID gEfiLegacyInterruptProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/LegacyRegion/LegacyRegion.c b/EDK/Foundation/Framework/Protocol/LegacyRegion/LegacyRegion.c
new file mode 100644
index 0000000..e465c27
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/LegacyRegion/LegacyRegion.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ LegacyRegion.c
+
+Abstract:
+
+ EFI Legacy Region Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (LegacyRegion)
+
+EFI_GUID gEfiLegacyRegionProtocolGuid = EFI_LEGACY_REGION_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiLegacyRegionProtocolGuid, "Legacy Region Protocol", "Legacy Region Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/LegacyRegion/LegacyRegion.h b/EDK/Foundation/Framework/Protocol/LegacyRegion/LegacyRegion.h
new file mode 100644
index 0000000..c0bf631
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/LegacyRegion/LegacyRegion.h
@@ -0,0 +1,82 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ LegacyRegion.h
+
+Abstract:
+
+ This protocol manages the legacy memory regions between 0xc0000 - 0xfffff
+
+Revision History
+
+ The EFI Legacy Region Protocol is compliant with CSM spec 0.96.
+
+--*/
+
+#ifndef _EFI_LEGACY_REGION_H_
+#define _EFI_LEGACY_REGION_H_
+
+#define EFI_LEGACY_REGION_PROTOCOL_GUID \
+ { \
+ 0xfc9013a, 0x568, 0x4ba9, 0x9b, 0x7e, 0xc9, 0xc3, 0x90, 0xa6, 0x60, 0x9b \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_LEGACY_REGION_PROTOCOL);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_REGION_DECODE) (
+ IN EFI_LEGACY_REGION_PROTOCOL * This,
+ IN UINT32 Start,
+ IN UINT32 Length,
+ IN BOOLEAN *On
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_REGION_LOCK) (
+ IN EFI_LEGACY_REGION_PROTOCOL * This,
+ IN UINT32 Start,
+ IN UINT32 Length,
+ OUT UINT32 *Granularity OPTIONAL
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_REGION_BOOT_LOCK) (
+ IN EFI_LEGACY_REGION_PROTOCOL * This,
+ IN UINT32 Start,
+ IN UINT32 Length,
+ OUT UINT32 *Granularity OPTIONAL
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_LEGACY_REGION_UNLOCK) (
+ IN EFI_LEGACY_REGION_PROTOCOL * This,
+ IN UINT32 Start,
+ IN UINT32 Length,
+ OUT UINT32 *Granularity OPTIONAL
+ );
+
+typedef struct _EFI_LEGACY_REGION_PROTOCOL {
+ EFI_LEGACY_REGION_DECODE Decode;
+ EFI_LEGACY_REGION_LOCK Lock;
+ EFI_LEGACY_REGION_BOOT_LOCK BootLock;
+ EFI_LEGACY_REGION_UNLOCK UnLock;
+} EFI_LEGACY_REGION_PROTOCOL;
+
+extern EFI_GUID gEfiLegacyRegionProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/PciHostBridgeResourceAllocation/PciHostBridgeResourceAllocation.c b/EDK/Foundation/Framework/Protocol/PciHostBridgeResourceAllocation/PciHostBridgeResourceAllocation.c
new file mode 100644
index 0000000..5fcfb9f
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/PciHostBridgeResourceAllocation/PciHostBridgeResourceAllocation.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PciHostBridgeResourceAllocation.c
+
+Abstract:
+
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (PciHostBridgeResourceAllocation)
+
+EFI_GUID gEfiPciHostBridgeResourceAllocationProtocolGuid = EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GUID;
+
+EFI_GUID_STRING
+ (
+ &gEfiPciHostBridgeResourceAllocationProtocolGuid, "PciHostBridgeRresourceAllocation Protocol",
+ "Pci Host Bridge Resource Allocation Protocol"
+ );
diff --git a/EDK/Foundation/Framework/Protocol/PciHostBridgeResourceAllocation/PciHostBridgeResourceAllocation.h b/EDK/Foundation/Framework/Protocol/PciHostBridgeResourceAllocation/PciHostBridgeResourceAllocation.h
new file mode 100644
index 0000000..fa13082
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/PciHostBridgeResourceAllocation/PciHostBridgeResourceAllocation.h
@@ -0,0 +1,364 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PciHostBridgeResourceAllocation.h
+
+Abstract:
+
+
+--*/
+
+#ifndef _PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_H_
+#define _PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_H_
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION(PciRootBridgeIo)
+
+
+#define EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GUID \
+ { 0xCF8034BE,0x6768,0x4d8b,0xB7,0x39,0x7C,0xCE,0x68,0x3A,0x9F,0xBE }
+
+
+EFI_FORWARD_DECLARATION (EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL);
+
+
+//
+// EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ATTRIBUTES
+//
+
+// If this bit is set, then the PCI Root Bridge does not
+// support separate windows for Non-prefetchable and Prefetchable
+// memory. A PCI bus driver needs to include requests for Prefetchable
+// memory in the Non-prefetchable memory pool.
+//
+#define EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM 1
+
+//
+// If this bit is set, then the PCI Root Bridge supports
+// 64 bit memory windows. If this bit is not set,
+// the PCI bus driver needs to include requests for 64 bit
+// memory address in the corresponding 32 bit memory pool.
+//
+#define EFI_PCI_HOST_BRIDGE_MEM64_DECODE 2
+
+
+//
+// EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE
+//
+typedef enum {
+ EfiPciHostBridgeBeginEnumeration,
+ EfiPciHostBridgeBeginBusAllocation,
+ EfiPciHostBridgeEndBusAllocation,
+ EfiPciHostBridgeBeginResourceAllocation,
+ EfiPciHostBridgeAllocateResources,
+ EfiPciHostBridgeSetResources,
+ EfiPciHostBridgeFreeResources,
+ EfiPciHostBridgeEndResourceAllocation
+} EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE;
+
+//
+// EfiPciHostBridgeBeginEnumeration
+// Reset the host bridge PCI apertures and internal data structures.
+// PCI enumerator should issue this notification before starting fresh
+// enumeration process. Enumeration cannot be restarted after sending
+// any other notification such as EfiPciHostBridgeBeginBusAllocation.
+//
+// EfiPciHostBridgeBeginBusAllocation
+// The bus allocation phase is about to begin. No specific action
+// is required here. This notification can be used to perform any
+// chipset specific programming.
+//
+// EfiPciHostBridgeEndBusAllocation
+// The bus allocation and bus programming phase is complete. No specific
+// action is required here. This notification can be used to perform any
+// chipset specific programming.
+//
+// EfiPciHostBridgeBeginResourceAllocation
+// The resource allocation phase is about to begin.No specific action is
+// required here. This notification can be used to perform any chipset specific programming.
+//
+// EfiPciHostBridgeAllocateResources
+// Allocate resources per previously submitted requests for all the PCI Root
+// Bridges. These resource settings are returned on the next call to
+// GetProposedResources().
+//
+// EfiPciHostBridgeSetResources
+// Program the Host Bridge hardware to decode previously allocated resources
+// (proposed resources) for all the PCI Root Bridges.
+//
+// EfiPciHostBridgeFreeResources
+// De-allocate previously allocated resources previously for all the PCI
+// Root Bridges and reset the I/O and memory apertures to initial state.
+//
+// EfiPciHostBridgeEndResourceAllocation
+// The resource allocation phase is completed. No specific action is required
+// here. This notification can be used to perform any chipset specific programming.
+
+
+
+//
+// EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE
+//
+typedef enum {
+ EfiPciBeforeChildBusEnumeration,
+ EfiPciBeforeResourceCollection
+} EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE;
+
+//
+// EfiPciBeforeChildBusEnumeration
+// This notification is only applicable to PCI-PCI bridges and
+// indicates that the PCI enumerator is about to begin enumerating
+// the bus behind the PCI-PCI Bridge. This notification is sent after
+// the primary bus number, the secondary bus number and the subordinate
+// bus number registers in the PCI-PCI Bridge are programmed to valid
+// (not necessary final) values
+//
+// EfiPciBeforeResourceCollection
+// This notification is sent before the PCI enumerator probes BAR registers
+// for every valid PCI function.
+//
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_NOTIFY_PHASE) (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase
+ );
+/*++
+
+Routine Description:
+ Enter a certain phase of the PCI enumeration process
+
+Arguments:
+ This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL instance
+ Phase -- The phase during enumeration
+
+Returns:
+ EFI_SUCCESS - Success
+ EFI_OUT_OF_RESOURCES - If SubmitResources ( ) could not allocate resources
+ EFI_NOT_READY - This phase cannot be entered at this time
+ EFI_DEVICE_ERROR - SetResources failed due to HW error.
+
+--*/
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_NEXT_ROOT_BRIDGE) (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN OUT EFI_HANDLE *RootBridgeHandle
+ );
+/*++
+
+Routine Description:
+ Return the device handle of the next PCI root bridge that is associated with
+ this Host Bridge
+
+Arguments:
+ This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ RootBridgeHandle -- Returns the device handle of the next PCI Root Bridge.
+ On input, it holds the RootBridgeHandle returned by the most
+ recent call to GetNextRootBridge().The handle for the first
+ PCI Root Bridge is returned if RootBridgeHandle is NULL on input
+
+Returns:
+ EFI_SUCCESS - Success
+ EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
+
+--*/
+
+
+typedef
+EFI_STATUS
+(EFIAPI * EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_ATTRIBUTES) (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ OUT UINT64 *Attributes
+ );
+/*++
+
+Routine Description:
+ Returns the attributes of a PCI Root Bridge.
+
+Arguments:
+ This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ RootBridgeHandle -- The device handle of the PCI Root Bridge
+ that the caller is interested in
+ Attribute -- The pointer to attributes of the PCI Root Bridge
+
+Returns:
+ EFI_SUCCESS - Success
+ EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
+ EFI_INVALID_PARAMETER - Attributes is NULL
+
+--*/
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_START_BUS_ENUMERATION) (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ OUT VOID **Configuration
+ );
+/*++
+
+Routine Description:
+ This is the request from the PCI enumerator to set up
+ the specified PCI Root Bridge for bus enumeration process.
+
+Arguments:
+ This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ RootBridgeHandle -- The PCI Root Bridge to be set up
+ Configuration -- Pointer to the pointer to the PCI bus resource descriptor
+
+Returns:
+ EFI_SUCCESS - Success
+ EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
+ EFI_DEVICE_ERROR - Request failed due to hardware error
+ EFI_OUT_OF_RESOURCES - Request failed due to lack of resources
+--*/
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SET_BUS_NUMBERS) (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN VOID *Configuration
+ );
+/*++
+
+Routine Description:
+ This function programs the PCI Root Bridge hardware so that
+ it decodes the specified PCI bus range
+
+Arguments:
+ This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ RootBridgeHandle -- The PCI Root Bridge whose bus range is to be programmed
+ Configuration -- The pointer to the PCI bus resource descriptor
+
+Returns:
+ EFI_SUCCESS - Success
+ EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
+ EFI_INVALID_PARAMETER - Configuration is NULL
+ EFI_INVALID_PARAMETER - Configuration does not point to a valid ACPI resource descriptor
+ EFI_INVALID_PARAMETER - Configuration contains one or more memory or IO ACPI resource descriptor
+ EFI_INVALID_PARAMETER - Address Range Minimum or Address Range Length fields in Configuration
+ are invalid for this Root Bridge.
+ EFI_INVALID_PARAMETER - Configuration contains one or more invalid ACPI resource descriptor
+ EFI_DEVICE_ERROR - Request failed due to hardware error
+ EFI_OUT_OF_RESOURCES - Request failed due to lack of resources
+
+--*/
+
+
+typedef
+EFI_STATUS
+(EFIAPI * EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SUBMIT_RESOURCES) (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN VOID *Configuration
+ );
+/*++
+
+Routine Description:
+ Submits the I/O and memory resource requirements for the specified PCI Root Bridge
+
+Arguments:
+ This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ RootBridgeHandle -- The PCI Root Bridge whose I/O and memory resource requirements
+ are being submitted
+ Configuration -- The pointer to the PCI I/O and PCI memory resource descriptor
+Returns:
+ EFI_SUCCESS - Success
+ EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
+ EFI_INVALID_PARAMETER - Configuration is NULL
+ EFI_INVALID_PARAMETER - Configuration does not point to a valid ACPI resource descriptor
+ EFI_INVALID_PARAMETER - Configuration includes a resource descriptor of unsupported type
+
+--*/
+
+
+typedef
+EFI_STATUS
+(EFIAPI * EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_PROPOSED_RESOURCES) (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ OUT VOID **Configuration
+ );
+/*++
+
+Routine Description:
+ This function returns the proposed resource settings for the specified
+ PCI Root Bridge
+
+Arguments:
+ This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ RootBridgeHandle -- The PCI Root Bridge handle
+ Configuration -- The pointer to the pointer to the PCI I/O
+ and memory resource descriptor
+
+Returns:
+ EFI_SUCCESS - Success
+ EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
+ EFI_DEVICE_ERROR - Request failed due to hardware error
+ EFI_OUT_OF_RESOURCES - Request failed due to lack of resources
+
+--*/
+
+
+
+typedef
+EFI_STATUS
+(EFIAPI * EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_PREPROCESS_CONTROLLER) (
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
+ IN EFI_HANDLE RootBridgeHandle,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase
+ );
+/*++
+
+Routine Description:
+ This function is called for all the PCI controllers that the PCI
+ bus driver finds. Can be used to Preprogram the controller.
+
+Arguments:
+ This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
+ RootBridgeHandle -- The PCI Root Bridge handle
+ PciBusAddress -- Address of the controller on the PCI bus
+ Phase -- The Phase during resource allocation
+
+Returns:
+ EFI_SUCCESS - Success
+ EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
+ EFI_DEVICE_ERROR - Device pre-initialization failed due to hardware error.
+--*/
+
+
+
+typedef struct _EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL {
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_NOTIFY_PHASE NotifyPhase;
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_NEXT_ROOT_BRIDGE GetNextRootBridge;
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_ATTRIBUTES GetAllocAttributes;
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_START_BUS_ENUMERATION StartBusEnumeration;
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SET_BUS_NUMBERS SetBusNumbers;
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SUBMIT_RESOURCES SubmitResources;
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_PROPOSED_RESOURCES GetProposedResources;
+ EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_PREPROCESS_CONTROLLER PreprocessController;
+} EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL;
+
+extern EFI_GUID gEfiPciHostBridgeResourceAllocationProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/PciHotPlugInit/PciHotPlugInit.c b/EDK/Foundation/Framework/Protocol/PciHotPlugInit/PciHotPlugInit.c
new file mode 100644
index 0000000..6f30668
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/PciHotPlugInit/PciHotPlugInit.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PciHotPlugInit.c
+
+Abstract:
+
+ EFI PCI Hot Plug Init Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (PciHotPlugInit)
+
+EFI_GUID gEfiPciHotPlugInitProtocolGuid = EFI_PCI_HOT_PLUG_INIT_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiPciHotPlugInitProtocolGuid, "PCI Hot Plug Init Protocol", "PCI Hot Plug Init Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/PciHotPlugInit/PciHotPlugInit.h b/EDK/Foundation/Framework/Protocol/PciHotPlugInit/PciHotPlugInit.h
new file mode 100644
index 0000000..732b658
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/PciHotPlugInit/PciHotPlugInit.h
@@ -0,0 +1,97 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ PciHotPlugInit.h
+
+Abstract:
+
+ EFI PCI Hot Plug Init Protocol
+
+Revision History
+
+--*/
+
+#ifndef _EFI_PCI_HOT_PLUG_INIT_H
+#define _EFI_PCI_HOT_PLUG_INIT_H
+
+//
+// Global ID for the PCI Hot Plug Protocol
+//
+#define EFI_PCI_HOT_PLUG_INIT_PROTOCOL_GUID \
+ { 0xaa0e8bc1, 0xdabc, 0x46b0, 0xa8, 0x44, 0x37, 0xb8, 0x16, 0x9b, 0x2b, 0xea }
+
+
+EFI_FORWARD_DECLARATION (EFI_PCI_HOT_PLUG_INIT_PROTOCOL);
+
+#define EFI_HPC_STATE_INITIALIZED 0x01
+#define EFI_HPC_STATE_ENABLED 0x02
+
+typedef UINT16 EFI_HPC_STATE;
+
+
+typedef struct{
+ EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *HpbDevicePath;
+} EFI_HPC_LOCATION;
+
+
+typedef enum{
+ EfiPaddingPciBus,
+ EfiPaddingPciRootBridge
+} EFI_HPC_PADDING_ATTRIBUTES;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_GET_ROOT_HPC_LIST) (
+ IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,
+ OUT UINTN *HpcCount,
+ OUT EFI_HPC_LOCATION **HpcList
+);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_INITIALIZE_ROOT_HPC) (
+ IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,
+ IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,
+ IN UINT64 HpcPciAddress,
+ IN EFI_EVENT Event, OPTIONAL
+ OUT EFI_HPC_STATE *HpcState
+);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_GET_PCI_HOT_PLUG_PADDING) (
+ IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,
+ IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,
+ IN UINT64 HpcPciAddress,
+ OUT EFI_HPC_STATE *HpcState,
+ OUT VOID **Padding,
+ OUT EFI_HPC_PADDING_ATTRIBUTES *Attributes
+);
+
+
+//
+// Prototypes for the PCI Hot Plug Init Protocol
+//
+
+
+typedef struct _EFI_PCI_HOT_PLUG_INIT_PROTOCOL {
+ EFI_GET_ROOT_HPC_LIST GetRootHpcList;
+ EFI_INITIALIZE_ROOT_HPC InitializeRootHpc;
+ EFI_GET_PCI_HOT_PLUG_PADDING GetResourcePadding;
+} EFI_PCI_HOT_PLUG_INIT_PROTOCOL;
+
+
+extern EFI_GUID gEfiPciHotPlugInitProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/PciPlatform/PciPlatform.c b/EDK/Foundation/Framework/Protocol/PciPlatform/PciPlatform.c
new file mode 100644
index 0000000..d1d417d
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/PciPlatform/PciPlatform.c
@@ -0,0 +1,26 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+ PciPlatform.c
+
+Abstract:
+ This file defines global GUID variables for PlatformOpRom protocols.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_PRODUCER (PciPlatform)
+
+
+EFI_GUID gEfiPciPlatformProtocolGuid = EFI_PCI_PLATFORM_PROTOCOL_GUID;
+
+EFI_GUID_STRING (&gEfiPciPlatformProtocolGuid, "Pci Platform Protocol", "Pci Platform Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/PciPlatform/PciPlatform.h b/EDK/Foundation/Framework/Protocol/PciPlatform/PciPlatform.h
new file mode 100644
index 0000000..8beebfd
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/PciPlatform/PciPlatform.h
@@ -0,0 +1,211 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+ PciPlatform.h
+
+Abstract:
+ This file declares PlatfromOpRom protocols.
+
+--*/
+
+#ifndef _PCI_PLATFORM_H_
+#define _PCI_PLATFORM_H_
+
+
+#include "Tiano.h"
+#include "TianoTypes.h"
+
+#include EFI_PROTOCOL_DEFINITION (PciHostBridgeResourceAllocation)
+#include EFI_PROTOCOL_DEFINITION (PciRootBridgeIo)
+
+//
+// Protocol for GUID.
+//
+
+#define EFI_PCI_PLATFORM_PROTOCOL_GUID \
+{ 0x7d75280, 0x27d4, 0x4d69, 0x90, 0xd0, 0x56, 0x43, 0xe2, 0x38, 0xb3, 0x41}
+
+
+EFI_FORWARD_DECLARATION (EFI_PCI_PLATFORM_PROTOCOL);
+
+typedef UINT32 EFI_PCI_PLATFORM_POLICY;
+
+
+#define EFI_RESERVE_NONE_IO_ALIAS 0x0000
+#define EFI_RESERVE_ISA_IO_ALIAS 0x0001
+#define EFI_RESERVE_ISA_IO_NO_ALIAS 0x0002
+#define EFI_RESERVE_VGA_IO_ALIAS 0x0004
+#define EFI_RESERVE_VGA_IO_NO_ALIAS 0x0008
+
+
+typedef enum {
+ ChipsetEntry,
+ ChipsetExit,
+ MaximumChipsetPhase
+} EFI_PCI_CHIPSET_EXECUTION_PHASE;
+
+
+typedef
+EFI_STATUS
+(EFIAPI * EFI_PCI_PLATFORM_PHASE_NOTIFY) (
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE HostBridge,
+ IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase,
+ IN EFI_PCI_CHIPSET_EXECUTION_PHASE ChipsetPhase
+)
+/*++
+
+ Routine Description:
+ The PlatformNotify() function can be used to notify the platform driver so that
+ it can perform platform-specific actions. No specific actions are required.
+ Eight notification points are defined at this time. More synchronization points
+ may be added as required in the future. The PCI bus driver calls the platform driver
+ twice for every Phase-once before the PCI Host Bridge Resource Allocation Protocol
+ driver is notified, and once after the PCI Host Bridge Resource Allocation Protocol
+ driver has been notified.
+ This member function may not perform any error checking on the input parameters. It
+ also does not return any error codes. If this member function detects any error condition,
+ it needs to handle those errors on its own because there is no way to surface any
+ errors to the caller.
+
+ Arguments:
+ This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ HostBridge - The handle of the host bridge controller.
+ Phase - The phase of the PCI bus enumeration.
+ ChipsetPhase - Defines the execution phase of the PCI chipset driver.
+
+ Returns:
+ EFI_SUCCESS - The function completed successfully.
+
+--*/
+;
+
+
+typedef
+EFI_STATUS
+(EFIAPI * EFI_PCI_PLATFORM_PREPROCESS_CONTROLLER) (
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE HostBridge,
+ IN EFI_HANDLE RootBridge,
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress,
+ IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase,
+ IN EFI_PCI_CHIPSET_EXECUTION_PHASE ChipsetPhase
+)
+/*++
+
+ Routine Description:
+ The PlatformPrepController() function can be used to notify the platform driver so that
+ it can perform platform-specific actions. No specific actions are required.
+ Several notification points are defined at this time. More synchronization points may be
+ added as required in the future. The PCI bus driver calls the platform driver twice for
+ every PCI controller-once before the PCI Host Bridge Resource Allocation Protocol driver
+ is notified, and once after the PCI Host Bridge Resource Allocation Protocol driver has
+ been notified.
+ This member function may not perform any error checking on the input parameters. It also
+ does not return any error codes. If this member function detects any error condition, it
+ needs to handle those errors on its own because there is no way to surface any errors to
+ the caller.
+
+ Arguments:
+ This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ HostBridge - The associated PCI host bridge handle.
+ RootBridge - The associated PCI root bridge handle.
+ PciAddress - The address of the PCI device on the PCI bus.
+ Phase - The phase of the PCI controller enumeration.
+ ChipsetPhase - Defines the execution phase of the PCI chipset driver.
+
+ Returns:
+ EFI_SUCCESS - The function completed successfully.
+
+--*/
+;
+
+
+typedef
+EFI_STATUS
+(EFIAPI * EFI_PCI_PLATFORM_GET_PLATFORM_POLICY) (
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ OUT EFI_PCI_PLATFORM_POLICY *PciPolicy
+)
+/*++
+
+ Routine Description:
+ The GetPlatformPolicy() function retrieves the platform policy regarding PCI
+ enumeration. The PCI bus driver and the PCI Host Bridge Resource Allocation Protocol
+ driver can call this member function to retrieve the policy.
+
+ Arguments:
+ This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ PciPolicy - The platform policy with respect to VGA and ISA aliasing.
+
+ Returns:
+ EFI_SUCCESS - The function completed successfully.
+ EFI_INVALID_PARAMETER - PciPolicy is NULL.
+
+--*/
+;
+
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PCI_PLATFORM_GET_PCI_ROM) (
+ IN EFI_PCI_PLATFORM_PROTOCOL *This,
+ IN EFI_HANDLE PciHandle,
+ OUT VOID **RomImage,
+ OUT UINTN *RomSize
+)
+/*++
+
+ Routine Description:
+ The GetPciRom() function gets the PCI device's option ROM from a platform-specific location.
+ The option ROM will be loaded into memory. This member function is used to return an image
+ that is packaged as a PCI 2.2 option ROM. The image may contain both legacy and EFI option
+ ROMs. See the EFI 1.10 Specification for details. This member function can be used to return
+ option ROM images for embedded controllers. Option ROMs for embedded controllers are typically
+ stored in platform-specific storage, and this member function can retrieve it from that storage
+ and return it to the PCI bus driver. The PCI bus driver will call this member function before
+ scanning the ROM that is attached to any controller, which allows a platform to specify a ROM
+ image that is different from the ROM image on a PCI card.
+
+ Arguments:
+ This - Pointer to the EFI_PCI_PLATFORM_PROTOCOL instance.
+ PciHandle - The handle of the PCI device.
+ RomImage - If the call succeeds, the pointer to the pointer to the option ROM image.
+ Otherwise, this field is undefined. The memory for RomImage is allocated
+ by EFI_PCI_PLATFORM_PROTOCOL.GetPciRom() using the EFI Boot Service AllocatePool().
+ It is the caller's responsibility to free the memory using the EFI Boot Service
+ FreePool(), when the caller is done with the option ROM.
+ RomSize - If the call succeeds, a pointer to the size of the option ROM size. Otherwise,
+ this field is undefined.
+
+ Returns:
+ EFI_SUCCESS - The option ROM was available for this device and loaded into memory.
+ EFI_NOT_FOUND - No option ROM was available for this device.
+ EFI_OUT_OF_RESOURCES - No memory was available to load the option ROM.
+ EFI_DEVICE_ERROR - An error occurred in getting the option ROM.
+
+--*/
+;
+
+
+typedef struct _EFI_PCI_PLATFORM_PROTOCOL {
+ EFI_PCI_PLATFORM_PHASE_NOTIFY PhaseNotify;
+ EFI_PCI_PLATFORM_PREPROCESS_CONTROLLER PlatformPrepController;
+ EFI_PCI_PLATFORM_GET_PLATFORM_POLICY GetPlatformPolicy;
+ EFI_PCI_PLATFORM_GET_PCI_ROM GetPciRom;
+} EFI_PCI_PLATFORM_PROTOCOL;
+
+extern EFI_GUID gEfiPciPlatformProtocolGuid;
+
+
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SectionExtraction/SectionExtraction.c b/EDK/Foundation/Framework/Protocol/SectionExtraction/SectionExtraction.c
new file mode 100644
index 0000000..aaad016
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SectionExtraction/SectionExtraction.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ SectionExtraction.c
+
+Abstract:
+
+ Section Extraction protocol as defined in the Tiano File Image Format
+ specification.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SectionExtraction)
+
+EFI_GUID gEfiSectionExtractionProtocolGuid = EFI_SECTION_EXTRACTION_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiSectionExtractionProtocolGuid, "Section Extraction Protocol", "Tiano Section Extraction Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SectionExtraction/SectionExtraction.h b/EDK/Foundation/Framework/Protocol/SectionExtraction/SectionExtraction.h
new file mode 100644
index 0000000..9d46b86
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SectionExtraction/SectionExtraction.h
@@ -0,0 +1,83 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ SectionExtraction.h
+
+Abstract:
+
+ Section extraction protocol as defined in the Tiano File Image Format specification.
+
+ This interface provides a means of decoding a set of sections into a linked list of
+ leaf sections. This provides for an extensible and flexible file format.
+
+--*/
+
+#ifndef _SECTION_EXTRACTION_PROTOCOL_H
+#define _SECTION_EXTRACTION_PROTOCOL_H
+
+#include "EfiFirmwareFileSystem.h"
+
+//
+// Protocol GUID definition
+//
+#define EFI_SECTION_EXTRACTION_PROTOCOL_GUID \
+ { \
+ 0x448F5DA4, 0x6DD7, 0x4FE1, 0x93, 0x07, 0x69, 0x22, 0x41, 0x92, 0x21, 0x5D \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SECTION_EXTRACTION_PROTOCOL);
+
+//
+// Protocol member functions
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_OPEN_SECTION_STREAM) (
+ IN EFI_SECTION_EXTRACTION_PROTOCOL * This,
+ IN UINTN SectionStreamLength,
+ IN VOID *SectionStream,
+ OUT UINTN *SectionStreamHandle
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_GET_SECTION) (
+ IN EFI_SECTION_EXTRACTION_PROTOCOL * This,
+ IN UINTN SectionStreamHandle,
+ IN EFI_SECTION_TYPE * SectionType,
+ IN EFI_GUID * SectionDefinitionGuid,
+ IN UINTN SectionInstance,
+ IN VOID **Buffer,
+ IN OUT UINTN *BufferSize,
+ OUT UINT32 *AuthenticationStatus
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_CLOSE_SECTION_STREAM) (
+ IN EFI_SECTION_EXTRACTION_PROTOCOL * This,
+ IN UINTN SectionStreamHandle
+ );
+
+//
+// Protocol definition
+//
+typedef struct _EFI_SECTION_EXTRACTION_PROTOCOL {
+ EFI_OPEN_SECTION_STREAM OpenSectionStream;
+ EFI_GET_SECTION GetSection;
+ EFI_CLOSE_SECTION_STREAM CloseSectionStream;
+} EFI_SECTION_EXTRACTION_PROTOCOL;
+
+extern EFI_GUID gEfiSectionExtractionProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SecurityPolicy/SecurityPolicy.c b/EDK/Foundation/Framework/Protocol/SecurityPolicy/SecurityPolicy.c
new file mode 100644
index 0000000..e2c38af
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SecurityPolicy/SecurityPolicy.c
@@ -0,0 +1,28 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ SecurityPolicy.c
+
+Abstract:
+
+ Security Policy protocol as defined in the DXE CIS
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SecurityPolicy)
+
+EFI_GUID gEfiSecurityPolicyProtocolGuid = EFI_SECURITY_POLICY_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiSecurityPolicyProtocolGuid, "Security Policy protocol", "Security Policy protocol");
+
diff --git a/EDK/Foundation/Framework/Protocol/SecurityPolicy/SecurityPolicy.h b/EDK/Foundation/Framework/Protocol/SecurityPolicy/SecurityPolicy.h
new file mode 100644
index 0000000..56feac9
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SecurityPolicy/SecurityPolicy.h
@@ -0,0 +1,33 @@
+/*++
+
+Copyright (c) 2004, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ SecurityPolicy.h
+
+Abstract:
+
+ Security Policy protocol as defined in the DXE CIS
+
+--*/
+
+#ifndef _SECURITY_POLICY_H_
+#define _SECURITY_POLICY_H_
+
+//
+// Security policy protocol GUID definition
+//
+#define EFI_SECURITY_POLICY_PROTOCOL_GUID \
+ {0x78E4D245, 0xCD4D, 0x4a05, 0xA2, 0xBA, 0x47, 0x43, 0xE8, 0x6C, 0xFC, 0xAB}
+
+extern EFI_GUID gEfiSecurityPolicyProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/Smbus/Smbus.c b/EDK/Foundation/Framework/Protocol/Smbus/Smbus.c
new file mode 100644
index 0000000..ecdbe14
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/Smbus/Smbus.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmBus.c
+
+Abstract:
+
+ EFI SMBUS Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+
+#include EFI_PROTOCOL_DEFINITION (Smbus)
+
+EFI_GUID gEfiSmbusProtocolGuid = EFI_SMBUS_HC_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiSmbusProtocolGuid, "SMBUS Protocol", "EFI 2.0 SMBUS Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/Smbus/Smbus.h b/EDK/Foundation/Framework/Protocol/Smbus/Smbus.h
new file mode 100644
index 0000000..067823f
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/Smbus/Smbus.h
@@ -0,0 +1,108 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ Smbus.h
+
+Abstract:
+
+ EFI SMBUS Protocol
+
+--*/
+
+#ifndef _EFI_SMBUS_H
+#define _EFI_SMBUS_H
+
+#include "EfiSmbus.h"
+
+#define EFI_SMBUS_HC_PROTOCOL_GUID \
+ { \
+ 0xe49d33ed, 0x513d, 0x4634, 0xb6, 0x98, 0x6f, 0x55, 0xaa, 0x75, 0x1c, 0x1b \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SMBUS_HC_PROTOCOL);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMBUS_HC_EXECUTE_OPERATION) (
+ IN EFI_SMBUS_HC_PROTOCOL * This,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN EFI_SMBUS_DEVICE_COMMAND Command,
+ IN EFI_SMBUS_OPERATION Operation,
+ IN BOOLEAN PecCheck,
+ IN OUT UINTN *Length,
+ IN OUT VOID *Buffer
+ );
+
+//;;## ...AMI_OVERRIDE... Support PI1.x typedef struct {
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT32 VendorSpecificId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 SubsystemDeviceId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 SubsystemVendorId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 Interface;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 DeviceId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT16 VendorId;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT8 VendorRevision;
+//;;## ...AMI_OVERRIDE... Support PI1.x UINT8 DeviceCapabilities;
+//;;## ...AMI_OVERRIDE... Support PI1.x } EFI_SMBUS_UDID;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMBUS_NOTIFY_FUNCTION) (
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN UINTN Data
+ );
+
+//
+// If ArpAll is TRUE, SmbusUdid/SlaveAddress is Optional.
+// If FALSE, ArpDevice will enum SmbusUdid and the address will be at SlaveAddress
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMBUS_HC_PROTOCOL_ARP_DEVICE) (
+ IN EFI_SMBUS_HC_PROTOCOL * This,
+ IN BOOLEAN ArpAll,
+ IN EFI_SMBUS_UDID * SmbusUdid, OPTIONAL
+ IN OUT EFI_SMBUS_DEVICE_ADDRESS * SlaveAddress OPTIONAL
+ );
+
+//;;## ...AMI_OVERRIDE... Support PI1.x typedef struct {
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;
+//;;## ...AMI_OVERRIDE... Support PI1.x EFI_SMBUS_UDID SmbusDeviceUdid;
+//;;## ...AMI_OVERRIDE... Support PI1.x } EFI_SMBUS_DEVICE_MAP;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMBUS_HC_PROTOCOL_GET_ARP_MAP) (
+ IN EFI_SMBUS_HC_PROTOCOL * This,
+ IN OUT UINTN *Length,
+ IN OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMBUS_HC_PROTOCOL_NOTIFY) (
+ IN EFI_SMBUS_HC_PROTOCOL * This,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN UINTN Data,
+ IN EFI_SMBUS_NOTIFY_FUNCTION NotifyFunction
+ );
+
+typedef struct _EFI_SMBUS_HC_PROTOCOL {
+ EFI_SMBUS_HC_EXECUTE_OPERATION Execute;
+ EFI_SMBUS_HC_PROTOCOL_ARP_DEVICE ArpDevice;
+ EFI_SMBUS_HC_PROTOCOL_GET_ARP_MAP GetArpMap;
+ EFI_SMBUS_HC_PROTOCOL_NOTIFY Notify;
+} EFI_SMBUS_HC_PROTOCOL;
+
+extern EFI_GUID gEfiSmbusProtocolGuid;
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmAccess/SmmAccess.c b/EDK/Foundation/Framework/Protocol/SmmAccess/SmmAccess.c
new file mode 100644
index 0000000..6a84d40
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmAccess/SmmAccess.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmAccess.c
+
+Abstract:
+
+ This file defines SMM SMRAM abstraction protocol defined by the
+ SMM Component Interface Specification
+
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmAccess)
+
+EFI_GUID gEfiSmmAccessProtocolGuid = EFI_SMM_ACCESS_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiSmmAccessProtocolGuid, "SMM Access Protocol", "SMM Access protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SmmAccess/SmmAccess.h b/EDK/Foundation/Framework/Protocol/SmmAccess/SmmAccess.h
new file mode 100644
index 0000000..9dddaca
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmAccess/SmmAccess.h
@@ -0,0 +1,92 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmAccess.h
+
+Abstract:
+
+ This file defines SMM SMRAM Access abstraction protocol defined
+ by the SMM CIS.
+
+--*/
+
+#ifndef _SMM_ACCESS_H_
+#define _SMM_ACCESS_H_
+
+#include EFI_GUID_DEFINITION (SmramMemoryReserve)
+
+EFI_FORWARD_DECLARATION (EFI_SMM_ACCESS_PROTOCOL);
+
+#define EFI_SMM_ACCESS_PROTOCOL_GUID \
+ { \
+ 0x3792095a, 0xe309, 0x4c1e, 0xaa, 0x01, 0x85, 0xf5, 0x65, 0x5a, 0x17, 0xf1 \
+ }
+
+//
+// SMM Access specification constant and types
+//
+// *******************************************************
+// EFI_SMRAM_STATE
+// *******************************************************
+//
+#define EFI_SMRAM_OPEN 0x00000001
+#define EFI_SMRAM_CLOSED 0x00000002
+#define EFI_SMRAM_LOCKED 0x00000004
+#define EFI_CACHEABLE 0x00000008
+#define EFI_ALLOCATED 0x00000010
+
+//
+// SMM Access specification Data Structures
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_OPEN) (
+ IN EFI_SMM_ACCESS_PROTOCOL * This,
+ UINTN DescriptorIndex
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_CLOSE) (
+ IN EFI_SMM_ACCESS_PROTOCOL * This,
+ UINTN DescriptorIndex
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_LOCK) (
+ IN EFI_SMM_ACCESS_PROTOCOL * This,
+ UINTN DescriptorIndex
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_CAPABILITIES) (
+ IN EFI_SMM_ACCESS_PROTOCOL * This,
+ IN OUT UINTN *SmramMapSize,
+ IN OUT EFI_SMRAM_DESCRIPTOR * SmramMap
+ );
+
+typedef struct _EFI_SMM_ACCESS_PROTOCOL {
+ EFI_SMM_OPEN Open;
+ EFI_SMM_CLOSE Close;
+ EFI_SMM_LOCK Lock;
+ EFI_SMM_CAPABILITIES GetCapabilities;
+ BOOLEAN LockState;
+ BOOLEAN OpenState;
+} EFI_SMM_ACCESS_PROTOCOL;
+
+extern EFI_GUID gEfiSmmAccessProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmBase/SmmBase.c b/EDK/Foundation/Framework/Protocol/SmmBase/SmmBase.c
new file mode 100644
index 0000000..0a3fd01
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmBase/SmmBase.c
@@ -0,0 +1,38 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmBase.c
+
+Abstract:
+
+ This file defines SMM Base abstraction protocol defined by the
+ SMM Component Interface Specification
+
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmBase)
+
+EFI_GUID gEfiSmmBaseProtocolGuid = EFI_SMM_BASE_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiSmmBaseProtocolGuid, "SMM Base Protocol", "SMM Base protocol");
+
+EFI_GUID gEfiSmmCpuIoGuid = EFI_SMM_CPU_IO_GUID;
+
+EFI_GUID_STRING(&gEfiSmmCpuIoGuid, "SMM CPU IO", "SMM CPU IO");
+
+EFI_GUID gEfiSmmCommunicateHeaderGuid = SMM_COMMUNICATE_HEADER_GUID;
+
+EFI_GUID_STRING(&gEfiSmmCommunicateHeaderGuid, "SMM Communicate Header Guid", "SMM Communicate Header Guid");
diff --git a/EDK/Foundation/Framework/Protocol/SmmBase/SmmBase.h b/EDK/Foundation/Framework/Protocol/SmmBase/SmmBase.h
new file mode 100644
index 0000000..19193be
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmBase/SmmBase.h
@@ -0,0 +1,797 @@
+/*++
+
+Copyright (c) 1999 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmBase.h
+
+Abstract:
+
+ This file defines SMM Base abstraction protocol defined by the SMM Architecture
+ Specification. This is the base level of compatiblity for SMM drivers.
+
+--*/
+
+#ifndef _SMM_BASE_H_
+#define _SMM_BASE_H_
+
+#include EFI_PROTOCOL_DEFINITION (DevicePath)
+
+#define EFI_SMM_BASE_PROTOCOL_GUID \
+ { \
+ 0x1390954D, 0xda95, 0x4227, 0x93, 0x28, 0x72, 0x82, 0xc2, 0x17, 0xda, 0xa8 \
+ }
+
+#define EFI_SMM_CPU_IO_GUID \
+ { \
+ 0x5f439a0b, 0x45d8, 0x4682, 0xa4, 0xf4, 0xf0, 0x57, 0x6b, 0x51, 0x34, 0x41 \
+ }
+
+#define SMM_COMMUNICATE_HEADER_GUID \
+ { \
+ 0xF328E36C, 0x23B6, 0x4a95, 0x85, 0x4B, 0x32, 0xE1, 0x95, 0x34, 0xCD, 0x75 \
+ }
+
+//
+// SMM Base specification constant and types
+//
+#define SMM_SMST_SIGNATURE EFI_SIGNATURE_32 ('S', 'M', 'S', 'T')
+#define EFI_SMM_SYSTEM_TABLE_REVISION (0 << 16) | (0x09)
+
+EFI_FORWARD_DECLARATION (EFI_SMM_BASE_PROTOCOL);
+EFI_FORWARD_DECLARATION (EFI_SMM_CPU_IO_INTERFACE);
+EFI_FORWARD_DECLARATION (EFI_SMM_CPU_SAVE_STATE);
+EFI_FORWARD_DECLARATION (EFI_SMM_OPTIONAL_FP_SAVE_STATE);
+EFI_FORWARD_DECLARATION (EFI_SMM_SYSTEM_TABLE);
+
+//
+// *******************************************************
+// EFI_SMM_IO_WIDTH
+// *******************************************************
+//
+typedef enum {
+ SMM_IO_UINT8 = 0,
+ SMM_IO_UINT16 = 1,
+ SMM_IO_UINT32 = 2,
+ SMM_IO_UINT64 = 3
+} EFI_SMM_IO_WIDTH;
+
+//
+// *******************************************************
+// EFI_SMM_IO_ACCESS
+// *******************************************************
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_CPU_IO) (
+ IN EFI_SMM_CPU_IO_INTERFACE * This,
+ IN EFI_SMM_IO_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ );
+
+typedef struct {
+ EFI_SMM_CPU_IO Read;
+ EFI_SMM_CPU_IO Write;
+} EFI_SMM_IO_ACCESS;
+
+typedef struct _EFI_SMM_CPU_IO_INTERFACE {
+ EFI_SMM_IO_ACCESS Mem;
+ EFI_SMM_IO_ACCESS Io;
+} EFI_SMM_CPU_IO_INTERFACE;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMMCORE_ALLOCATE_POOL) (
+ IN EFI_MEMORY_TYPE PoolType,
+ IN UINTN Size,
+ OUT VOID **Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMMCORE_FREE_POOL) (
+ IN VOID *Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMMCORE_ALLOCATE_PAGES) (
+ IN EFI_ALLOCATE_TYPE Type,
+ IN EFI_MEMORY_TYPE MemoryType,
+ IN UINTN NumberOfPages,
+ OUT EFI_PHYSICAL_ADDRESS * Memory
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMMCORE_FREE_PAGES) (
+ IN EFI_PHYSICAL_ADDRESS Memory,
+ IN UINTN NumberOfPages
+ );
+
+typedef
+VOID
+(EFIAPI *EFI_AP_PROCEDURE) (
+ IN VOID *Buffer
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_STARTUP_THIS_AP) (
+ IN EFI_AP_PROCEDURE Procedure,
+ IN UINTN CpuNumber,
+ IN OUT VOID *ProcArguments OPTIONAL
+ );
+
+typedef struct _EFI_SMM_CPU_SAVE_STATE {
+ UINT8 Reserved1[248];
+ UINT32 SMBASE;
+ UINT32 SMMRevId;
+ UINT16 IORestart;
+ UINT16 AutoHALTRestart;
+ UINT8 Reserved2[164];
+ UINT32 ES;
+ UINT32 CS;
+ UINT32 SS;
+ UINT32 DS;
+ UINT32 FS;
+ UINT32 GS;
+ UINT32 LDTBase;
+ UINT32 TR;
+ UINT32 DR7;
+ UINT32 DR6;
+ UINT32 EAX;
+ UINT32 ECX;
+ UINT32 EDX;
+ UINT32 EBX;
+ UINT32 ESP;
+ UINT32 EBP;
+ UINT32 ESI;
+ UINT32 EDI;
+ UINT32 EIP;
+ UINT32 EFLAGS;
+ UINT32 CR3;
+ UINT32 CR0;
+} EFI_SMM_CPU_SAVE_STATE;
+
+typedef struct {
+ UINT8 Reserved19[760]; // FC00
+ UINT32 SMBASE; // FEF8
+ UINT32 REVID; // FEFC
+ UINT16 HALT_RESTART; // FF00
+ UINT16 IO_RESTART; // FF02
+ UINT32 Reserved17[22]; // FF58, 54, 50, 4c, 48, 44, 40, 3c, 38, 34, 30, 2c, 28, 24, 20, 1c, 18, 14, 10, 0c, 08, 04
+ UINT32 EAX; // FF5C
+ UINT32 Reserved16; // FF60
+ UINT32 ECX; // FF64
+ UINT32 Reserved15; // FF68
+ UINT32 EDX; // FF6C
+ UINT32 Reserved14; // FF70
+ UINT32 EBX; // FF74
+ UINT32 Reserved13; // FF78
+ UINT32 ESP; // FF7C
+ UINT32 Reserved12; // FF80
+ UINT32 EBP; // FF84
+ UINT32 Reserved11; // FF88
+ UINT32 ESI; // FF8C
+ UINT32 Reserved9; // FF90
+ UINT32 EDI; // FF94
+ UINT32 Reserved8; // FF98
+ UINT32 IO_MEM_ADDR; // FF9C
+ UINT32 Reserved7; // FFA0
+ UINT32 IO_MISC; // FFA4
+ UINT32 ES_SEL; // FFA8
+ UINT32 CS_SEL; // FFAC
+ UINT32 SS_SEL; // FFB0
+ UINT32 DS_SEL; // FFB4
+ UINT32 FS_SEL; // FFB8
+ UINT32 GS_SEL; // FFBC
+ UINT32 LDTR_SEL; // FFC0
+ UINT32 TR_SEL; // FFC4
+ UINT32 DR7; // FFC8
+ UINT32 Reserved6; // FFCC
+ UINT32 DR6; // FFD0
+ UINT32 Reserved5; // FFD4
+ UINT32 EIP; // FFD8
+ UINT32 Reserved4; // FFDC
+ UINT32 EFER; // FFE0
+ UINT32 Reserved3; // FFE4
+ UINT32 EFLAGS; // FFE8
+ UINT32 Reserved2; // FFEC
+ UINT32 CR3; // FFF0
+ UINT32 Reserved1; // FFF4
+ UINT32 CR0; // FFF8
+ UINT32 Reserved0; // FFFC
+} EFI_SMM_CPU_CT_SAVE_STATE;
+
+typedef struct {
+ UINT8 Reserved26[464]; // FC00 - FDCF
+ UINT32 GdtrUpperBase; // FDD0
+ UINT32 LdtrUpperBase; // FDD4
+ UINT32 IdtrUpperBase; // FDD8
+ UINT32 Reserved25; // FDDC - FDDF
+ UINT64 IoRdi; // FDE0
+ UINT64 IoRip; // FDE8
+ UINT64 IoRcx; // FDF0
+ UINT64 IoRsi; // FDF8
+ UINT8 Reserved24[64]; // FE00 - FE3F
+ UINT64 Cr4; // FE40
+ UINT8 Reserved23[68]; // FE48 - FE8B
+ UINT32 GdtrBase; // FE8C
+ UINT32 Reserved22; // FE90
+ UINT32 IdtrBase; // FE94
+ UINT32 Reserved21; // FE98
+ UINT32 LdtrBase; // FE9C
+ UINT32 Reserved20; // FEA0
+ UINT8 Reserved19[84]; // FEA4 - FEF7
+ UINT32 Smbase; // FEF8
+ UINT32 RevId; // FEFC
+ UINT16 IoRestart; // FF00
+ UINT16 HaltRestart; // FF02
+ UINT8 Reserved18[24]; // FF04 - FF1B
+ UINT32 R15; // FF1C
+ UINT32 Reserved17; // FE20
+ UINT32 R14; // FF24
+ UINT32 Reserved16; // FE28
+ UINT32 R13; // FF2C
+ UINT32 Reserved15; // FE30
+ UINT32 R12; // FF34
+ UINT32 Reserved14; // FE38
+ UINT32 R11; // FF3C
+ UINT32 Reserved13; // FE40
+ UINT32 R10; // FF44
+ UINT32 Reserved12; // FE48
+ UINT32 R9; // FF4C
+ UINT32 Reserved11; // FE50
+ UINT32 R8; // FF54
+ UINT32 Reserved10; // FE58
+ UINT32 Rax; // FF5C
+ UINT32 Reserved9; // FE60
+ UINT32 Rcx; // FF64
+ UINT32 Reserved8; // FE68
+ UINT32 Rdx; // FF6C
+ UINT32 Reserved7; // FE70
+ UINT32 Rbx; // FF74
+ UINT32 Reserved6; // FE78
+ UINT32 Rsp; // FF7C
+ UINT32 Reserved5; // FE80
+ UINT32 Rbp; // FF84
+ UINT32 Reserved4; // FE88
+ UINT32 Rsi; // FF8C
+ UINT32 Reserved3; // FE90
+ UINT32 Rdi; // FF94
+ UINT32 Reserved2; // FE98
+ UINT32 IoMemAddr; // FF9C
+ UINT32 Reserved1; // FEA0
+ UINT32 IoMiscInfo; // FFA4
+ UINT32 EsSel; // FFA8
+ UINT32 CsSel; // FFAC
+ UINT32 SsSel; // FFB0
+ UINT32 DsSel; // FFB4
+ UINT32 FsSel; // FFB8
+ UINT32 GsSel; // FFBC
+ UINT32 LdtrSel; // FFC0
+ UINT32 TrSel; // FFC4
+ UINT64 Dr7; // FFC8
+ UINT64 Dr6; // FFD0
+ UINT32 Rip; // FFD8
+ UINT32 Reserved0; // FFDC
+ UINT64 Efr; // FFE0
+ UINT64 RFlags; // FFE8
+ UINT64 Cr3; // FFF0
+ UINT64 Cr0; // FFF8
+} EFI_SMM_CPU_MEROM_SAVE_STATE;
+
+
+typedef struct {
+ UINT8 Reserved14[0x228]; // FC00-FE28
+ UINT32 IO_EIP; // FE28
+ UINT8 Reserved13[0x14]; // FE2C-FE40
+ UINT32 CR4; // FE40
+ UINT8 Reserved12[0x48]; // FE44-FE8C
+ UINT32 GDT_BASE; // FE8C
+ UINT8 Reserved11[0xC]; // FE90-FE9C
+ UINT32 LDT_BASE; // FE9C
+ UINT8 Reserved10[0x58]; // FEA0-FEF8
+ UINT32 SMBASE;
+ UINT32 REVID;
+ UINT16 IO_RESTART;
+ UINT16 HALT_RESTART;
+ UINT8 Reserved9[0xA4];
+
+ UINT16 ES;
+ UINT16 Reserved8;
+ UINT16 CS;
+ UINT16 Reserved7;
+ UINT16 SS;
+ UINT16 Reserved6;
+ UINT16 DS;
+ UINT16 Reserved5;
+ UINT16 FS;
+ UINT16 Reserved4;
+ UINT16 GS;
+ UINT16 Reserved3;
+ UINT32 Reserved2;
+ UINT16 TR;
+ UINT16 Reserved1;
+ UINT32 DR7;
+ UINT32 DR6;
+ UINT32 EAX;
+ UINT32 ECX;
+ UINT32 EDX;
+ UINT32 EBX;
+ UINT32 ESP;
+ UINT32 EBP;
+ UINT32 ESI;
+ UINT32 EDI;
+ UINT32 EIP;
+ UINT32 EFLAGS;
+ UINT32 CR3;
+ UINT32 CR0;
+} EFI_SMM_CPU_CT_NOT_ENABLED_SAVE_STATE;
+
+typedef struct _EFI_SMM_OPTIONAL_FP_SAVE_STATE {
+ UINT16 Fcw;
+ UINT16 Fsw;
+ UINT16 Ftw;
+ UINT16 Opcode;
+ UINT32 Eip;
+ UINT16 Cs;
+ UINT16 Rsvd1;
+ UINT32 DataOffset;
+ UINT16 Ds;
+ UINT8 Rsvd2[10];
+ UINT8 St0Mm0[10], Rsvd3[6];
+ UINT8 St0Mm1[10], Rsvd4[6];
+ UINT8 St0Mm2[10], Rsvd5[6];
+ UINT8 St0Mm3[10], Rsvd6[6];
+ UINT8 St0Mm4[10], Rsvd7[6];
+ UINT8 St0Mm5[10], Rsvd8[6];
+ UINT8 St0Mm6[10], Rsvd9[6];
+ UINT8 St0Mm7[10], Rsvd10[6];
+ UINT8 Rsvd11[22 * 16];
+} EFI_SMM_OPTIONAL_FP_SAVE_STATE;
+
+typedef struct _EFI_SMM_OPTIONAL_FP_SAVE_STATE32 {
+ UINT16 Fcw;
+ UINT16 Fsw;
+ UINT16 Ftw;
+ UINT16 Opcode;
+ UINT32 Eip;
+ UINT16 Cs;
+ UINT16 Rsvd1;
+ UINT32 DataOffset;
+ UINT16 Ds;
+ UINT8 Reserved2[10];
+ UINT8 St0Mm0[10], Rsvd3[6];
+ UINT8 St1Mm1[10], Rsvd4[6];
+ UINT8 St2Mm2[10], Rsvd5[6];
+ UINT8 St3Mm3[10], Rsvd6[6];
+ UINT8 St4Mm4[10], Rsvd7[6];
+ UINT8 St5Mm5[10], Rsvd8[6];
+ UINT8 St6Mm6[10], Rsvd9[6];
+ UINT8 St7Mm7[10], Rsvd10[6];
+ UINT8 Xmm0[16];
+ UINT8 Xmm1[16];
+ UINT8 Xmm2[16];
+ UINT8 Xmm3[16];
+ UINT8 Xmm4[16];
+ UINT8 Xmm5[16];
+ UINT8 Xmm6[16];
+ UINT8 Xmm7[16];
+ UINT8 Rsvd11[14 * 16];
+} EFI_SMM_OPTIONAL_FP_SAVE_STATE32;
+
+typedef struct _EFI_SMM_OPTIONAL_FP_SAVE_STATE64 {
+ UINT16 Fcw;
+ UINT16 Fsw;
+ UINT16 Ftw;
+ UINT16 Opcode;
+ UINT64 Rip;
+ UINT64 DataOffset;
+ UINT8 Rsvd1[8];
+ UINT8 St0Mm0[10], Rsvd2[6];
+ UINT8 St1Mm1[10], Rsvd3[6];
+ UINT8 St2Mm2[10], Rsvd4[6];
+ UINT8 St3Mm3[10], Rsvd5[6];
+ UINT8 St4Mm4[10], Rsvd6[6];
+ UINT8 St5Mm5[10], Rsvd7[6];
+ UINT8 St6Mm6[10], Rsvd8[6];
+ UINT8 St7Mm7[10], Rsvd9[6];
+ UINT8 Xmm0[16];
+ UINT8 Xmm1[16];
+ UINT8 Xmm2[16];
+ UINT8 Xmm3[16];
+ UINT8 Xmm4[16];
+ UINT8 Xmm5[16];
+ UINT8 Xmm6[16];
+ UINT8 Xmm7[16];
+ UINT8 Xmm8[16];
+ UINT8 Xmm9[16];
+ UINT8 Xmm10[16];
+ UINT8 Xmm11[16];
+ UINT8 Xmm12[16];
+ UINT8 Xmm13[16];
+ UINT8 Xmm14[16];
+ UINT8 Xmm15[16];
+ UINT8 Rsvd10[6 * 16];
+} EFI_SMM_OPTIONAL_FP_SAVE_STATE64;
+
+struct _EFI_SMM_SYSTEM_TABLE;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_INSTALL_CONFIGURATION_TABLE) (
+ IN EFI_SMM_SYSTEM_TABLE * SystemTable,
+ IN EFI_GUID * Guid,
+ IN VOID *Table,
+ IN UINTN TableSize
+ )
+/*++
+
+ Routine Description:
+ The SmmInstallConfigurationTable() function is used to maintain the list
+ of configuration tables that are stored in the System Management System
+ Table. The list is stored as an array of (GUID, Pointer) pairs. The list
+ must be allocated from pool memory with PoolType set to EfiRuntimeServicesData.
+
+ Arguments:
+ SystemTable - A pointer to the SMM System Table.
+ Guid - A pointer to the GUID for the entry to add, update, or remove.
+ Table - A pointer to the buffer of the table to add.
+ TableSize - The size of the table to install.
+
+ Returns:
+ EFI_SUCCESS - The (Guid, Table) pair was added, updated, or removed.
+ EFI_INVALID_PARAMETER - Guid is not valid.
+ EFI_NOT_FOUND - An attempt was made to delete a non-existent entry.
+ EFI_OUT_OF_RESOURCES - There is not enough memory available to complete the operation.
+
+--*/
+;
+
+//
+// System Management System Table (SMST)
+//
+typedef struct _EFI_SMM_SYSTEM_TABLE {
+ EFI_TABLE_HEADER Hdr;
+
+ CHAR16 *SmmFirmwareVendor;
+ UINT32 SmmFirmwareRevision;
+
+ EFI_SMM_INSTALL_CONFIGURATION_TABLE SmmInstallConfigurationTable;
+
+ //
+ // I/O Services
+ //
+ EFI_GUID EfiSmmCpuIoGuid;
+ EFI_SMM_CPU_IO_INTERFACE SmmIo;
+
+ //
+ // Runtime memory service
+ //
+ EFI_SMMCORE_ALLOCATE_POOL SmmAllocatePool;
+ EFI_SMMCORE_FREE_POOL SmmFreePool;
+ EFI_SMMCORE_ALLOCATE_PAGES SmmAllocatePages;
+ EFI_SMMCORE_FREE_PAGES SmmFreePages;
+
+ //
+ // MP service
+ //
+ EFI_SMM_STARTUP_THIS_AP SmmStartupThisAp;
+
+ //
+ // CPU information records
+ //
+ UINTN CurrentlyExecutingCpu;
+ UINTN NumberOfCpus;
+ EFI_SMM_CPU_SAVE_STATE *CpuSaveState;
+ EFI_SMM_OPTIONAL_FP_SAVE_STATE *CpuOptionalFloatingPointState;
+
+ //
+ // Extensibility table
+ //
+ UINTN NumberOfTableEntries;
+ EFI_CONFIGURATION_TABLE *SmmConfigurationTable;
+
+} EFI_SMM_SYSTEM_TABLE;
+
+//
+// SMM Handler Definition
+//
+#define EFI_HANDLER_SUCCESS 0x0000
+#define EFI_HANDLER_CRITICAL_EXIT 0x0001
+#define EFI_HANDLER_SOURCE_QUIESCED 0x0002
+#define EFI_HANDLER_SOURCE_PENDING 0x0003
+
+//
+// Structure of Communicate Buffer
+//
+typedef struct {
+ EFI_GUID HeaderGuid;
+ UINTN MessageLength;
+ UINT8 Data[1];
+} EFI_SMM_COMMUNICATE_HEADER;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_HANDLER_ENTRY_POINT) (
+ IN EFI_HANDLE SmmImageHandle,
+ IN OUT VOID *CommunicationBuffer OPTIONAL,
+ IN OUT UINTN *SourceSize OPTIONAL
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_CALLBACK_ENTRY_POINT) (
+ IN EFI_HANDLE SmmImageHandle,
+ IN OUT VOID *CommunicationBuffer OPTIONAL,
+ IN OUT UINTN *SourceSize OPTIONAL
+ );
+
+typedef struct {
+ EFI_HANDLE SmmHandler;
+ EFI_DEVICE_PATH_PROTOCOL *HandlerDevicePath;
+} EFI_HANDLER_DESCRIPTOR;
+
+//
+// SMM Base Protocol Definition
+//
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_REGISTER_HANDLER) (
+ IN EFI_SMM_BASE_PROTOCOL * This,
+ IN EFI_DEVICE_PATH_PROTOCOL * FilePath,
+ IN VOID *SourceBuffer OPTIONAL,
+ IN UINTN SourceSize,
+ OUT EFI_HANDLE * ImageHandle,
+ IN BOOLEAN LegacyIA32Binary OPTIONAL
+ )
+/*++
+
+ Routine Description:
+ Register a given driver into SMRAM. This is the equivalent of performing
+ the LoadImage/StartImage into System Management Mode.
+
+ Arguments:
+ This - Protocol instance pointer.
+ SourceBuffer - Optional source buffer in case of the image file
+ being in memory.
+ SourceSize - Size of the source image file, if in memory.
+ ImageHandle - Pointer to the handle that reflects the driver
+ loaded into SMM.
+ LegacyIA32Binary - The binary image to load is legacy 16 bit code.
+
+ Returns:
+ EFI_SUCCESS - The operation was successful.
+ EFI_OUT_OF_RESOURCES - There were no additional SMRAM resources to load the handler
+ EFI_UNSUPPORTED - This platform does not support 16-bit handlers.
+ EFI_UNSUPPORTED - In runtime.
+ EFI_INVALID_PARAMETER - The handlers was not the correct image type
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_UNREGISTER_HANDLER) (
+ IN EFI_SMM_BASE_PROTOCOL * This,
+ IN EFI_HANDLE ImageHandle
+ )
+/*++
+
+ Routine Description:
+ Remove a given driver SMRAM. This is the equivalent of performing
+ the UnloadImage System Management Mode.
+
+ Arguments:
+ This - Protocol instance pointer.
+ ImageHandle - Pointer to the handle that reflects the driver
+ loaded into SMM.
+
+ Returns:
+ EFI_SUCCESS - The operation was successful
+ EFI_INVALID_PARAMETER - The handler did not exist
+ EFI_UNSUPPORTED - In runtime.
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_COMMUNICATE) (
+ IN EFI_SMM_BASE_PROTOCOL * This,
+ IN EFI_HANDLE ImageHandle,
+ IN OUT VOID *CommunicationBuffer,
+ IN OUT UINTN *SourceSize
+ )
+/*++
+
+ Routine Description:
+ The SMM Inter-module Communicate Service Communicate() function
+ provides a services to send/received messages from a registered
+ EFI service. The BASE protocol driver is responsible for doing
+ any of the copies such that the data lives in boot-service accessible RAM.
+
+ Arguments:
+ This - Protocol instance pointer.
+ ImageHandle - Pointer to the handle that reflects the driver
+ loaded into SMM.
+ CommunicationBuffer - Pointer to the buffer to convey into SMRAM.
+ SourceSize - Size of the contents of buffer..
+
+ Returns:
+ EFI_SUCCESS - The message was successfully posted
+ EFI_INVALID_PARAMETER - The buffer was NULL
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_CALLBACK_SERVICE) (
+ IN EFI_SMM_BASE_PROTOCOL * This,
+ IN EFI_HANDLE SmmImageHandle,
+ IN EFI_SMM_CALLBACK_ENTRY_POINT CallbackAddress,
+ IN BOOLEAN MakeLast OPTIONAL,
+ IN BOOLEAN FloatingPointSave OPTIONAL
+ )
+/*++
+
+ Routine Description:
+ Register a callback to execute within SMM.
+ This allows receipt of messages created with the Boot Service COMMUNICATE.
+
+ Arguments:
+ This - Protocol instance pointer.
+ CallbackAddress - Address of the callback service
+ MakeFirst - If present, will stipulate that the handler is posted
+ to be the first module executed in the dispatch table.
+ MakeLast - If present, will stipulate that the handler is posted
+ to be last executed in the dispatch table.
+ FloatingPointSave - This is an optional parameter which informs the
+ EFI_SMM_ACCESS_PROTOCOL Driver core if it needs to save
+ the floating point register state. If any of the handlers
+ require this, then the state will be saved for all of the handlers.
+
+ Returns:
+ EFI_SUCCESS - The operation was successful
+ EFI_OUT_OF_RESOURCES - Not enough space in the dispatch queue
+ EFI_UNSUPPORTED - In runtime.
+ EFI_UNSUPPORTED - Not in SMM.
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_ALLOCATE_POOL) (
+ IN EFI_SMM_BASE_PROTOCOL * This,
+ IN EFI_MEMORY_TYPE PoolType,
+ IN UINTN Size,
+ OUT VOID **Buffer
+ )
+/*++
+
+ Routine Description:
+ The SmmAllocatePool() function allocates a memory region of Size bytes from memory of
+ type PoolType and returns the address of the allocated memory in the location referenced
+ by Buffer. This function allocates pages from EFI SMRAM Memory as needed to grow the
+ requested pool type. All allocations are eight-byte aligned.
+
+ Arguments:
+ This - Protocol instance pointer.
+ PoolType - The type of pool to allocate.
+ The only supported type is EfiRuntimeServicesData;
+ the interface will internally map this runtime request to SMRAM.
+ Size - The number of bytes to allocate from the pool.
+ Buffer - A pointer to a pointer to the allocated buffer if the call
+ succeeds; undefined otherwise.
+
+ Returns:
+ EFI_SUCCESS - The requested number of bytes was allocated.
+ EFI_OUT_OF_RESOURCES - The pool requested could not be allocated.
+ EFI_INVALID_PARAMETER - PoolType was invalid.
+ EFI_UNSUPPORTED - In runtime.
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_FREE_POOL) (
+ IN EFI_SMM_BASE_PROTOCOL * This,
+ IN VOID *Buffer
+ )
+/*++
+
+ Routine Description:
+ The SmmFreePool() function returns the memory specified by Buffer to the system.
+ On return, the memory's type is EFI SMRAM Memory. The Buffer that is freed must
+ have been allocated by SmmAllocatePool().
+
+ Arguments:
+ This - Protocol instance pointer.
+ Buffer - Pointer to the buffer allocation.
+
+ Returns:
+ EFI_SUCCESS - The memory was returned to the system.
+ EFI_INVALID_PARAMETER - Buffer was invalid.
+ EFI_UNSUPPORTED - In runtime.
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_INSIDE_OUT) (
+ IN EFI_SMM_BASE_PROTOCOL * This,
+ OUT BOOLEAN *InSmm
+ )
+/*++
+
+ Routine Description:
+ This routine tells caller if execution context is SMM or not.
+
+ Arguments:
+ This - Protocol instance pointer.
+
+ Returns:
+ EFI_SUCCESS - The operation was successful
+
+--*/
+;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_GET_SMST_LOCATION) (
+ IN EFI_SMM_BASE_PROTOCOL * This,
+ IN OUT EFI_SMM_SYSTEM_TABLE **Smst
+ )
+/*++
+
+ Routine Description:
+ The GetSmstLocation() function returns the locatin of the System Management
+ Service Table. The use of the API is such that a driver can discover the
+ location of the SMST in its entry point and then cache it in some driver
+ global variable so that the SMST can be invoked in subsequent callbacks.
+
+ Arguments:
+ This - Protocol instance pointer.
+ Smst - Pointer to the SMST.
+
+ Returns:
+ EFI_SUCCESS - The operation was successful
+ EFI_INVALID_PARAMETER - Smst was invalid.
+ EFI_UNSUPPORTED - Not in SMM.
+
+--*/
+;
+
+typedef struct _EFI_SMM_BASE_PROTOCOL {
+ EFI_SMM_REGISTER_HANDLER Register;
+ EFI_SMM_UNREGISTER_HANDLER UnRegister;
+ EFI_SMM_COMMUNICATE Communicate;
+ EFI_SMM_CALLBACK_SERVICE RegisterCallback;
+ EFI_SMM_INSIDE_OUT InSmm;
+ EFI_SMM_ALLOCATE_POOL SmmAllocatePool;
+ EFI_SMM_FREE_POOL SmmFreePool;
+ EFI_SMM_GET_SMST_LOCATION GetSmstLocation;
+} EFI_SMM_BASE_PROTOCOL;
+
+extern EFI_GUID gEfiSmmBaseProtocolGuid;
+extern EFI_GUID gEfiSmmCpuIoGuid;
+extern EFI_GUID gEfiSmmCommunicateHeaderGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmControl/SmmControl.c b/EDK/Foundation/Framework/Protocol/SmmControl/SmmControl.c
new file mode 100644
index 0000000..78e1f61
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmControl/SmmControl.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmControl.c
+
+Abstract:
+
+ This file defines SMM Control abstraction protocol defined by the
+ SMM Component Interface Specification
+
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmControl)
+
+EFI_GUID gEfiSmmControlProtocolGuid = EFI_SMM_CONTROL_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiSmmControlProtocolGuid, "SMM Control Protocol", "SMM Control protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SmmControl/SmmControl.h b/EDK/Foundation/Framework/Protocol/SmmControl/SmmControl.h
new file mode 100644
index 0000000..ae7d691
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmControl/SmmControl.h
@@ -0,0 +1,79 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmControl.h
+
+Abstract:
+
+ This file defines SMM Control abstraction protocol defined
+ by the SMM CIS.
+
+--*/
+
+#ifndef _SMM_CONTROL_H_
+#define _SMM_CONTROL_H_
+
+EFI_FORWARD_DECLARATION (EFI_SMM_CONTROL_PROTOCOL);
+
+#define EFI_SMM_CONTROL_PROTOCOL_GUID \
+ { \
+ 0x8d12e231, 0xc667, 0x4fd1, 0x98, 0xf2, 0x24, 0x49, 0xa7, 0xe7, 0xb2, 0xe5 \
+ }
+
+//
+// SMM Control specification constant and types
+//
+// typedef EFI_SMM_PERIOD UINTN
+//
+// SMM Access specification Data Structures
+//
+typedef struct {
+ UINT8 SmiTriggerRegister;
+ UINT8 SmiDataRegister;
+} EFI_SMM_CONTROL_REGISTER;
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_ACTIVATE) (
+ IN EFI_SMM_CONTROL_PROTOCOL * This,
+ IN OUT INT8 *ArgumentBuffer OPTIONAL,
+ IN OUT UINTN *ArgumentBufferSize OPTIONAL,
+ IN BOOLEAN Periodic OPTIONAL,
+ IN UINTN ActivationInterval OPTIONAL
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_DEACTIVATE) (
+ IN EFI_SMM_CONTROL_PROTOCOL * This,
+ IN BOOLEAN Periodic OPTIONAL
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_GET_REGISTER_INFO) (
+ IN EFI_SMM_CONTROL_PROTOCOL * This,
+ IN OUT EFI_SMM_CONTROL_REGISTER * SmiRegister
+ );
+
+typedef struct _EFI_SMM_CONTROL_PROTOCOL {
+ EFI_SMM_ACTIVATE Trigger;
+ EFI_SMM_DEACTIVATE Clear;
+ EFI_SMM_GET_REGISTER_INFO GetRegisterInfo;
+ UINTN MinimumTriggerPeriod;
+} EFI_SMM_CONTROL_PROTOCOL;
+
+extern EFI_GUID gEfiSmmControlProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmCpuState/CpuSaveState.h b/EDK/Foundation/Framework/Protocol/SmmCpuState/CpuSaveState.h
new file mode 100644
index 0000000..1b5c774
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmCpuState/CpuSaveState.h
@@ -0,0 +1,150 @@
+/*++
+
+Copyright (c) 2005, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ CpuSaveState.h
+
+Abstract:
+
+ Define data structures used by EFI_SMM_CPU_SAVE_STATE protocol.
+
+Revision History
+
+++*/
+
+#ifndef _CPUSAVESTATE_H_
+#define _CPUSAVESTATE_H_
+
+typedef unsigned char ASM_UINT8;
+typedef ASM_UINT8 ASM_BOOL;
+typedef unsigned short ASM_UINT16;
+typedef unsigned long ASM_UINT32;
+
+#ifdef _H2INC
+typedef double ASM_UINT64;
+#else
+typedef unsigned __int64 ASM_UINT64;
+#endif
+
+#pragma pack (push)
+#pragma pack (1)
+
+typedef struct _EFI_SMM_CPU_STATE32 {
+ ASM_UINT8 Reserved1[0xf8]; // fe00h
+ ASM_UINT32 SMBASE; // fef8h
+ ASM_UINT32 SMMRevId; // fefch
+ ASM_UINT16 IORestart; // ff00h
+ ASM_UINT16 AutoHALTRestart; // ff02h
+ ASM_UINT32 IEDBASE; // ff04h
+ ASM_UINT8 Reserved2[0x98]; // ff08h
+ ASM_UINT32 IOMemAddr; // ffa0h
+ ASM_UINT32 IOMisc; // ffa4h
+ ASM_UINT32 _ES;
+ ASM_UINT32 _CS;
+ ASM_UINT32 _SS;
+ ASM_UINT32 _DS;
+ ASM_UINT32 _FS;
+ ASM_UINT32 _GS;
+ ASM_UINT32 _LDTBase;
+ ASM_UINT32 _TR;
+ ASM_UINT32 _DR7;
+ ASM_UINT32 _DR6;
+ ASM_UINT32 _EAX;
+ ASM_UINT32 _ECX;
+ ASM_UINT32 _EDX;
+ ASM_UINT32 _EBX;
+ ASM_UINT32 _ESP;
+ ASM_UINT32 _EBP;
+ ASM_UINT32 _ESI;
+ ASM_UINT32 _EDI;
+ ASM_UINT32 _EIP;
+ ASM_UINT32 _EFLAGS;
+ ASM_UINT32 _CR3;
+ ASM_UINT32 _CR0;
+} EFI_SMM_CPU_STATE32;
+
+typedef struct _EFI_SMM_CPU_STATE64 {
+ ASM_UINT8 Reserved1[0x1d0]; // fc00h
+ ASM_UINT32 GdtBaseHiDword; // fdd0h
+ ASM_UINT32 LdtBaseHiDword; // fdd4h
+ ASM_UINT32 IdtBaseHiDword; // fdd8h
+ ASM_UINT8 Reserved2[0xc]; // fddch
+ ASM_UINT64 IO_EIP; // fde8h
+ ASM_UINT8 Reserved3[0x50]; // fdf0h
+ ASM_UINT32 _CR4; // fe40h
+ ASM_UINT8 Reserved4[0x48]; // fe44h
+ ASM_UINT32 GdtBaseLoDword; // fe8ch
+ ASM_UINT32 GdtLimit; // fe90h
+ ASM_UINT32 IdtBaseLoDword; // fe94h
+ ASM_UINT32 IdtLimit; // fe98h
+ ASM_UINT32 LdtBaseLoDword; // fe9ch
+ ASM_UINT32 LdtLimit; // fea0h
+ ASM_UINT32 LdtInfo; // fea4h
+ ASM_UINT8 Reserved5[0x50]; // fea8h
+ ASM_UINT32 SMBASE; // fef8h
+ ASM_UINT32 SMMRevId; // fefch
+ ASM_UINT16 IORestart; // ff00h
+ ASM_UINT16 AutoHALTRestart; // ff02h
+ ASM_UINT32 IEDBASE; // ff04h
+ ASM_UINT8 Reserved6[0x14]; // ff08h
+ ASM_UINT64 _R15; // ff1ch
+ ASM_UINT64 _R14;
+ ASM_UINT64 _R13;
+ ASM_UINT64 _R12;
+ ASM_UINT64 _R11;
+ ASM_UINT64 _R10;
+ ASM_UINT64 _R9;
+ ASM_UINT64 _R8;
+ ASM_UINT64 _RAX; // ff5ch
+ ASM_UINT64 _RCX;
+ ASM_UINT64 _RDX;
+ ASM_UINT64 _RBX;
+ ASM_UINT64 _RSP;
+ ASM_UINT64 _RBP;
+ ASM_UINT64 _RSI;
+ ASM_UINT64 _RDI;
+ ASM_UINT64 IOMemAddr; // ff9ch
+ ASM_UINT32 IOMisc; // ffa4h
+ ASM_UINT32 _ES; // ffa8h
+ ASM_UINT32 _CS;
+ ASM_UINT32 _SS;
+ ASM_UINT32 _DS;
+ ASM_UINT32 _FS;
+ ASM_UINT32 _GS;
+ ASM_UINT32 _LDTR; // ffc0h
+ ASM_UINT32 _TR;
+ ASM_UINT64 _DR7; // ffc8h
+ ASM_UINT64 _DR6;
+ ASM_UINT64 _RIP; // ffd8h
+ ASM_UINT64 IA32_EFER; // ffe0h
+ ASM_UINT64 _RFLAGS; // ffe8h
+ ASM_UINT64 _CR3; // fff0h
+ ASM_UINT64 _CR0; // fff8h
+} EFI_SMM_CPU_STATE64;
+
+#pragma warning (push)
+#pragma warning (disable: 4201)
+typedef union _EFI_SMM_CPU_STATE {
+ struct {
+ ASM_UINT8 Reserved[0x200];
+ EFI_SMM_CPU_STATE32 x86;
+ };
+ EFI_SMM_CPU_STATE64 x64;
+} EFI_SMM_CPU_STATE;
+#pragma warning (pop)
+
+#pragma pack (pop)
+
+#define EFI_SMM_MIN_REV_ID_x64 0x30006
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmCpuState/SmmCpuState.c b/EDK/Foundation/Framework/Protocol/SmmCpuState/SmmCpuState.c
new file mode 100644
index 0000000..6057a43
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmCpuState/SmmCpuState.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 2005, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmCpuState.c
+
+Abstract:
+
+ Protocol definition for EFI_SMM_CPU_SAVE_STATE protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmCpuState)
+
+EFI_GUID gEfiSmmCpuSaveStateProtocolGuid = EFI_SMM_CPU_SAVE_STATE_PROTOCOL_GUID;
+
+EFI_GUID_STRING (&gEfiSmmCpuSaveStateProtocolGuid, "SMM CPU Save State Protocol", "SMM CPU Save State Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SmmCpuState/SmmCpuState.h b/EDK/Foundation/Framework/Protocol/SmmCpuState/SmmCpuState.h
new file mode 100644
index 0000000..a5f0324
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmCpuState/SmmCpuState.h
@@ -0,0 +1,43 @@
+/*++
+
+Copyright (c) 2005, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmCpuState.h
+
+Abstract:
+
+ Protocol definition for EFI_SMM_CPU_SAVE_STATE protocol
+
+Revision History
+
+--*/
+
+#ifndef _SMMSAVESTATE_H_
+#define _SMMSAVESTATE_H_
+
+#include "CpuSaveState.h"
+
+//
+// Global ID for the Sx SMI Protocol
+//
+// {21F302AD-6E94-471b-84BC-B14800403A1D}
+#define EFI_SMM_CPU_SAVE_STATE_PROTOCOL_GUID \
+ { 0x21f302ad, 0x6e94, 0x471b, 0x84, 0xbc, 0xb1, 0x48, 0x0, 0x40, 0x3a, 0x1d }
+
+typedef struct _EFI_SMM_CPU_SAVE_STATE_PROTOCOL {
+ EFI_SMM_CPU_STATE **CpuSaveState;
+} EFI_SMM_CPU_SAVE_STATE_PROTOCOL;
+
+extern EFI_GUID gEfiSmmCpuSaveStateProtocolGuid;
+
+#endif // _SMMSAVESTATE_H_ \ No newline at end of file
diff --git a/EDK/Foundation/Framework/Protocol/SmmGpiDispatch/SmmGpiDispatch.c b/EDK/Foundation/Framework/Protocol/SmmGpiDispatch/SmmGpiDispatch.c
new file mode 100644
index 0000000..03700e4
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmGpiDispatch/SmmGpiDispatch.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmGpiDispatch.c
+
+Abstract:
+
+ EFI Smm Gpi Smi Child Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmGpiDispatch)
+
+EFI_GUID gEfiSmmGpiDispatchProtocolGuid = EFI_SMM_GPI_DISPATCH_PROTOCOL_GUID;
+
+EFI_GUID_STRING
+ (&gEfiSmmGpiDispatchProtocolGuid, "SMM GPI SMI Dispatch Protocol", "EFI 2.0 SMM GPI SMI Dispatch Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SmmGpiDispatch/SmmGpiDispatch.h b/EDK/Foundation/Framework/Protocol/SmmGpiDispatch/SmmGpiDispatch.h
new file mode 100644
index 0000000..3eba7b2
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmGpiDispatch/SmmGpiDispatch.h
@@ -0,0 +1,152 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmGpiDispatch.h
+
+Abstract:
+
+ EFI Smm Gpi Smi Child Protocol
+
+Revision History
+
+--*/
+
+#ifndef _EFI_SMM_GPI_DISPATCH_H_
+#define _EFI_SMM_GPI_DISPATCH_H_
+
+//
+// Global ID for the GPI SMI Protocol
+//
+#define EFI_SMM_GPI_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0xe0744b81, 0x9513, 0x49cd, 0x8c, 0xea, 0xe9, 0x24, 0x5e, 0x70, 0x39, 0xda \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SMM_GPI_DISPATCH_PROTOCOL);
+
+//
+// Related Definitions
+//
+//
+// GpiMask is a bit mask of 32 possible general purpose inputs that can generate a
+// a SMI. Bit 0 corresponds to logical GPI[0], 1 corresponds to logical GPI[1], etc.
+//
+// The logical GPI index to physical pin on device is described by the GPI device name
+// found on the same handle as the GpiSmi child dispatch protocol. The GPI device name
+// is defined as protocol with a GUID name and NULL protocol pointer.
+//
+typedef struct {
+ UINTN GpiNum;
+} EFI_SMM_GPI_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+typedef
+VOID
+(EFIAPI *EFI_SMM_GPI_DISPATCH) (
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_GPI_DISPATCH_CONTEXT * DispatchContext
+ );
+
+/*++
+
+ Routine Description:
+ Dispatch function for a GPI SMI handler.
+
+ Arguments:
+ DispatchHandle - Handle of this dispatch function.
+ DispatchContext - Pointer to the dispatch function's context.
+ The DispatchContext fields are filled in
+ by the dispatching driver prior to
+ invoking this dispatch function.
+
+ Returns:
+ Nothing
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_GPI_REGISTER) (
+ IN EFI_SMM_GPI_DISPATCH_PROTOCOL * This,
+ IN EFI_SMM_GPI_DISPATCH DispatchFunction,
+ IN EFI_SMM_GPI_DISPATCH_CONTEXT * DispatchContext,
+ OUT EFI_HANDLE * DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Register a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchFunction - Pointer to dispatch function to be invoked for
+ this SMI source
+ DispatchContext - Pointer to the dispatch function's context.
+ The caller fills this context in before calling
+ the register function to indicate to the register
+ function the GPI(s) for which the dispatch function
+ should be invoked.
+ DispatchHandle - Handle of dispatch function, for when interfacing
+ with the parent Sx state SMM driver.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
+ EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
+ child.
+ EFI_INVALID_PARAMETER - DispatchContext is invalid. The GPI input value
+ is not within valid range.
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_GPI_UNREGISTER) (
+ IN EFI_SMM_GPI_DISPATCH_PROTOCOL * This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Unregister a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchHandle - Handle of dispatch function to deregister.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ unregistered and the SMI source has been disabled
+ if there are no other registered child dispatch
+ functions for this SMI source.
+ EFI_INVALID_PARAMETER - Handle is invalid.
+ other - TBD
+
+--*/
+
+//
+// Interface structure for the SMM GPI SMI Dispatch Protocol
+//
+typedef struct _EFI_SMM_GPI_DISPATCH_PROTOCOL {
+ EFI_SMM_GPI_REGISTER Register;
+ EFI_SMM_GPI_UNREGISTER UnRegister;
+ UINTN NumSupportedGpis;
+} EFI_SMM_GPI_DISPATCH_PROTOCOL;
+
+extern EFI_GUID gEfiSmmGpiDispatchProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmIchnDispatch/SmmIchnDispatch.c b/EDK/Foundation/Framework/Protocol/SmmIchnDispatch/SmmIchnDispatch.c
new file mode 100644
index 0000000..0b2120c
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmIchnDispatch/SmmIchnDispatch.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmIchnDispatch.c
+
+Abstract:
+
+ EFI Smm ICH N Smi Child Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmIchnDispatch)
+
+EFI_GUID gEfiSmmIchnDispatchProtocolGuid = EFI_SMM_ICHN_DISPATCH_PROTOCOL_GUID;
+
+EFI_GUID_STRING
+ (&gEfiSmmIchnDispatchProtocolGuid, "SMM ICHn SMI Dispatch Protocol", "EFI 2.0 SMM ICHn SMI Dispatch Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SmmIchnDispatch/SmmIchnDispatch.h b/EDK/Foundation/Framework/Protocol/SmmIchnDispatch/SmmIchnDispatch.h
new file mode 100644
index 0000000..b02a00b
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmIchnDispatch/SmmIchnDispatch.h
@@ -0,0 +1,199 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmIchnDispatch.h
+
+Abstract:
+
+ EFI Smm ICH [N] Specific Smi Child Protocol
+
+Revision History
+
+--*/
+
+#ifndef _EFI_SMM_ICHN_DISPATCH_H_
+#define _EFI_SMM_ICHN_DISPATCH_H_
+
+//
+// Global ID for the ICH SMI Protocol
+//
+#define EFI_SMM_ICHN_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0xc50b323e, 0x9075, 0x4f2a, 0xac, 0x8e, 0xd2, 0x59, 0x6a, 0x10, 0x85, 0xcc \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SMM_ICHN_DISPATCH_PROTOCOL);
+
+//
+// Related Definitions
+//
+//
+// ICHN Specific SMIs. These are miscellaneous SMI sources that are supported by the
+// ICHN specific SMI implementation. These may change over time. TrapNumber is only
+// valid if the Type is Trap.
+//
+typedef enum {
+ //
+ // NOTE: NEVER delete items from this list/enumeration! Doing so will prevent other versions
+ // of the code from compiling. If the ICH version your driver is written for doesn't support
+ // some of these SMIs, then simply return EFI_UNSUPPORTED when a child/client tries to register
+ // for them.
+ //
+ IchnMch,
+ IchnPme,
+ IchnRtcAlarm,
+ IchnRingIndicate,
+ IchnAc97Wake,
+ IchnSerialIrq,
+ IchnY2KRollover,
+ IchnTcoTimeout,
+ IchnOsTco,
+ IchnNmi,
+ IchnIntruderDetect,
+ IchnBiosWp,
+ IchnMcSmi,
+ IchnPmeB0,
+ IchnThrmSts,
+ IchnSmBus,
+ IchnIntelUsb2,
+ IchnMonSmi7,
+ IchnMonSmi6,
+ IchnMonSmi5,
+ IchnMonSmi4,
+ IchnDevTrap13,
+ IchnDevTrap12,
+ IchnDevTrap11,
+ IchnDevTrap10,
+ IchnDevTrap9,
+ IchnDevTrap8,
+ IchnDevTrap7,
+ IchnDevTrap6,
+ IchnDevTrap5,
+ IchnDevTrap3,
+ IchnDevTrap2,
+ IchnDevTrap1,
+ IchnDevTrap0,
+ IchnIoTrap3,
+ IchnIoTrap2,
+ IchnIoTrap1,
+ IchnIoTrap0,
+ //
+ // INSERT NEW ITEMS JUST BEFORE THIS LINE
+ //
+ NUM_ICHN_TYPES // the number of items in this enumeration
+} EFI_SMM_ICHN_SMI_TYPE;
+
+typedef struct {
+ EFI_SMM_ICHN_SMI_TYPE Type;
+} EFI_SMM_ICHN_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+typedef
+VOID
+(EFIAPI *EFI_SMM_ICHN_DISPATCH) (
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_ICHN_DISPATCH_CONTEXT * DispatchContext
+ );
+
+/*++
+
+ Routine Description:
+ Dispatch function for a ICH n specific SMI handler.
+
+ Arguments:
+ DispatchHandle - Handle of this dispatch function.
+ DispatchContext - Pointer to the dispatch function's context.
+ The DispatchContext fields are filled in
+ by the dispatching driver prior to
+ invoking this dispatch function.
+
+ Returns:
+ Nothing
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_ICHN_REGISTER) (
+ IN EFI_SMM_ICHN_DISPATCH_PROTOCOL * This,
+ IN EFI_SMM_ICHN_DISPATCH DispatchFunction,
+ IN EFI_SMM_ICHN_DISPATCH_CONTEXT * DispatchContext,
+ OUT EFI_HANDLE * DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Register a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchFunction - Pointer to dispatch function to be invoked for
+ this SMI source
+ DispatchContext - Pointer to the dispatch function's context.
+ The caller fills this context in before calling
+ the register function to indicate to the register
+ function the ICHN SMI source for which the dispatch
+ function should be invoked.
+ DispatchHandle - Handle of dispatch function, for when interfacing
+ with the parent Sx state SMM driver.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
+ EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
+ child.
+ EFI_INVALID_PARAMETER - DispatchContext is invalid. The ICHN input value
+ is not within valid range.
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_ICHN_UNREGISTER) (
+ IN EFI_SMM_ICHN_DISPATCH_PROTOCOL * This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Unregister a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchHandle - Handle of dispatch function to deregister.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ unregistered and the SMI source has been disabled
+ if there are no other registered child dispatch
+ functions for this SMI source.
+ EFI_INVALID_PARAMETER - Handle is invalid.
+ other - TBD
+
+--*/
+
+//
+// Interface structure for the SMM Ich n specific SMI Dispatch Protocol
+//
+typedef struct _EFI_SMM_ICHN_DISPATCH_PROTOCOL {
+ EFI_SMM_ICHN_REGISTER Register;
+ EFI_SMM_ICHN_UNREGISTER UnRegister;
+} EFI_SMM_ICHN_DISPATCH_PROTOCOL;
+
+extern EFI_GUID gEfiSmmIchnDispatchProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmPeriodicTimerDispatch/SmmPeriodicTimerDispatch.c b/EDK/Foundation/Framework/Protocol/SmmPeriodicTimerDispatch/SmmPeriodicTimerDispatch.c
new file mode 100644
index 0000000..17afa7e
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmPeriodicTimerDispatch/SmmPeriodicTimerDispatch.c
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmPeriodicTimerDispatch.c
+
+Abstract:
+
+ EFI Smm Periodic Timer Smi Child Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmPeriodicTimerDispatch)
+
+EFI_GUID gEfiSmmPeriodicTimerDispatchProtocolGuid = EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL_GUID;
+
+EFI_GUID_STRING
+ (
+ &gEfiSmmPeriodicTimerDispatchProtocolGuid, "SMM Periodic Timer SMI Dispatch Protocol",
+ "EFI 2.0 SMM Periodic Timer SMI Dispatch Protocol"
+ );
diff --git a/EDK/Foundation/Framework/Protocol/SmmPeriodicTimerDispatch/SmmPeriodicTimerDispatch.h b/EDK/Foundation/Framework/Protocol/SmmPeriodicTimerDispatch/SmmPeriodicTimerDispatch.h
new file mode 100644
index 0000000..e7a12a2
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmPeriodicTimerDispatch/SmmPeriodicTimerDispatch.h
@@ -0,0 +1,224 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmPeriodicTimerDispatch.h
+
+Abstract:
+
+ EFI Smm Periodic Timer Smi Child Protocol
+
+Revision History
+
+--*/
+
+#ifndef _EFI_SMM_PERIODIC_TIMER_DISPATCH_H_
+#define _EFI_SMM_PERIODIC_TIMER_DISPATCH_H_
+
+//
+// Global ID for the Periodic Timer SMI Protocol
+//
+#define EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0x9cca03fc, 0x4c9e, 0x4a19, 0x9b, 0x6, 0xed, 0x7b, 0x47, 0x9b, 0xde, 0x55 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL);
+
+//
+// Related Definitions
+//
+//
+// Period is the minimum period of time in 100 nanosecond units that child gets called.
+// The child will be called back after a time greater than the time Period.
+//
+// SmiTickInterval is the period of time interval between SMIs. Children of this interface
+// should use this field when registering for periodic timer intervals when a finer
+// granularity periodic SMI is desired. Valid values for this field are those returned
+// by GetNextInterval. A value of 0 indicates the parent is allowed to use any SMI
+// interval period to satisfy the requested period.
+// Example: A chipset supports periodic SMIs on every 64ms or 2 seconds.
+// A child wishes schedule a period SMI to fire on a period of 3 seconds, there
+// are several ways to approach the problem:
+// 1. The child may accept a 4 second periodic rate, in which case it registers with
+// Period = 40000
+// SmiTickInterval = 20000
+// The resulting SMI will occur every 2 seconds with the child called back on
+// every 2nd SMI.
+// NOTE: the same result would occur if the child set SmiTickInterval = 0.
+// 2. The child may choose the finer granularity SMI (64ms):
+// Period = 30000
+// SmiTickInterval = 640
+// The resulting SMI will occur every 64ms with the child called back on
+// every 47th SMI.
+// NOTE: the child driver should be aware that this will result in more
+// SMIs occuring during system runtime which can negatively impact system
+// performance.
+//
+// ElapsedTime is the actual time in 100 nanosecond units elapsed since last called, a
+// value of 0 indicates an unknown amount of time.
+//
+typedef struct {
+ UINT64 Period;
+ UINT64 SmiTickInterval;
+ UINT64 ElapsedTime;
+//*** AMI PORTING BEGIN ***//
+ BOOLEAN TimerEnabled;
+//*** AMI PORTING END ***//
+} EFI_SMM_PERIODIC_TIMER_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+typedef
+VOID
+(EFIAPI *EFI_SMM_PERIODIC_TIMER_DISPATCH) (
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_PERIODIC_TIMER_DISPATCH_CONTEXT * DispatchContext
+ );
+
+/*++
+
+ Routine Description:
+ Dispatch function for a Periodic Timer SMI handler.
+
+ Arguments:
+ DispatchHandle - Handle of this dispatch function.
+ DispatchContext - Pointer to the dispatch function's context.
+ The DispatchContext fields are filled in
+ by the dispatching driver prior to
+ invoking this dispatch function.
+
+ Returns:
+ Nothing
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_PERIODIC_TIMER_INTERVAL) (
+ IN EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL * This,
+ IN OUT UINT64 **SmiTickInterval
+ );
+
+/*++
+
+ Routine Description:
+ Returns the next SMI tick period supported by the chipset. The order
+ returned is from longest to shortest interval period.
+
+ Arguments:
+ This - Protocol instance pointer.
+ SmiTickInterval - Pointer to pointer of next shorter SMI interval
+ period supported by the child. This parameter
+ works as a get-first, get-next field. The first
+ time this function is called, *SmiTickInterval
+ should be set to NULL to get the longest SMI
+ interval. The returned *SmiTickInterval should
+ be passed in on subsequent calls to get
+ the next shorter interval period until
+ *SmiTickInterval = NULL.
+
+ Returns:
+ EFI_SUCCESS
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_PERIODIC_TIMER_REGISTER) (
+ IN EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL * This,
+ IN EFI_SMM_PERIODIC_TIMER_DISPATCH DispatchFunction,
+ IN EFI_SMM_PERIODIC_TIMER_DISPATCH_CONTEXT * DispatchContext,
+ OUT EFI_HANDLE * DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Register a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchFunction - Pointer to dispatch function to be invoked for
+ this SMI source
+ DispatchContext - Pointer to the dispatch function's context.
+ The caller fills this context in before calling
+ the register function to indicate to the register
+ function the period at which the dispatch function
+ should be invoked.
+ DispatchHandle - Handle of dispatch function, for when interfacing
+ with the parent Sx state SMM driver.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
+ EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
+ child.
+ EFI_INVALID_PARAMETER - DispatchContext is invalid. The period input value
+ is not within valid range.
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_PERIODIC_TIMER_UNREGISTER) (
+ IN EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL * This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Unregister a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchHandle - Handle of dispatch function to deregister.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ unregistered and the SMI source has been disabled
+ if there are no other registered child dispatch
+ functions for this SMI source.
+ EFI_INVALID_PARAMETER - Handle is invalid.
+ other - TBD
+
+--*/
+
+//*** AMI PORTING BEGIN ***//
+typedef EFI_STATUS (EFIAPI *EFI_SMM_PERIODIC_ENABLE) (
+ IN EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL *This,
+ IN EFI_HANDLE DispatchHandle
+);
+
+typedef EFI_STATUS (EFIAPI *EFI_SMM_PERIODIC_DISABLE) (
+ IN EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL *This,
+ IN EFI_HANDLE DispatchHandle
+);
+//*** AMI PORTING END ***//
+
+//
+// Interface structure for the SMM Periodic Timer Dispatch Protocol
+//
+typedef struct _EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL {
+ EFI_SMM_PERIODIC_TIMER_REGISTER Register;
+ EFI_SMM_PERIODIC_TIMER_UNREGISTER UnRegister;
+ EFI_SMM_PERIODIC_TIMER_INTERVAL GetNextShorterInterval;
+//*** AMI PORTING BEGIN ***//
+ EFI_SMM_PERIODIC_ENABLE SmmPeriodicSmiEnable;
+ EFI_SMM_PERIODIC_DISABLE SmmPeriodicSmiDisable;
+//*** AMI PORTING END ***//
+} EFI_SMM_PERIODIC_TIMER_DISPATCH_PROTOCOL;
+
+extern EFI_GUID gEfiSmmPeriodicTimerDispatchProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmPowerButtonDispatch/SmmPowerButtonDispatch.c b/EDK/Foundation/Framework/Protocol/SmmPowerButtonDispatch/SmmPowerButtonDispatch.c
new file mode 100644
index 0000000..13000e7
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmPowerButtonDispatch/SmmPowerButtonDispatch.c
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmPowerButtonDispatch.c
+
+Abstract:
+
+ EFI Smm Power Button Smi Child Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmPowerButtonDispatch)
+
+EFI_GUID gEfiSmmPowerButtonDispatchProtocolGuid = EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL_GUID;
+
+EFI_GUID_STRING
+ (
+ &gEfiSmmPowerButtonDispatchProtocolGuid, "SMM Power Button SMI Dispatch Protocol",
+ "EFI 2.0 SMM Power Button SMI Dispatch Protocol"
+ );
diff --git a/EDK/Foundation/Framework/Protocol/SmmPowerButtonDispatch/SmmPowerButtonDispatch.h b/EDK/Foundation/Framework/Protocol/SmmPowerButtonDispatch/SmmPowerButtonDispatch.h
new file mode 100644
index 0000000..b4e3673
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmPowerButtonDispatch/SmmPowerButtonDispatch.h
@@ -0,0 +1,153 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmPowerButtonDispatch.h
+
+Abstract:
+
+ EFI Smm Power Button Smi Child Protocol
+
+Revision History
+
+--*/
+
+#ifndef _EFI_SMM_POWER_BUTTON_DISPATCH_H_
+#define _EFI_SMM_POWER_BUTTON_DISPATCH_H_
+
+//
+// Global ID for the Power Button SMI Protocol
+//
+#define EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0xb709efa0, 0x47a6, 0x4b41, 0xb9, 0x31, 0x12, 0xec, 0xe7, 0xa8, 0xee, 0x56 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL);
+
+//
+// Related Definitions
+//
+//
+// Power Button. Example, Use for changing LEDs before ACPI OS is on.
+// - DXE/BDS Phase
+// - OS Install Phase
+//
+typedef enum {
+ PowerButtonEntry,
+ PowerButtonExit
+} EFI_POWER_BUTTON_PHASE;
+
+typedef struct {
+ EFI_POWER_BUTTON_PHASE Phase;
+} EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+typedef
+VOID
+(EFIAPI *EFI_SMM_POWER_BUTTON_DISPATCH) (
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT * DispatchContext
+ );
+
+/*++
+
+ Routine Description:
+ Dispatch function for a Power Button SMI handler.
+
+ Arguments:
+ DispatchHandle - Handle of this dispatch function.
+ DispatchContext - Pointer to the dispatch function's context.
+ The DispatchContext fields are filled in
+ by the dispatching driver prior to
+ invoking this dispatch function.
+
+ Returns:
+ Nothing
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_POWER_BUTTON_REGISTER) (
+ IN EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL * This,
+ IN EFI_SMM_POWER_BUTTON_DISPATCH DispatchFunction,
+ IN EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT * DispatchContext,
+ OUT EFI_HANDLE * DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Register a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchFunction - Pointer to dispatch function to be invoked for
+ this SMI source
+ DispatchContext - Pointer to the dispatch function's context.
+ The caller fills this context in before calling
+ the register function to indicate to the register
+ function the Power Button SMI phase for which the dispatch
+ function should be invoked.
+ DispatchHandle - Handle of dispatch function, for when interfacing
+ with the parent Sx state SMM driver.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
+ EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
+ child.
+ EFI_INVALID_PARAMETER - DispatchContext is invalid. The Power Button SMI
+ phase is not within valid range.
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_POWER_BUTTON_UNREGISTER) (
+ IN EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL * This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Unregister a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchHandle - Handle of dispatch function to deregister.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ unregistered and the SMI source has been disabled
+ if there are no other registered child dispatch
+ functions for this SMI source.
+ EFI_INVALID_PARAMETER - Handle is invalid.
+ other - TBD
+
+--*/
+
+//
+// Interface structure for the SMM Power Button SMI Dispatch Protocol
+//
+typedef struct _EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL {
+ EFI_SMM_POWER_BUTTON_REGISTER Register;
+ EFI_SMM_POWER_BUTTON_UNREGISTER UnRegister;
+} EFI_SMM_POWER_BUTTON_DISPATCH_PROTOCOL;
+
+extern EFI_GUID gEfiSmmPowerButtonDispatchProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmStandbyButtonDispatch/SmmStandbyButtonDispatch.c b/EDK/Foundation/Framework/Protocol/SmmStandbyButtonDispatch/SmmStandbyButtonDispatch.c
new file mode 100644
index 0000000..d362f8e
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmStandbyButtonDispatch/SmmStandbyButtonDispatch.c
@@ -0,0 +1,34 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmStandbyButtonDispatch.c
+
+Abstract:
+
+ EFI Smm Standby Button Smi Child Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmStandbyButtonDispatch)
+
+EFI_GUID gEfiSmmStandbyButtonDispatchProtocolGuid = EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL_GUID;
+
+EFI_GUID_STRING
+ (
+ &gEfiSmmStandbyButtonDispatchProtocolGuid, "SMM Standby Button SMI Dispatch Protocol",
+ "EFI 2.0 SMM Standby Button SMI Dispatch Protocol"
+ );
diff --git a/EDK/Foundation/Framework/Protocol/SmmStandbyButtonDispatch/SmmStandbyButtonDispatch.h b/EDK/Foundation/Framework/Protocol/SmmStandbyButtonDispatch/SmmStandbyButtonDispatch.h
new file mode 100644
index 0000000..4ec47c0
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmStandbyButtonDispatch/SmmStandbyButtonDispatch.h
@@ -0,0 +1,153 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmStandbyButtonDispatch.h
+
+Abstract:
+
+ EFI Smm Standby Button Smi Child Protocol
+
+Revision History
+
+--*/
+
+#ifndef _EFI_SMM_STANDBY_BUTTON_DISPATCH_H_
+#define _EFI_SMM_STANDBY_BUTTON_DISPATCH_H_
+
+//
+// Global ID for the Standby Button SMI Protocol
+//
+#define EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0x78965b98, 0xb0bf, 0x449e, 0x8b, 0x22, 0xd2, 0x91, 0x4e, 0x49, 0x8a, 0x98 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL);
+
+//
+// Related Definitions
+//
+//
+// Standby Button. Example, Use for changing LEDs before ACPI OS is on.
+// - DXE/BDS Phase
+// - OS Install Phase
+//
+typedef enum {
+ Entry,
+ Exit
+} EFI_STANDBY_BUTTON_PHASE;
+
+typedef struct {
+ EFI_STANDBY_BUTTON_PHASE Phase;
+} EFI_SMM_STANDBY_BUTTON_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+typedef
+VOID
+(EFIAPI *EFI_SMM_STANDBY_BUTTON_DISPATCH) (
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_STANDBY_BUTTON_DISPATCH_CONTEXT * DispatchContext
+ );
+
+/*++
+
+ Routine Description:
+ Dispatch function for a Standby Button SMI handler.
+
+ Arguments:
+ DispatchHandle - Handle of this dispatch function.
+ DispatchContext - Pointer to the dispatch function's context.
+ The DispatchContext fields are filled in
+ by the dispatching driver prior to
+ invoking this dispatch function.
+
+ Returns:
+ Nothing
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_STANDBY_BUTTON_REGISTER) (
+ IN EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL * This,
+ IN EFI_SMM_STANDBY_BUTTON_DISPATCH DispatchFunction,
+ IN EFI_SMM_STANDBY_BUTTON_DISPATCH_CONTEXT * DispatchContext,
+ OUT EFI_HANDLE * DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Register a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchFunction - Pointer to dispatch function to be invoked for
+ this SMI source
+ DispatchContext - Pointer to the dispatch function's context.
+ The caller fills this context in before calling
+ the register function to indicate to the register
+ function the Standby Button SMI phase for which the dispatch
+ function should be invoked.
+ DispatchHandle - Handle of dispatch function, for when interfacing
+ with the parent Sx state SMM driver.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
+ EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
+ child.
+ EFI_INVALID_PARAMETER - DispatchContext is invalid. The Standby Button SMI
+ phase is not within valid range.
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_STANDBY_BUTTON_UNREGISTER) (
+ IN EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL * This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Unregister a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchHandle - Handle of dispatch function to deregister.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ unregistered and the SMI source has been disabled
+ if there are no other registered child dispatch
+ functions for this SMI source.
+ EFI_INVALID_PARAMETER - Handle is invalid.
+ other - TBD
+
+--*/
+
+//
+// Interface structure for the SMM Standby Button SMI Dispatch Protocol
+//
+typedef struct _EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL {
+ EFI_SMM_STANDBY_BUTTON_REGISTER Register;
+ EFI_SMM_STANDBY_BUTTON_UNREGISTER UnRegister;
+} EFI_SMM_STANDBY_BUTTON_DISPATCH_PROTOCOL;
+
+extern EFI_GUID gEfiSmmStandbyButtonDispatchProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmStatusCode/SmmStatusCode.c b/EDK/Foundation/Framework/Protocol/SmmStatusCode/SmmStatusCode.c
new file mode 100644
index 0000000..2592da7
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmStatusCode/SmmStatusCode.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmStatusCode.c
+
+Abstract:
+
+ SMM Status code Protocol as defined in EFI 2.0 (for Status Code Architectural Protocol)
+
+ This code abstracts Status Code reporting.
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmStatusCode)
+
+EFI_GUID gEfiSmmStatusCodeProtocolGuid = EFI_SMM_STATUS_CODE_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiSmmStatusCodeProtocolGuid, "SMM Status Code", "SMM Status Code Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SmmStatusCode/SmmStatusCode.h b/EDK/Foundation/Framework/Protocol/SmmStatusCode/SmmStatusCode.h
new file mode 100644
index 0000000..db1c23f
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmStatusCode/SmmStatusCode.h
@@ -0,0 +1,58 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmStatusCode.h
+
+Abstract:
+
+ SMM Status code Protocol as defined in the DXE CIS (Status Code Architectural Protocol)
+
+ This code abstracts SMM Status Code reporting.
+
+--*/
+
+#ifndef _PROTOCOL_SMM_STATUS_CODE_H__
+#define _PROTOCOL_SMM_STATUS_CODE_H__
+
+//
+// Global ID for the Smm Status Code Protocol
+//
+#define EFI_SMM_STATUS_CODE_PROTOCOL_GUID \
+ { \
+ 0x6afd2b77, 0x98c1, 0x4acd, 0xa6, 0xf9, 0x8a, 0x94, 0x39, 0xde, 0xf, 0xb1 \
+ }
+
+extern EFI_GUID gEfiSmmStatusCodeProtocolGuid;
+
+//
+// Forward reference for pure ANSI compatability
+//
+EFI_FORWARD_DECLARATION (EFI_SMM_STATUS_CODE_PROTOCOL);
+
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_REPORT_STATUS_CODE) (
+ IN EFI_SMM_STATUS_CODE_PROTOCOL * This,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID * CallerId,
+ IN EFI_STATUS_CODE_DATA * Data OPTIONAL
+ );
+
+typedef struct _EFI_SMM_STATUS_CODE_PROTOCOL {
+ EFI_SMM_REPORT_STATUS_CODE ReportStatusCode;
+} EFI_SMM_STATUS_CODE_PROTOCOL;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmSwDispatch/SmmSwDispatch.c b/EDK/Foundation/Framework/Protocol/SmmSwDispatch/SmmSwDispatch.c
new file mode 100644
index 0000000..bee21fa
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmSwDispatch/SmmSwDispatch.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmSwDispatch.c
+
+Abstract:
+
+ EFI Smm Software Smi Child Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmSwDispatch)
+
+EFI_GUID gEfiSmmSwDispatchProtocolGuid = EFI_SMM_SW_DISPATCH_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiSmmSwDispatchProtocolGuid, "SMM Sw SMI Dispatch Protocol", "EFI 2.0 SMM Sw SMI Dispatch Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SmmSwDispatch/SmmSwDispatch.h b/EDK/Foundation/Framework/Protocol/SmmSwDispatch/SmmSwDispatch.h
new file mode 100644
index 0000000..63b6c68
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmSwDispatch/SmmSwDispatch.h
@@ -0,0 +1,151 @@
+/*++
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmSwDispatch.h
+
+Abstract:
+
+ EFI Smm Software Smi Child Protocol
+
+Revision History
+
+--*/
+
+#ifndef _EFI_SMM_SW_DISPATCH_H_
+#define _EFI_SMM_SW_DISPATCH_H_
+
+//
+// Global ID for the SW SMI Protocol
+//
+#define EFI_SMM_SW_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0xe541b773, 0xdd11, 0x420c, 0xb0, 0x26, 0xdf, 0x99, 0x36, 0x53, 0xf8, 0xbf \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SMM_SW_DISPATCH_PROTOCOL);
+
+//
+// Related Definitions
+//
+//
+// A particular chipset may not support all possible software SMI input values.
+// For example, the ICH supports only values 00h to 0FFh. The parent only allows a single
+// child registration for each SwSmiInputValue.
+//
+typedef struct {
+ UINTN SwSmiInputValue;
+} EFI_SMM_SW_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+typedef
+VOID
+(EFIAPI *EFI_SMM_SW_DISPATCH) (
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_SW_DISPATCH_CONTEXT * DispatchContext
+ );
+
+/*++
+
+ Routine Description:
+ Dispatch function for a Software SMI handler.
+
+ Arguments:
+ DispatchHandle - Handle of this dispatch function.
+ DispatchContext - Pointer to the dispatch function's context.
+ The SwSmiInputValue field is filled in
+ by the software dispatch driver prior to
+ invoking this dispatch function.
+ The dispatch function will only be called
+ for input values for which it is registered.
+
+ Returns:
+ Nothing
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_SW_REGISTER) (
+ IN EFI_SMM_SW_DISPATCH_PROTOCOL * This,
+ IN EFI_SMM_SW_DISPATCH DispatchFunction,
+ IN EFI_SMM_SW_DISPATCH_CONTEXT * DispatchContext,
+ OUT EFI_HANDLE * DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Register a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchFunction - Pointer to dispatch function to be invoked for
+ this SMI source
+ DispatchContext - Pointer to the dispatch function's context.
+ The caller fills this context in before calling
+ the register function to indicate to the register
+ function which Software SMI input value the
+ dispatch function should be invoked for.
+ DispatchHandle - Handle of dispatch function, for when interfacing
+ with the parent Sx state SMM driver.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ EFI_DEVICE_ERROR - The SW driver was unable to enable the SMI source.
+ EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
+ child.
+ EFI_INVALID_PARAMETER - DispatchContext is invalid. The SW SMI input value
+ is not within valid range.
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_SW_UNREGISTER) (
+ IN EFI_SMM_SW_DISPATCH_PROTOCOL * This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Unregister a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchHandle - Handle of dispatch function to deregister.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ unregistered and the SMI source has been disabled
+ if there are no other registered child dispatch
+ functions for this SMI source.
+ EFI_INVALID_PARAMETER - Handle is invalid.
+ other - TBD
+
+--*/
+
+//
+// Interface structure for the SMM Software SMI Dispatch Protocol
+//
+typedef struct _EFI_SMM_SW_DISPATCH_PROTOCOL {
+ EFI_SMM_SW_REGISTER Register;
+ EFI_SMM_SW_UNREGISTER UnRegister;
+ UINTN MaximumSwiValue;
+} EFI_SMM_SW_DISPATCH_PROTOCOL;
+
+extern EFI_GUID gEfiSmmSwDispatchProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmSxDispatch/SmmSxDispatch.c b/EDK/Foundation/Framework/Protocol/SmmSxDispatch/SmmSxDispatch.c
new file mode 100644
index 0000000..cc27979
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmSxDispatch/SmmSxDispatch.c
@@ -0,0 +1,30 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmSxDispatch.c
+
+Abstract:
+
+ EFI Smm Sx Smi Child Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmSxDispatch)
+
+EFI_GUID gEfiSmmSxDispatchProtocolGuid = EFI_SMM_SX_DISPATCH_PROTOCOL_GUID;
+
+EFI_GUID_STRING(&gEfiSmmSxDispatchProtocolGuid, "SMM Sx Dispatch Protocol", "EFI 2.0 SMM Sx Dispatch Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SmmSxDispatch/SmmSxDispatch.h b/EDK/Foundation/Framework/Protocol/SmmSxDispatch/SmmSxDispatch.h
new file mode 100644
index 0000000..7e0b196
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmSxDispatch/SmmSxDispatch.h
@@ -0,0 +1,170 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmSxDispatch.h
+
+Abstract:
+
+ EFI Smm Sx Smi Child Protocol
+
+Revision History
+
+--*/
+
+#ifndef _EFI_SMM_SX_DISPATCH_H_
+#define _EFI_SMM_SX_DISPATCH_H_
+
+//
+// Global ID for the Sx SMI Protocol
+//
+#define EFI_SMM_SX_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0x14fc52be, 0x1dc, 0x426c, 0x91, 0xae, 0xa2, 0x3c, 0x3e, 0x22, 0xa, 0xe8 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SMM_SX_DISPATCH_PROTOCOL);
+
+//
+// Related Definitions
+//
+typedef enum {
+ SxS0,
+ SxS1,
+ SxS2,
+ SxS3,
+ SxS4,
+ SxS5,
+ EfiMaximumSleepType
+} EFI_SLEEP_TYPE;
+
+typedef enum {
+ SxEntry,
+ SxExit,
+ EfiMaximumPhase
+} EFI_SLEEP_PHASE;
+
+typedef struct {
+ EFI_SLEEP_TYPE Type;
+ EFI_SLEEP_PHASE Phase;
+} EFI_SMM_SX_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+typedef
+VOID
+(EFIAPI *EFI_SMM_SX_DISPATCH) (
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_SX_DISPATCH_CONTEXT * DispatchContext
+ );
+
+/*++
+
+ Routine Description:
+ Dispatch function for a Sx state SMI handler.
+
+ Arguments:
+ DispatchHandle - Handle of this dispatch function.
+ DispatchContext - Pointer to the dispatch function's context.
+ The Type and Phase fields are filled in
+ by the Sx dispatch driver prior to invoking
+ this dispatch function.
+ For this intertace, the Sx driver will call the
+ dispatch function for all Sx type and phases,
+ so the Sx state handler(s) must check the Type
+ and Phase field of the Dispatch context and act
+ accordingly.
+
+ Returns:
+ Nothing
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_SX_REGISTER) (
+ IN EFI_SMM_SX_DISPATCH_PROTOCOL * This,
+ IN EFI_SMM_SX_DISPATCH DispatchFunction,
+ IN EFI_SMM_SX_DISPATCH_CONTEXT * DispatchContext,
+ OUT EFI_HANDLE * DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Register a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchFunction - Pointer to dispatch function to be invoked for
+ this SMI source
+ DispatchContext - Pointer to the dispatch function's context.
+ The caller fills this context in before calling
+ the register function to indicate to the register
+ function which Sx state type and phase the caller
+ wishes to be called back on. For this intertace,
+ the Sx driver will call the registered handlers for
+ all Sx type and phases, so the Sx state handler(s)
+ must check the Type and Phase field of the Dispatch
+ context and act accordingly.
+ DispatchHandle - Handle of dispatch function, for when interfacing
+ with the parent Sx state SMM driver.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ EFI_UNSUPPORTED - The Sx driver or hardware does not support that
+ Sx Type/Phase.
+ EFI_DEVICE_ERROR - The Sx driver was unable to enable the SMI source.
+ EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
+ child.
+ EFI_INVALID_PARAMETER - DispatchContext is invalid. Type & Phase are not
+ within valid range.
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_SX_UNREGISTER) (
+ IN EFI_SMM_SX_DISPATCH_PROTOCOL * This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Unregister a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchHandle - Handle of dispatch function to deregister.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully unregistered and the
+ SMI source has been disabled if there are no other registered child
+ dispatch functions for this SMI source.
+ EFI_INVALID_PARAMETER - Handle is invalid.
+ other - TBD
+
+--*/
+
+//
+// Interface structure for the SMM Child Dispatch Protocol
+//
+typedef struct _EFI_SMM_SX_DISPATCH_PROTOCOL {
+ EFI_SMM_SX_REGISTER Register;
+ EFI_SMM_SX_UNREGISTER UnRegister;
+} EFI_SMM_SX_DISPATCH_PROTOCOL;
+
+extern EFI_GUID gEfiSmmSxDispatchProtocolGuid;
+
+#endif
diff --git a/EDK/Foundation/Framework/Protocol/SmmUsbDispatch/SmmUsbDispatch.c b/EDK/Foundation/Framework/Protocol/SmmUsbDispatch/SmmUsbDispatch.c
new file mode 100644
index 0000000..6668c7d
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmUsbDispatch/SmmUsbDispatch.c
@@ -0,0 +1,31 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmUsbDispatch.c
+
+Abstract:
+
+ EFI Smm USB Smi Child Protocol
+
+Revision History
+
+--*/
+
+#include "Tiano.h"
+#include EFI_PROTOCOL_DEFINITION (SmmUsbDispatch)
+
+EFI_GUID gEfiSmmUsbDispatchProtocolGuid = EFI_SMM_USB_DISPATCH_PROTOCOL_GUID;
+
+EFI_GUID_STRING
+ (&gEfiSmmUsbDispatchProtocolGuid, "SMM USB SMI Dispatch Protocol", "EFI 2.0 SMM USB SMI Dispatch Protocol");
diff --git a/EDK/Foundation/Framework/Protocol/SmmUsbDispatch/SmmUsbDispatch.h b/EDK/Foundation/Framework/Protocol/SmmUsbDispatch/SmmUsbDispatch.h
new file mode 100644
index 0000000..b2d89e1
--- /dev/null
+++ b/EDK/Foundation/Framework/Protocol/SmmUsbDispatch/SmmUsbDispatch.h
@@ -0,0 +1,149 @@
+/*++
+
+Copyright (c) 1999 - 2002, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+ SmmUsbDispatch.h
+
+Abstract:
+
+ EFI Smm USB Smi Child Protocol
+
+Revision History
+
+--*/
+
+#ifndef _EFI_SMM_USB_DISPATCH_H_
+#define _EFI_SMM_USB_DISPATCH_H_
+
+//
+// Global ID for the USB Protocol
+//
+#define EFI_SMM_USB_DISPATCH_PROTOCOL_GUID \
+ { \
+ 0xa05b6ffd, 0x87af, 0x4e42, 0x95, 0xc9, 0x62, 0x28, 0xb6, 0x3c, 0xf3, 0xf3 \
+ }
+
+EFI_FORWARD_DECLARATION (EFI_SMM_USB_DISPATCH_PROTOCOL);
+
+//
+// Related Definitions
+//
+typedef enum {
+ UsbLegacy,
+ UsbWake
+} EFI_USB_SMI_TYPE;
+
+typedef struct {
+ EFI_USB_SMI_TYPE Type;
+ EFI_DEVICE_PATH_PROTOCOL *Device;
+} EFI_SMM_USB_DISPATCH_CONTEXT;
+
+//
+// Member functions
+//
+typedef
+VOID
+(EFIAPI *EFI_SMM_USB_DISPATCH) (
+ IN EFI_HANDLE DispatchHandle,
+ IN EFI_SMM_USB_DISPATCH_CONTEXT * DispatchContext
+ );
+
+/*++
+
+ Routine Description:
+ Dispatch function for a USB SMI handler.
+
+ Arguments:
+ DispatchHandle - Handle of this dispatch function.
+ DispatchContext - Pointer to the dispatch function's context.
+ The DispatchContext fields are filled in
+ by the dispatching driver prior to
+ invoking this dispatch function.
+
+ Returns:
+ Nothing
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_USB_REGISTER) (
+ IN EFI_SMM_USB_DISPATCH_PROTOCOL * This,
+ IN EFI_SMM_USB_DISPATCH DispatchFunction,
+ IN EFI_SMM_USB_DISPATCH_CONTEXT * DispatchContext,
+ OUT EFI_HANDLE * DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Register a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchFunction - Pointer to dispatch function to be invoked for
+ this SMI source
+ DispatchContext - Pointer to the dispatch function's context.
+ The caller fills this context in before calling
+ the register function to indicate to the register
+ function the USB SMI types for which the dispatch
+ function should be invoked.
+ DispatchHandle - Handle of dispatch function, for when interfacing
+ with the parent Sx state SMM driver.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ registered and the SMI source has been enabled.
+ EFI_DEVICE_ERROR - The driver was unable to enable the SMI source.
+ EFI_OUT_OF_RESOURCES - Not enough memory (system or SMM) to manage this
+ child.
+ EFI_INVALID_PARAMETER - DispatchContext is invalid. The USB SMI type
+ is not within valid range.
+
+--*/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SMM_USB_UNREGISTER) (
+ IN EFI_SMM_USB_DISPATCH_PROTOCOL * This,
+ IN EFI_HANDLE DispatchHandle
+ );
+
+/*++
+
+ Routine Description:
+ Unregister a child SMI source dispatch function with a parent SMM driver
+
+ Arguments:
+ This - Protocol instance pointer.
+ DispatchHandle - Handle of dispatch function to deregister.
+
+ Returns:
+ EFI_SUCCESS - The dispatch function has been successfully
+ unregistered and the SMI source has been disabled
+ if there are no other registered child dispatch
+ functions for this SMI source.
+ EFI_INVALID_PARAMETER - Handle is invalid.
+ other - TBD
+
+--*/
+
+//
+// Interface structure for the SMM USB SMI Dispatch Protocol
+//
+typedef struct _EFI_SMM_USB_DISPATCH_PROTOCOL {
+ EFI_SMM_USB_REGISTER Register;
+ EFI_SMM_USB_UNREGISTER UnRegister;
+} EFI_SMM_USB_DISPATCH_PROTOCOL;
+
+extern EFI_GUID gEfiSmmUsbDispatchProtocolGuid;
+
+#endif