/** @file\r
Include file matches things in PI.\r
\r
- Copyright (c) 2006 - 2008, 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
+Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under \r
+the terms and conditions of the BSD License that accompanies this distribution. \r
+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
+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
\r
@par Revision Reference:\r
- Version 1.0.\r
+ PI Version 1.4\r
\r
**/\r
\r
#ifndef __PI_DXECIS_H__\r
#define __PI_DXECIS_H__\r
\r
+#include <Uefi/UefiMultiPhase.h>\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
+ /// A memory region that is visible to the boot processor. However, there are no system\r
+ /// components that are currently decoding this memory region.\r
+ ///\r
EfiGcdMemoryTypeNonExistent,\r
+ ///\r
+ /// A memory region that is visible to the boot processor. This memory region is being\r
+ /// decoded by a system component, but the memory region is not considered to be either\r
+ /// system memory or memory-mapped I/O.\r
+ ///\r
EfiGcdMemoryTypeReserved,\r
+ ///\r
+ /// A memory region that is visible to the boot processor. A memory controller is\r
+ /// currently decoding this memory region and the memory controller is producing a\r
+ /// tested system memory region that is available to the memory services.\r
+ ///\r
EfiGcdMemoryTypeSystemMemory,\r
+ ///\r
+ /// A memory region that is visible to the boot processor. This memory region is\r
+ /// currently being decoded by a component as memory-mapped I/O that can be used to\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
+ EfiGcdMemoryTypePersistentMemory,\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
+ /// An I/O region that is visible to the boot processor. However, there are no system\r
+ /// components that are currently decoding this I/O region.\r
+ ///\r
EfiGcdIoTypeNonExistent,\r
+ ///\r
+ /// An I/O region that is visible to the boot processor. This I/O region is currently being\r
+ /// decoded by a system component, but the I/O region cannot be used to access I/O devices.\r
+ ///\r
EfiGcdIoTypeReserved,\r
+ ///\r
+ /// An I/O region that is visible to the boot processor. This I/O region is currently being\r
+ /// decoded by a system component that is producing I/O ports that can be used to access I/O devices.\r
+ ///\r
EfiGcdIoTypeIo,\r
EfiGcdIoTypeMaximum\r
} EFI_GCD_IO_TYPE;\r
/// The type of allocation to perform.\r
/// \r
typedef enum {\r
+ ///\r
+ /// The GCD memory space map is searched from the lowest address up to the highest address\r
+ /// looking for unallocated memory ranges.\r
+ ///\r
EfiGcdAllocateAnySearchBottomUp,\r
+ ///\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
+ /// 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
+ /// looking for unallocated memory ranges.\r
+ ///\r
EfiGcdAllocateAnySearchTopDown,\r
+ ///\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
EfiGcdMaxAllocateType\r
} EFI_GCD_ALLOCATE_TYPE;\r
\r
///\r
-/// EFI_GCD_MEMORY_SPACE_DESCRIPTOR\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
+ /// description in the UEFI 2.0 specification.\r
/// \r
EFI_PHYSICAL_ADDRESS BaseAddress;\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
+ /// AddMemorySpace() function description.\r
/// \r
EFI_GCD_MEMORY_TYPE GcdMemoryType;\r
\r
} EFI_GCD_MEMORY_SPACE_DESCRIPTOR;\r
\r
///\r
-/// EFI_GCD_IO_SPACE_DESCRIPTOR\r
+/// EFI_GCD_IO_SPACE_DESCRIPTOR.\r
/// \r
typedef struct {\r
///\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
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
@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
//\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 40\r
+#define DXE_SERVICES_REVISION ((DXE_SPECIFICATION_MAJOR_REVISION<<16) | (DXE_SPECIFICATION_MINOR_REVISION))\r
\r
typedef struct {\r
+ ///\r
+ /// The table header for the DXE Services Table.\r
+ /// This header contains the DXE_SERVICES_SIGNATURE and DXE_SERVICES_REVISION values.\r
+ ///\r
EFI_TABLE_HEADER Hdr;\r
\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
+ The 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 The 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