/** @file\r
Include file matches things in PI.\r
\r
- Copyright (c) 2006 - 2010, Intel Corporation \r
- All rights reserved. This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
- http://opensource.org/licenses/bsd-license.php \r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
@par Revision Reference:\r
- PI Version 1.0\r
+ PI Version 1.6\r
\r
**/\r
\r
#include <Pi/PiMultiPhase.h>\r
\r
///\r
-/// Global Coherencey Domain types - Memory type\r
+/// Global Coherencey Domain types - Memory type.\r
///\r
typedef enum {\r
///\r
/// access I/O devices in the platform.\r
///\r
EfiGcdMemoryTypeMemoryMappedIo,\r
+ ///\r
+ /// A memory region that is visible to the boot processor.\r
+ /// This memory supports byte-addressable non-volatility.\r
+ ///\r
+ EfiGcdMemoryTypePersistent,\r
+ //\r
+ // Keep original one for the compatibility.\r
+ //\r
+ EfiGcdMemoryTypePersistentMemory = EfiGcdMemoryTypePersistent,\r
+ ///\r
+ /// A memory region that provides higher reliability relative to other memory in the\r
+ /// system. If all memory has the same reliability, then this bit is not used.\r
+ ///\r
+ EfiGcdMemoryTypeMoreReliable,\r
EfiGcdMemoryTypeMaximum\r
} EFI_GCD_MEMORY_TYPE;\r
\r
///\r
-/// Global Coherencey Domain types - IO type\r
+/// Global Coherencey Domain types - IO type.\r
///\r
typedef enum {\r
///\r
\r
///\r
/// The type of allocation to perform.\r
-/// \r
+///\r
typedef enum {\r
///\r
/// The GCD memory space map is searched from the lowest address up to the highest address\r
///\r
EfiGcdAllocateAnySearchBottomUp,\r
///\r
- /// The GCD memory space map is searched from the lowest address up \r
+ /// The GCD memory space map is searched from the lowest address up\r
/// to the specified MaxAddress looking for unallocated memory ranges.\r
///\r
EfiGcdAllocateMaxAddressSearchBottomUp,\r
///\r
- /// The GCD memory space map is checked to see if the memory range starting \r
+ /// The GCD memory space map is checked to see if the memory range starting\r
/// at the specified Address is available.\r
///\r
EfiGcdAllocateAddress,\r
///\r
- /// The GCD memory space map is searched from the highest address down to the lowest address \r
+ /// The GCD memory space map is searched from the highest address down to the lowest address\r
/// looking for unallocated memory ranges.\r
///\r
EfiGcdAllocateAnySearchTopDown,\r
///\r
- /// The GCD memory space map is searched from the specified MaxAddress \r
+ /// The GCD memory space map is searched from the specified MaxAddress\r
/// down to the lowest address looking for unallocated memory ranges.\r
///\r
EfiGcdAllocateMaxAddressSearchTopDown,\r
} EFI_GCD_ALLOCATE_TYPE;\r
\r
///\r
-/// EFI_GCD_MEMORY_SPACE_DESCRIPTOR\r
-/// \r
+/// EFI_GCD_MEMORY_SPACE_DESCRIPTOR.\r
+///\r
typedef struct {\r
///\r
/// The physical address of the first byte in the memory region. Type\r
/// EFI_PHYSICAL_ADDRESS is defined in the AllocatePages() function\r
- /// description in the UEFI 2.0 specification\r
- /// \r
+ /// description in the UEFI 2.0 specification.\r
+ ///\r
EFI_PHYSICAL_ADDRESS BaseAddress;\r
\r
///\r
/// The number of bytes in the memory region.\r
- /// \r
+ ///\r
UINT64 Length;\r
\r
///\r
/// The bit mask of attributes that the memory region is capable of supporting. The bit\r
/// mask of available attributes is defined in the GetMemoryMap() function description\r
/// in the UEFI 2.0 specification.\r
- /// \r
+ ///\r
UINT64 Capabilities;\r
///\r
/// The bit mask of attributes that the memory region is currently using. The bit mask of\r
/// available attributes is defined in GetMemoryMap().\r
- /// \r
+ ///\r
UINT64 Attributes;\r
///\r
/// Type of the memory region. Type EFI_GCD_MEMORY_TYPE is defined in the\r
- /// AddMemorySpace() function description\r
- /// \r
+ /// AddMemorySpace() function description.\r
+ ///\r
EFI_GCD_MEMORY_TYPE GcdMemoryType;\r
\r
///\r
/// PhysicalStart and NumberOfBytes. If this field is NULL, then the memory\r
/// resource is not currently allocated. Type EFI_HANDLE is defined in\r
/// InstallProtocolInterface() in the UEFI 2.0 specification.\r
- /// \r
+ ///\r
EFI_HANDLE ImageHandle;\r
\r
///\r
/// field is NULL, then the memory resource is not associated with a device that is\r
/// described by a device handle. Type EFI_HANDLE is defined in\r
/// InstallProtocolInterface() in the UEFI 2.0 specification.\r
- /// \r
+ ///\r
EFI_HANDLE DeviceHandle;\r
} EFI_GCD_MEMORY_SPACE_DESCRIPTOR;\r
\r
///\r
-/// EFI_GCD_IO_SPACE_DESCRIPTOR\r
-/// \r
+/// EFI_GCD_IO_SPACE_DESCRIPTOR.\r
+///\r
typedef struct {\r
///\r
/// Physical address of the first byte in the I/O region. Type\r
/// EFI_PHYSICAL_ADDRESS is defined in the AllocatePages() function\r
/// description in the UEFI 2.0 specification.\r
- /// \r
+ ///\r
EFI_PHYSICAL_ADDRESS BaseAddress;\r
\r
///\r
///\r
UINT64 Length;\r
\r
- /// \r
+ ///\r
/// Type of the I/O region. Type EFI_GCD_IO_TYPE is defined in the\r
/// AddIoSpace() function description.\r
- /// \r
+ ///\r
EFI_GCD_IO_TYPE GcdIoType;\r
\r
- /// \r
+ ///\r
/// The image handle of the agent that allocated the I/O resource described by\r
/// PhysicalStart and NumberOfBytes. If this field is NULL, then the I/O\r
/// resource is not currently allocated. Type EFI_HANDLE is defined in\r
/// InstallProtocolInterface() in the UEFI 2.0 specification.\r
- /// \r
+ ///\r
EFI_HANDLE ImageHandle;\r
\r
///\r
/// the I/O resource is not associated with a device that is described by a device handle.\r
/// Type EFI_HANDLE is defined in InstallProtocolInterface() in the UEFI\r
/// 2.0 specification.\r
- /// \r
+ ///\r
EFI_HANDLE DeviceHandle;\r
} EFI_GCD_IO_SPACE_DESCRIPTOR;\r
\r
of the memory resource being added.\r
@param Length The size, in bytes, of the memory resource that\r
is being added.\r
- @param Capabilities The bit mask of attributes that the memory \r
+ @param Capabilities The bit mask of attributes that the memory\r
resource region supports.\r
\r
@retval EFI_SUCCESS The memory resource was added to the global\r
@retval EFI_INVALID_PARAMETER GcdMemoryType is invalid.\r
@retval EFI_INVALID_PARAMETER Length is zero.\r
@retval EFI_OUT_OF_RESOURCES There are not enough system resources to add\r
- the memory resource to the global coherency \r
+ the memory resource to the global coherency\r
domain of the processor.\r
@retval EFI_UNSUPPORTED The processor does not support one or more bytes\r
- of the memory resource range specified by \r
+ of the memory resource range specified by\r
BaseAddress and Length.\r
@retval EFI_ACCESS_DENIED One or more bytes of the memory resource range\r
- specified by BaseAddress and Length conflicts \r
+ specified by BaseAddress and Length conflicts\r
with a memory resource range that was previously\r
added to the global coherency domain of the processor.\r
@retval EFI_ACCESS_DENIED One or more bytes of the memory resource range\r
specified by BaseAddress and Length was allocated\r
- in a prior call to AllocateMemorySpace()..\r
+ in a prior call to AllocateMemorySpace().\r
\r
**/\r
typedef\r
@param Length The size in bytes of the memory resource range that\r
is being allocated.\r
@param BaseAddress A pointer to a physical address to allocate.\r
- @param Imagehandle The image handle of the agent that is allocating \r
+ @param Imagehandle The image handle of the agent that is allocating\r
the memory resource.\r
@param DeviceHandle The device handle for which the memory resource\r
is being allocated.\r
\r
@retval EFI_SUCCESS The memory resource was freed from the global coherency domain of\r
the processor.\r
- @retval EFI_INVALID_PARAMETER Length is zero. \r
+ @retval EFI_INVALID_PARAMETER Length is zero.\r
@retval EFI_UNSUPPORTED The processor does not support one or more bytes of the memory\r
resource range specified by BaseAddress and Length.\r
@retval EFI_NOT_FOUND The memory resource range specified by BaseAddress and\r
\r
@retval EFI_SUCCESS The memory resource was removed from the global coherency\r
domain of the processor.\r
- @retval EFI_INVALID_PARAMETER Length is zero. \r
+ @retval EFI_INVALID_PARAMETER Length is zero.\r
@retval EFI_UNSUPPORTED The processor does not support one or more bytes of the memory\r
resource range specified by BaseAddress and Length.\r
@retval EFI_NOT_FOUND One or more bytes of the memory resource range specified by\r
@param Attributes The bit mask of attributes to set for the memory region.\r
\r
@retval EFI_SUCCESS The attributes were set for the memory region.\r
- @retval EFI_INVALID_PARAMETER Length is zero. \r
+ @retval EFI_INVALID_PARAMETER Length is zero.\r
@retval EFI_UNSUPPORTED The processor does not support one or more bytes of the memory\r
resource range specified by BaseAddress and Length.\r
@retval EFI_UNSUPPORTED The bit mask of attributes is not support for the memory resource\r
range specified by BaseAddress and Length.\r
- @retval EFI_ACCESS_DEFINED The attributes for the memory resource range specified by\r
+ @retval EFI_ACCESS_DENIED The attributes for the memory resource range specified by\r
BaseAddress and Length cannot be modified.\r
@retval EFI_OUT_OF_RESOURCES There are not enough system resources to modify the attributes of\r
the memory resource range.\r
-\r
+ @retval EFI_NOT_AVAILABLE_YET The attributes cannot be set because CPU architectural protocol is\r
+ not available yet.\r
**/\r
typedef\r
EFI_STATUS\r
IN UINT64 Attributes\r
);\r
\r
+/**\r
+ Modifies the capabilities for a memory region in the global coherency domain of the\r
+ processor.\r
+\r
+ @param BaseAddress The physical address that is the start address of a memory region.\r
+ @param Length The size in bytes of the memory region.\r
+ @param Capabilities The bit mask of capabilities that the memory region supports.\r
+\r
+ @retval EFI_SUCCESS The capabilities were set for the memory region.\r
+ @retval EFI_INVALID_PARAMETER Length is zero.\r
+ @retval EFI_UNSUPPORTED The capabilities specified by Capabilities do not include the\r
+ memory region attributes currently in use.\r
+ @retval EFI_ACCESS_DENIED The capabilities for the memory resource range specified by\r
+ BaseAddress and Length cannot be modified.\r
+ @retval EFI_OUT_OF_RESOURCES There are not enough system resources to modify the capabilities\r
+ of the memory resource range.\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SET_MEMORY_SPACE_CAPABILITIES) (\r
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,\r
+ IN UINT64 Length,\r
+ IN UINT64 Capabilities\r
+ );\r
+\r
/**\r
Returns a map of the memory resources in the global coherency domain of the\r
processor.\r
/**\r
Loads and executed DXE drivers from firmware volumes.\r
\r
- The Dispatch() function searches for DXE drivers in firmware volumes that have been \r
- installed since the last time the Dispatch() service was called. It then evaluates \r
+ The Dispatch() function searches for DXE drivers in firmware volumes that have been\r
+ installed since the last time the Dispatch() service was called. It then evaluates\r
the dependency expressions of all the DXE drivers and loads and executes those DXE\r
drivers whose dependency expression evaluate to TRUE. This service must interact with\r
the Security Architectural Protocol to authenticate DXE drivers before they are executed.\r
@retval EFI_SUCCESS One or more DXE driver were dispatched.\r
@retval EFI_NOT_FOUND No DXE drivers were dispatched.\r
@retval EFI_ALREADY_STARTED An attempt is being made to start the DXE Dispatcher recursively.\r
- Thus no action was taken.\r
+ Thus, no action was taken.\r
\r
**/\r
typedef\r
@retval EFI_VOLUME_CORRUPTED The firmware volume described by FirmwareVolumeHeader\r
and Size is corrupted.\r
@retval EFI_OUT_OF_RESOURCES There are not enough system resources available to produce the\r
- EFI_FIRMWARE_VOLUME_PROTOCOL and EFI_DEVICE_PATH_PROTOCOL \r
+ EFI_FIRMWARE_VOLUME_PROTOCOL and EFI_DEVICE_PATH_PROTOCOL\r
for the firmware volume described by FirmwareVolumeHeader and Size.\r
\r
**/\r
//\r
// DXE Services Table\r
//\r
-#define DXE_SERVICES_SIGNATURE 0x565245535f455844ULL\r
-#define DXE_SERVICES_REVISION ((1<<16) | (00))\r
+#define DXE_SERVICES_SIGNATURE 0x565245535f455844ULL\r
+#define DXE_SPECIFICATION_MAJOR_REVISION 1\r
+#define DXE_SPECIFICATION_MINOR_REVISION 60\r
+#define DXE_SERVICES_REVISION ((DXE_SPECIFICATION_MAJOR_REVISION<<16) | (DXE_SPECIFICATION_MINOR_REVISION))\r
\r
typedef struct {\r
///\r
// Service to process a single firmware volume found in a capsule\r
//\r
EFI_PROCESS_FIRMWARE_VOLUME ProcessFirmwareVolume;\r
+ //\r
+ // Extensions to Global Coherency Domain Services\r
+ //\r
+ EFI_SET_MEMORY_SPACE_CAPABILITIES SetMemorySpaceCapabilities;\r
} DXE_SERVICES;\r
\r
typedef DXE_SERVICES EFI_DXE_SERVICES;\r
\r
-\r
-/**\r
- Function prototype for invoking a function on an Application Processor.\r
-\r
- This definition is used by the UEFI MP Serices Protocol, and the\r
- PI SMM System Table.\r
-\r
- @param[in,out] Buffer Pointer to private data buffer.\r
-**/\r
-typedef\r
-VOID\r
-(EFIAPI *EFI_AP_PROCEDURE)(\r
- IN OUT VOID *Buffer\r
- );\r
-\r
#endif\r