From 878ddf1fc3540a715f63594ed22b6929e881afb4 Mon Sep 17 00:00:00 2001 From: bbahnsen Date: Fri, 21 Apr 2006 22:54:32 +0000 Subject: Initial import. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Include/Ppi/BlockIo.h | 161 +++++++++ MdePkg/Include/Ppi/BootInRecoveryMode.h | 33 ++ MdePkg/Include/Ppi/BootScriptExecuter.h | 78 +++++ MdePkg/Include/Ppi/CpuIo.h | 520 ++++++++++++++++++++++++++++ MdePkg/Include/Ppi/DeviceRecoveryModule.h | 143 ++++++++ MdePkg/Include/Ppi/DxeIpl.h | 70 ++++ MdePkg/Include/Ppi/EndOfPeiPhase.h | 31 ++ MdePkg/Include/Ppi/FindFv.h | 76 ++++ MdePkg/Include/Ppi/LoadFile.h | 78 +++++ MdePkg/Include/Ppi/MasterBootMode.h | 34 ++ MdePkg/Include/Ppi/MemoryDiscovered.h | 34 ++ MdePkg/Include/Ppi/Pcd.h | 294 ++++++++++++++++ MdePkg/Include/Ppi/PciCfg.h | 133 +++++++ MdePkg/Include/Ppi/ReadOnlyVariable.h | 136 ++++++++ MdePkg/Include/Ppi/RecoveryModule.h | 67 ++++ MdePkg/Include/Ppi/Reset.h | 35 ++ MdePkg/Include/Ppi/S3Resume.h | 65 ++++ MdePkg/Include/Ppi/SecPlatformInformation.h | 86 +++++ MdePkg/Include/Ppi/SectionExtraction.h | 118 +++++++ MdePkg/Include/Ppi/Security.h | 77 ++++ MdePkg/Include/Ppi/Smbus.h | 258 ++++++++++++++ MdePkg/Include/Ppi/Stall.h | 73 ++++ MdePkg/Include/Ppi/StatusCode.h | 42 +++ 23 files changed, 2642 insertions(+) create mode 100644 MdePkg/Include/Ppi/BlockIo.h create mode 100644 MdePkg/Include/Ppi/BootInRecoveryMode.h create mode 100644 MdePkg/Include/Ppi/BootScriptExecuter.h create mode 100644 MdePkg/Include/Ppi/CpuIo.h create mode 100644 MdePkg/Include/Ppi/DeviceRecoveryModule.h create mode 100644 MdePkg/Include/Ppi/DxeIpl.h create mode 100644 MdePkg/Include/Ppi/EndOfPeiPhase.h create mode 100644 MdePkg/Include/Ppi/FindFv.h create mode 100644 MdePkg/Include/Ppi/LoadFile.h create mode 100644 MdePkg/Include/Ppi/MasterBootMode.h create mode 100644 MdePkg/Include/Ppi/MemoryDiscovered.h create mode 100644 MdePkg/Include/Ppi/Pcd.h create mode 100644 MdePkg/Include/Ppi/PciCfg.h create mode 100644 MdePkg/Include/Ppi/ReadOnlyVariable.h create mode 100644 MdePkg/Include/Ppi/RecoveryModule.h create mode 100644 MdePkg/Include/Ppi/Reset.h create mode 100644 MdePkg/Include/Ppi/S3Resume.h create mode 100644 MdePkg/Include/Ppi/SecPlatformInformation.h create mode 100644 MdePkg/Include/Ppi/SectionExtraction.h create mode 100644 MdePkg/Include/Ppi/Security.h create mode 100644 MdePkg/Include/Ppi/Smbus.h create mode 100644 MdePkg/Include/Ppi/Stall.h create mode 100644 MdePkg/Include/Ppi/StatusCode.h (limited to 'MdePkg/Include/Ppi') 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 -- cgit v1.2.3