1 /** @file
2   Definitions for data structures used in S3 resume.
3 
4 Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
5 
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7 
8 **/
9 
10 #ifndef _ACPI_S3_DATA_H_
11 #define _ACPI_S3_DATA_H_
12 
13 #include <Library/BaseLib.h>
14 
15 #define SMM_S3_RESUME_SMM_32 SIGNATURE_64 ('S','M','M','S','3','_','3','2')
16 #define SMM_S3_RESUME_SMM_64 SIGNATURE_64 ('S','M','M','S','3','_','6','4')
17 
18 #pragma pack(1)
19 
20 typedef struct {
21   UINT64                Signature;
22   EFI_PHYSICAL_ADDRESS  SmmS3ResumeEntryPoint;
23   EFI_PHYSICAL_ADDRESS  SmmS3StackBase;
24   UINT64                SmmS3StackSize;
25   UINT64                SmmS3Cr0;
26   UINT64                SmmS3Cr3;
27   UINT64                SmmS3Cr4;
28   UINT16                ReturnCs;
29   EFI_PHYSICAL_ADDRESS  ReturnEntryPoint;
30   EFI_PHYSICAL_ADDRESS  ReturnContext1;
31   EFI_PHYSICAL_ADDRESS  ReturnContext2;
32   EFI_PHYSICAL_ADDRESS  ReturnStackPointer;
33   EFI_PHYSICAL_ADDRESS  Smst;
34 } SMM_S3_RESUME_STATE;
35 
36 
37 typedef struct {
38   EFI_PHYSICAL_ADDRESS  AcpiFacsTable;
39   EFI_PHYSICAL_ADDRESS  IdtrProfile;
40   EFI_PHYSICAL_ADDRESS  S3NvsPageTableAddress;
41   EFI_PHYSICAL_ADDRESS  BootScriptStackBase;
42   UINT64                BootScriptStackSize;
43   EFI_PHYSICAL_ADDRESS  S3DebugBufferAddress;
44 } ACPI_S3_CONTEXT;
45 
46 typedef struct {
47   UINT16                ReturnCs;
48   UINT64                ReturnStatus;
49   EFI_PHYSICAL_ADDRESS  ReturnEntryPoint;
50   EFI_PHYSICAL_ADDRESS  ReturnStackPointer;
51   EFI_PHYSICAL_ADDRESS  AsmTransferControl;
52   IA32_DESCRIPTOR       Idtr;
53 } PEI_S3_RESUME_STATE;
54 
55 #pragma pack()
56 
57 #define EFI_ACPI_S3_CONTEXT_GUID \
58   { \
59     0xef98d3a, 0x3e33, 0x497a, {0xa4, 0x1, 0x77, 0xbe, 0x3e, 0xb7, 0x4f, 0x38} \
60   }
61 
62 extern EFI_GUID gEfiAcpiS3ContextGuid;
63 
64 extern EFI_GUID gEfiAcpiVariableGuid;
65 
66 #endif
67