]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Pi/PiDxeCis.h
MdePkg/Include/Pi: Modify specification number encoding
[mirror_edk2.git] / MdePkg / Include / Pi / PiDxeCis.h
index 81c973917a983736c2df0d04e9e7c439db1dc4d0..c081d047b35fe9ae6e21fb8b382206d356ba02b2 100644 (file)
@@ -1,42 +1,88 @@
 /** @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 - 2017, 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.6\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
+  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
+  /// 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
@@ -45,22 +91,42 @@ typedef enum {
 /// 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
@@ -82,7 +148,7 @@ typedef struct {
   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
@@ -105,7 +171,7 @@ typedef struct {
 } 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
@@ -173,7 +239,7 @@ typedef struct {
                                  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
@@ -183,8 +249,7 @@ EFI_STATUS
   IN EFI_PHYSICAL_ADDRESS  BaseAddress,\r
   IN UINT64                Length,\r
   IN UINT64                Capabilities\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Allocates nonexistent memory, reserved memory, system memory, or memorymapped\r
@@ -226,8 +291,7 @@ EFI_STATUS
   IN OUT EFI_PHYSICAL_ADDRESS                *BaseAddress,\r
   IN     EFI_HANDLE                          ImageHandle,\r
   IN     EFI_HANDLE                          DeviceHandle OPTIONAL\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Frees nonexistent memory, reserved memory, system memory, or memory-mapped\r
@@ -252,8 +316,7 @@ EFI_STATUS
 (EFIAPI *EFI_FREE_MEMORY_SPACE)(\r
   IN EFI_PHYSICAL_ADDRESS  BaseAddress,\r
   IN UINT64                Length\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Removes reserved memory, system memory, or memory-mapped I/O resources from\r
@@ -281,8 +344,7 @@ EFI_STATUS
 (EFIAPI *EFI_REMOVE_MEMORY_SPACE)(\r
   IN EFI_PHYSICAL_ADDRESS  BaseAddress,\r
   IN UINT64                Length\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Retrieves the descriptor for a memory region containing a specified address.\r
@@ -301,8 +363,7 @@ EFI_STATUS
 (EFIAPI *EFI_GET_MEMORY_SPACE_DESCRIPTOR)(\r
   IN  EFI_PHYSICAL_ADDRESS             BaseAddress,\r
   OUT EFI_GCD_MEMORY_SPACE_DESCRIPTOR  *Descriptor\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Modifies the attributes for a memory region in the global coherency domain of the\r
@@ -318,11 +379,12 @@ EFI_STATUS
                                 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
@@ -330,8 +392,32 @@ EFI_STATUS
   IN EFI_PHYSICAL_ADDRESS         BaseAddress,\r
   IN UINT64                       Length,\r
   IN UINT64                       Attributes\r
-  )\r
-;\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
@@ -353,8 +439,7 @@ EFI_STATUS
 (EFIAPI *EFI_GET_MEMORY_SPACE_MAP)(\r
   OUT UINTN                            *NumberOfDescriptors,\r
   OUT EFI_GCD_MEMORY_SPACE_DESCRIPTOR  **MemorySpaceMap\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Adds reserved I/O or I/O resources to the global coherency domain of the processor.\r
@@ -386,8 +471,7 @@ EFI_STATUS
   IN EFI_GCD_IO_TYPE       GcdIoType,\r
   IN EFI_PHYSICAL_ADDRESS  BaseAddress,\r
   IN UINT64                Length\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Allocates nonexistent I/O, reserved I/O, or I/O resources from the global coherency\r
@@ -423,8 +507,7 @@ EFI_STATUS
   IN OUT EFI_PHYSICAL_ADDRESS                *BaseAddress,\r
   IN     EFI_HANDLE                          ImageHandle,\r
   IN     EFI_HANDLE                          DeviceHandle OPTIONAL\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Frees nonexistent I/O, reserved I/O, or I/O resources from the global coherency\r
@@ -449,8 +532,7 @@ EFI_STATUS
 (EFIAPI *EFI_FREE_IO_SPACE)(\r
   IN EFI_PHYSICAL_ADDRESS  BaseAddress,\r
   IN UINT64                Length\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Removes reserved I/O or I/O resources from the global coherency domain of the\r
@@ -480,8 +562,7 @@ EFI_STATUS
 (EFIAPI *EFI_REMOVE_IO_SPACE)(\r
   IN EFI_PHYSICAL_ADDRESS  BaseAddress,\r
   IN UINT64                Length\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Retrieves the descriptor for an I/O region containing a specified address.\r
@@ -500,8 +581,7 @@ EFI_STATUS
 (EFIAPI *EFI_GET_IO_SPACE_DESCRIPTOR)(\r
   IN  EFI_PHYSICAL_ADDRESS         BaseAddress,\r
   OUT EFI_GCD_IO_SPACE_DESCRIPTOR  *Descriptor\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Returns a map of the I/O resources in the global coherency domain of the processor.\r
@@ -523,8 +603,7 @@ EFI_STATUS
 (EFIAPI *EFI_GET_IO_SPACE_MAP)(\r
   OUT UINTN                        *NumberOfDescriptors,\r
   OUT EFI_GCD_IO_SPACE_DESCRIPTOR  **IoSpaceMap\r
-  )\r
-;\r
+  );\r
 \r
 \r
 \r
@@ -541,15 +620,14 @@ EFI_STATUS
   @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
 EFI_STATUS\r
 (EFIAPI *EFI_DISPATCH)(\r
   VOID\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Clears the Schedule on Request (SOR) flag for a component that is stored in a firmware volume.\r
@@ -567,8 +645,7 @@ EFI_STATUS
 (EFIAPI *EFI_SCHEDULE)(\r
   IN EFI_HANDLE  FirmwareVolumeHandle,\r
   IN CONST EFI_GUID    *FileName\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Promotes a file stored in a firmware volume from the untrusted to the trusted state.\r
@@ -586,8 +663,7 @@ EFI_STATUS
 (EFIAPI *EFI_TRUST)(\r
   IN EFI_HANDLE  FirmwareVolumeHandle,\r
   IN CONST EFI_GUID    *FileName\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Creates a firmware volume handle for a firmware volume that is present in system memory.\r
@@ -613,16 +689,21 @@ EFI_STATUS
   IN CONST VOID                       *FirmwareVolumeHeader,\r
   IN UINTN                            Size,\r
   OUT EFI_HANDLE                      *FirmwareVolumeHandle\r
-  )\r
-;\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
+  /// 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
@@ -652,6 +733,10 @@ typedef struct {
   // 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