4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Common definitions in the Platform Initialization Specification version 1.2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOLUME 4 System Management Mode Core Interface version.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _PI_SMMCIS_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _PI_SMMCIS_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Pi/PiMultiPhase.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/SmmCpuIo2.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_SMM_SYSTEM_TABLE2 EFI_SMM_SYSTEM_TABLE2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The System Management System Table (SMST) signature
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SMM_SMST_SIGNATURE SIGNATURE_32 ('S', 'M', 'S', 'T')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The System Management System Table (SMST) revision is 1.2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SMM_SPECIFICATION_MAJOR_REVISION 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SMM_SPECIFICATION_MINOR_REVISION 20
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_SMM_SYSTEM_TABLE2_REVISION ((SMM_SPECIFICATION_MAJOR_REVISION<<16) | (SMM_SPECIFICATION_MINOR_REVISION))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Adds, updates, or removes a configuration table entry from the System Management System Table.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The SmmInstallConfigurationTable() function is used to maintain the list
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of configuration tables that are stored in the System Management System
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Table. The list is stored as an array of (GUID, Pointer) pairs. The list
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync must be allocated from pool memory with PoolType set to EfiRuntimeServicesData.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] SystemTable A pointer to the SMM System Table (SMST).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Guid A pointer to the GUID for the entry to add, update, or remove.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Table A pointer to the buffer of the table to add.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] TableSize The size of the table to install.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The (Guid, Table) pair was added, updated, or removed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Guid is not valid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND An attempt was made to delete a non-existent entry.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES There is not enough memory available to complete the operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_INSTALL_CONFIGURATION_TABLE2)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_SMM_SYSTEM_TABLE2 *SystemTable,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_GUID *Guid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Table,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN TableSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The SmmStartupThisAp() lets the caller to get one distinct application processor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (AP) in the enabled processor pool to execute a caller-provided code stream
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while in SMM. It runs the given code on this processor and reports the status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync It must be noted that the supplied code stream will be run only on an enabled
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync processor which has also entered SMM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Procedure A pointer to the code stream to be run on the designated AP of the system.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] CpuNumber The zero-based index of the processor number of the AP on which the code stream is supposed to run.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in,out] ProcArguments Allow the caller to pass a list of parameters to the code that is run by the AP.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The call was successful and the return parameters are valid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The input arguments are out of range.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The CPU requested is not available on this SMI invocation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The CPU cannot support an additional service invocation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_STARTUP_THIS_AP)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_AP_PROCEDURE Procedure,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN CpuNumber,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *ProcArguments OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Function prototype for protocol install notification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Protocol Points to the protocol's unique identifier.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Interface Points to the interface instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Handle The handle on which the interface was installed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Status Code
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_NOTIFY_FN)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_GUID *Protocol,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Interface,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE Handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Register a callback function be called when a particular protocol interface is installed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The SmmRegisterProtocolNotify() function creates a registration Function that is to be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync called whenever a protocol interface is installed for Protocol by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SmmInstallProtocolInterface().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Protocol The unique ID of the protocol for which the event is to be registered.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Function Points to the notification function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Registration A pointer to a memory location to receive the registration value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully returned the registration record that has been added.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER One or more of Protocol, Function and Registration is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Not enough memory resource to finish the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_REGISTER_PROTOCOL_NOTIFY)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_GUID *Protocol,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SMM_NOTIFY_FN Function,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID **Registration
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Manage SMI of a particular type.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] HandlerType Points to the handler type or NULL for root SMI handlers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Context Points to an optional context buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in,out] CommBuffer Points to the optional communication buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in,out] CommBufferSize Points to the size of the optional communication buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Interrupt source was processed successfully but not quiesced.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INTERRUPT_PENDING One or more SMI sources could not be quiesced.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_WARN_INTERRUPT_SOURCE_PENDING Interrupt source was not handled or quiesced.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_WARN_INTERRUPT_SOURCE_QUIESCED Interrupt source was handled and quiesced.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_INTERRUPT_MANAGE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_GUID *HandlerType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST VOID *Context OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *CommBuffer OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINTN *CommBufferSize OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Main entry point for an SMM handler dispatch or communicate-based callback.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Context Points to an optional handler context which was specified when the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync handler was registered.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in,out] CommBuffer A pointer to a collection of data in memory that will
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be conveyed from a non-SMM environment into an SMM environment.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in,out] CommBufferSize The size of the CommBuffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The interrupt was handled and quiesced. No other handlers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync should still be called.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_WARN_INTERRUPT_SOURCE_QUIESCED The interrupt has been quiesced but other handlers should
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync still be called.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_WARN_INTERRUPT_SOURCE_PENDING The interrupt is still pending and other handlers should still
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be called.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INTERRUPT_PENDING The interrupt could not be quiesced.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_HANDLER_ENTRY_POINT2)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE DispatchHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST VOID *Context OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *CommBuffer OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINTN *CommBufferSize OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Registers a handler to execute within SMM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Handler Handler service funtion pointer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] HandlerType Points to the handler type or NULL for root SMI handlers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] DispatchHandle On return, contains a unique handle which can be used to later
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync unregister the handler function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS SMI handler added successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Handler is NULL or DispatchHandle is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_INTERRUPT_REGISTER)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_GUID *HandlerType OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_HANDLE *DispatchHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Unregister a handler in SMM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DispatchHandle The handle that was specified when the handler was registered.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Handler function was successfully unregistered.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DispatchHandle does not refer to a valid handle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_INTERRUPT_UNREGISTER)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE DispatchHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Processor information and functionality needed by SMM Foundation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_SMM_ENTRY_CONTEXT {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_STARTUP_THIS_AP SmmStartupThisAp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A number between zero and the NumberOfCpus field. This field designates which
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// processor is executing the SMM Foundation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN CurrentlyExecutingCpu;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The number of current operational processors in the platform. This is a 1 based
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// counter. This does not indicate the number of processors that entered SMM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN NumberOfCpus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Points to an array, where each element describes the number of bytes in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// corresponding save state specified by CpuSaveState. There are always
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// NumberOfCpus entries in the array.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN *CpuSaveStateSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Points to an array, where each element is a pointer to a CPU save state. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// corresponding element in CpuSaveStateSize specifies the number of bytes in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// save state area. There are always NumberOfCpus entries in the array.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID **CpuSaveState;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_SMM_ENTRY_CONTEXT;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is the main entry point to the SMM Foundation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] SmmEntryContext Processor information and functionality needed by SMM Foundation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_SMM_ENTRY_POINT)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_SMM_ENTRY_CONTEXT *SmmEntryContext
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// System Management System Table (SMST)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The System Management System Table (SMST) is a table that contains a collection of common
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// services for managing SMRAM allocation and providing basic I/O services. These services are
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// intended for both preboot and runtime usage.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_SMM_SYSTEM_TABLE2 {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The table header for the SMST.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_TABLE_HEADER Hdr;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A pointer to a NULL-terminated Unicode string containing the vendor name.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// It is permissible for this pointer to be NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR16 *SmmFirmwareVendor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The particular revision of the firmware.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SmmFirmwareRevision;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_INSTALL_CONFIGURATION_TABLE2 SmmInstallConfigurationTable;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// I/O Service
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_CPU_IO2_PROTOCOL SmmIo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Runtime memory services
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ALLOCATE_POOL SmmAllocatePool;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_FREE_POOL SmmFreePool;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ALLOCATE_PAGES SmmAllocatePages;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_FREE_PAGES SmmFreePages;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// MP service
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_STARTUP_THIS_AP SmmStartupThisAp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// CPU information records
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A number between zero and and the NumberOfCpus field. This field designates
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// which processor is executing the SMM infrastructure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN CurrentlyExecutingCpu;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The number of current operational processors in the platform. This is a 1 based counter.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN NumberOfCpus;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Points to an array, where each element describes the number of bytes in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// corresponding save state specified by CpuSaveState. There are always
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// NumberOfCpus entries in the array.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN *CpuSaveStateSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Points to an array, where each element is a pointer to a CPU save state. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// corresponding element in CpuSaveStateSize specifies the number of bytes in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// save state area. There are always NumberOfCpus entries in the array.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID **CpuSaveState;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Extensibility table
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The number of UEFI Configuration Tables in the buffer SmmConfigurationTable.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN NumberOfTableEntries;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A pointer to the UEFI Configuration Tables. The number of entries in the table is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// NumberOfTableEntries.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_CONFIGURATION_TABLE *SmmConfigurationTable;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Protocol services
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_INSTALL_PROTOCOL_INTERFACE SmmInstallProtocolInterface;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UNINSTALL_PROTOCOL_INTERFACE SmmUninstallProtocolInterface;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE_PROTOCOL SmmHandleProtocol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_REGISTER_PROTOCOL_NOTIFY SmmRegisterProtocolNotify;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_LOCATE_HANDLE SmmLocateHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_LOCATE_PROTOCOL SmmLocateProtocol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// SMI Management functions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_INTERRUPT_MANAGE SmiManage;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_INTERRUPT_REGISTER SmiHandlerRegister;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SMM_INTERRUPT_UNREGISTER SmiHandlerUnRegister;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif