summaryrefslogtreecommitdiff
path: root/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi
diff options
context:
space:
mode:
authorGuo Mang <mang.guo@intel.com>2016-12-23 12:57:11 +0800
committerGuo Mang <mang.guo@intel.com>2017-05-09 13:02:55 +0800
commitf204d37aca86f4f321a3a8301e847b125005c6de (patch)
treeea783d9bb0e5f83a7bdc89437c8ff9af50ad32d2 /Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi
parent70ba44c1dada5be3847b50b78bd07e45979fd33b (diff)
downloadedk2-platforms-f204d37aca86f4f321a3a8301e847b125005c6de.tar.xz
BroxtonSiPkg: Add Include and Library
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang <mang.guo@intel.com>
Diffstat (limited to 'Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi')
-rw-r--r--Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/BlockIoPei.h275
-rw-r--r--Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/PeiBlockIo.h236
-rw-r--r--Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPcieDeviceTable.h54
-rw-r--r--Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPolicy.h37
-rw-r--r--Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPolicyPreMem.h35
5 files changed, 637 insertions, 0 deletions
diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/BlockIoPei.h b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/BlockIoPei.h
new file mode 100644
index 0000000000..74f0908989
--- /dev/null
+++ b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/BlockIoPei.h
@@ -0,0 +1,275 @@
+/** @file
+ Provides the override services required to access a block I/O device during PEI recovery
+ boot mode.
+
+ The Recovery Module PPI and the Device Recovery Module PPI are device neutral.
+ This PPI is device specific and addresses the most common form of recovery
+ media-block I/O devices such as legacy floppy, CD-ROM, or IDE devices.
+
+ The Recovery Block I/O PPI is used to access block devices. Because the Recovery
+ Block I/O PPIs that are provided by the PEI ATAPI driver and PEI legacy floppy
+ driver are the same, here we define a set of general PPIs for both drivers to use.
+
+ Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef _BLOCK_IO_PEI_H_
+#define _BLOCK_IO_PEI_H_
+
+//
+// Global ID for EFI_PEI_RECOVERY_BLOCK_IO_PPI
+//
+#define EFI_PEI_RECOVERY_BLOCK_IO_PPI_GUID \
+ { \
+ 0x695d8aa1, 0x42ee, 0x4c46, { 0x80, 0x5c, 0x6e, 0xa6, 0xbc, 0xe7, 0x99, 0xe3 } \
+ }
+
+//
+// The forward declaration for EFI_PEI_RECOVERY_BLOCK_IO_PPI.
+//
+typedef struct _EFI_PEI_RECOVERY_BLOCK_IO_PPI EFI_PEI_RECOVERY_BLOCK_IO_PPI;
+
+//
+// All blocks on the recovery device are addressed with a 64-bit Logical Block Address (LBA).
+//
+typedef UINT64 EFI_PEI_LBA;
+
+//
+// EFI_PEI_BLOCK_DEVICE_TYPE
+//
+typedef enum {
+ LegacyFloppy = 0, ///< The recovery device is a floppy.
+ IdeCDROM = 1, ///< The recovery device is an IDE CD-ROM
+ IdeLS120 = 2, ///< The recovery device is an IDE LS-120
+ UsbMassStorage= 3, ///< The recovery device is a USB Mass Storage device
+ eMMCDevice = 4, ///< The recovery device is a eMMC device
+ UfsDevice = 5, ///< The recovery device is a UFS device
+ MaxDeviceType
+} EFI_PEI_BLOCK_DEVICE_TYPE;
+
+typedef struct {
+ //
+ // The type of media device being referenced by DeviceIndex.
+ //
+ EFI_PEI_BLOCK_DEVICE_TYPE DeviceType;
+ //
+ // A flag that indicates if media is present. This flag is always set for
+ // nonremovable media devices.
+ //
+ BOOLEAN MediaPresent;
+ //
+ // The last logical block that the device supports.
+ //
+ UINTN LastBlock;
+ //
+ // The size of a logical block in bytes.
+ //
+ UINTN BlockSize;
+} EFI_PEI_BLOCK_IO_MEDIA;
+
+/**
+ Gets the count of block I/O devices that one specific block driver detects.
+
+ This function is used for getting the count of block I/O devices that one
+ specific block driver detects. To the PEI ATAPI driver, it returns the number
+ of all the detected ATAPI devices it detects during the enumeration process.
+ To the PEI legacy floppy driver, it returns the number of all the legacy
+ devices it finds during its enumeration process. If no device is detected,
+ then the function will return zero.
+
+ @param[in] PeiServices General-purpose services that are available
+ to every PEIM.
+ @param[in] This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI
+ instance.
+ @param[out] NumberBlockDevices The number of block I/O devices discovered.
+
+ @retval EFI_SUCCESS The operation performed successfully.
+
+**/
+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.
+
+ This function will provide the caller with the specified block device's media
+ information. If the media changes, calling this function will update the media
+ information accordingly.
+
+ @param[in] PeiServices General-purpose services that are available to every
+ PEIM
+ @param[in] This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
+ @param[in] 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[out] MediaInfo The media information of the specified block media.
+ The caller is responsible for the ownership of this
+ data structure.
+
+ @par Note:
+ The MediaInfo structure describes an enumeration of possible block device
+ types. This enumeration exists because no device paths are actually passed
+ across interfaces that describe the type or class of hardware that is publishing
+ the block I/O interface. This enumeration will allow for policy decisions
+ in the Recovery PEIM, such as "Try to recover from legacy floppy first,
+ LS-120 second, CD-ROM third." If there are multiple partitions abstracted
+ by a given device type, they should be reported in ascending order; this
+ order also applies to nested partitions, such as legacy MBR, where the
+ outermost partitions would have precedence in the reporting order. The
+ same logic applies to systems such as IDE that have precedence relationships
+ like "Master/Slave" or "Primary/Secondary". The master device should be
+ reported first, the slave second.
+
+ @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.
+
+ The function reads the requested number of blocks from the device. All the
+ blocks are read, or an error is returned. If there is no media in the device,
+ the function returns EFI_NO_MEDIA.
+
+ @param[in] PeiServices General-purpose services that are available to
+ every PEIM.
+ @param[in] This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
+ @param[in] 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, 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[in] StartLBA The starting logical block address (LBA) to read from
+ on the device
+ @param[in] BufferSize The size of the Buffer in bytes. This number must be
+ a multiple of the intrinsic block size of the device.
+ @param[out] 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_NO_MEDIA There is no media in the device.
+ @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multiple of
+ the intrinsic block size of 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
+ );
+
+ /**
+ Write the requested number of blocks to the specified block device.
+
+ The function writes the requested number of blocks to the device. All the
+ blocks are written, or an error is returned. If there is no media in the device,
+ the function returns EFI_NO_MEDIA.
+
+ @param[in] PeiServices General-purpose services that are available to
+ every PEIM.
+ @param[in] This Indicates the EFI_PEI_RECOVERY_BLOCK_IO_PPI instance.
+ @param[in] 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, 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[in] StartLBA The starting logical block address (LBA) to write to
+ on the device
+ @param[in] BufferSize The size of the Buffer in bytes. This number must be
+ a multiple of the intrinsic block size of the device.
+ @param[in] 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 written correctly to the device.
+ @retval EFI_DEVICE_ERROR The device reported an error while attempting
+ to perform the write operation.
+ @retval EFI_INVALID_PARAMETER The write request contains LBAs that are not
+ valid, or the buffer is not properly aligned.
+ @retval EFI_NO_MEDIA There is no media in the device.
+ @retval EFI_BAD_BUFFER_SIZE The BufferSize parameter is not a multiple of
+ the intrinsic block size of the device.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_WRITE_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,
+ IN VOID *Buffer
+ );
+
+//
+// EFI_PEI_RECOVERY_BLOCK_IO_PPI provides the services that are required
+// to access a block I/O device during PEI recovery boot mode.
+//
+struct _EFI_PEI_RECOVERY_BLOCK_IO_PPI {
+ //
+ // Gets the number of block I/O devices that the specific block driver manages.
+ //
+ EFI_PEI_GET_NUMBER_BLOCK_DEVICES GetNumberOfBlockDevices;
+
+ //
+ // Gets the specified media information.
+ //
+ EFI_PEI_GET_DEVICE_MEDIA_INFORMATION GetBlockDeviceMediaInfo;
+
+ //
+ // Reads the requested number of blocks from the specified block device.
+ //
+ EFI_PEI_READ_BLOCKS ReadBlocks;
+
+ //
+ // Writes the requested number of blocks to the specified block device.
+ //
+ EFI_PEI_WRITE_BLOCKS WriteBlocks;
+};
+
+extern EFI_GUID gEfiPeiVirtualBlockIoPpiGuid;
+
+#endif
+
diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/PeiBlockIo.h b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/PeiBlockIo.h
new file mode 100644
index 0000000000..8e2cfd599b
--- /dev/null
+++ b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/PeiBlockIo.h
@@ -0,0 +1,236 @@
+/** @file
+ Block IO protocol as defined in the UEFI 2.0 specification.
+
+ The Block IO protocol is used to abstract block devices like hard drives,
+ DVD-ROMs and floppy drives
+
+ Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef __PEI_BLOCK_IO_H__
+#define __PEI_BLOCK_IO_H__
+
+#define PEI_BLOCK_IO_PPI_GUID \
+ { \
+ 0xbc5fa650, 0xedbb, 0x4d0d, { 0xb3, 0xa3, 0xd9, 0x89, 0x7, 0xf8, 0x47, 0xdf } \
+ }
+
+typedef struct _PEI_BLOCK_IO_PPI PEI_BLOCK_IO_PPI;
+
+
+/**
+ Reset the Block Device.
+
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] ExtendedVerification Driver may perform diagnostics on reset.
+
+ @retval EFI_SUCCESS The device was reset.
+ @retval EFI_DEVICE_ERROR The device is not functioning properly and could
+ not be reset.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PEI_BLOCK_RESET)(
+ IN PEI_BLOCK_IO_PPI *This,
+ IN BOOLEAN ExtendedVerification
+ );
+
+/**
+ Read BufferSize bytes from Lba into Buffer.
+
+ @param[in] PeiServices
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] MediaId Id of the media, changes every time the media is replaced.
+ @param[in] Lba The starting Logical Block Address to read from
+ @param[in] BufferSize Size of Buffer, must be a multiple of device block size.
+ @param[out] Buffer A pointer to the destination buffer for the data. The caller is
+ responsible for either having implicit or explicit 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 performing the read.
+ @retval EFI_NO_MEDIA There is no media in the device.
+ @retval EFI_MEDIA_CHANGED The MediaId does not matched the current device.
+ @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.
+ @retval EFI_INVALID_PARAMETER The read request contains LBAs that are not valid,
+ or the buffer is not on proper alignment.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PEI_BLOCK_READ)(
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_BLOCK_IO_PPI *This,
+ IN UINT32 MediaId,
+ IN EFI_LBA Lba,
+ IN UINTN BufferSize,
+ OUT VOID *Buffer
+ );
+
+/**
+ Write BufferSize bytes from Lba into Buffer.
+
+ @param[in] PeiServices
+ @param[in] This Indicates a pointer to the calling context.
+ @param[in] MediaId The media ID that the write request is for.
+ @param[in] Lba The starting logical block address to be written. The caller is
+ responsible for writing to only legitimate locations.
+ @param[in] BufferSize Size of Buffer, must be a multiple of device block size.
+ @param[in] Buffer A pointer to the source buffer for the data.
+
+ @retval EFI_SUCCESS The data was written correctly to the device.
+ @retval EFI_WRITE_PROTECTED The device can not be written to.
+ @retval EFI_DEVICE_ERROR The device reported an error while performing the write.
+ @retval EFI_NO_MEDIA There is no media in the device.
+ @retval EFI_MEDIA_CHNAGED The MediaId does not matched the current device.
+ @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device.
+ @retval EFI_INVALID_PARAMETER The write request contains LBAs that are not valid,
+ or the buffer is not on proper alignment.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PEI_BLOCK_WRITE)(
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN PEI_BLOCK_IO_PPI *This,
+ IN UINT32 MediaId,
+ IN EFI_LBA Lba,
+ IN UINTN BufferSize,
+ IN VOID *Buffer
+ );
+
+/**
+ Flush the Block Device.
+
+ @param[in] This Indicates a pointer to the calling context.
+
+ @retval EFI_SUCCESS All outstanding data was written to the device
+ @retval EFI_DEVICE_ERROR The device reported an error while writting back the data
+ @retval EFI_NO_MEDIA There is no media in the device.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *PEI_BLOCK_FLUSH)(
+ IN PEI_BLOCK_IO_PPI *This
+ );
+
+/**
+ Block IO read only mode data and updated only via members of BlockIO
+
+**/
+typedef struct {
+ //
+ // The curent media Id. If the media changes, this value is changed.
+ //
+ UINT32 MediaId;
+
+ //
+ // TRUE if the media is removable; otherwise, FALSE.
+ //
+ BOOLEAN RemovableMedia;
+
+ //
+ // TRUE if there is a media currently present in the device;
+ // othersise, FALSE. THis field shows the media present status
+ // as of the most recent ReadBlocks() or WriteBlocks() call.
+ //
+ BOOLEAN MediaPresent;
+
+ //
+ // TRUE if LBA 0 is the first block of a partition; otherwise
+ // FALSE. For media with only one partition this would be TRUE.
+ //
+ BOOLEAN LogicalPartition;
+
+ //
+ // TRUE if the media is marked read-only otherwise, FALSE.
+ // This field shows the read-only status as of the most recent WriteBlocks () call.
+ //
+ BOOLEAN ReadOnly;
+
+ //
+ // TRUE if the WriteBlock () function caches write data.
+ //
+ BOOLEAN WriteCaching;
+
+ //
+ // The intrinsic block size of the device. If the media changes, then
+ // this field is updated.
+ //
+ UINT32 BlockSize;
+
+ //
+ // Supplies the alignment requirement for any buffer to read or write block(s).
+ //
+ UINT32 IoAlign;
+
+ //
+ // The last logical block address on the device.
+ // If the media changes, then this field is updated.
+ //
+ EFI_LBA LastBlock;
+
+ //
+ // Only present if EFI_BLOCK_IO_PROTOCOL.Revision is greater than or equal to
+ // EFI_BLOCK_IO_PROTOCOL_REVISION2. Returns the first LBA is aligned to
+ // a physical block boundary.
+ //
+ EFI_LBA LowestAlignedLba;
+
+ //
+ // Only present if EFI_BLOCK_IO_PROTOCOL.Revision is greater than or equal to
+ // EFI_BLOCK_IO_PROTOCOL_REVISION2. Returns the number of logical blocks
+ // per physical block.
+ //
+ UINT32 LogicalBlocksPerPhysicalBlock;
+
+ //
+ // Only present if EFI_BLOCK_IO_PROTOCOL.Revision is greater than or equal to
+ // EFI_BLOCK_IO_PROTOCOL_REVISION3. Returns the optimal transfer length
+ // granularity as a number of logical blocks.
+ //
+ UINT32 OptimalTransferLengthGranularity;
+} PEI_BLOCK_IO_MEDIA;
+
+#define EFI_BLOCK_IO_PROTOCOL_REVISION 0x00010000
+#define EFI_BLOCK_IO_PROTOCOL_REVISION2 0x00020001
+#define EFI_BLOCK_IO_PROTOCOL_REVISION3 0x00020031
+
+//
+// Revision defined in EFI1.1.
+//
+#define EFI_BLOCK_IO_INTERFACE_REVISION EFI_BLOCK_IO_PROTOCOL_REVISION
+
+//
+// This protocol provides control over block devices.
+//
+struct _PEI_BLOCK_IO_PPI {
+ //
+ // The revision to which the block IO interface adheres. All future
+ // revisions must be backwards compatible. If a future version is not
+ // back wards compatible, it is not the same GUID.
+ //
+ UINT64 Revision;
+ //
+ // Pointer to the EFI_BLOCK_IO_MEDIA data for this device.
+ //
+ PEI_BLOCK_IO_MEDIA *Media;
+ PEI_BLOCK_RESET Reset;
+ PEI_BLOCK_READ ReadBlocks;
+ PEI_BLOCK_WRITE WriteBlocks;
+ PEI_BLOCK_FLUSH FlushBlocks;
+};
+
+extern EFI_GUID gPeiBlockIoPpiGuid;
+#endif
+
diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPcieDeviceTable.h b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPcieDeviceTable.h
new file mode 100644
index 0000000000..2525f61f8b
--- /dev/null
+++ b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPcieDeviceTable.h
@@ -0,0 +1,54 @@
+/** @file
+ SC policy PPI produced by a platform driver specifying PCIe device overrides.
+
+ Copyright (c) 2013 - 2016, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef _SC_PCIE_DEVICE_TABLE_H_
+#define _SC_PCIE_DEVICE_TABLE_H_
+
+//
+// PCIe device table PPI GUID.
+//
+extern EFI_GUID gScPcieDeviceTablePpiGuid;
+
+typedef struct _SC_PCIE_DEVICE_OVERRIDE SC_PCIE_DEVICE_OVERRIDE;
+
+typedef enum {
+ ScPcieOverrideDisabled = 0,
+ ScPcieL1L2Override = 0x01,
+ ScPcieL1SubstatesOverride = 0x02,
+ ScPcieL1L2AndL1SubstatesOverride = 0x03,
+ ScPcieLtrOverride = 0x04
+} SC_PCIE_OVERRIDE_CONFIG;
+
+struct _SC_PCIE_DEVICE_OVERRIDE {
+ UINT16 VendorId; ///< The vendor Id of Pci Express card ASPM setting override, 0xFFFF means any Vendor ID
+ UINT16 DeviceId; ///< The Device Id of Pci Express card ASPM setting override, 0xFFFF means any Device ID
+ UINT8 RevId; ///< The Rev Id of Pci Express card ASPM setting override, 0xFF means all steppings
+ UINT8 BaseClassCode; ///< The Base Class Code of Pci Express card ASPM setting override, 0xFF means all base class
+ UINT8 SubClassCode; ///< The Sub Class Code of Pci Express card ASPM setting override, 0xFF means all sub class
+ UINT8 EndPointAspm; ///< Override device ASPM (see: PCH_PCIE_ASPM_CONTROL)
+ ///< Bit 1 must be set in OverrideConfig for this field to take effect
+ UINT16 OverrideConfig; ///< The override config bitmap (see: PCH_PCIE_OVERRIDE_CONFIG).
+ UINT16 L1SubstatesCapOffset;
+ UINT8 L1SubstatesCapMask;
+ UINT8 L1sCommonModeRestoreTime;
+ UINT8 L1sTpowerOnScale;
+ UINT8 L1sTpowerOnValue;
+ UINT16 SnoopLatency;
+ UINT16 NonSnoopLatency;
+ UINT32 Reserved;
+};
+
+#endif // SC_PCIE_DEVICE_TABLE_H_
+
diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPolicy.h b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPolicy.h
new file mode 100644
index 0000000000..2a6dad16ce
--- /dev/null
+++ b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPolicy.h
@@ -0,0 +1,37 @@
+/** @file
+ SC policy PPI produced by a platform driver specifying various
+ expected SC settings. This PPI is consumed by the SC PEI modules
+ and carried over to SC DXE modules.
+
+ Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef _SC_POLICY_PPI_H_
+#define _SC_POLICY_PPI_H_
+
+//
+// External include files do NOT need to be explicitly specified in real EDKII
+// environment
+//
+
+#include <ScAccess.h>
+#include <ScPolicyCommon.h>
+
+extern EFI_GUID gScPolicyPpiGuid;
+
+//
+// Forward reference for ANSI C compatibility
+//
+typedef struct SC_POLICY SC_POLICY_PPI;
+
+#endif
+
diff --git a/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPolicyPreMem.h b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPolicyPreMem.h
new file mode 100644
index 0000000000..cb1a9cb0f1
--- /dev/null
+++ b/Silicon/BroxtonSoC/BroxtonSiPkg/SouthCluster/Include/Ppi/ScPolicyPreMem.h
@@ -0,0 +1,35 @@
+/** @file
+ SC policy PPI produced by a platform driver specifying various
+ expected SC settings. This PPI is consumed by the SC PEI modules.
+
+ Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
+
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef _SC_PREMEM_POLICY_PPI_H_
+#define _SC_PREMEM_POLICY_PPI_H_
+//
+// External include files do NOT need to be explicitly specified in real EDKII
+// environment
+//
+
+#include <ScAccess.h>
+#include <ScPreMemPolicyCommon.h>
+
+extern EFI_GUID gScPreMemPolicyPpiGuid;
+
+//
+// Forward reference for ANSI C compatibility
+//
+typedef struct _SC_PREMEM_POLICY SC_PREMEM_POLICY_PPI;
+
+#endif
+