summaryrefslogtreecommitdiff
path: root/MdePkg/Include/Ppi
diff options
context:
space:
mode:
authorbbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524>2006-04-21 22:54:32 +0000
committerbbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524>2006-04-21 22:54:32 +0000
commit878ddf1fc3540a715f63594ed22b6929e881afb4 (patch)
treec56c44dac138137b510e1fba7c3efe5e4d84bea2 /MdePkg/Include/Ppi
downloadedk2-platforms-878ddf1fc3540a715f63594ed22b6929e881afb4.tar.xz
Initial import.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdePkg/Include/Ppi')
-rw-r--r--MdePkg/Include/Ppi/BlockIo.h161
-rw-r--r--MdePkg/Include/Ppi/BootInRecoveryMode.h33
-rw-r--r--MdePkg/Include/Ppi/BootScriptExecuter.h78
-rw-r--r--MdePkg/Include/Ppi/CpuIo.h520
-rw-r--r--MdePkg/Include/Ppi/DeviceRecoveryModule.h143
-rw-r--r--MdePkg/Include/Ppi/DxeIpl.h70
-rw-r--r--MdePkg/Include/Ppi/EndOfPeiPhase.h31
-rw-r--r--MdePkg/Include/Ppi/FindFv.h76
-rw-r--r--MdePkg/Include/Ppi/LoadFile.h78
-rw-r--r--MdePkg/Include/Ppi/MasterBootMode.h34
-rw-r--r--MdePkg/Include/Ppi/MemoryDiscovered.h34
-rw-r--r--MdePkg/Include/Ppi/Pcd.h294
-rw-r--r--MdePkg/Include/Ppi/PciCfg.h133
-rw-r--r--MdePkg/Include/Ppi/ReadOnlyVariable.h136
-rw-r--r--MdePkg/Include/Ppi/RecoveryModule.h67
-rw-r--r--MdePkg/Include/Ppi/Reset.h35
-rw-r--r--MdePkg/Include/Ppi/S3Resume.h65
-rw-r--r--MdePkg/Include/Ppi/SecPlatformInformation.h86
-rw-r--r--MdePkg/Include/Ppi/SectionExtraction.h118
-rw-r--r--MdePkg/Include/Ppi/Security.h77
-rw-r--r--MdePkg/Include/Ppi/Smbus.h258
-rw-r--r--MdePkg/Include/Ppi/Stall.h73
-rw-r--r--MdePkg/Include/Ppi/StatusCode.h42
23 files changed, 2642 insertions, 0 deletions
diff --git a/MdePkg/Include/Ppi/BlockIo.h b/MdePkg/Include/Ppi/BlockIo.h
new file mode 100644
index 0000000000..debcc0c8e4
--- /dev/null
+++ b/MdePkg/Include/Ppi/BlockIo.h
@@ -0,0 +1,161 @@
+/** @file
+ This file declares BlockIo PPI used to access block-oriented storage devices
+
+ 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: BlockIo.h
+
+ @par Revision Reference:
+ This PPI is defined in Framework of EFI Recovery Spec
+ Version 0.9
+
+**/
+
+#ifndef _PEI_BLOCK_IO_H_
+#define _PEI_BLOCK_IO_H_
+
+#define EFI_PEI_VIRTUAL_BLOCK_IO_PPI \
+ { \
+ 0x695d8aa1, 0x42ee, 0x4c46, {0x80, 0x5c, 0x6e, 0xa6, 0xbc, 0xe7, 0x99, 0xe3 } \
+ }
+
+typedef struct _EFI_PEI_RECOVERY_BLOCK_IO_PPI EFI_PEI_RECOVERY_BLOCK_IO_PPI;
+
+typedef UINT64 EFI_PEI_LBA;
+
+typedef enum {
+ LegacyFloppy = 0,
+ IdeCDROM = 1,
+ IdeLS120 = 2,
+ UsbMassStorage= 3,
+ MaxDeviceType
+} EFI_PEI_BLOCK_DEVICE_TYPE;
+
+typedef struct {
+ EFI_PEI_BLOCK_DEVICE_TYPE DeviceType;
+ BOOLEAN MediaPresent;
+ UINTN LastBlock;
+ UINTN BlockSize;
+} EFI_PEI_BLOCK_IO_MEDIA;
+
+/**
+ Gets the count of block I/O devices that one specific block driver detects.
+
+ @param PeiServices General-purpose services that are available to every PEIM.
+
+ @param This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
+
+ @param NumberBlockDevices The number of block I/O devices discovered.
+
+ @return Status code
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_NUMBER_BLOCK_DEVICES) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,
+ OUT UINTN *NumberBlockDevices
+ );
+
+/**
+ Gets a block device¡¯s media information.
+
+ @param PeiServices General-purpose services that are available to every PEIM
+
+ @param This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
+
+ @param DeviceIndex Specifies the block device to which the function
+ wants to talk. Because the driver that implements Block I/O PPIs
+ will manage multiple block devices, the PPIs that want to talk to a single
+ device must specify the device index that was assigned during the enumeration
+ process. This index is a number from one to NumberBlockDevices.
+
+ @param MediaInfo The media information of the specified block media.
+
+ @retval EFI_SUCCESS Media information about the specified block device was obtained successfully.
+
+ @retval EFI_DEVICE_ERROR Cannot get the media information due to a hardware error.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_DEVICE_MEDIA_INFORMATION) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,
+ IN UINTN DeviceIndex,
+ OUT EFI_PEI_BLOCK_IO_MEDIA *MediaInfo
+ );
+
+/**
+ Reads the requested number of blocks from the specified block device.
+
+ @param PeiServices General-purpose services that are available to every PEIM.
+
+ @param This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
+
+ @param DeviceIndex Specifies the block device to which the function wants to talk.
+
+ @param StartLBA The starting logical block address (LBA) to read from on the device
+
+ @param BufferSize The size of the Buffer in bytes. This number must
+ be a multiple of the intrinsic block size of the device.
+
+ @param Buffer A pointer to the destination buffer for the data.
+ The caller is responsible for the ownership of the buffer.
+
+ @retval EFI_SUCCESS The data was read correctly from the device.
+
+ @retval EFI_DEVICE_ERROR The device reported an error while attempting to perform the read operation.
+
+ @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not valid,
+ or the buffer is not properly aligned.
+
+ @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multiple of
+ the intrinsic block size of the device.
+
+ @retval EFI_NO_MEDIA There is no media in the device.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_READ_BLOCKS) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,
+ IN UINTN DeviceIndex,
+ IN EFI_PEI_LBA StartLBA,
+ IN UINTN BufferSize,
+ OUT VOID *Buffer
+ );
+
+/**
+ @par Ppi Description:
+ EFI_PEI_RECOVERY_BLOCK_IO_PPI provides the services that are required
+ to access a block I/O device during PEI recovery boot mode.
+
+ @param GetNumberOfBlockDevices
+ Gets the number of block I/O devices that the specific block driver manages.
+
+ @param GetBlockDeviceMediaInfo
+ Gets the specified media information.
+
+ @param ReadBlocks
+ Reads the requested number of blocks from the specified block device.
+
+**/
+struct _EFI_PEI_RECOVERY_BLOCK_IO_PPI {
+ EFI_PEI_GET_NUMBER_BLOCK_DEVICES GetNumberOfBlockDevices;
+ EFI_PEI_GET_DEVICE_MEDIA_INFORMATION GetBlockDeviceMediaInfo;
+ EFI_PEI_READ_BLOCKS ReadBlocks;
+};
+
+extern EFI_GUID gEfiPeiBlockIoPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/BootInRecoveryMode.h b/MdePkg/Include/Ppi/BootInRecoveryMode.h
new file mode 100644
index 0000000000..f15d570591
--- /dev/null
+++ b/MdePkg/Include/Ppi/BootInRecoveryMode.h
@@ -0,0 +1,33 @@
+/** @file
+ This PPI is installed by the platform PEIM to designate that a recovery boot
+ is in progress.
+
+ 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: BootInRecoveryMode.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS spec
+ Version 0.91.
+
+**/
+
+#ifndef __BOOT_IN_RECOVERY_MODE_PPI_H__
+#define __BOOT_IN_RECOVERY_MODE_PPI_H__
+
+#define EFI_PEI_BOOT_IN_RECOVERY_MODE_PEIM_PPI \
+ { \
+ 0x17ee496a, 0xd8e4, 0x4b9a, {0x94, 0xd1, 0xce, 0x82, 0x72, 0x30, 0x8, 0x50 } \
+ }
+
+
+extern EFI_GUID gEfiPeiBootInRecoveryModePpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/BootScriptExecuter.h b/MdePkg/Include/Ppi/BootScriptExecuter.h
new file mode 100644
index 0000000000..b73396d7fa
--- /dev/null
+++ b/MdePkg/Include/Ppi/BootScriptExecuter.h
@@ -0,0 +1,78 @@
+/** @file
+ This file declares Boot Script Executer PPI.
+
+ 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: BootScriptExecuter.h
+
+ @par Revision Reference:
+ This PPI is defined in Framework of EFI BootScript spec.
+ Version 0.91.
+
+**/
+
+#ifndef _PEI_BOOT_SCRIPT_EXECUTER_PPI_H
+#define _PEI_BOOT_SCRIPT_EXECUTER_PPI_H
+
+#define EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI_GUID \
+ { \
+ 0xabd42895, 0x78cf, 0x4872, {0x84, 0x44, 0x1b, 0x5c, 0x18, 0x0b, 0xfb, 0xff } \
+ }
+
+typedef struct _EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI;
+
+/**
+ Executes the Framework boot script table.
+
+ @param PeiServices A pointer to the system PEI Services Table.
+
+ @param This A pointer to the EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI instance.
+
+ @param Address The physical memory address where the table is stored.
+ It must be zero if the table to be executed is stored in a firmware volume file.
+
+ @param FvFile The firmware volume file name that contains the table to
+ be executed. It must be NULL if the table to be executed is stored in physical memory.
+
+ @retval EFI_SUCCESS The boot script table was executed successfully.
+
+ @retval EFI_INVALID_PARAMETER Address is zero and FvFile is NULL.
+
+ @retval EFI_NOT_FOUND The file name specified in FvFile cannot be found.
+
+ @retval EFI_UNSUPPORTED The format of the boot script table is invalid.
+ Or An unsupported opcode occurred in the table.
+ Or There were opcode execution errors, such as an insufficient dependency.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_BOOT_SCRIPT_EXECUTE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI *This,
+ IN EFI_PHYSICAL_ADDRESS Address,
+ IN EFI_GUID *FvFile OPTIONAL
+ );
+
+/**
+ @par Ppi Description:
+ This PPI produces functions to interpret and execute the Framework boot script table.
+
+ @param Execute
+ Executes a boot script table.
+
+**/
+struct _EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI {
+ EFI_PEI_BOOT_SCRIPT_EXECUTE Execute;
+};
+
+extern EFI_GUID gEfiPeiBootScriptExecuterPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/CpuIo.h b/MdePkg/Include/Ppi/CpuIo.h
new file mode 100644
index 0000000000..038703386d
--- /dev/null
+++ b/MdePkg/Include/Ppi/CpuIo.h
@@ -0,0 +1,520 @@
+/** @file
+ This file declares CPU IO PPI that abstracts CPU IO access
+
+ 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: CpuIo.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS.
+ Version 0.91.
+
+**/
+
+#ifndef __PEI_CPUIO_PPI_H__
+#define __PEI_CPUIO_PPI_H__
+
+#define EFI_PEI_CPU_IO_PPI_INSTALLED_GUID \
+ { \
+ 0xe6af1f7b, 0xfc3f, 0x46da, {0xa8, 0x28, 0xa3, 0xb4, 0x57, 0xa4, 0x42, 0x82 } \
+ }
+
+typedef struct _EFI_PEI_CPU_IO_PPI EFI_PEI_CPU_IO_PPI;
+
+//
+// *******************************************************
+// EFI_PEI_CPU_IO_PPI_WIDTH
+// *******************************************************
+//
+typedef enum {
+ EfiPeiCpuIoWidthUint8,
+ EfiPeiCpuIoWidthUint16,
+ EfiPeiCpuIoWidthUint32,
+ EfiPeiCpuIoWidthUint64,
+ EfiPeiCpuIoWidthFifoUint8,
+ EfiPeiCpuIoWidthFifoUint16,
+ EfiPeiCpuIoWidthFifoUint32,
+ EfiPeiCpuIoWidthFifoUint64,
+ EfiPeiCpuIoWidthFillUint8,
+ EfiPeiCpuIoWidthFillUint16,
+ EfiPeiCpuIoWidthFillUint32,
+ EfiPeiCpuIoWidthFillUint64,
+ EfiPeiCpuIoWidthMaximum
+} EFI_PEI_CPU_IO_PPI_WIDTH;
+
+/**
+ Memory-based access services and I/O-based access services.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Width The width of the access. Enumerated in bytes.
+
+ @param Address The physical address of the access.
+
+ @param Count The number of accesses to perform.
+
+ @param Buffer A pointer to the buffer of data.
+
+ @retval EFI_SUCCESS The function completed successfully.
+
+ @retval EFI_NOT_YET_AVAILABLE The service has not been installed.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_MEM) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN EFI_PEI_CPU_IO_PPI_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN Count,
+ IN OUT VOID *Buffer
+ );
+
+//
+// *******************************************************
+// EFI_PEI_CPU_IO_PPI_ACCESS
+// *******************************************************
+//
+typedef struct {
+ EFI_PEI_CPU_IO_PPI_IO_MEM Read;
+ EFI_PEI_CPU_IO_PPI_IO_MEM Write;
+} EFI_PEI_CPU_IO_PPI_ACCESS;
+
+/**
+ 8-bit I/O read operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @return UINT8
+
+**/
+typedef
+UINT8
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ8) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address
+ );
+
+/**
+ 16-bit I/O read operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @return UINT16
+
+**/
+typedef
+UINT16
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ16) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address
+ );
+
+/**
+ 32-bit I/O read operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @return UINT32
+
+**/
+typedef
+UINT32
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ32) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address
+ );
+
+/**
+ 64-bit I/O read operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @return UINT64
+
+**/
+typedef
+UINT64
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ64) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address
+ );
+
+/**
+ 8-bit I/O write operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @param Data The data to write.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE8) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address,
+ IN UINT8 Data
+ );
+
+/**
+ 16-bit I/O write operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @param Data The data to write.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE16) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address,
+ IN UINT16 Data
+ );
+
+/**
+ 32-bit I/O write operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @param Data The data to write.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE32) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address,
+ IN UINT32 Data
+ );
+
+/**
+ 64-bit I/O write operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @param Data The data to write.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE64) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address,
+ IN UINT64 Data
+ );
+
+/**
+ 8-bit Memory read operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @return UINT8
+
+**/
+typedef
+UINT8
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ8) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address
+ );
+
+/**
+ 16-bit Memory read operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @return UINT16
+
+**/
+typedef
+UINT16
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ16) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address
+ );
+
+/**
+ 32-bit Memory read operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @return UINT32
+
+**/
+typedef
+UINT32
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ32) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address
+ );
+
+/**
+ 64-bit Memory read operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @return UINT64
+
+**/
+typedef
+UINT64
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ64) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address
+ );
+
+/**
+ 8-bit Memory write operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @param Data The data to write.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE8) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address,
+ IN UINT8 Data
+ );
+
+/**
+ 16-bit Memory write operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @param Data The data to write.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE16) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address,
+ IN UINT16 Data
+ );
+
+/**
+ 32-bit Memory write operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @param Data The data to write.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE32) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address,
+ IN UINT32 Data
+ );
+
+/**
+ 64-bit Memory write operations.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Address The physical address of the access.
+
+ @param Data The data to write.
+
+ @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE64) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_CPU_IO_PPI *This,
+ IN UINT64 Address,
+ IN UINT64 Data
+ );
+
+/**
+ @par Ppi Description:
+ EFI_PEI_CPU_IO_PPI provides a set of memory and I/O-based services.
+ The perspective of the services is that of the processor, not the bus or system.
+
+ @param Mem
+ Collection of memory-access services.
+
+ @param I/O
+ Collection of I/O-access services.
+
+ @param IoRead8
+ 8-bit read service.
+
+ @param IoRead16
+ 16-bit read service.
+
+ @param IoRead32
+ 32-bit read service.
+
+ @param IoRead64
+ 64-bit read service.
+
+ @param IoWrite8
+ 8-bit write service.
+
+ @param IoWrite16
+ 16-bit write service.
+
+ @param IoWrite32
+ 32-bit write service.
+
+ @param IoWrite64
+ 64-bit write service.
+
+ @param MemRead8
+ 8-bit read service.
+
+ @param MemRead16
+ 16-bit read service.
+
+ @param MemRead32
+ 32-bit read service.
+
+ @param MemRead64
+ 64-bit read service.
+
+ @param MemWrite8
+ 8-bit write service.
+
+ @param MemWrite16
+ 16-bit write service.
+
+ @param MemWrite32
+ 32-bit write service.
+
+ @param MemWrite64
+ 64-bit write service.
+
+**/
+struct _EFI_PEI_CPU_IO_PPI {
+ EFI_PEI_CPU_IO_PPI_ACCESS Mem;
+ EFI_PEI_CPU_IO_PPI_ACCESS Io;
+ EFI_PEI_CPU_IO_PPI_IO_READ8 IoRead8;
+ EFI_PEI_CPU_IO_PPI_IO_READ16 IoRead16;
+ EFI_PEI_CPU_IO_PPI_IO_READ32 IoRead32;
+ EFI_PEI_CPU_IO_PPI_IO_READ64 IoRead64;
+ EFI_PEI_CPU_IO_PPI_IO_WRITE8 IoWrite8;
+ EFI_PEI_CPU_IO_PPI_IO_WRITE16 IoWrite16;
+ EFI_PEI_CPU_IO_PPI_IO_WRITE32 IoWrite32;
+ EFI_PEI_CPU_IO_PPI_IO_WRITE64 IoWrite64;
+ EFI_PEI_CPU_IO_PPI_MEM_READ8 MemRead8;
+ EFI_PEI_CPU_IO_PPI_MEM_READ16 MemRead16;
+ EFI_PEI_CPU_IO_PPI_MEM_READ32 MemRead32;
+ EFI_PEI_CPU_IO_PPI_MEM_READ64 MemRead64;
+ EFI_PEI_CPU_IO_PPI_MEM_WRITE8 MemWrite8;
+ EFI_PEI_CPU_IO_PPI_MEM_WRITE16 MemWrite16;
+ EFI_PEI_CPU_IO_PPI_MEM_WRITE32 MemWrite32;
+ EFI_PEI_CPU_IO_PPI_MEM_WRITE64 MemWrite64;
+};
+
+extern EFI_GUID gEfiPeiCpuIoPpiInServiceTableGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/DeviceRecoveryModule.h b/MdePkg/Include/Ppi/DeviceRecoveryModule.h
new file mode 100644
index 0000000000..3847686b04
--- /dev/null
+++ b/MdePkg/Include/Ppi/DeviceRecoveryModule.h
@@ -0,0 +1,143 @@
+/** @file
+ This file declares Device Recovery Module PPI.
+
+ 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: DeviceRecoveryModule.h
+
+ @par Revision Reference:
+ This PPI is defined in Framework of EFI Recovery spec.
+ Version 0.9
+
+**/
+
+#ifndef _PEI_DEVICE_RECOVERY_MODULE_PPI_H
+#define _PEI_DEVICE_RECOVERY_MODULE_PPI_H
+
+#define EFI_PEI_DEVICE_RECOVERY_MODULE_PPI_GUID \
+ { \
+ 0x0DE2CE25, 0x446A, 0x45a7, {0xBF, 0xC9, 0x37, 0xDA, 0x26, 0x34, 0x4B, 0x37 } \
+ }
+
+typedef struct _EFI_PEI_DEVICE_RECOVERY_MODULE_PPI EFI_PEI_DEVICE_RECOVERY_MODULE_PPI;
+
+/**
+ This function, by whatever mechanism, searches for DXE capsules from the
+ associated device and returns the number and maximum size in bytes of
+ the capsules discovered. Entry 1 is assumed to be the highest load priority
+ and entry N is assumed to be the lowest priority.
+
+ @param PeiServices General-purpose services that are available to every PEIM
+
+ @param This Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI instance.
+
+ @param NumberRecoveryCapsules Pointer to a caller-allocated UINTN. On output,
+ *NumberRecoveryCapsules contains the number of recovery capsule images available
+ for retrieval from this PEIM instance.
+
+ @retval EFI_SUCCESS One or more capsules were discovered.
+
+ @retval EFI_DEVICE_ERROR A device error occurred.
+
+ @retval EFI_NOT_FOUND A recovery DXE capsule cannot be found.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_DEVICE_GET_NUMBER_RECOVERY_CAPSULE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *This,
+ OUT UINTN *NumberRecoveryCapsules
+ );
+
+/**
+ This function gets the size and type of the requested recovery capsule.
+
+ @param PeiServices General-purpose services that are available to every PEIM
+
+ @param This Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI instance.
+
+ @param CapsuleInstance Specifies for which capsule instance to retrieve the information.
+
+ @param Size A pointer to a caller-allocated UINTN in which the size of
+ the requested recovery module is returned.
+
+ @param CapsuleType A pointer to a caller-allocated EFI_GUID in
+ which the type of the requested recovery capsule is returned.
+
+ @retval EFI_SUCCESS One or more capsules were discovered.
+
+ @retval EFI_DEVICE_ERROR A device error occurred.
+
+ @retval EFI_NOT_FOUND A recovery DXE capsule cannot be found.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_DEVICE_GET_RECOVERY_CAPSULE_INFO) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *This,
+ IN UINTN CapsuleInstance,
+ OUT UINTN *Size,
+ OUT EFI_GUID *CapsuleType
+ );
+
+/**
+ This function, by whatever mechanism, retrieves a DXE capsule from some device
+ and loads it into memory. Note that the published interface is device neutral.
+
+ @param PeiServices General-purpose services that are available to every PEIM
+
+ @param This Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI instance.
+
+ @param CapsuleInstance Specifies which capsule instance to retrieve.
+
+ @param Buffer Specifies a caller-allocated buffer in which the requested recovery capsule will be returned.
+
+ @retval EFI_SUCCESS One or more capsules were discovered.
+
+ @retval EFI_DEVICE_ERROR A device error occurred.
+
+ @retval EFI_NOT_FOUND A recovery DXE capsule cannot be found.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_DEVICE_LOAD_RECOVERY_CAPSULE) (
+ IN OUT EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *This,
+ IN UINTN CapsuleInstance,
+ OUT VOID *Buffer
+ );
+
+/**
+ @par Ppi Description:
+ Presents a standard interface to EFI_PEI_DEVICE_RECOVERY_MODULE_PPI,
+ regardless of the underlying device(s).
+
+ @param GetNumberRecoveryCapsules
+ Returns the number of DXE capsules that were found.
+
+ @param GetRecoveryCapsuleInfo
+ Returns the capsule image type and the size of a given image.
+
+ @param LoadRecoveryCapsule
+ Loads a DXE capsule into memory
+
+**/
+struct _EFI_PEI_DEVICE_RECOVERY_MODULE_PPI {
+ EFI_PEI_DEVICE_GET_NUMBER_RECOVERY_CAPSULE GetNumberRecoveryCapsules;
+ EFI_PEI_DEVICE_GET_RECOVERY_CAPSULE_INFO GetRecoveryCapsuleInfo;
+ EFI_PEI_DEVICE_LOAD_RECOVERY_CAPSULE LoadRecoveryCapsule;
+};
+
+extern EFI_GUID gEfiPeiDeviceRecoveryModulePpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/DxeIpl.h b/MdePkg/Include/Ppi/DxeIpl.h
new file mode 100644
index 0000000000..bed579522c
--- /dev/null
+++ b/MdePkg/Include/Ppi/DxeIpl.h
@@ -0,0 +1,70 @@
+/** @file
+ This file declares DXE Initial Program Load PPI.
+ When the PEI core is done it calls the DXE IPL via this PPI.
+
+ 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: DxeIpl.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS.
+ Version 0.91.
+
+**/
+
+#ifndef __DXE_IPL_H__
+#define __DXE_IPL_H__
+
+#define EFI_DXE_IPL_PPI_GUID \
+ { \
+ 0xae8ce5d, 0xe448, 0x4437, {0xa8, 0xd7, 0xeb, 0xf5, 0xf1, 0x94, 0xf7, 0x31 } \
+ }
+
+typedef struct _EFI_DXE_IPL_PPI EFI_DXE_IPL_PPI;
+
+/**
+ The architectural PPI that the PEI Foundation invokes when
+ there are no additional PEIMs to invoke.
+
+ @param This Pointer to the DXE IPL PPI instance
+
+ @param PeiServices Pointer to the PEI Services Table.
+
+ @param HobList Pointer to the list of Hand-Off Block (HOB) entries.
+
+ @retval EFI_SUCCESS Upon this return code, the PEI Foundation should enter
+ some exception handling.Under normal circumstances, the DXE IPL PPI should not return.
+
+**/
+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
+ );
+
+/**
+ @par Ppi Description:
+ Final service to be invoked by the PEI Foundation.
+ The DXE IPL PPI is responsible for locating and loading the DXE Foundation.
+ The DXE IPL PPI may use PEI services to locate and load the DXE Foundation.
+
+ @param Entry
+ The entry point to the DXE IPL PPI.
+
+**/
+struct _EFI_DXE_IPL_PPI {
+ EFI_DXE_IPL_ENTRY Entry;
+};
+
+extern EFI_GUID gEfiDxeIplPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/EndOfPeiPhase.h b/MdePkg/Include/Ppi/EndOfPeiPhase.h
new file mode 100644
index 0000000000..e58fa03b09
--- /dev/null
+++ b/MdePkg/Include/Ppi/EndOfPeiPhase.h
@@ -0,0 +1,31 @@
+/** @file
+ PPI to be used to signal when the PEI ownership of the memory map
+ officially ends and DXE will take over
+
+ 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: EndOfPeiSignal.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS spec Version 0.91.
+
+**/
+
+#ifndef __END_OF_PEI_SIGNAL_PPI_H__
+#define __END_OF_PEI_SIGNAL_PPI_H__
+
+#define EFI_PEI_END_OF_PEI_PHASE_PPI_GUID \
+ { \
+ 0x605EA650, 0xC65C, 0x42e1, {0xBA, 0x80, 0x91, 0xA5, 0x2A, 0xB6, 0x18, 0xC6 } \
+ }
+
+extern EFI_GUID gEfiEndOfPeiSignalPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/FindFv.h b/MdePkg/Include/Ppi/FindFv.h
new file mode 100644
index 0000000000..971512558b
--- /dev/null
+++ b/MdePkg/Include/Ppi/FindFv.h
@@ -0,0 +1,76 @@
+/** @file
+ This file declares FindFv PPI used to locate FVs that contain PEIMs in PEI
+
+ 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: FindFv.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS
+ Version 0.91
+
+**/
+
+#ifndef __FIND_FV_H__
+#define __FIND_FV_H__
+
+#define EFI_PEI_FIND_FV_PPI_GUID \
+ { \
+ 0x36164812, 0xa023, 0x44e5, {0xbd, 0x85, 0x5, 0xbf, 0x3c, 0x77, 0x0, 0xaa } \
+ }
+
+typedef struct _EFI_PEI_FIND_FV_PPI EFI_PEI_FIND_FV_PPI;
+
+/**
+ This interface returns the base address of the firmware volume whose index
+ was passed in FvNumber.Once this function reports a firmware volume
+ index/base address pair, that index/address pairing must continue throughout PEI.
+
+ @param PeiServices Pointer to the PEI Services Table.
+
+ @param This Interface pointer that implements the Find FV service.
+
+ @param FvNumber The index of the firmware volume to locate.
+
+ @param FvAddress The address of the volume to discover.
+
+ @retval EFI_SUCCESS An additional firmware volume was found.
+
+ @retval EFI_OUT_OF_RESOURCES There are no firmware volumes for the given FvNumber.
+
+ @retval EFI_INVALID_PARAMETER *FvAddress is NULL.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FIND_FV_FINDFV) (
+ IN EFI_PEI_FIND_FV_PPI *This,
+ IN EFI_PEI_SERVICES **PeiServices,
+ UINT8 *FvNumber,
+ EFI_FIRMWARE_VOLUME_HEADER **FVAddress
+ );
+
+/**
+ @par Ppi Description:
+ Hardware mechanisms for locating FVs in a platform vary widely.
+ EFI_PEI_FIND_FV_PPI serves to abstract this variation so that the
+ PEI Foundation can remain standard across a wide variety of platforms.
+
+ @param FindFv
+ Service that abstracts the location of additional firmware volumes.
+
+**/
+struct _EFI_PEI_FIND_FV_PPI {
+ EFI_PEI_FIND_FV_FINDFV FindFv;
+};
+
+extern EFI_GUID gEfiFindFvPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/LoadFile.h b/MdePkg/Include/Ppi/LoadFile.h
new file mode 100644
index 0000000000..af02be7c9e
--- /dev/null
+++ b/MdePkg/Include/Ppi/LoadFile.h
@@ -0,0 +1,78 @@
+/** @file
+ Load image file from fv to memory.
+
+ 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: LoadFile.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS spec Version 0.91.
+
+**/
+
+#ifndef __FV_FILE_LOADER_PPI_H__
+#define __FV_FILE_LOADER_PPI_H__
+
+#define EFI_PEI_FV_FILE_LOADER_GUID \
+ { \
+ 0x7e1f0d85, 0x4ff, 0x4bb2, {0x86, 0x6a, 0x31, 0xa2, 0x99, 0x6a, 0x48, 0xa8 } \
+ }
+
+typedef struct _EFI_PEI_FV_FILE_LOADER_PPI EFI_PEI_FV_FILE_LOADER_PPI;
+
+/**
+ Loads a PEIM into memory for subsequent execution.
+
+ @param This Interface pointer that implements the Load File PPI instance.
+
+ @param FfsHeader Pointer to the FFS header of the file to load.
+
+ @param ImageAddress Pointer to the address of the loaded Image
+
+ @param ImageSize Pointer to the size of the loaded image.
+
+ @param EntryPoint Pointer to the entry point of the image.
+
+ @retval EFI_SUCCESS The image was loaded successfully.
+
+ @retval EFI_OUT_OF_RESOURCES There was not enough memory.
+
+ @retval EFI_INVALID_PARAMETER The contents of the FFS file did not
+ contain a valid PE/COFF image that could be loaded.
+
+**/
+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
+ );
+
+/**
+ @par Ppi Description:
+ This PPI is a pointer to the Load File service. This service will be
+ published by a PEIM.The PEI Foundation will use this service to
+ launch the known non-XIP PE/COFF PEIM images. This service may
+ depend upon the presence of the EFI_PEI_PERMANENT_MEMORY_INSTALLED_PPI.
+
+ @param FvLoadFile
+ Loads a PEIM into memory for subsequent execution
+
+**/
+struct _EFI_PEI_FV_FILE_LOADER_PPI {
+ EFI_PEI_FV_LOAD_FILE FvLoadFile;
+};
+
+extern EFI_GUID gEfiPeiFvFileLoaderPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/MasterBootMode.h b/MdePkg/Include/Ppi/MasterBootMode.h
new file mode 100644
index 0000000000..010055c7fd
--- /dev/null
+++ b/MdePkg/Include/Ppi/MasterBootMode.h
@@ -0,0 +1,34 @@
+/** @file
+ This file declares Boot Mode PPI
+ The Master Boot Mode PPI is installed by a PEIM to signal that a final
+ boot has been determined and set. This signal is useful in that PEIMs
+ with boot-mode-specific behavior can put this PPI in their dependency expression.
+
+ 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: MasterBootMode.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS
+ Version 0.91.
+
+**/
+
+#ifndef __MASTER_BOOT_MODE_PPI_H__
+#define __MASTER_BOOT_MODE_PPI_H__
+
+#define EFI_PEI_MASTER_BOOT_MODE_PEIM_PPI \
+ { \
+ 0x7408d748, 0xfc8c, 0x4ee6, {0x92, 0x88, 0xc4, 0xbe, 0xc0, 0x92, 0xa4, 0x10 } \
+ }
+
+extern EFI_GUID gEfiPeiMasterBootModePpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/MemoryDiscovered.h b/MdePkg/Include/Ppi/MemoryDiscovered.h
new file mode 100644
index 0000000000..414926c265
--- /dev/null
+++ b/MdePkg/Include/Ppi/MemoryDiscovered.h
@@ -0,0 +1,34 @@
+/** @file
+ This file declares Memory Discovered PPI.
+ This PPI is installed by the PEI Foundation at the point of system
+ evolution when the permanent memory size has been registered and
+ waiting PEIMs can use the main memory store.
+
+ 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: MemoryDiscovered.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS
+ Version 0.91.
+
+**/
+
+#ifndef __PEI_MEMORY_DISCOVERED_PPI_H__
+#define __PEI_MEMORY_DISCOVERED_PPI_H__
+
+#define EFI_PEI_PERMANENT_MEMORY_INSTALLED_PPI_GUID \
+ { \
+ 0xf894643d, 0xc449, 0x42d1, {0x8e, 0xa8, 0x85, 0xbd, 0xd8, 0xc6, 0x5b, 0xde } \
+ }
+
+extern EFI_GUID gEfiPeiMemoryDiscoveredPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/Pcd.h b/MdePkg/Include/Ppi/Pcd.h
new file mode 100644
index 0000000000..2b968f0d80
--- /dev/null
+++ b/MdePkg/Include/Ppi/Pcd.h
@@ -0,0 +1,294 @@
+/** @file
+ Platform Configuration Database (PCD) Protocol
+
+ 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: Pcd.h
+
+**/
+
+#ifndef __PCD_H__
+#define __PCD_H__
+
+extern EFI_GUID gPcdPpiGuid;
+
+#define PCD_PPI_GUID \
+ { 0x632df884, 0x8023, 0x4872, { 0xb6, 0x70, 0xb7, 0x4a, 0x30, 0x19, 0x16, 0xe9 } }
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET_SKU) (
+ IN UINTN SkuId
+ );
+
+typedef
+UINT8
+(EFIAPI *PCD_PPI_GET8) (
+ IN UINTN TokenNumber
+ );
+
+typedef
+UINT16
+(EFIAPI *PCD_PPI_GET16) (
+ IN UINTN TokenNumber
+ );
+
+typedef
+UINT32
+(EFIAPI *PCD_PPI_GET32) (
+ IN UINTN TokenNumber
+ );
+
+typedef
+UINT64
+(EFIAPI *PCD_PPI_GET64) (
+ IN UINTN TokenNumber
+ );
+
+typedef
+VOID *
+(EFIAPI *PCD_PPI_GET_POINTER) (
+ IN UINTN TokenNumber
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PCD_PPI_GET_BOOLEAN) (
+ IN UINTN TokenNumber
+ );
+
+typedef
+UINTN
+(EFIAPI *PCD_PPI_GET_SIZE) (
+ IN UINTN TokenNumber
+ );
+
+typedef
+UINT8
+(EFIAPI *PCD_PPI_GET_EX_8) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber
+ );
+
+typedef
+UINT16
+(EFIAPI *PCD_PPI_GET_EX_16) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber
+ );
+
+typedef
+UINT32
+(EFIAPI *PCD_PPI_GET_EX_32) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber
+ );
+
+typedef
+UINT64
+(EFIAPI *PCD_PPI_GET_EX_64) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber
+ );
+
+typedef
+VOID *
+(EFIAPI *PCD_PPI_GET_EX_POINTER) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber
+ );
+
+typedef
+BOOLEAN
+(EFIAPI *PCD_PPI_GET_EX_BOOLEAN) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber
+ );
+
+typedef
+UINTN
+(EFIAPI *PCD_PPI_GET_EX_SIZE) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET8) (
+ IN UINTN TokenNumber,
+ IN UINT8 Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET16) (
+ IN UINTN TokenNumber,
+ IN UINT16 Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET32) (
+ IN UINTN TokenNumber,
+ IN UINT32 Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET64) (
+ IN UINTN TokenNumber,
+ IN UINT64 Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET_POINTER) (
+ IN UINTN TokenNumber,
+ IN CONST VOID *Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET_BOOLEAN) (
+ IN UINTN TokenNumber,
+ IN BOOLEAN Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET_EX_8) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber,
+ IN UINT8 Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET_EX_16) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber,
+ IN UINT16 Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET_EX_32) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber,
+ IN UINT32 Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET_EX_64) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber,
+ IN UINT64 Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET_EX_POINTER) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber,
+ IN CONST VOID *Value
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_SET_EX_BOOLEAN) (
+ IN CONST EFI_GUID *Guid,
+ IN UINTN TokenNumber,
+ IN BOOLEAN Value
+ );
+
+/**
+ Callback on SET function prototype definition.
+
+ @param[in] CallBackGuid The PCD token GUID being set.
+ @param[in] CallBackToken The PCD token number being set.
+ @param[in] TokenData A pointer to the token data being set.
+ @param[in] TokenDataSize The size, in bytes, of the data being set.
+
+ @retval VOID
+
+--*/
+typedef
+VOID
+(EFIAPI *PCD_PPI_CALLBACK) (
+ IN CONST EFI_GUID *CallBackGuid, OPTIONAL
+ IN UINTN CallBackToken,
+ IN VOID *TokenData,
+ IN UINTN TokenDataSize
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_CALLBACK_ONSET) (
+ IN UINTN TokenNumber,
+ IN CONST EFI_GUID *Guid, OPTIONAL
+ IN PCD_PPI_CALLBACK CallBackFunction
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_CANCEL_CALLBACK) (
+ IN UINTN TokenNumber,
+ IN CONST EFI_GUID *Guid, OPTIONAL
+ IN PCD_PPI_CALLBACK CallBackFunction
+ );
+
+typedef
+EFI_STATUS
+(EFIAPI *PCD_PPI_GET_NEXT_TOKEN) (
+ IN CONST EFI_GUID *Guid, OPTIONAL
+ IN OUT UINTN *TokenNumber
+ );
+
+typedef struct {
+ PCD_PPI_SET_SKU SetSku;
+
+ PCD_PPI_GET8 Get8;
+ PCD_PPI_GET16 Get16;
+ PCD_PPI_GET32 Get32;
+ PCD_PPI_GET64 Get64;
+ PCD_PPI_GET_POINTER GetPtr;
+ PCD_PPI_GET_BOOLEAN GetBool;
+ PCD_PPI_GET_SIZE GetSize;
+
+ PCD_PPI_GET_EX_8 Get8Ex;
+ PCD_PPI_GET_EX_16 Get16Ex;
+ PCD_PPI_GET_EX_32 Get32Ex;
+ PCD_PPI_GET_EX_64 Get64Ex;
+ PCD_PPI_GET_EX_POINTER GetPtrEx;
+ PCD_PPI_GET_EX_BOOLEAN GetBoolEx;
+ PCD_PPI_GET_EX_SIZE GetSizeEx;
+
+ PCD_PPI_SET8 Set8;
+ PCD_PPI_SET16 Set16;
+ PCD_PPI_SET32 Set32;
+ PCD_PPI_SET64 Set64;
+ PCD_PPI_SET_POINTER SetPtr;
+ PCD_PPI_SET_BOOLEAN SetBool;
+
+ PCD_PPI_SET_EX_8 Set8Ex;
+ PCD_PPI_SET_EX_16 Set16Ex;
+ PCD_PPI_SET_EX_32 Set32Ex;
+ PCD_PPI_SET_EX_64 Set64Ex;
+ PCD_PPI_SET_EX_POINTER SetPtrEx;
+ PCD_PPI_SET_EX_BOOLEAN SetBoolEx;
+
+ PCD_PPI_CALLBACK_ONSET CallbackOnSet;
+ PCD_PPI_CANCEL_CALLBACK CancelCallback;
+ PCD_PPI_GET_NEXT_TOKEN GetNextToken;
+} PCD_PPI;
+
+
+#endif
diff --git a/MdePkg/Include/Ppi/PciCfg.h b/MdePkg/Include/Ppi/PciCfg.h
new file mode 100644
index 0000000000..b38a0db3ce
--- /dev/null
+++ b/MdePkg/Include/Ppi/PciCfg.h
@@ -0,0 +1,133 @@
+/** @file
+ This file declares PciCfg PPI used to access PCI configuration space in PEI
+
+ 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: PciCfg.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS
+ Version 0.91.
+
+**/
+
+#ifndef __PEI_PCI_CFG_H__
+#define __PEI_PCI_CFG_H__
+
+#define EFI_PEI_PCI_CFG_PPI_INSTALLED_GUID \
+ { \
+ 0xe1f2eba0, 0xf7b9, 0x4a26, {0x86, 0x20, 0x13, 0x12, 0x21, 0x64, 0x2a, 0x90 } \
+ }
+
+typedef struct _EFI_PEI_PCI_CFG_PPI EFI_PEI_PCI_CFG_PPI;
+
+#define PEI_PCI_CFG_ADDRESS(bus, dev, func, reg) ( \
+ (UINT64) ((((UINTN) bus) << 24) + (((UINTN) dev) << 16) + (((UINTN) func) << 8) + ((UINTN) reg)) \
+ ) & 0x00000000ffffffff
+
+typedef enum {
+ EfiPeiPciCfgWidthUint8 = 0,
+ EfiPeiPciCfgWidthUint16 = 1,
+ EfiPeiPciCfgWidthUint32 = 2,
+ EfiPeiPciCfgWidthUint64 = 3,
+ EfiPeiPciCfgWidthMaximum
+} EFI_PEI_PCI_CFG_PPI_WIDTH;
+
+typedef struct {
+ UINT8 Register;
+ UINT8 Function;
+ UINT8 Device;
+ UINT8 Bus;
+ UINT8 Reserved[4];
+} EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS;
+
+/**
+ PCI read and write operation.
+
+ @param PeiServices An indirect pointer to the PEI Services Table
+ published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Width The width of the access. Enumerated in bytes.
+
+ @param Address The physical address of the access.
+
+ @param Buffer A pointer to the buffer of data.
+
+ @retval EFI_SUCCESS The function completed successfully.
+
+ @retval EFI_NOT_YET_AVAILABLE The service has not been installed.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_PCI_CFG_PPI_IO) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_PCI_CFG_PPI *This,
+ IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,
+ IN UINT64 Address,
+ IN OUT VOID *Buffer
+ );
+
+/**
+ PCI read-modify-write operation.
+
+ @param PeiServices An indirect pointer to the PEI Services Table
+ published by the PEI Foundation.
+
+ @param This Pointer to local data for the interface.
+
+ @param Width The width of the access. Enumerated in bytes.
+
+ @param Address The physical address of the access.
+
+ @param SetBits Value of the bits to set.
+
+ @param ClearBits Value of the bits to clear.
+
+ @retval EFI_SUCCESS The function completed successfully.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_PCI_CFG_PPI_RW) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_PCI_CFG_PPI *This,
+ IN EFI_PEI_PCI_CFG_PPI_WIDTH Width,
+ IN UINT64 Address,
+ IN UINTN SetBits,
+ IN UINTN ClearBits
+ );
+
+/**
+ @par Ppi Description:
+ The EFI_PEI_PCI_CFG_PPI interfaces are used to abstract accesses to PCI
+ controllers behind a PCI root bridge controller.
+
+ @param Read
+ PCI read services. See the Read() function description.
+
+ @param Write
+ PCI write services. See the Write() function description.
+
+ @param Modify
+PCI read-modify-write services. See the Modify() function description.
+
+**/
+struct _EFI_PEI_PCI_CFG_PPI {
+ EFI_PEI_PCI_CFG_PPI_IO Read;
+ EFI_PEI_PCI_CFG_PPI_IO Write;
+ EFI_PEI_PCI_CFG_PPI_RW Modify;
+};
+
+extern EFI_GUID gEfiPciCfgPpiInServiceTableGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/ReadOnlyVariable.h b/MdePkg/Include/Ppi/ReadOnlyVariable.h
new file mode 100644
index 0000000000..3ea3c77535
--- /dev/null
+++ b/MdePkg/Include/Ppi/ReadOnlyVariable.h
@@ -0,0 +1,136 @@
+/** @file
+ This file declares Read-only Variable Service PPI
+
+ 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: ReadOnlyVariable.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS
+ Version 0.91.
+
+**/
+
+#ifndef __PEI_READ_ONLY_VARIABLE_PPI_H__
+#define __PEI_READ_ONLY_VARIABLE_PPI_H__
+
+#define EFI_PEI_READ_ONLY_VARIABLE_ACCESS_PPI_GUID \
+ { \
+ 0x3cdc90c6, 0x13fb, 0x4a75, {0x9e, 0x79, 0x59, 0xe9, 0xdd, 0x78, 0xb9, 0xfa } \
+ }
+
+typedef struct _EFI_PEI_READ_ONLY_VARIABLE_PPI EFI_PEI_READ_ONLY_VARIABLE_PPI;
+
+//
+// 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
+
+/**
+ Get Variable value by Name and GUID pair
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param VariableName A NULL-terminated Unicode string that is the name of the vendor¡¯s variable.
+
+ @param VendorGuid A unique identifier for the vendor.
+
+ @param Attributes If not NULL, a pointer to the memory location to return
+ the attributes bitmask for the variable.
+
+ @param DataSize On input, the size in bytes of the return Data buffer.
+ On output, the size of data returned in Data.
+
+ @param Data The buffer to return the contents of the variable.
+
+ @retval EFI_SUCCESS The function completed successfully.
+
+ @retval EFI_NOT_FOUND The variable was not found.
+
+ @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small for the result.
+
+ @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
+
+ @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_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
+ );
+
+/**
+ This function can be called multiple times to retrieve the VariableName
+ and VendorGuid of all variables currently available in the system. On each call
+ to GetNextVariableName() the previous results are passed into the interface,
+ and on output the interface returns the next variable name data. When the
+ entire variable list has been returned, the error EFI_NOT_FOUND is returned.
+
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.
+
+ @param VariableNameSize The size of the VariableName buffer.
+
+ @param VariableName On input, supplies the last VariableName that was
+ returned by GetNextVariableName(). On output, returns the Null-terminated
+ Unicode string of the current variable.
+
+ @param VendorGuid On input, supplies the last VendorGuid that was
+ returned by GetNextVariableName(). On output, returns the VendorGuid
+ of the current variable.
+
+ @retval EFI_SUCCESS The function completed successfully.
+
+ @retval EFI_NOT_FOUND The next variable was not found.
+
+ @retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the result.
+
+ @retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
+
+ @retval EFI_DEVICE_ERROR The variable name could not be retrieved due to a hardware error.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_NEXT_VARIABLE_NAME) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT UINTN *VariableNameSize,
+ IN OUT CHAR16 *VariableName,
+ IN OUT EFI_GUID *VendorGuid
+ );
+
+/**
+ @par Ppi Description:
+ This PPI provides a lightweight, read-only variant of the full EFI
+ variable services.
+
+ @param GetVariable
+ A service to ascertain a given variable name.
+
+ @param GetNextVariableName
+ A service to ascertain a variable based upon a given, known variable
+
+**/
+struct _EFI_PEI_READ_ONLY_VARIABLE_PPI {
+ EFI_PEI_GET_VARIABLE PeiGetVariable;
+ EFI_PEI_GET_NEXT_VARIABLE_NAME PeiGetNextVariableName;
+};
+
+extern EFI_GUID gEfiPeiReadOnlyVariablePpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/RecoveryModule.h b/MdePkg/Include/Ppi/RecoveryModule.h
new file mode 100644
index 0000000000..044a68aa72
--- /dev/null
+++ b/MdePkg/Include/Ppi/RecoveryModule.h
@@ -0,0 +1,67 @@
+/** @file
+ This file declares Recovery Module PPI.
+
+ 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: RecoveryModule.h
+
+ @par Revision Reference:
+ This PPI is defined in Framework of EFI Recovery Spec.
+ Version 0.9
+
+**/
+
+#ifndef __PEI_RECOVERY_MODULE_PPI_H__
+#define __PEI_RECOVERY_MODULE_PPI_H__
+
+#define EFI_PEI_RECOVERY_MODULE_PPI_GUID \
+ { \
+ 0xFB6D9542, 0x612D, 0x4f45, {0x87, 0x2F, 0x5C, 0xFF, 0x52, 0xE9, 0x3D, 0xCF } \
+ }
+
+typedef struct _EFI_PEI_RECOVERY_MODULE_PPI EFI_PEI_RECOVERY_MODULE_PPI;
+
+/**
+ Loads a DXE capsule from some media into memory and updates the HOB table
+ with the DXE firmware volume information.
+
+ @param PeiServices General-purpose services that are available to every PEIM.
+
+ @param This Indicates the EFI_PEI_RECOVERY_MODULE_PPI instance.
+
+ @retval EFI_SUCCESS The capsule was loaded correctly.
+
+ @retval EFI_DEVICE_ERROR A device error occurred.
+
+ @retval EFI_NOT_FOUND A recovery DXE capsule cannot be found.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_LOAD_RECOVERY_CAPSULE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_RECOVERY_MODULE_PPI *This
+ );
+
+/**
+ @par Ppi Description:
+ Finds and loads the recovery files.
+
+ @param LoadRecoveryCapsule
+ Loads a DXE binary capsule into memory.
+
+**/
+struct _EFI_PEI_RECOVERY_MODULE_PPI {
+ EFI_PEI_LOAD_RECOVERY_CAPSULE LoadRecoveryCapsule;
+};
+
+extern EFI_GUID gEfiPeiRecoveryModulePpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/Reset.h b/MdePkg/Include/Ppi/Reset.h
new file mode 100644
index 0000000000..be35e70d9a
--- /dev/null
+++ b/MdePkg/Include/Ppi/Reset.h
@@ -0,0 +1,35 @@
+/** @file
+ This file declares Reset PPI used to reset the platform
+
+ 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: Reset.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS
+ Version 0.91.
+
+**/
+
+#ifndef __RESET_PPI_H__
+#define __RESET_PPI_H__
+
+#define EFI_PEI_RESET_PPI_GUID \
+ { \
+ 0xef398d58, 0x9dfd, 0x4103, {0xbf, 0x94, 0x78, 0xc6, 0xf4, 0xfe, 0x71, 0x2f } \
+ }
+
+typedef struct {
+ EFI_PEI_RESET_SYSTEM ResetSystem;
+} EFI_PEI_RESET_PPI;
+
+extern EFI_GUID gEfiPeiResetPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/S3Resume.h b/MdePkg/Include/Ppi/S3Resume.h
new file mode 100644
index 0000000000..c458430b98
--- /dev/null
+++ b/MdePkg/Include/Ppi/S3Resume.h
@@ -0,0 +1,65 @@
+/** @file
+ This file declares S3 Resume PPI.
+
+ 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: S3Resume.h
+
+ @par Revision Reference:
+ This PPI is defined in Framework of EFI S3 Resume Boot Path spec.
+ Version 0.9
+
+**/
+
+#ifndef __PEI_S3_RESUME_PPI_H__
+#define __PEI_S3_RESUME_PPI_H__
+
+#define EFI_PEI_S3_RESUME_PPI_GUID \
+ { \
+ 0x4426CCB2, 0xE684, 0x4a8a, {0xAE, 0x40, 0x20, 0xD4, 0xB0, 0x25, 0xB7, 0x10 } \
+ }
+
+typedef struct _EFI_PEI_S3_RESUME_PPI EFI_PEI_S3_RESUME_PPI;
+
+/**
+ Restores the platform to its preboot configuration for an S3 resume and
+ jumps to the OS waking vector.
+
+ @param PeiServices Pointer to the PEI Services Table
+
+ @retval EFI_ABORTED Execution of the S3 resume boot script table failed.
+
+ @retval EFI_NOT_FOUND Some necessary information that is used for
+ the S3 resume boot path could not be located.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_S3_RESUME_PPI_RESTORE_CONFIG) (
+ IN EFI_PEI_SERVICES **PeiServices
+ );
+
+/**
+ @par Ppi Description:
+ EFI_PEI_S3_RESUME_PPI accomplishes the firmware S3 resume boot
+ path and transfers control to OS.
+
+ @param S3RestoreConfig
+ Restores the platform to its preboot configuration for an S3 resume and
+ jumps to the OS waking vector.
+
+**/
+struct _EFI_PEI_S3_RESUME_PPI {
+ EFI_PEI_S3_RESUME_PPI_RESTORE_CONFIG S3RestoreConfig;
+};
+
+extern EFI_GUID gEfiPeiS3ResumePpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/SecPlatformInformation.h b/MdePkg/Include/Ppi/SecPlatformInformation.h
new file mode 100644
index 0000000000..1e9625923c
--- /dev/null
+++ b/MdePkg/Include/Ppi/SecPlatformInformation.h
@@ -0,0 +1,86 @@
+/** @file
+ This file declares Sec Platform Information PPI.
+
+ 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: SecPlatformInformation.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS.
+ Version 0.91.
+
+**/
+
+#ifndef __SEC_PLATFORM_INFORMATION_PPI_H__
+#define __SEC_PLATFORM_INFORMATION_PPI_H__
+
+#define EFI_SEC_PLATFORM_INFORMATION_GUID \
+ { \
+ 0x6f8c2b35, 0xfef4, 0x448d, {0x82, 0x56, 0xe1, 0x1b, 0x19, 0xd6, 0x10, 0x77 } \
+ }
+
+typedef struct _EFI_SEC_PLATFORM_INFORMATION_PPI EFI_SEC_PLATFORM_INFORMATION_PPI;
+
+extern EFI_GUID gEfiSecPlatformInformationPpiGuid;
+
+///
+/// EFI_HEALTH_FLAGS
+///
+typedef union {
+ struct {
+ UINT32 Status : 2;
+ UINT32 Tested : 1;
+ UINT32 Reserved1 :13;
+ UINT32 VirtualMemoryUnavailable : 1;
+ UINT32 Ia32ExecutionUnavailable : 1;
+ UINT32 FloatingPointUnavailable : 1;
+ UINT32 MiscFeaturesUnavailable : 1;
+ UINT32 Reserved2 :12;
+ } Bits;
+ UINT32 Uint32;
+} EFI_HEALTH_FLAGS;
+
+typedef struct {
+ EFI_HEALTH_FLAGS HealthFlags;
+} EFI_SEC_PLATFORM_INFORMATION_RECORD;
+
+/**
+ This interface conveys state information out of the Security (SEC) phase into PEI.
+
+ @param PeiServices Pointer to the PEI Services Table.
+
+ @param StructureSize Pointer to the variable describing size of the input buffer.
+
+ @param PlatformInformationRecord Pointer to the EFI_SEC_PLATFORM_INFORMATION_RECORD.
+
+ @retval EFI_SUCCESS The data was successfully returned.
+
+ @retval EFI_BUFFER_TOO_SMALL The buffer was too small.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_SEC_PLATFORM_INFORMATION) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT UINT64 *StructureSize,
+ OUT EFI_SEC_PLATFORM_INFORMATION_RECORD *PlatformInformationRecord
+ );
+
+/**
+ @par Ppi Description:
+
+ @param Name
+
+**/
+struct _EFI_SEC_PLATFORM_INFORMATION_PPI {
+ EFI_SEC_PLATFORM_INFORMATION PlatformInformation;
+};
+
+#endif
diff --git a/MdePkg/Include/Ppi/SectionExtraction.h b/MdePkg/Include/Ppi/SectionExtraction.h
new file mode 100644
index 0000000000..afa473d9ef
--- /dev/null
+++ b/MdePkg/Include/Ppi/SectionExtraction.h
@@ -0,0 +1,118 @@
+/** @file
+ This file declares Section Extraction PPI.
+
+ 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: SectionExtraction.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS.
+ Version 0.91.
+
+**/
+
+#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 } \
+ }
+
+typedef struct _EFI_PEI_SECTION_EXTRACTION_PPI EFI_PEI_SECTION_EXTRACTION_PPI;
+
+//
+// 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
+
+/**
+ The function is used to retrieve a section from within a section file.
+ It will retrieve both encapsulation sections and leaf sections in their entirety,
+ exclusive of the section header.
+
+ @param PeiServices Pointer to the PEI Services Table.
+
+ @param This Indicates the calling context
+
+ @param SectionType Pointer to an EFI_SECTION_TYPE. If SectionType == NULL,
+ the contents of the entire section are returned in Buffer. If SectionType
+ is not NULL, only the requested section is returned.
+
+ @param SectionDefinitionGuid Pointer to an EFI_GUID.
+ If SectionType == EFI_SECTION_GUID_DEFINED, SectionDefinitionGuid
+ indicates for which section GUID to search.
+ If SectionType != EFI_SECTION_GUID_DEFINED, SectionDefinitionGuid
+ is unused and is ignored.
+
+ @param SectionInstance If SectionType is not NULL, indicates which
+ instance of the requested section type to return.
+
+ @param Buffer Pointer to a pointer to a buffer in which the section
+ contents are returned.
+
+ @param BufferSize A pointer to a caller-allocated UINT32.On input, *BufferSize
+ indicates the size in bytes of the memory region pointed to by Buffer.On output,
+ *BufferSize contains the number of bytes required to read the section.
+
+ @param AuthenticationStatus A pointer to a caller-allocated UINT32 in
+ which any metadata from encapsulating GUID-defined sections is returned.
+
+ @retval EFI_SUCCESS The section was successfully processed and the section
+ contents were returned in Buffer.
+
+ @retval EFI_PROTOCOL_ERROR A GUID-defined section was encountered in
+ the file with its EFI_GUIDED_SECTION_PROCESSING_REQUIRED bit set, but
+ there was no corresponding GUIDed Section Extraction Protocol in the
+ handle database.*Buffer is unmodified.
+
+ @retval EFI_NOT_FOUND The requested section does not exist.*Buffer is unmodified.
+
+ @retval EFI_OUT_OF_RESOURCES The system has insufficient resources to process the request.
+
+ @retval EFI_INVALID_PARAMETER The SectionStreamHandle does not exist.
+
+ @retval EFI_WARN_TOO_SMALL The size of the input buffer is insufficient to
+ contain the requested section. The input buffer is filled and contents are
+ section contents are truncated.
+
+**/
+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
+ );
+
+/**
+ @par Ppi Description:
+ This PPI supports encapsulating sections, such as GUIDed sections used to
+ authenticate the file encapsulation of other domain-specific wrapping.
+
+ @param GetSection
+ Retrieves a section from within a section file.
+
+**/
+struct _EFI_PEI_SECTION_EXTRACTION_PPI {
+ EFI_PEI_GET_SECTION PeiGetSection;
+};
+
+extern EFI_GUID gEfiPeiSectionExtractionPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/Security.h b/MdePkg/Include/Ppi/Security.h
new file mode 100644
index 0000000000..cc59023bf5
--- /dev/null
+++ b/MdePkg/Include/Ppi/Security.h
@@ -0,0 +1,77 @@
+/** @file
+ This file declares Security Architectural PPI.
+
+ 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: Security.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS.
+ Version 0.91.
+
+**/
+
+#ifndef __SECURITY_PPI_H__
+#define __SECURITY_PPI_H__
+
+#define EFI_PEI_SECURITY_PPI_GUID \
+ { \
+ 0x1388066e, 0x3a57, 0x4efa, {0x98, 0xf3, 0xc1, 0x2f, 0x3a, 0x95, 0x8a, 0x29 } \
+ }
+
+typedef struct _EFI_PEI_SECURITY_PPI EFI_PEI_SECURITY_PPI;
+
+/**
+ Allows the platform builder to implement a security policy in response
+ to varying file authentication states.
+
+ @param PeiServices Pointer to the PEI Services Table.
+
+ @param This Interface pointer that implements the particular EFI_PEI_SECURITY_PPI instance.
+
+ @param AuthenticationStatus Status returned by the verification service as part of section extraction.
+
+ @param FfsFileHeader Pointer to the file under review.
+
+ @param DeferExecution Pointer to a variable that alerts the PEI Foundation to defer execution of a PEIM.
+
+ @retval EFI_SUCCESS The service performed its action successfully.
+
+ @retval EFI_SECURITY_VIOLATION The object cannot be trusted
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SECURITY_AUTHENTICATION_STATE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_SECURITY_PPI *This,
+ IN UINT32 AuthenticationStatus,
+ IN EFI_FFS_FILE_HEADER *FfsFileHeader,
+ IN OUT BOOLEAN *StartCrisisRecovery
+ );
+
+/**
+ @par Ppi Description:
+ This PPI is installed by some platform PEIM that abstracts the security
+ policy to the PEI Foundation, namely the case of a PEIM¡¯s authentication
+ state being returned during the PEI section extraction process.
+
+ @param AuthenticationState
+ Allows the platform builder to implement a security policy in response
+ to varying file authentication states.
+
+**/
+struct _EFI_PEI_SECURITY_PPI {
+ EFI_PEI_SECURITY_AUTHENTICATION_STATE AuthenticationState;
+};
+
+extern EFI_GUID gEfiPeiSecurityPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/Smbus.h b/MdePkg/Include/Ppi/Smbus.h
new file mode 100644
index 0000000000..7360e5b12f
--- /dev/null
+++ b/MdePkg/Include/Ppi/Smbus.h
@@ -0,0 +1,258 @@
+/** @file
+ This file declares Smbus PPI.
+
+ 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: Smbus.h
+
+ @par Revision Reference:
+ This PPI is defined in Framework of EFI SmBus PPI spec.
+ Version 0.9
+
+**/
+
+#ifndef _PEI_SMBUS_PPI_H
+#define _PEI_SMBUS_PPI_H
+
+#define EFI_PEI_SMBUS_PPI_GUID \
+ { \
+ 0xabd42895, 0x78cf, 0x4872, {0x84, 0x44, 0x1b, 0x5c, 0x18, 0xb, 0xfb, 0xda } \
+ }
+
+typedef struct _EFI_PEI_SMBUS_PPI EFI_PEI_SMBUS_PPI;
+
+/**
+ Executes an SMBus operation to an SMBus controller.
+
+ @param PeiServices A pointer to the system PEI Services Table.
+
+ @param This A pointer to the EFI_PEI_SMBUS_PPI instance.
+
+ @param SlaveAddress The SMBUS hardware address to which the SMBUS
+ device is preassigned or allocated.
+
+ @param Command This command is transmitted by the SMBus host
+ controller to the SMBus slave device and the interpretation is
+ SMBus slave device specific.
+
+ @param Operation Signifies which particular SMBus hardware protocol
+ instance that it will use to execute the SMBus transactions.
+
+ @param PecCheck Defines if Packet Error Code (PEC) checking is required
+ for this operation.
+
+ @param Length Signifies the number of bytes that this operation will do.
+
+ @param Buffer Contains the value of data to execute to the SMBus slave device.
+
+ @retval EFI_SUCCESS The last data that was returned from the access
+ matched the poll exit criteria.
+
+ @retval EFI_CRC_ERROR The checksum is not correct (PEC is incorrect)
+
+ @retval EFI_TIMEOUT Timeout expired before the operation was completed.
+ Timeout is determined by the SMBus host controller device.
+
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed
+ due to a lack of resources.
+
+ @retval EFI_DEVICE_ERROR The request was not completed because
+ a failure reflected in the Host Status Register bit.
+
+ @retval EFI_INVALID_PARAMETER Operation is not defined in EFI_SMBUS_OPERATION.
+ Or Length/Buffer is NULL for operations except for EfiSmbusQuickRead and
+ EfiSmbusQuickWrite. Length is outside the range of valid values.
+
+ @retval EFI_UNSUPPORTED The SMBus operation or PEC is not supported.
+
+ @retval EFI_BUFFER_TOO_SMALL Buffer is not sufficient for this operation.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS_PPI_EXECUTE_OPERATION) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_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
+ );
+
+typedef struct {
+ UINT32 VendorSpecificId;
+ UINT16 SubsystemDeviceId;
+ UINT16 SubsystemVendorId;
+ UINT16 Interface;
+ UINT16 DeviceId;
+ UINT16 VendorId;
+ UINT8 VendorRevision;
+ UINT8 DeviceCapabilities;
+} EFI_SMBUS_UDID;
+
+/**
+ CallBack function can be registered in EFI_PEI_SMBUS_PPI_NOTIFY.
+
+ @param PeiServices A pointer to the system PEI Services Table.
+
+ @param This A pointer to the EFI_PEI_SMBUS_PPI instance.
+
+ @param SlaveAddress The SMBUS hardware address to which the SMBUS
+ device is preassigned or allocated.
+
+ @param Data Data of the SMBus host notify command that
+ the caller wants to be called.
+
+ @return Status Code
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS_NOTIFY_FUNCTION) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_SMBUS_PPI *SmbusPpi,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN UINTN Data
+ );
+
+/**
+ The ArpDevice() function enumerates the entire bus or enumerates a specific
+ device that is identified by SmbusUdid.
+
+ @param PeiServices A pointer to the system PEI Services Table.
+
+ @param This A pointer to the EFI_PEI_SMBUS_PPI instance.
+
+ @param ArpAll A Boolean expression that indicates if the host drivers need
+ to enumerate all the devices or enumerate only the device that is identified
+ by SmbusUdid. If ArpAll is TRUE, SmbusUdid and SlaveAddress are optional.
+ If ArpAll is FALSE, ArpDevice will enumerate SmbusUdid and the address
+ will be at SlaveAddress.
+
+ @param SmbusUdid The targeted SMBus Unique Device Identifier (UDID).
+ The UDID may not exist for SMBus devices with fixed addresses.
+
+ @param SlaveAddress The new SMBus address for the slave device for
+ which the operation is targeted.
+
+ @retval EFI_SUCCESS The SMBus slave device address was set.
+
+ @retval EFI_INVALID_PARAMETER SlaveAddress is NULL.
+
+ @retval EFI_OUT_OF_RESOURCES The request could not be completed
+ due to a lack of resources.
+
+ @retval EFI_TIMEOUT The SMBus slave device did not respond.
+
+ @retval EFI_DEVICE_ERROR The request was not completed because the transaction failed.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS_PPI_ARP_DEVICE) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_SMBUS_PPI *This,
+ IN BOOLEAN ArpAll,
+ IN EFI_SMBUS_UDID *SmbusUdid, OPTIONAL
+ IN OUT EFI_SMBUS_DEVICE_ADDRESS *SlaveAddress OPTIONAL
+ );
+
+typedef struct {
+ EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;
+ EFI_SMBUS_UDID SmbusDeviceUdid;
+} EFI_SMBUS_DEVICE_MAP;
+
+/**
+ The GetArpMap() function returns the mapping of all the SMBus devices
+ that are enumerated by the SMBus host driver.
+
+ @param PeiServices A pointer to the system PEI Services Table.
+
+ @param This A pointer to the EFI_PEI_SMBUS_PPI instance.
+
+ @param Length Size of the buffer that contains the SMBus device map.
+
+ @param SmbusDeviceMap The pointer to the device map as enumerated
+ by the SMBus controller driver.
+
+ @retval EFI_SUCCESS The device map was returned correctly in the buffer.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS_PPI_GET_ARP_MAP) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_SMBUS_PPI *This,
+ IN OUT UINTN *Length,
+ IN OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap
+ );
+
+/**
+ The Notify() function registers all the callback functions to allow the
+ bus driver to call these functions when the SlaveAddress/Data pair happens.
+
+ @param PeiServices A pointer to the system PEI Services Table.
+
+ @param This A pointer to the EFI_PEI_SMBUS_PPI instance.
+
+ @param SlaveAddress Address that the host controller detects as
+ sending a message and calls all the registered functions.
+
+ @param Data Data that the host controller detects as sending a message
+ and calls all the registered functions.
+
+ @param NotifyFunction The function to call when the bus driver
+ detects the SlaveAddress and Data pair.
+
+ @retval EFI_SUCCESS NotifyFunction has been registered.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SMBUS_PPI_NOTIFY) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_SMBUS_PPI *This,
+ IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
+ IN UINTN Data,
+ IN EFI_PEI_SMBUS_NOTIFY_FUNCTION NotifyFunction
+ );
+
+/**
+ @par Ppi Description:
+ Provides the basic I/O interfaces that a PEIM uses to access
+ its SMBus controller and the slave devices attached to it.
+
+ @param Execute
+ Executes the SMBus operation to an SMBus slave device.
+
+ @param ArpDevice
+ Allows an SMBus 2.0 device(s) to be Address Resolution Protocol (ARP)
+
+ @param GetArpMap
+ Allows a PEIM to retrieve the address that was allocated by the SMBus
+ host controller during enumeration/ARP.
+
+ @param Notify
+ Allows a driver to register for a callback to the SMBus host
+ controller driver when the bus issues a notification to the bus controller PEIM.
+
+**/
+struct _EFI_PEI_SMBUS_PPI {
+ EFI_PEI_SMBUS_PPI_EXECUTE_OPERATION Execute;
+ EFI_PEI_SMBUS_PPI_ARP_DEVICE ArpDevice;
+ EFI_PEI_SMBUS_PPI_GET_ARP_MAP GetArpMap;
+ EFI_PEI_SMBUS_PPI_NOTIFY Notify;
+};
+
+extern EFI_GUID gEfiPeiSmbusPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/Stall.h b/MdePkg/Include/Ppi/Stall.h
new file mode 100644
index 0000000000..363baa6d39
--- /dev/null
+++ b/MdePkg/Include/Ppi/Stall.h
@@ -0,0 +1,73 @@
+/** @file
+ This file declares Stall PPI.
+
+ This code abstracts the PEI core to provide Stall services.
+
+ 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: Stall.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS.
+ Version 0.91.
+
+**/
+
+#ifndef __STALL_PPI_H__
+#define __STALL_PPI_H__
+
+#define EFI_PEI_STALL_PPI_GUID \
+ { \
+ 0x1f4c6f90, 0xb06b, 0x48d8, {0xa2, 0x01, 0xba, 0xe5, 0xf1, 0xcd, 0x7d, 0x56 } \
+ }
+
+typedef struct _EFI_PEI_STALL_PPI EFI_PEI_STALL_PPI;
+
+/**
+ The Stall() function provides a blocking stall for at least the number
+ of microseconds stipulated in the final argument of the API.
+
+ @param PeiServices An indirect pointer to the PEI Services Table
+ published by the PEI Foundation.
+
+ @param This Pointer to the local data for the interface.
+
+ @param Microseconds Number of microseconds for which to stall.
+
+ @retval EFI_SUCCESS The service provided at least the required delay.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_STALL) (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_STALL_PPI *This,
+ IN UINTN Microseconds
+ );
+
+/**
+ @par Ppi Description:
+ This service provides a simple, blocking stall with platform-specific resolution.
+
+ @param Resolution
+ The resolution in microseconds of the stall services.
+
+ @param Stall
+ The actual stall procedure call.
+
+**/
+struct _EFI_PEI_STALL_PPI {
+ UINTN Resolution;
+ EFI_PEI_STALL Stall;
+};
+
+extern EFI_GUID gEfiPeiStallPpiGuid;
+
+#endif
diff --git a/MdePkg/Include/Ppi/StatusCode.h b/MdePkg/Include/Ppi/StatusCode.h
new file mode 100644
index 0000000000..5470222c5b
--- /dev/null
+++ b/MdePkg/Include/Ppi/StatusCode.h
@@ -0,0 +1,42 @@
+/** @file
+ This file declares Status Code PPI.
+
+ 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: StatusCode.h
+
+ @par Revision Reference:
+ This PPI is defined in PEI CIS.
+ Version 0.91.
+
+**/
+
+#ifndef __STATUS_CODE_PPI_H__
+#define __STATUS_CODE_PPI_H__
+
+#define EFI_PEI_REPORT_PROGRESS_CODE_PPI_GUID \
+ { 0x229832d3, 0x7a30, 0x4b36, {0xb8, 0x27, 0xf4, 0xc, 0xb7, 0xd4, 0x54, 0x36 } }
+
+/**
+ @par Ppi Description:
+ This ppi provides the sevice to report status code. There can be only one instance
+ of this service in the system.
+
+ @param ReportStatusCode
+ Service that allows PEIMs to report status codes. This function is defined in Peicis.h
+
+**/
+typedef struct {
+ EFI_PEI_REPORT_STATUS_CODE ReportStatusCode;
+} EFI_PEI_PROGRESS_CODE_PPI;
+
+extern EFI_GUID gEfiPeiStatusCodePpiGuid;
+
+#endif