X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FInclude%2FPi%2FPiSmmCis.h;h=bf5b580c324518e413af9818e89c1e04fdf07613;hb=2f88bd3a1296c522317f1c21377876de63de5be7;hp=2fa83afc6ec962e787ac5f6bc120c337efaca23c;hpb=9df063a06aef048c042498e2f542fb693e93493a;p=mirror_edk2.git diff --git a/MdePkg/Include/Pi/PiSmmCis.h b/MdePkg/Include/Pi/PiSmmCis.h index 2fa83afc6e..bf5b580c32 100644 --- a/MdePkg/Include/Pi/PiSmmCis.h +++ b/MdePkg/Include/Pi/PiSmmCis.h @@ -1,34 +1,26 @@ /** @file - Common definitions in the Platform Initialization Specification version 1.2 + Common definitions in the Platform Initialization Specification version 1.4a VOLUME 4 System Management Mode Core Interface version. - Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.
- This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _PI_SMMCIS_H_ #define _PI_SMMCIS_H_ -#include +#include #include -typedef struct _EFI_SMM_SYSTEM_TABLE2 EFI_SMM_SYSTEM_TABLE2; - -/// -/// The System Management System Table (SMST) signature -/// -#define SMM_SMST_SIGNATURE SIGNATURE_32 ('S', 'M', 'S', 'T') -/// -/// The System Management System Table (SMST) revision is 1.0 -/// -#define EFI_SMM_SYSTEM_TABLE2_REVISION ((1 << 16) | (0x00)) +typedef struct _EFI_SMM_SYSTEM_TABLE2 EFI_SMM_SYSTEM_TABLE2; +// +// Define new MM related definition introduced by PI 1.5. +// +#define SMM_SMST_SIGNATURE MM_MMST_SIGNATURE +#define SMM_SPECIFICATION_MAJOR_REVISION MM_SPECIFICATION_MAJOR_REVISION +#define SMM_SPECIFICATION_MINOR_REVISION MM_SPECIFICATION_MINOR_REVISION +#define EFI_SMM_SYSTEM_TABLE2_REVISION EFI_MM_SYSTEM_TABLE_REVISION /** Adds, updates, or removes a configuration table entry from the System Management System Table. @@ -51,185 +43,47 @@ typedef struct _EFI_SMM_SYSTEM_TABLE2 EFI_SMM_SYSTEM_TABLE2; typedef EFI_STATUS (EFIAPI *EFI_SMM_INSTALL_CONFIGURATION_TABLE2)( - IN CONST EFI_SMM_SYSTEM_TABLE2 *SystemTable, - IN CONST EFI_GUID *Guid, - IN VOID *Table, - IN UINTN TableSize - ); - -/** - The SmmStartupThisAp() lets the caller to get one distinct application processor - (AP) in the enabled processor pool to execute a caller-provided code stream - while in SMM. It runs the given code on this processor and reports the status. - It must be noted that the supplied code stream will be run only on an enabled - processor which has also entered SMM. - - @param[in] Procedure A pointer to the code stream to be run on the designated AP of the system. - @param[in] CpuNumber The zero-based index of the processor number of the AP on which the code stream is supposed to run. - @param[in,out] ProcArguments Allow the caller to pass a list of parameters to the code that is run by the AP. - - @retval EFI_SUCCESS The call was successful and the return parameters are valid. - @retval EFI_INVALID_PARAMETER The input arguments are out of range. - @retval EFI_INVALID_PARAMETER The CPU requested is not available on this SMI invocation. - @retval EFI_INVALID_PARAMETER The CPU cannot support an additional service invocation. -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SMM_STARTUP_THIS_AP)( - IN EFI_AP_PROCEDURE Procedure, - IN UINTN CpuNumber, - IN OUT VOID *ProcArguments OPTIONAL - ); - -/** - Function prototype for protocol install notification. - - @param[in] Protocol Points to the protocol's unique identifier. - @param[in] Interface Points to the interface instance. - @param[in] Handle The handle on which the interface was installed. - - @return Status Code -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SMM_NOTIFY_FN)( - IN CONST EFI_GUID *Protocol, - IN VOID *Interface, - IN EFI_HANDLE Handle - ); - -/** - Register a callback function be called when a particular protocol interface is installed. - - The SmmRegisterProtocolNotify() function creates a registration Function that is to be - called whenever a protocol interface is installed for Protocol by - SmmInstallProtocolInterface(). - - @param[in] Protocol The unique ID of the protocol for which the event is to be registered. - @param[in] Function Points to the notification function. - @param[out] Registration A pointer to a memory location to receive the registration value. - - @retval EFI_SUCCESS Successfully returned the registration record that has been added. - @retval EFI_INVALID_PARAMETER One or more of Protocol, Function and Registration is NULL. - @retval EFI_OUT_OF_RESOURCES Not enough memory resource to finish the request. -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SMM_REGISTER_PROTOCOL_NOTIFY)( - IN CONST EFI_GUID *Protocol, - IN EFI_SMM_NOTIFY_FN Function, - OUT VOID **Registration + IN CONST EFI_SMM_SYSTEM_TABLE2 *SystemTable, + IN CONST EFI_GUID *Guid, + IN VOID *Table, + IN UINTN TableSize ); -/** - Manage SMI of a particular type. - - @param[in] HandlerType Points to the handler type or NULL for root SMI handlers. - @param[in] Context Points to an optional context buffer. - @param[in,out] CommBuffer Points to the optional communication buffer. - @param[in,out] CommBufferSize Points to the size of the optional communication buffer. - - @retval EFI_SUCCESS Interrupt source was processed successfully but not quiesced. - @retval EFI_INTERRUPT_PENDING One or more SMI sources could not be quiesced. - @retval EFI_WARN_INTERRUPT_SOURCE_PENDING Interrupt source was not handled or quiesced. - @retval EFI_WARN_INTERRUPT_SOURCE_QUIESCED Interrupt source was handled and quiesced. -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SMM_INTERRUPT_MANAGE)( - IN CONST EFI_GUID *HandlerType, - IN CONST VOID *Context OPTIONAL, - IN OUT VOID *CommBuffer OPTIONAL, - IN OUT UINTN *CommBufferSize OPTIONAL - ); - -/** - Main entry point for an SMM handler dispatch or communicate-based callback. - - @param[in] DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). - @param[in] Context Points to an optional handler context which was specified when the - handler was registered. - @param[in,out] CommBuffer A pointer to a collection of data in memory that will - be conveyed from a non-SMM environment into an SMM environment. - @param[in,out] CommBufferSize The size of the CommBuffer. - - @retval EFI_SUCCESS The interrupt was handled and quiesced. No other handlers - should still be called. - @retval EFI_WARN_INTERRUPT_SOURCE_QUIESCED The interrupt has been quiesced but other handlers should - still be called. - @retval EFI_WARN_INTERRUPT_SOURCE_PENDING The interrupt is still pending and other handlers should still - be called. - @retval EFI_INTERRUPT_PENDING The interrupt could not be quiesced. -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SMM_HANDLER_ENTRY_POINT2)( - IN EFI_HANDLE DispatchHandle, - IN CONST VOID *Context OPTIONAL, - IN OUT VOID *CommBuffer OPTIONAL, - IN OUT UINTN *CommBufferSize OPTIONAL - ); - -/** - Registers a handler to execute within SMM. - - @param[in] Handler Handler service funtion pointer. - @param[in] HandlerType Points to the handler type or NULL for root SMI handlers. - @param[out] DispatchHandle On return, contains a unique handle which can be used to later - unregister the handler function. - - @retval EFI_SUCCESS SMI handler added successfully. - @retval EFI_INVALID_PARAMETER Handler is NULL or DispatchHandle is NULL. -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SMM_INTERRUPT_REGISTER)( - IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler, - IN CONST EFI_GUID *HandlerType OPTIONAL, - OUT EFI_HANDLE *DispatchHandle - ); - -/** - Unregister a handler in SMM. - - @param[in] DispatchHandle The handle that was specified when the handler was registered. - - @retval EFI_SUCCESS Handler function was successfully unregistered. - @retval EFI_INVALID_PARAMETER DispatchHandle does not refer to a valid handle. -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SMM_INTERRUPT_UNREGISTER)( - IN EFI_HANDLE DispatchHandle - ); +typedef EFI_MM_STARTUP_THIS_AP EFI_SMM_STARTUP_THIS_AP; +typedef EFI_MM_NOTIFY_FN EFI_SMM_NOTIFY_FN; +typedef EFI_MM_REGISTER_PROTOCOL_NOTIFY EFI_SMM_REGISTER_PROTOCOL_NOTIFY; +typedef EFI_MM_INTERRUPT_MANAGE EFI_SMM_INTERRUPT_MANAGE; +typedef EFI_MM_HANDLER_ENTRY_POINT EFI_SMM_HANDLER_ENTRY_POINT2; +typedef EFI_MM_INTERRUPT_REGISTER EFI_SMM_INTERRUPT_REGISTER; +typedef EFI_MM_INTERRUPT_UNREGISTER EFI_SMM_INTERRUPT_UNREGISTER; /// /// Processor information and functionality needed by SMM Foundation. /// typedef struct _EFI_SMM_ENTRY_CONTEXT { - EFI_SMM_STARTUP_THIS_AP SmmStartupThisAp; + EFI_SMM_STARTUP_THIS_AP SmmStartupThisAp; /// - /// A number between zero and the NumberOfCpus field. This field designates which + /// A number between zero and the NumberOfCpus field. This field designates which /// processor is executing the SMM Foundation. /// - UINTN CurrentlyExecutingCpu; + UINTN CurrentlyExecutingCpu; /// - /// The number of current operational processors in the platform. This is a 1 based + /// The number of possible processors in the platform. This is a 1 based /// counter. This does not indicate the number of processors that entered SMM. /// - UINTN NumberOfCpus; + UINTN NumberOfCpus; /// - /// Points to an array, where each element describes the number of bytes in the - /// corresponding save state specified by CpuSaveState. There are always - /// NumberOfCpus entries in the array. + /// Points to an array, where each element describes the number of bytes in the + /// corresponding save state specified by CpuSaveState. There are always + /// NumberOfCpus entries in the array. /// - UINTN *CpuSaveStateSize; + UINTN *CpuSaveStateSize; /// - /// Points to an array, where each element is a pointer to a CPU save state. The - /// corresponding element in CpuSaveStateSize specifies the number of bytes in the + /// Points to an array, where each element is a pointer to a CPU save state. The + /// corresponding element in CpuSaveStateSize specifies the number of bytes in the /// save state area. There are always NumberOfCpus entries in the array. /// - VOID **CpuSaveState; + VOID **CpuSaveState; } EFI_SMM_ENTRY_CONTEXT; /** @@ -246,70 +100,70 @@ VOID /// /// System Management System Table (SMST) /// -/// The System Management System Table (SMST) is a table that contains a collection of common -/// services for managing SMRAM allocation and providing basic I/O services. These services are +/// The System Management System Table (SMST) is a table that contains a collection of common +/// services for managing SMRAM allocation and providing basic I/O services. These services are /// intended for both preboot and runtime usage. /// struct _EFI_SMM_SYSTEM_TABLE2 { /// /// The table header for the SMST. /// - EFI_TABLE_HEADER Hdr; + EFI_TABLE_HEADER Hdr; /// /// A pointer to a NULL-terminated Unicode string containing the vendor name. /// It is permissible for this pointer to be NULL. /// - CHAR16 *SmmFirmwareVendor; + CHAR16 *SmmFirmwareVendor; /// /// The particular revision of the firmware. /// - UINT32 SmmFirmwareRevision; + UINT32 SmmFirmwareRevision; - EFI_SMM_INSTALL_CONFIGURATION_TABLE2 SmmInstallConfigurationTable; + EFI_SMM_INSTALL_CONFIGURATION_TABLE2 SmmInstallConfigurationTable; /// /// I/O Service /// - EFI_SMM_CPU_IO2_PROTOCOL SmmIo; + EFI_SMM_CPU_IO2_PROTOCOL SmmIo; /// /// Runtime memory services /// - EFI_ALLOCATE_POOL SmmAllocatePool; - EFI_FREE_POOL SmmFreePool; - EFI_ALLOCATE_PAGES SmmAllocatePages; - EFI_FREE_PAGES SmmFreePages; + EFI_ALLOCATE_POOL SmmAllocatePool; + EFI_FREE_POOL SmmFreePool; + EFI_ALLOCATE_PAGES SmmAllocatePages; + EFI_FREE_PAGES SmmFreePages; /// /// MP service /// - EFI_SMM_STARTUP_THIS_AP SmmStartupThisAp; + EFI_SMM_STARTUP_THIS_AP SmmStartupThisAp; /// /// CPU information records /// /// - /// A number between zero and and the NumberOfCpus field. This field designates + /// A number between zero and and the NumberOfCpus field. This field designates /// which processor is executing the SMM infrastructure. /// - UINTN CurrentlyExecutingCpu; + UINTN CurrentlyExecutingCpu; /// - /// The number of current operational processors in the platform. This is a 1 based counter. + /// The number of possible processors in the platform. This is a 1 based counter. /// - UINTN NumberOfCpus; + UINTN NumberOfCpus; /// - /// Points to an array, where each element describes the number of bytes in the - /// corresponding save state specified by CpuSaveState. There are always - /// NumberOfCpus entries in the array. + /// Points to an array, where each element describes the number of bytes in the + /// corresponding save state specified by CpuSaveState. There are always + /// NumberOfCpus entries in the array. /// - UINTN *CpuSaveStateSize; + UINTN *CpuSaveStateSize; /// - /// Points to an array, where each element is a pointer to a CPU save state. The - /// corresponding element in CpuSaveStateSize specifies the number of bytes in the + /// Points to an array, where each element is a pointer to a CPU save state. The + /// corresponding element in CpuSaveStateSize specifies the number of bytes in the /// save state area. There are always NumberOfCpus entries in the array. /// - VOID **CpuSaveState; + VOID **CpuSaveState; /// /// Extensibility table @@ -318,29 +172,29 @@ struct _EFI_SMM_SYSTEM_TABLE2 { /// /// The number of UEFI Configuration Tables in the buffer SmmConfigurationTable. /// - UINTN NumberOfTableEntries; + UINTN NumberOfTableEntries; /// - /// A pointer to the UEFI Configuration Tables. The number of entries in the table is - /// NumberOfTableEntries. + /// A pointer to the UEFI Configuration Tables. The number of entries in the table is + /// NumberOfTableEntries. /// - EFI_CONFIGURATION_TABLE *SmmConfigurationTable; + EFI_CONFIGURATION_TABLE *SmmConfigurationTable; /// /// Protocol services /// - EFI_INSTALL_PROTOCOL_INTERFACE SmmInstallProtocolInterface; - EFI_UNINSTALL_PROTOCOL_INTERFACE SmmUninstallProtocolInterface; - EFI_HANDLE_PROTOCOL SmmHandleProtocol; - EFI_SMM_REGISTER_PROTOCOL_NOTIFY SmmRegisterProtocolNotify; - EFI_LOCATE_HANDLE SmmLocateHandle; - EFI_LOCATE_PROTOCOL SmmLocateProtocol; + EFI_INSTALL_PROTOCOL_INTERFACE SmmInstallProtocolInterface; + EFI_UNINSTALL_PROTOCOL_INTERFACE SmmUninstallProtocolInterface; + EFI_HANDLE_PROTOCOL SmmHandleProtocol; + EFI_SMM_REGISTER_PROTOCOL_NOTIFY SmmRegisterProtocolNotify; + EFI_LOCATE_HANDLE SmmLocateHandle; + EFI_LOCATE_PROTOCOL SmmLocateProtocol; /// /// SMI Management functions /// - EFI_SMM_INTERRUPT_MANAGE SmiManage; - EFI_SMM_INTERRUPT_REGISTER SmiHandlerRegister; - EFI_SMM_INTERRUPT_UNREGISTER SmiHandlerUnRegister; + EFI_SMM_INTERRUPT_MANAGE SmiManage; + EFI_SMM_INTERRUPT_REGISTER SmiHandlerRegister; + EFI_SMM_INTERRUPT_UNREGISTER SmiHandlerUnRegister; }; #endif