]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Foundation/Framework/Protocol/SmmBase/SmmBase.h
EdkCompatibilityPkg: Remove EdkCompatibilityPkg
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Framework / Protocol / SmmBase / SmmBase.h
diff --git a/EdkCompatibilityPkg/Foundation/Framework/Protocol/SmmBase/SmmBase.h b/EdkCompatibilityPkg/Foundation/Framework/Protocol/SmmBase/SmmBase.h
deleted file mode 100644 (file)
index 5b9e6df..0000000
+++ /dev/null
@@ -1,797 +0,0 @@
-/*++\r
-\r
-Copyright (c) 1999 - 2006, Intel Corporation. All rights reserved.<BR>\r
-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
-\r
-\r
-Module Name:\r
-\r
-  SmmBase.h\r
-\r
-Abstract:\r
-\r
-  This file defines SMM Base abstraction protocol defined by the SMM Architecture\r
-  Specification.  This is the base level of compatiblity for SMM drivers.\r
-\r
---*/\r
-\r
-#ifndef _SMM_BASE_H_\r
-#define _SMM_BASE_H_\r
-\r
-#include EFI_PROTOCOL_DEFINITION (DevicePath)\r
-\r
-#define EFI_SMM_BASE_PROTOCOL_GUID \\r
-  { \\r
-    0x1390954D, 0xda95, 0x4227, {0x93, 0x28, 0x72, 0x82, 0xc2, 0x17, 0xda, 0xa8} \\r
-  }\r
-\r
-#define EFI_SMM_CPU_IO_GUID \\r
-  { \\r
-    0x5f439a0b, 0x45d8, 0x4682, {0xa4, 0xf4, 0xf0, 0x57, 0x6b, 0x51, 0x34, 0x41} \\r
-  }\r
-\r
-#define SMM_COMMUNICATE_HEADER_GUID \\r
-  { \\r
-    0xF328E36C, 0x23B6, 0x4a95, {0x85, 0x4B, 0x32, 0xE1, 0x95, 0x34, 0xCD, 0x75} \\r
-  }\r
-\r
-//\r
-// SMM Base specification constant and types\r
-//\r
-#define SMM_SMST_SIGNATURE            EFI_SIGNATURE_32 ('S', 'M', 'S', 'T')\r
-#define EFI_SMM_SYSTEM_TABLE_REVISION (0 << 16) | (0x09)\r
-\r
-EFI_FORWARD_DECLARATION (EFI_SMM_BASE_PROTOCOL);\r
-EFI_FORWARD_DECLARATION (EFI_SMM_CPU_IO_INTERFACE);\r
-EFI_FORWARD_DECLARATION (EFI_SMM_CPU_SAVE_STATE);\r
-EFI_FORWARD_DECLARATION (EFI_SMM_OPTIONAL_FP_SAVE_STATE);\r
-EFI_FORWARD_DECLARATION (EFI_SMM_SYSTEM_TABLE);\r
-\r
-//\r
-// *******************************************************\r
-// EFI_SMM_IO_WIDTH\r
-// *******************************************************\r
-//\r
-typedef enum {\r
-  SMM_IO_UINT8  = 0,\r
-  SMM_IO_UINT16 = 1,\r
-  SMM_IO_UINT32 = 2,\r
-  SMM_IO_UINT64 = 3\r
-} EFI_SMM_IO_WIDTH;\r
-\r
-//\r
-// *******************************************************\r
-// EFI_SMM_IO_ACCESS\r
-// *******************************************************\r
-//\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_CPU_IO) (\r
-  IN EFI_SMM_CPU_IO_INTERFACE         * This,\r
-  IN EFI_SMM_IO_WIDTH                 Width,\r
-  IN UINT64                           Address,\r
-  IN UINTN                            Count,\r
-  IN OUT VOID                         *Buffer\r
-  );\r
-\r
-typedef struct {\r
-  EFI_SMM_CPU_IO  Read;\r
-  EFI_SMM_CPU_IO  Write;\r
-} EFI_SMM_IO_ACCESS;\r
-\r
-struct _EFI_SMM_CPU_IO_INTERFACE {\r
-  EFI_SMM_IO_ACCESS Mem;\r
-  EFI_SMM_IO_ACCESS Io;\r
-};\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMMCORE_ALLOCATE_POOL) (\r
-  IN EFI_MEMORY_TYPE                PoolType,\r
-  IN UINTN                          Size,\r
-  OUT VOID                          **Buffer\r
-  );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMMCORE_FREE_POOL) (\r
-  IN VOID                   *Buffer\r
-  );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMMCORE_ALLOCATE_PAGES) (\r
-  IN EFI_ALLOCATE_TYPE      Type,\r
-  IN EFI_MEMORY_TYPE        MemoryType,\r
-  IN UINTN                  NumberOfPages,\r
-  OUT EFI_PHYSICAL_ADDRESS  * Memory\r
-  );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMMCORE_FREE_PAGES) (\r
-  IN EFI_PHYSICAL_ADDRESS   Memory,\r
-  IN UINTN                  NumberOfPages\r
-  );\r
-\r
-typedef\r
-VOID\r
-(EFIAPI *EFI_AP_PROCEDURE) (\r
-  IN  VOID                              *Buffer\r
-  );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_STARTUP_THIS_AP) (\r
-  IN  EFI_AP_PROCEDURE                    Procedure,\r
-  IN  UINTN                               CpuNumber,\r
-  IN  OUT VOID                            *ProcArguments OPTIONAL\r
-  );\r
-\r
-struct _EFI_SMM_CPU_SAVE_STATE {\r
-  UINT8   Reserved1[248];\r
-  UINT32  SMBASE;\r
-  UINT32  SMMRevId;\r
-  UINT16  IORestart;\r
-  UINT16  AutoHALTRestart;\r
-  UINT8   Reserved2[164];\r
-  UINT32  ES;\r
-  UINT32  CS;\r
-  UINT32  SS;\r
-  UINT32  DS;\r
-  UINT32  FS;\r
-  UINT32  GS;\r
-  UINT32  LDTBase;\r
-  UINT32  TR;\r
-  UINT32  DR7;\r
-  UINT32  DR6;\r
-  UINT32  EAX;\r
-  UINT32  ECX;\r
-  UINT32  EDX;\r
-  UINT32  EBX;\r
-  UINT32  ESP;\r
-  UINT32  EBP;\r
-  UINT32  ESI;\r
-  UINT32  EDI;\r
-  UINT32  EIP;\r
-  UINT32  EFLAGS;\r
-  UINT32  CR3;\r
-  UINT32  CR0;\r
-};\r
-\r
-typedef struct {\r
-  UINT8   Reserved19[760];    // FC00\r
-  UINT32  SMBASE;             // FEF8\r
-  UINT32  REVID;              // FEFC\r
-  UINT16  HALT_RESTART;       // FF00\r
-  UINT16  IO_RESTART;         // FF02\r
-  UINT32  Reserved17[22];     // FF58, 54, 50, 4c, 48, 44, 40, 3c, 38, 34, 30, 2c, 28, 24, 20, 1c, 18, 14, 10, 0c, 08, 04\r
-  UINT32  EAX;                // FF5C\r
-  UINT32  Reserved16;         // FF60\r
-  UINT32  ECX;                // FF64\r
-  UINT32  Reserved15;         // FF68\r
-  UINT32  EDX;                // FF6C\r
-  UINT32  Reserved14;         // FF70\r
-  UINT32  EBX;                // FF74\r
-  UINT32  Reserved13;         // FF78\r
-  UINT32  ESP;                // FF7C\r
-  UINT32  Reserved12;         // FF80\r
-  UINT32  EBP;                // FF84\r
-  UINT32  Reserved11;         // FF88\r
-  UINT32  ESI;                // FF8C\r
-  UINT32  Reserved9;          // FF90\r
-  UINT32  EDI;                // FF94\r
-  UINT32  Reserved8;          // FF98\r
-  UINT32  IO_MEM_ADDR;        // FF9C\r
-  UINT32  Reserved7;          // FFA0\r
-  UINT32  IO_MISC;            // FFA4\r
-  UINT32  ES_SEL;             // FFA8\r
-  UINT32  CS_SEL;             // FFAC\r
-  UINT32  SS_SEL;             // FFB0\r
-  UINT32  DS_SEL;             // FFB4\r
-  UINT32  FS_SEL;             // FFB8\r
-  UINT32  GS_SEL;             // FFBC\r
-  UINT32  LDTR_SEL;           // FFC0\r
-  UINT32  TR_SEL;             // FFC4\r
-  UINT32  DR7;                // FFC8\r
-  UINT32  Reserved6;          // FFCC\r
-  UINT32  DR6;                // FFD0\r
-  UINT32  Reserved5;          // FFD4\r
-  UINT32  EIP;                // FFD8\r
-  UINT32  Reserved4;          // FFDC\r
-  UINT32  EFER;               // FFE0\r
-  UINT32  Reserved3;          // FFE4\r
-  UINT32  EFLAGS;             // FFE8\r
-  UINT32  Reserved2;          // FFEC\r
-  UINT32  CR3;                // FFF0\r
-  UINT32  Reserved1;          // FFF4\r
-  UINT32  CR0;                // FFF8\r
-  UINT32  Reserved0;          // FFFC\r
-} EFI_SMM_CPU_CT_SAVE_STATE;\r
-\r
-typedef struct {\r
-  UINT8   Reserved26[464];        // FC00 - FDCF\r
-  UINT32  GdtrUpperBase;          // FDD0\r
-  UINT32  LdtrUpperBase;          // FDD4\r
-  UINT32  IdtrUpperBase;          // FDD8\r
-  UINT32  Reserved25;             // FDDC - FDDF\r
-  UINT64  IoRdi;                  // FDE0\r
-  UINT64  IoRip;                  // FDE8\r
-  UINT64  IoRcx;                  // FDF0\r
-  UINT64  IoRsi;                  // FDF8\r
-  UINT8   Reserved24[64];         // FE00 - FE3F\r
-  UINT64  Cr4;                    // FE40\r
-  UINT8   Reserved23[68];         // FE48 - FE8B\r
-  UINT32  GdtrBase;               // FE8C\r
-  UINT32  Reserved22;             // FE90\r
-  UINT32  IdtrBase;               // FE94\r
-  UINT32  Reserved21;             // FE98\r
-  UINT32  LdtrBase;               // FE9C\r
-  UINT32  Reserved20;             // FEA0\r
-  UINT8   Reserved19[84];         // FEA4 - FEF7\r
-  UINT32  Smbase;                 // FEF8\r
-  UINT32  RevId;                  // FEFC\r
-  UINT16  IoRestart;              // FF00\r
-  UINT16  HaltRestart;            // FF02\r
-  UINT8   Reserved18[24];         // FF04 - FF1B\r
-  UINT32  R15;                    // FF1C\r
-  UINT32  Reserved17;             // FE20\r
-  UINT32  R14;                    // FF24\r
-  UINT32  Reserved16;             // FE28\r
-  UINT32  R13;                    // FF2C\r
-  UINT32  Reserved15;             // FE30\r
-  UINT32  R12;                    // FF34\r
-  UINT32  Reserved14;             // FE38\r
-  UINT32  R11;                    // FF3C\r
-  UINT32  Reserved13;             // FE40\r
-  UINT32  R10;                    // FF44\r
-  UINT32  Reserved12;             // FE48\r
-  UINT32  R9;                     // FF4C\r
-  UINT32  Reserved11;             // FE50\r
-  UINT32  R8;                     // FF54\r
-  UINT32  Reserved10;             // FE58\r
-  UINT32  Rax;                    // FF5C\r
-  UINT32  Reserved9;              // FE60\r
-  UINT32  Rcx;                    // FF64\r
-  UINT32  Reserved8;              // FE68\r
-  UINT32  Rdx;                    // FF6C\r
-  UINT32  Reserved7;              // FE70\r
-  UINT32  Rbx;                    // FF74\r
-  UINT32  Reserved6;              // FE78\r
-  UINT32  Rsp;                    // FF7C\r
-  UINT32  Reserved5;              // FE80\r
-  UINT32  Rbp;                    // FF84\r
-  UINT32  Reserved4;              // FE88\r
-  UINT32  Rsi;                    // FF8C\r
-  UINT32  Reserved3;              // FE90\r
-  UINT32  Rdi;                    // FF94\r
-  UINT32  Reserved2;              // FE98\r
-  UINT32  IoMemAddr;              // FF9C\r
-  UINT32  Reserved1;              // FEA0\r
-  UINT32  IoMiscInfo;             // FFA4\r
-  UINT32  EsSel;                  // FFA8\r
-  UINT32  CsSel;                  // FFAC\r
-  UINT32  SsSel;                  // FFB0\r
-  UINT32  DsSel;                  // FFB4\r
-  UINT32  FsSel;                  // FFB8\r
-  UINT32  GsSel;                  // FFBC\r
-  UINT32  LdtrSel;                // FFC0\r
-  UINT32  TrSel;                  // FFC4\r
-  UINT64  Dr7;                    // FFC8\r
-  UINT64  Dr6;                    // FFD0\r
-  UINT32  Rip;                    // FFD8\r
-  UINT32  Reserved0;              // FFDC\r
-  UINT64  Efr;                    // FFE0\r
-  UINT64  RFlags;                 // FFE8\r
-  UINT64  Cr3;                    // FFF0\r
-  UINT64  Cr0;                    // FFF8\r
-} EFI_SMM_CPU_MEROM_SAVE_STATE;\r
-\r
-\r
-typedef struct {\r
-  UINT8   Reserved14[0x228];  // FC00-FE28\r
-  UINT32  IO_EIP;             // FE28\r
-  UINT8   Reserved13[0x14];   // FE2C-FE40\r
-  UINT32  CR4;                // FE40\r
-  UINT8   Reserved12[0x48];   // FE44-FE8C\r
-  UINT32  GDT_BASE;           // FE8C\r
-  UINT8   Reserved11[0xC];    // FE90-FE9C\r
-  UINT32  LDT_BASE;           // FE9C\r
-  UINT8   Reserved10[0x58];   // FEA0-FEF8\r
-  UINT32  SMBASE;\r
-  UINT32  REVID;\r
-  UINT16  IO_RESTART;\r
-  UINT16  HALT_RESTART;\r
-  UINT8   Reserved9[0xA4];\r
-\r
-  UINT16  ES;\r
-  UINT16  Reserved8;\r
-  UINT16  CS;\r
-  UINT16  Reserved7;\r
-  UINT16  SS;\r
-  UINT16  Reserved6;\r
-  UINT16  DS;\r
-  UINT16  Reserved5;\r
-  UINT16  FS;\r
-  UINT16  Reserved4;\r
-  UINT16  GS;\r
-  UINT16  Reserved3;\r
-  UINT32  Reserved2;\r
-  UINT16  TR;\r
-  UINT16  Reserved1;\r
-  UINT32  DR7;\r
-  UINT32  DR6;\r
-  UINT32  EAX;\r
-  UINT32  ECX;\r
-  UINT32  EDX;\r
-  UINT32  EBX;\r
-  UINT32  ESP;\r
-  UINT32  EBP;\r
-  UINT32  ESI;\r
-  UINT32  EDI;\r
-  UINT32  EIP;\r
-  UINT32  EFLAGS;\r
-  UINT32  CR3;\r
-  UINT32  CR0;\r
-} EFI_SMM_CPU_CT_NOT_ENABLED_SAVE_STATE;\r
-\r
-struct _EFI_SMM_OPTIONAL_FP_SAVE_STATE {\r
-  UINT16  Fcw;\r
-  UINT16  Fsw;\r
-  UINT16  Ftw;\r
-  UINT16  Opcode;\r
-  UINT32  Eip;\r
-  UINT16  Cs;\r
-  UINT16  Rsvd1;\r
-  UINT32  DataOffset;\r
-  UINT16  Ds;\r
-  UINT8   Rsvd2[10];\r
-  UINT8   St0Mm0[10], Rsvd3[6];\r
-  UINT8   St0Mm1[10], Rsvd4[6];\r
-  UINT8   St0Mm2[10], Rsvd5[6];\r
-  UINT8   St0Mm3[10], Rsvd6[6];\r
-  UINT8   St0Mm4[10], Rsvd7[6];\r
-  UINT8   St0Mm5[10], Rsvd8[6];\r
-  UINT8   St0Mm6[10], Rsvd9[6];\r
-  UINT8   St0Mm7[10], Rsvd10[6];\r
-  UINT8   Rsvd11[22 * 16];\r
-};\r
-\r
-typedef struct _EFI_SMM_OPTIONAL_FP_SAVE_STATE32 {\r
-  UINT16  Fcw;\r
-  UINT16  Fsw;\r
-  UINT16  Ftw;\r
-  UINT16  Opcode;\r
-  UINT32  Eip;\r
-  UINT16  Cs;\r
-  UINT16  Rsvd1;\r
-  UINT32  DataOffset;\r
-  UINT16  Ds;\r
-  UINT8   Reserved2[10];\r
-  UINT8   St0Mm0[10], Rsvd3[6];\r
-  UINT8   St1Mm1[10], Rsvd4[6];\r
-  UINT8   St2Mm2[10], Rsvd5[6];\r
-  UINT8   St3Mm3[10], Rsvd6[6];\r
-  UINT8   St4Mm4[10], Rsvd7[6];\r
-  UINT8   St5Mm5[10], Rsvd8[6];\r
-  UINT8   St6Mm6[10], Rsvd9[6];\r
-  UINT8   St7Mm7[10], Rsvd10[6];\r
-  UINT8   Xmm0[16];\r
-  UINT8   Xmm1[16];\r
-  UINT8   Xmm2[16];\r
-  UINT8   Xmm3[16];\r
-  UINT8   Xmm4[16];\r
-  UINT8   Xmm5[16];\r
-  UINT8   Xmm6[16];\r
-  UINT8   Xmm7[16];\r
-  UINT8   Rsvd11[14 * 16];\r
-} EFI_SMM_OPTIONAL_FP_SAVE_STATE32;\r
-\r
-typedef struct _EFI_SMM_OPTIONAL_FP_SAVE_STATE64 {\r
-  UINT16  Fcw;\r
-  UINT16  Fsw;\r
-  UINT16  Ftw;\r
-  UINT16  Opcode;\r
-  UINT64  Rip;\r
-  UINT64  DataOffset;\r
-  UINT8   Rsvd1[8];\r
-  UINT8   St0Mm0[10], Rsvd2[6];\r
-  UINT8   St1Mm1[10], Rsvd3[6];\r
-  UINT8   St2Mm2[10], Rsvd4[6];\r
-  UINT8   St3Mm3[10], Rsvd5[6];\r
-  UINT8   St4Mm4[10], Rsvd6[6];\r
-  UINT8   St5Mm5[10], Rsvd7[6];\r
-  UINT8   St6Mm6[10], Rsvd8[6];\r
-  UINT8   St7Mm7[10], Rsvd9[6];\r
-  UINT8   Xmm0[16];\r
-  UINT8   Xmm1[16];\r
-  UINT8   Xmm2[16];\r
-  UINT8   Xmm3[16];\r
-  UINT8   Xmm4[16];\r
-  UINT8   Xmm5[16];\r
-  UINT8   Xmm6[16];\r
-  UINT8   Xmm7[16];\r
-  UINT8   Xmm8[16];\r
-  UINT8   Xmm9[16];\r
-  UINT8   Xmm10[16];\r
-  UINT8   Xmm11[16];\r
-  UINT8   Xmm12[16];\r
-  UINT8   Xmm13[16];\r
-  UINT8   Xmm14[16];\r
-  UINT8   Xmm15[16];\r
-  UINT8   Rsvd10[6 * 16];\r
-} EFI_SMM_OPTIONAL_FP_SAVE_STATE64;\r
-\r
-struct _EFI_SMM_SYSTEM_TABLE;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_INSTALL_CONFIGURATION_TABLE) (\r
-  IN EFI_SMM_SYSTEM_TABLE         * SystemTable,\r
-  IN EFI_GUID                     * Guid,\r
-  IN VOID                         *Table,\r
-  IN UINTN                        TableSize\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    The SmmInstallConfigurationTable() function is used to maintain the list \r
-    of configuration tables that are stored in the System Management System \r
-    Table.  The list is stored as an array of (GUID, Pointer) pairs.  The list \r
-    must be allocated from pool memory with PoolType set to EfiRuntimeServicesData.\r
-\r
-  Arguments:\r
-    SystemTable - A pointer to the SMM System Table.\r
-    Guid        - A pointer to the GUID for the entry to add, update, or remove.\r
-    Table       - A pointer to the buffer of the table to add.  \r
-    TableSize   - The size of the table to install.\r
-\r
-  Returns:\r
-    EFI_SUCCESS             - The (Guid, Table) pair was added, updated, or removed.\r
-    EFI_INVALID_PARAMETER   - Guid is not valid.\r
-    EFI_NOT_FOUND           - An attempt was made to delete a non-existent entry.\r
-    EFI_OUT_OF_RESOURCES    - There is not enough memory available to complete the operation. \r
-\r
---*/\r
-;\r
-\r
-//\r
-// System Management System Table (SMST)\r
-//\r
-struct _EFI_SMM_SYSTEM_TABLE {\r
-  EFI_TABLE_HEADER                    Hdr;\r
-\r
-  CHAR16                              *SmmFirmwareVendor;\r
-  UINT32                              SmmFirmwareRevision;\r
-\r
-  EFI_SMM_INSTALL_CONFIGURATION_TABLE SmmInstallConfigurationTable;\r
-\r
-  //\r
-  // I/O Services\r
-  //\r
-  EFI_GUID                            EfiSmmCpuIoGuid;\r
-  EFI_SMM_CPU_IO_INTERFACE            SmmIo;\r
-\r
-  //\r
-  // Runtime memory service\r
-  //\r
-  EFI_SMMCORE_ALLOCATE_POOL           SmmAllocatePool;\r
-  EFI_SMMCORE_FREE_POOL               SmmFreePool;\r
-  EFI_SMMCORE_ALLOCATE_PAGES          SmmAllocatePages;\r
-  EFI_SMMCORE_FREE_PAGES              SmmFreePages;\r
-\r
-  //\r
-  // MP service\r
-  //\r
-  EFI_SMM_STARTUP_THIS_AP             SmmStartupThisAp;\r
-\r
-  //\r
-  // CPU information records\r
-  //\r
-  UINTN                               CurrentlyExecutingCpu;\r
-  UINTN                               NumberOfCpus;\r
-  EFI_SMM_CPU_SAVE_STATE              *CpuSaveState;\r
-  EFI_SMM_OPTIONAL_FP_SAVE_STATE      *CpuOptionalFloatingPointState;\r
-\r
-  //\r
-  // Extensibility table\r
-  //\r
-  UINTN                               NumberOfTableEntries;\r
-  EFI_CONFIGURATION_TABLE             *SmmConfigurationTable;\r
-\r
-};\r
-\r
-//\r
-// SMM Handler Definition\r
-//\r
-#define EFI_HANDLER_SUCCESS         0x0000\r
-#define EFI_HANDLER_CRITICAL_EXIT   0x0001\r
-#define EFI_HANDLER_SOURCE_QUIESCED 0x0002\r
-#define EFI_HANDLER_SOURCE_PENDING  0x0003\r
-\r
-//\r
-// Structure of Communicate Buffer\r
-//\r
-typedef struct {\r
-  EFI_GUID              HeaderGuid;\r
-  UINTN                 MessageLength;\r
-  UINT8                 Data[1];\r
-} EFI_SMM_COMMUNICATE_HEADER;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_HANDLER_ENTRY_POINT) (\r
-  IN EFI_HANDLE             SmmImageHandle,\r
-  IN OUT VOID               *CommunicationBuffer OPTIONAL,\r
-  IN OUT UINTN              *SourceSize OPTIONAL\r
-  );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_CALLBACK_ENTRY_POINT) (\r
-  IN EFI_HANDLE             SmmImageHandle,\r
-  IN OUT VOID               *CommunicationBuffer OPTIONAL,\r
-  IN OUT UINTN              *SourceSize OPTIONAL\r
-  );\r
-\r
-typedef struct {\r
-  EFI_HANDLE                SmmHandler;\r
-  EFI_DEVICE_PATH_PROTOCOL  *HandlerDevicePath;\r
-} EFI_HANDLER_DESCRIPTOR;\r
-\r
-//\r
-// SMM Base Protocol Definition\r
-//\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_REGISTER_HANDLER) (\r
-  IN EFI_SMM_BASE_PROTOCOL                           * This,\r
-  IN  EFI_DEVICE_PATH_PROTOCOL                       * FilePath,\r
-  IN  VOID                                           *SourceBuffer OPTIONAL,\r
-  IN  UINTN                                          SourceSize,\r
-  OUT EFI_HANDLE                                     * ImageHandle,\r
-  IN  BOOLEAN                                        LegacyIA32Binary OPTIONAL\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Register a given driver into SMRAM.  This is the equivalent of performing\r
-    the LoadImage/StartImage into System Management Mode.\r
-\r
-  Arguments:\r
-    This                  - Protocol instance pointer.\r
-    SourceBuffer          - Optional source buffer in case of the image file\r
-                            being in memory.\r
-    SourceSize            - Size of the source image file, if in memory.\r
-    ImageHandle           - Pointer to the handle that reflects the driver \r
-                            loaded into SMM.\r
-    LegacyIA32Binary      - The binary image to load is legacy 16 bit code.\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The operation was successful.\r
-    EFI_OUT_OF_RESOURCES  - There were no additional SMRAM resources to load the handler\r
-    EFI_UNSUPPORTED       - This platform does not support 16-bit handlers.\r
-    EFI_UNSUPPORTED       - In runtime.\r
-    EFI_INVALID_PARAMETER - The handlers was not the correct image type\r
-\r
---*/\r
-;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_UNREGISTER_HANDLER) (\r
-  IN EFI_SMM_BASE_PROTOCOL          * This,\r
-  IN EFI_HANDLE                     ImageHandle\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Remove a given driver SMRAM.  This is the equivalent of performing\r
-    the UnloadImage System Management Mode.\r
-\r
-  Arguments:\r
-    This                  - Protocol instance pointer.\r
-    ImageHandle           - Pointer to the handle that reflects the driver \r
-                            loaded into SMM.\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The operation was successful\r
-    EFI_INVALID_PARAMETER - The handler did not exist\r
-    EFI_UNSUPPORTED       - In runtime.\r
-\r
---*/\r
-;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_COMMUNICATE) (\r
-  IN EFI_SMM_BASE_PROTOCOL          * This,\r
-  IN EFI_HANDLE                     ImageHandle,\r
-  IN OUT VOID                       *CommunicationBuffer,\r
-  IN OUT UINTN                      *SourceSize\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    The SMM Inter-module Communicate Service Communicate() function \r
-    provides a services to send/received messages from a registered \r
-    EFI service.  The BASE protocol driver is responsible for doing \r
-    any of the copies such that the data lives in boot-service accessible RAM.\r
-\r
-  Arguments:\r
-    This                  - Protocol instance pointer.\r
-    ImageHandle           - Pointer to the handle that reflects the driver \r
-                            loaded into SMM.\r
-    CommunicationBuffer   - Pointer to the buffer to convey into SMRAM.\r
-    SourceSize            - Size of the contents of buffer..\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The message was successfully posted\r
-    EFI_INVALID_PARAMETER - The buffer was NULL\r
-\r
---*/\r
-;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_CALLBACK_SERVICE) (\r
-  IN EFI_SMM_BASE_PROTOCOL                            * This,\r
-  IN EFI_HANDLE                                       SmmImageHandle,\r
-  IN EFI_SMM_CALLBACK_ENTRY_POINT                     CallbackAddress,\r
-  IN BOOLEAN                                          MakeLast OPTIONAL,\r
-  IN BOOLEAN                                          FloatingPointSave OPTIONAL\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    Register a callback to execute within SMM.   \r
-    This allows receipt of messages created with the Boot Service COMMUNICATE.\r
-\r
-  Arguments:\r
-    This                  - Protocol instance pointer.\r
-    CallbackAddress       - Address of the callback service\r
-    MakeFirst             - If present, will stipulate that the handler is posted \r
-                            to be the first module executed in the dispatch table.\r
-    MakeLast              - If present, will stipulate that the handler is posted \r
-                            to be last executed in the dispatch table.\r
-    FloatingPointSave     - This is an optional parameter which informs the \r
-                            EFI_SMM_ACCESS_PROTOCOL Driver core if it needs to save \r
-                            the floating point register state.  If any of the handlers \r
-                            require this, then the state will be saved for all of the handlers.\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The operation was successful\r
-    EFI_OUT_OF_RESOURCES  - Not enough space in the dispatch queue\r
-    EFI_UNSUPPORTED       - In runtime.\r
-    EFI_UNSUPPORTED       - Not in SMM.\r
-\r
---*/\r
-;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_ALLOCATE_POOL) (\r
-  IN EFI_SMM_BASE_PROTOCOL          * This,\r
-  IN EFI_MEMORY_TYPE                PoolType,\r
-  IN UINTN                          Size,\r
-  OUT VOID                          **Buffer\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    The SmmAllocatePool() function allocates a memory region of Size bytes from memory of \r
-    type PoolType and returns the address of the allocated memory in the location referenced \r
-    by Buffer.  This function allocates pages from EFI SMRAM Memory as needed to grow the \r
-    requested pool type.  All allocations are eight-byte aligned.\r
-\r
-  Arguments:\r
-    This                  - Protocol instance pointer.\r
-    PoolType              - The type of pool to allocate.  \r
-                            The only supported type is EfiRuntimeServicesData; \r
-                            the interface will internally map this runtime request to SMRAM.\r
-    Size                  - The number of bytes to allocate from the pool.\r
-    Buffer                - A pointer to a pointer to the allocated buffer if the call \r
-                            succeeds; undefined otherwise.\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The requested number of bytes was allocated.\r
-    EFI_OUT_OF_RESOURCES  - The pool requested could not be allocated.\r
-    EFI_INVALID_PARAMETER - PoolType was invalid.\r
-    EFI_UNSUPPORTED       - In runtime.\r
-\r
---*/\r
-;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_FREE_POOL) (\r
-  IN EFI_SMM_BASE_PROTOCOL          * This,\r
-  IN VOID                           *Buffer\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    The SmmFreePool() function returns the memory specified by Buffer to the system.  \r
-    On return, the memory's type is EFI SMRAM Memory.  The Buffer that is freed must \r
-    have been allocated by SmmAllocatePool().\r
-\r
-  Arguments:\r
-    This                  - Protocol instance pointer.\r
-    Buffer                - Pointer to the buffer allocation.\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The memory was returned to the system.\r
-    EFI_INVALID_PARAMETER - Buffer was invalid.\r
-    EFI_UNSUPPORTED       - In runtime.\r
-\r
---*/\r
-;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_INSIDE_OUT) (\r
-  IN EFI_SMM_BASE_PROTOCOL          * This,\r
-  OUT BOOLEAN                       *InSmm\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    This routine tells caller if execution context is SMM or not.\r
-\r
-  Arguments:\r
-    This                  - Protocol instance pointer.\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The operation was successful\r
-\r
---*/\r
-;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_SMM_GET_SMST_LOCATION) (\r
-  IN EFI_SMM_BASE_PROTOCOL          * This,\r
-  IN OUT EFI_SMM_SYSTEM_TABLE       **Smst\r
-  )\r
-/*++\r
-\r
-  Routine Description:\r
-    The GetSmstLocation() function returns the locatin of the System Management \r
-    Service Table.  The use of the API is such that a driver can discover the \r
-    location of the SMST in its entry point and then cache it in some driver \r
-    global variable so that the SMST can be invoked in subsequent callbacks.\r
-\r
-  Arguments:\r
-    This                  - Protocol instance pointer.\r
-    Smst                  - Pointer to the SMST.\r
-\r
-  Returns:\r
-    EFI_SUCCESS           - The operation was successful\r
-    EFI_INVALID_PARAMETER - Smst was invalid.  \r
-    EFI_UNSUPPORTED       - Not in SMM.\r
-\r
---*/\r
-;\r
-\r
-struct _EFI_SMM_BASE_PROTOCOL {\r
-  EFI_SMM_REGISTER_HANDLER    Register;\r
-  EFI_SMM_UNREGISTER_HANDLER  UnRegister;\r
-  EFI_SMM_COMMUNICATE         Communicate;\r
-  EFI_SMM_CALLBACK_SERVICE    RegisterCallback;\r
-  EFI_SMM_INSIDE_OUT          InSmm;\r
-  EFI_SMM_ALLOCATE_POOL       SmmAllocatePool;\r
-  EFI_SMM_FREE_POOL           SmmFreePool;\r
-  EFI_SMM_GET_SMST_LOCATION   GetSmstLocation;\r
-};\r
-\r
-extern EFI_GUID gEfiSmmBaseProtocolGuid;\r
-extern EFI_GUID gEfiSmmCpuIoGuid;\r
-extern EFI_GUID gEfiSmmCommunicateHeaderGuid;\r
-\r
-#endif\r