Provide a more detailed description of each field of the
ACPI_CPU_DATA and CPU_REGISTER_TABLE structures.

Cc: Laszlo Ersek <ler...@redhat.com>
Cc: "Yao, Jiewen" <jiewen....@intel.com>
Cc: "Fan, Jeff" <jeff....@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Michael Kinney <michael.d.kin...@intel.com>
---
 UefiCpuPkg/Include/AcpiCpuData.h | 116 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 103 insertions(+), 13 deletions(-)

diff --git a/UefiCpuPkg/Include/AcpiCpuData.h b/UefiCpuPkg/Include/AcpiCpuData.h
index a367257..9aea158 100644
--- a/UefiCpuPkg/Include/AcpiCpuData.h
+++ b/UefiCpuPkg/Include/AcpiCpuData.h
@@ -18,7 +18,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
EXPRESS OR IMPLIED.
 //
 // Register types in register table
 //
-typedef enum _REGISTER_TYPE {
+typedef enum {
   Msr,
   ControlRegister,
   MemoryMapped,
@@ -29,11 +29,11 @@ typedef enum _REGISTER_TYPE {
 // Element of register table entry
 //
 typedef struct {
-  REGISTER_TYPE RegisterType;
-  UINT32        Index;
-  UINT8         ValidBitStart;
-  UINT8         ValidBitLength;
-  UINT64        Value;
+  REGISTER_TYPE  RegisterType;
+  UINT32         Index;
+  UINT8          ValidBitStart;
+  UINT8          ValidBitLength;
+  UINT64         Value;
 } CPU_REGISTER_TABLE_ENTRY;
 
 //
@@ -41,30 +41,120 @@ typedef struct {
 // allocated size of this table, and pointer to the list of table entries.
 //
 typedef struct {
-  UINT32                   TableLength;
-  UINT32                   NumberBeforeReset;
-  UINT32                   AllocatedSize;
-  UINT32                   InitialApicId;
-  CPU_REGISTER_TABLE_ENTRY *RegisterTableEntry;
+  //
+  // The number of valid entries in the RegisterTableEntry buffer
+  //
+  UINT32                    TableLength;
+  UINT32                    NumberBeforeReset;
+  //
+  // The size, in bytes, of the RegisterTableEntry buffer
+  //
+  UINT32                    AllocatedSize;
+  //
+  // The initial APIC ID of the CPU this register table applies
+  //
+  UINT32                    InitialApicId;
+  //
+  // Buffer of CPU_REGISTER_TABLE_ENTRY structures
+  //
+  CPU_REGISTER_TABLE_ENTRY  *RegisterTableEntry;
 } CPU_REGISTER_TABLE;
 
+//
+// Data structure that is required for ACPI S3 resume
+// This structure must be allocated below 4GB from memory
+// of type EfiACPIMemoryNVS.
+// The PCD PcdCpuS3DataAddress must be set to the physical
+// address where this structure is allocated
+//
 typedef struct {
+  //
+  // Physical address of 4KB buffer allocated below 1MB
+  // used to wake APs during an ACPI S3 resume.
+  // If there are no APs, then this field may is 0.
+  //
   EFI_PHYSICAL_ADDRESS  StartupVector;
+  //
+  // Physical address of structure of type IA32_DESCRIPTOR that
+  // contains a copy of the GDT used by the boot processor when
+  // the platform is booted.  This is the GDT used when performing
+  // an ACPI S3 resume.
+  // This structure must be allocated below 4GB from memory
+  // of type EfiACPIMemoryNVS.
+  //
   EFI_PHYSICAL_ADDRESS  GdtrProfile;
+  //
+  // Physical address of structure of type IA32_DESCRIPTOR that
+  // contains a copy of the IDT used by the boot processor when
+  // the platform is booted.  This is the IDT used when performing
+  // an ACPI S3 resume.
+  // This structure must be allocated below 4GB from memory
+  // of type EfiACPIMemoryNVS.
+  //
   EFI_PHYSICAL_ADDRESS  IdtrProfile;
+  //
+  // Physical address of a buffer that is used as stacks during
+  // ACPI S3 resume.  The total size of this buffer, in bytes, is
+  // NumberOfCpus * StackSize.
+  // This structure must be allocated below 4GB from memory
+  // of type EfiACPIMemoryNVS.
+  //
   EFI_PHYSICAL_ADDRESS  StackAddress;
+  //
+  // The size, in bytes, of a stack used during ACPI S3 resume.
+  //
   UINT32                StackSize;
+  //
+  // The number of CPUs in the platform.
+  //
   UINT32                NumberOfCpus;
+  //
+  // Physical address of structure of type MTRR_SETTINGS that
+  // contains a copy of the MTRRs used by the boot processor when
+  // the OS is initially booted.  These are the MTRR settings used
+  // when performing an ACPI S3 resume.
+  // This structure must be allocated below 4GB from memory
+  // of type EfiACPIMemoryNVS.
+  //
   EFI_PHYSICAL_ADDRESS  MtrrTable;
   //
-  // Physical address of a CPU_REGISTER_TABLE structure
+  // Physical address of an array of CPU_REGISTER_TABLE structures with
+  // NumberOfCpus entries.
+  // This structure must be allocated below 4GB from memory of type
+  // EfiACPIMemoryNVS.  The RegisterTableEntry field of CPU_REGISTER_TABLE
+  // must contain at least one element and must be allocated below 4GB from
+  // memory of type EfiACPIMemoryNVS.
+  // If a register table is not required, then the TableLength field
+  // of CPU_REGISTER_TABLE is set to 0.
+  // If TableLength is > 0, then this table is used to initialize a
+  // CPU during an ACPI S3 resume before SMBASE relocation is performed.
   //
   EFI_PHYSICAL_ADDRESS  PreSmmInitRegisterTable;
   //
-  // Physical address of a CPU_REGISTER_TABLE structure
+  // Physical address of an array of CPU_REGISTER_TABLE structures with
+  // NumberOfCpus entries.
+  // This structure must be allocated below 4GB from memory of type
+  // EfiACPIMemoryNVS.  The RegisterTableEntry field of CPU_REGISTER_TABLE
+  // must contain at least one element and must be allocated below 4GB from
+  // memory of type EfiACPIMemoryNVS.
+  // If a register table is not required, then the TableLength field of
+  // CPU_REGISTER_TABLE is set to 0.
+  // If TableLength is > 0, then this table is used to initialize a
+  // CPU during an ACPI S3 resume after SMBASE relocation is performed.
   //
   EFI_PHYSICAL_ADDRESS  RegisterTable;
+  //
+  // Physical address of a buffer that contains the machine check
+  // handler that is used during an ACPI S3 Resume.
+  // This structure must be allocated below 4GB from memory
+  // of type EfiACPIMemoryNVS.
+  //
   EFI_PHYSICAL_ADDRESS  ApMachineCheckHandlerBase;
+  //
+  // The size, in bytes, of  the machine check handler that is used
+  // during an ACPI S3 Resume.
+  // If this field is 0, then a machine check handler is not provided.
+  //
   UINT32                ApMachineCheckHandlerSize;
 } ACPI_CPU_DATA;
 
-- 
2.6.3.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to