mirror of https://github.com/acidanthera/audk.git
MdePkg: Add new definitions for Management Mode.
In PI 1.5 version, system management mode name(SMM) has been changed to Management Mode(MM). It impacts the current code which still use SMM/Smram/SMI keywords. This patch add new definition which use MM/MmRam/MMI keywords to follow new spec definitions. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
47bfbd7f80
commit
07c6a47e70
|
@ -0,0 +1,350 @@
|
|||
/** @file
|
||||
Common definitions in the Platform Initialization Specification version 1.5
|
||||
VOLUME 4 Management Mode Core Interface version.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _PI_MMCIS_H_
|
||||
#define _PI_MMCIS_H_
|
||||
|
||||
#include <Protocol/MmCpuIo.h>
|
||||
|
||||
typedef struct _EFI_MM_SYSTEM_TABLE EFI_MM_SYSTEM_TABLE;
|
||||
|
||||
///
|
||||
/// The Management Mode System Table (MMST) signature
|
||||
///
|
||||
#define MM_MMST_SIGNATURE SIGNATURE_32 ('S', 'M', 'S', 'T')
|
||||
///
|
||||
/// The Management Mode System Table (MMST) revision is 1.6
|
||||
///
|
||||
#define MM_SPECIFICATION_MAJOR_REVISION 1
|
||||
#define MM_SPECIFICATION_MINOR_REVISION 60
|
||||
#define EFI_MM_SYSTEM_TABLE_REVISION ((MM_SPECIFICATION_MAJOR_REVISION<<16) | (MM_SPECIFICATION_MINOR_REVISION))
|
||||
|
||||
/**
|
||||
Adds, updates, or removes a configuration table entry from the Management Mode System Table.
|
||||
|
||||
The MmInstallConfigurationTable() function is used to maintain the list
|
||||
of configuration tables that are stored in the Management Mode System
|
||||
Table. The list is stored as an array of (GUID, Pointer) pairs. The list
|
||||
must be allocated from pool memory with PoolType set to EfiRuntimeServicesData.
|
||||
|
||||
@param[in] SystemTable A pointer to the MM System Table (MMST).
|
||||
@param[in] Guid A pointer to the GUID for the entry to add, update, or remove.
|
||||
@param[in] Table A pointer to the buffer of the table to add.
|
||||
@param[in] TableSize The size of the table to install.
|
||||
|
||||
@retval EFI_SUCCESS The (Guid, Table) pair was added, updated, or removed.
|
||||
@retval EFI_INVALID_PARAMETER Guid is not valid.
|
||||
@retval EFI_NOT_FOUND An attempt was made to delete a non-existent entry.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory available to complete the operation.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_INSTALL_CONFIGURATION_TABLE)(
|
||||
IN CONST EFI_MM_SYSTEM_TABLE *SystemTable,
|
||||
IN CONST EFI_GUID *Guid,
|
||||
IN VOID *Table,
|
||||
IN UINTN TableSize
|
||||
);
|
||||
|
||||
/**
|
||||
This service lets the caller to get one distinct application processor (AP) to execute
|
||||
a caller-provided code stream while in MM.
|
||||
|
||||
@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 Allows 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_MM_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_MM_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 MmRegisterProtocolNotify() function creates a registration Function that is to be
|
||||
called whenever a protocol interface is installed for Protocol by
|
||||
MmInstallProtocolInterface().
|
||||
If Function == NULL and Registration is an existing registration, then the callback is unhooked.
|
||||
|
||||
@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 or unhooked.
|
||||
@retval EFI_INVALID_PARAMETER Protocol is NULL or Registration is NULL.
|
||||
@retval EFI_OUT_OF_RESOURCES Not enough memory resource to finish the request.
|
||||
@retval EFI_NOT_FOUND If the registration is not found when Function == NULL.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_REGISTER_PROTOCOL_NOTIFY)(
|
||||
IN CONST EFI_GUID *Protocol,
|
||||
IN EFI_MM_NOTIFY_FN Function,
|
||||
OUT VOID **Registration
|
||||
);
|
||||
|
||||
/**
|
||||
Manage MMI of a particular type.
|
||||
|
||||
@param[in] HandlerType Points to the handler type or NULL for root MMI 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_WARN_INTERRUPT_SOURCE_PENDING Interrupt source was processed successfully but not quiesced.
|
||||
@retval EFI_INTERRUPT_PENDING One or more SMI sources could not be quiesced.
|
||||
@retval EFI_NOT_FOUND Interrupt source was not handled or quiesced.
|
||||
@retval EFI_SUCCESS Interrupt source was handled and quiesced.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_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 MM handler dispatch or communicate-based callback.
|
||||
|
||||
@param[in] DispatchHandle The unique handle assigned to this handler by MmiHandlerRegister().
|
||||
@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-MM environment into an MM 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_MM_HANDLER_ENTRY_POINT)(
|
||||
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 MM.
|
||||
|
||||
@param[in] Handler Handler service function pointer.
|
||||
@param[in] HandlerType Points to the handler type or NULL for root MMI handlers.
|
||||
@param[out] DispatchHandle On return, contains a unique handle which can be used to later
|
||||
unregister the handler function.
|
||||
|
||||
@retval EFI_SUCCESS MMI handler added successfully.
|
||||
@retval EFI_INVALID_PARAMETER Handler is NULL or DispatchHandle is NULL.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_INTERRUPT_REGISTER)(
|
||||
IN EFI_MM_HANDLER_ENTRY_POINT Handler,
|
||||
IN CONST EFI_GUID *HandlerType OPTIONAL,
|
||||
OUT EFI_HANDLE *DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Unregister a handler in MM.
|
||||
|
||||
@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_MM_INTERRUPT_UNREGISTER)(
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
///
|
||||
/// Processor information and functionality needed by MM Foundation.
|
||||
///
|
||||
typedef struct _EFI_MM_ENTRY_CONTEXT {
|
||||
EFI_MM_STARTUP_THIS_AP MmStartupThisAp;
|
||||
///
|
||||
/// A number between zero and the NumberOfCpus field. This field designates which
|
||||
/// processor is executing the MM Foundation.
|
||||
///
|
||||
UINTN CurrentlyExecutingCpu;
|
||||
///
|
||||
/// The number of possible processors in the platform. This is a 1 based
|
||||
/// counter. This does not indicate the number of processors that entered MM.
|
||||
///
|
||||
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.
|
||||
///
|
||||
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
|
||||
/// save state area. There are always NumberOfCpus entries in the array.
|
||||
///
|
||||
VOID **CpuSaveState;
|
||||
} EFI_MM_ENTRY_CONTEXT;
|
||||
|
||||
/**
|
||||
This function is the main entry point to the MM Foundation.
|
||||
|
||||
@param[in] MmEntryContext Processor information and functionality needed by MM Foundation.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_MM_ENTRY_POINT)(
|
||||
IN CONST EFI_MM_ENTRY_CONTEXT *MmEntryContext
|
||||
);
|
||||
|
||||
///
|
||||
/// Management Mode System Table (MMST)
|
||||
///
|
||||
/// The Management Mode System Table (MMST) is a table that contains a collection of common
|
||||
/// services for managing MMRAM allocation and providing basic I/O services. These services are
|
||||
/// intended for both preboot and runtime usage.
|
||||
///
|
||||
struct _EFI_MM_SYSTEM_TABLE {
|
||||
///
|
||||
/// The table header for the SMST.
|
||||
///
|
||||
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 *MmFirmwareVendor;
|
||||
///
|
||||
/// The particular revision of the firmware.
|
||||
///
|
||||
UINT32 MmFirmwareRevision;
|
||||
|
||||
EFI_MM_INSTALL_CONFIGURATION_TABLE MmInstallConfigurationTable;
|
||||
|
||||
///
|
||||
/// I/O Service
|
||||
///
|
||||
EFI_MM_CPU_IO_PROTOCOL MmIo;
|
||||
|
||||
///
|
||||
/// Runtime memory services
|
||||
///
|
||||
EFI_ALLOCATE_POOL MmAllocatePool;
|
||||
EFI_FREE_POOL MmFreePool;
|
||||
EFI_ALLOCATE_PAGES MmAllocatePages;
|
||||
EFI_FREE_PAGES MmFreePages;
|
||||
|
||||
///
|
||||
/// MP service
|
||||
///
|
||||
EFI_MM_STARTUP_THIS_AP MmStartupThisAp;
|
||||
|
||||
///
|
||||
/// CPU information records
|
||||
///
|
||||
|
||||
///
|
||||
/// A number between zero and and the NumberOfCpus field. This field designates
|
||||
/// which processor is executing the MM infrastructure.
|
||||
///
|
||||
UINTN CurrentlyExecutingCpu;
|
||||
///
|
||||
/// The number of possible processors in the platform. This is a 1 based counter.
|
||||
///
|
||||
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.
|
||||
///
|
||||
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
|
||||
/// save state area. There are always NumberOfCpus entries in the array.
|
||||
///
|
||||
VOID **CpuSaveState;
|
||||
|
||||
///
|
||||
/// Extensibility table
|
||||
///
|
||||
|
||||
///
|
||||
/// The number of UEFI Configuration Tables in the buffer MmConfigurationTable.
|
||||
///
|
||||
UINTN NumberOfTableEntries;
|
||||
///
|
||||
/// A pointer to the UEFI Configuration Tables. The number of entries in the table is
|
||||
/// NumberOfTableEntries.
|
||||
///
|
||||
EFI_CONFIGURATION_TABLE *MmConfigurationTable;
|
||||
|
||||
///
|
||||
/// Protocol services
|
||||
///
|
||||
EFI_INSTALL_PROTOCOL_INTERFACE MmInstallProtocolInterface;
|
||||
EFI_UNINSTALL_PROTOCOL_INTERFACE MmUninstallProtocolInterface;
|
||||
EFI_HANDLE_PROTOCOL MmHandleProtocol;
|
||||
EFI_MM_REGISTER_PROTOCOL_NOTIFY MmRegisterProtocolNotify;
|
||||
EFI_LOCATE_HANDLE MmLocateHandle;
|
||||
EFI_LOCATE_PROTOCOL MmLocateProtocol;
|
||||
|
||||
///
|
||||
/// MMI Management functions
|
||||
///
|
||||
EFI_MM_INTERRUPT_MANAGE MmiManage;
|
||||
EFI_MM_INTERRUPT_REGISTER MmiHandlerRegister;
|
||||
EFI_MM_INTERRUPT_UNREGISTER MmiHandlerUnRegister;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,25 @@
|
|||
/** @file
|
||||
|
||||
Root include file for Mde Package MM modules.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that 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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __PI_MM_H__
|
||||
#define __PI_MM_H__
|
||||
|
||||
#include <Uefi/UefiBaseType.h>
|
||||
#include <Uefi/UefiSpec.h>
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
/** @file
|
||||
DXE MM Ready To Lock protocol introduced in the PI 1.5 specification.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _DXE_MM_READY_TO_LOCK_H_
|
||||
#define _DXE_MM_READY_TO_LOCK_H_
|
||||
|
||||
#define EFI_DXE_MM_READY_TO_LOCK_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x60ff8964, 0xe906, 0x41d0, { 0xaf, 0xed, 0xf2, 0x41, 0xe9, 0x74, 0xe0, 0x8e } \
|
||||
}
|
||||
|
||||
extern EFI_GUID gEfiDxeMmReadyToLockProtocolGuid;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,133 @@
|
|||
/** @file
|
||||
EFI MM Access Protocol as defined in the PI 1.5 specification.
|
||||
|
||||
This protocol is used to control the visibility of the MMRAM on the platform.
|
||||
It abstracts the location and characteristics of MMRAM. The expectation is
|
||||
that the north bridge or memory controller would publish this protocol.
|
||||
|
||||
The principal functionality found in the memory controller includes the following:
|
||||
- Exposing the MMRAM to all non-MM agents, or the "open" state
|
||||
- Shrouding the MMRAM to all but the MM agents, or the "closed" state
|
||||
- Preserving the system integrity, or "locking" the MMRAM, such that the settings cannot be
|
||||
perturbed by either boot service or runtime agents
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_ACCESS_H_
|
||||
#define _MM_ACCESS_H_
|
||||
|
||||
#define EFI_MM_ACCESS_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xc2702b74, 0x800c, 0x4131, {0x87, 0x46, 0x8f, 0xb5, 0xb8, 0x9c, 0xe4, 0xac } \
|
||||
}
|
||||
|
||||
|
||||
typedef struct _EFI_MM_ACCESS_PROTOCOL EFI_MM_ACCESS_PROTOCOL;
|
||||
|
||||
/**
|
||||
Opens the MMRAM area to be accessible by a boot-service driver.
|
||||
|
||||
This function "opens" MMRAM so that it is visible while not inside of MM. The function should
|
||||
return EFI_UNSUPPORTED if the hardware does not support hiding of MMRAM. The function
|
||||
should return EFI_DEVICE_ERROR if the MMRAM configuration is locked.
|
||||
|
||||
@param[in] This The EFI_MM_ACCESS_PROTOCOL instance.
|
||||
|
||||
@retval EFI_SUCCESS The operation was successful.
|
||||
@retval EFI_UNSUPPORTED The system does not support opening and closing of MMRAM.
|
||||
@retval EFI_DEVICE_ERROR MMRAM cannot be opened, perhaps because it is locked.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_OPEN)(
|
||||
IN EFI_MM_ACCESS_PROTOCOL *This
|
||||
);
|
||||
|
||||
/**
|
||||
Inhibits access to the MMRAM.
|
||||
|
||||
This function "closes" MMRAM so that it is not visible while outside of MM. The function should
|
||||
return EFI_UNSUPPORTED if the hardware does not support hiding of MMRAM.
|
||||
|
||||
@param[in] This The EFI_MM_ACCESS_PROTOCOL instance.
|
||||
|
||||
@retval EFI_SUCCESS The operation was successful.
|
||||
@retval EFI_UNSUPPORTED The system does not support opening and closing of MMRAM.
|
||||
@retval EFI_DEVICE_ERROR MMRAM cannot be closed.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_CLOSE)(
|
||||
IN EFI_MM_ACCESS_PROTOCOL *This
|
||||
);
|
||||
|
||||
/**
|
||||
Inhibits access to the MMRAM.
|
||||
|
||||
This function prohibits access to the MMRAM region. This function is usually implemented such
|
||||
that it is a write-once operation.
|
||||
|
||||
@param[in] This The EFI_MM_ACCESS_PROTOCOL instance.
|
||||
|
||||
@retval EFI_SUCCESS The device was successfully locked.
|
||||
@retval EFI_UNSUPPORTED The system does not support locking of MMRAM.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_LOCK)(
|
||||
IN EFI_MM_ACCESS_PROTOCOL *This
|
||||
);
|
||||
|
||||
/**
|
||||
Queries the memory controller for the possible regions that will support MMRAM.
|
||||
|
||||
@param[in] This The EFI_MM_ACCESS_PROTOCOL instance.
|
||||
@param[in,out] MmramMapSize A pointer to the size, in bytes, of the MmramMemoryMap buffer.
|
||||
@param[in,out] MmramMap A pointer to the buffer in which firmware places the current memory map.
|
||||
|
||||
@retval EFI_SUCCESS The chipset supported the given resource.
|
||||
@retval EFI_BUFFER_TOO_SMALL The MmramMap parameter was too small. The current buffer size
|
||||
needed to hold the memory map is returned in MmramMapSize.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_CAPABILITIES)(
|
||||
IN CONST EFI_MM_ACCESS_PROTOCOL *This,
|
||||
IN OUT UINTN *MmramMapSize,
|
||||
IN OUT EFI_MMRAM_DESCRIPTOR *MmramMap
|
||||
);
|
||||
|
||||
///
|
||||
/// EFI MM Access Protocol is used to control the visibility of the MMRAM on the platform.
|
||||
/// It abstracts the location and characteristics of MMRAM. The platform should report all
|
||||
/// MMRAM via EFI_MM_ACCESS_PROTOCOL. The expectation is that the north bridge or memory
|
||||
/// controller would publish this protocol.
|
||||
///
|
||||
struct _EFI_MM_ACCESS_PROTOCOL {
|
||||
EFI_MM_OPEN Open;
|
||||
EFI_MM_CLOSE Close;
|
||||
EFI_MM_LOCK Lock;
|
||||
EFI_MM_CAPABILITIES GetCapabilities;
|
||||
///
|
||||
/// Indicates the current state of the MMRAM. Set to TRUE if MMRAM is locked.
|
||||
///
|
||||
BOOLEAN LockState;
|
||||
///
|
||||
/// Indicates the current state of the MMRAM. Set to TRUE if MMRAM is open.
|
||||
///
|
||||
BOOLEAN OpenState;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmAccessProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
/** @file
|
||||
EFI MM Base Protocol as defined in the PI 1.5 specification.
|
||||
|
||||
This protocol is utilized by all MM drivers to locate the MM infrastructure services and determine
|
||||
whether the driver is being invoked inside MMRAM or outside of MMRAM.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_BASE_H_
|
||||
#define _MM_BASE_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_BASE_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xf4ccbfb7, 0xf6e0, 0x47fd, {0x9d, 0xd4, 0x10, 0xa8, 0xf1, 0x50, 0xc1, 0x91 } \
|
||||
}
|
||||
|
||||
typedef struct _EFI_MM_BASE_PROTOCOL EFI_MM_BASE_PROTOCOL;
|
||||
|
||||
/**
|
||||
Service to indicate whether the driver is currently executing in the MM Initialization phase.
|
||||
|
||||
This service is used to indicate whether the driver is currently executing in the MM Initialization
|
||||
phase. For MM drivers, this will return TRUE in InMmram while inside the driver's entry point and
|
||||
otherwise FALSE. For combination MM/DXE drivers, this will return FALSE in the DXE launch. For the
|
||||
MM launch, it behaves as an MM driver.
|
||||
|
||||
@param[in] This The EFI_MM_BASE_PROTOCOL instance.
|
||||
@param[out] InMmram Pointer to a Boolean which, on return, indicates that the driver is
|
||||
currently executing inside of MMRAM (TRUE) or outside of MMRAM (FALSE).
|
||||
|
||||
@retval EFI_SUCCESS The call returned successfully.
|
||||
@retval EFI_INVALID_PARAMETER InMmram was NULL.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_INSIDE_OUT)(
|
||||
IN CONST EFI_MM_BASE_PROTOCOL *This,
|
||||
OUT BOOLEAN *InMmram
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
Returns the location of the Management Mode Service Table (MMST).
|
||||
|
||||
This function returns the location of the Management Mode Service Table (MMST). The use of the
|
||||
API is such that a driver can discover the location of the MMST in its entry point and then cache it in
|
||||
some driver global variable so that the MMST can be invoked in subsequent handlers.
|
||||
|
||||
@param[in] This The EFI_MM_BASE_PROTOCOL instance.
|
||||
@param[in,out] Mmst On return, points to a pointer to the Management Mode Service Table (MMST).
|
||||
|
||||
@retval EFI_SUCCESS The operation was successful.
|
||||
@retval EFI_INVALID_PARAMETER Mmst was invalid.
|
||||
@retval EFI_UNSUPPORTED Not in MM.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_GET_MMST_LOCATION)(
|
||||
IN CONST EFI_MM_BASE_PROTOCOL *This,
|
||||
IN OUT EFI_MM_SYSTEM_TABLE **Mmst
|
||||
)
|
||||
;
|
||||
|
||||
///
|
||||
/// EFI MM Base Protocol is utilized by all MM drivers to locate the MM infrastructure
|
||||
/// services and determine whether the driver is being invoked inside MMRAM or outside of MMRAM.
|
||||
///
|
||||
struct _EFI_MM_BASE_PROTOCOL {
|
||||
EFI_MM_INSIDE_OUT InMm;
|
||||
EFI_MM_GET_MMST_LOCATION GetMmstLocation;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmBaseProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
/** @file
|
||||
EFI MM Communication Protocol as defined in the PI 1.5 specification.
|
||||
|
||||
This protocol provides a means of communicating between drivers outside of MM and MMI
|
||||
handlers inside of MM.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_COMMUNICATION_H_
|
||||
#define _MM_COMMUNICATION_H_
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
///
|
||||
/// To avoid confusion in interpreting frames, the communication buffer should always
|
||||
/// begin with EFI_MM_COMMUNICATE_HEADER
|
||||
///
|
||||
typedef struct {
|
||||
///
|
||||
/// Allows for disambiguation of the message format.
|
||||
///
|
||||
EFI_GUID HeaderGuid;
|
||||
///
|
||||
/// Describes the size of Data (in bytes) and does not include the size of the header.
|
||||
///
|
||||
UINTN MessageLength;
|
||||
///
|
||||
/// Designates an array of bytes that is MessageLength in size.
|
||||
///
|
||||
UINT8 Data[1];
|
||||
} EFI_MM_COMMUNICATE_HEADER;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#define EFI_MM_COMMUNICATION_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xc68ed8e2, 0x9dc6, 0x4cbd, { 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32 } \
|
||||
}
|
||||
|
||||
typedef struct _EFI_MM_COMMUNICATION_PROTOCOL EFI_MM_COMMUNICATION_PROTOCOL;
|
||||
|
||||
/**
|
||||
Communicates with a registered handler.
|
||||
|
||||
This function provides a service to send and receive messages from a registered UEFI service.
|
||||
|
||||
@param[in] This The EFI_MM_COMMUNICATION_PROTOCOL instance.
|
||||
@param[in] CommBuffer A pointer to the buffer to convey into MMRAM.
|
||||
@param[in] CommSize The size of the data buffer being passed in.On exit, the size of data
|
||||
being returned. Zero if the handler does not wish to reply with any data.
|
||||
|
||||
@retval EFI_SUCCESS The message was successfully posted.
|
||||
@retval EFI_INVALID_PARAMETER The CommBuffer was NULL.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_COMMUNICATE)(
|
||||
IN CONST EFI_MM_COMMUNICATION_PROTOCOL *This,
|
||||
IN OUT VOID *CommBuffer,
|
||||
IN OUT UINTN *CommSize
|
||||
);
|
||||
|
||||
///
|
||||
/// EFI MM Communication Protocol provides runtime services for communicating
|
||||
/// between DXE drivers and a registered MMI handler.
|
||||
///
|
||||
struct _EFI_MM_COMMUNICATION_PROTOCOL {
|
||||
EFI_MM_COMMUNICATE Communicate;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmCommunicationProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
/** @file
|
||||
EFI MM Configuration Protocol as defined in the PI 1.5 specification.
|
||||
|
||||
This protocol is used to:
|
||||
1) report the portions of MMRAM regions which cannot be used for the MMRAM heap.
|
||||
2) register the MM Foundation entry point with the processor code. The entry
|
||||
point will be invoked by the MM processor entry code.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_CONFIGURATION_H_
|
||||
#define _MM_CONFIGURATION_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_CONFIGURATION_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x26eeb3de, 0xb689, 0x492e, {0x80, 0xf0, 0xbe, 0x8b, 0xd7, 0xda, 0x4b, 0xa7 } \
|
||||
}
|
||||
|
||||
///
|
||||
/// Structure describing a MMRAM region which cannot be used for the MMRAM heap.
|
||||
///
|
||||
typedef struct _EFI_MM_RESERVED_MMRAM_REGION {
|
||||
///
|
||||
/// Starting address of the reserved MMRAM area, as it appears while MMRAM is open.
|
||||
/// Ignored if MmramReservedSize is 0.
|
||||
///
|
||||
EFI_PHYSICAL_ADDRESS MmramReservedStart;
|
||||
///
|
||||
/// Number of bytes occupied by the reserved MMRAM area. A size of zero indicates the
|
||||
/// last MMRAM area.
|
||||
///
|
||||
UINT64 MmramReservedSize;
|
||||
} EFI_MM_RESERVED_MMRAM_REGION;
|
||||
|
||||
typedef struct _EFI_MM_CONFIGURATION_PROTOCOL EFI_MM_CONFIGURATION_PROTOCOL;
|
||||
|
||||
/**
|
||||
Register the MM Foundation entry point.
|
||||
|
||||
This function registers the MM Foundation entry point with the processor code. This entry point
|
||||
will be invoked by the MM Processor entry code.
|
||||
|
||||
@param[in] This The EFI_MM_CONFIGURATION_PROTOCOL instance.
|
||||
@param[in] MmEntryPoint MM Foundation entry point.
|
||||
|
||||
@retval EFI_SUCCESS Success to register MM Entry Point.
|
||||
@retval EFI_INVALID_PARAMETER MmEntryPoint is NULL.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_REGISTER_MM_ENTRY)(
|
||||
IN CONST EFI_MM_CONFIGURATION_PROTOCOL *This,
|
||||
IN EFI_MM_ENTRY_POINT MmEntryPoint
|
||||
);
|
||||
|
||||
///
|
||||
/// The EFI MM Configuration Protocol is a mandatory protocol published by a DXE CPU driver to
|
||||
/// indicate which areas within MMRAM are reserved for use by the CPU for any purpose,
|
||||
/// such as stack, save state or MM entry point.
|
||||
///
|
||||
/// The RegistermmEntry() function allows the MM IPL DXE driver to register the MM
|
||||
/// Foundation entry point with the MM entry vector code.
|
||||
///
|
||||
struct _EFI_MM_CONFIGURATION_PROTOCOL {
|
||||
///
|
||||
/// A pointer to an array MMRAM ranges used by the initial MM entry code.
|
||||
///
|
||||
EFI_MM_RESERVED_MMRAM_REGION *MmramReservedRegions;
|
||||
EFI_MM_REGISTER_MM_ENTRY RegisterMmEntry;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmConfigurationProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
/** @file
|
||||
EFI MM Control Protocol as defined in the PI 1.5 specification.
|
||||
|
||||
This protocol is used initiate synchronous MMI activations. This protocol could be published by a
|
||||
processor driver to abstract the MMI IPI or a driver which abstracts the ASIC that is supporting the
|
||||
APM port. Because of the possibility of performing MMI IPI transactions, the ability to generate this
|
||||
event from a platform chipset agent is an optional capability for both IA-32 and x64-based systems.
|
||||
|
||||
The EFI_MM_CONTROL_PROTOCOL is produced by a runtime driver. It provides an
|
||||
abstraction of the platform hardware that generates an MMI. There are often I/O ports that, when
|
||||
accessed, will generate the MMI. Also, the hardware optionally supports the periodic generation of
|
||||
these signals.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_CONTROL_H_
|
||||
#define _MM_CONTROL_H_
|
||||
|
||||
#include <PiDxe.h>
|
||||
|
||||
#define EFI_MM_CONTROL_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x843dc720, 0xab1e, 0x42cb, {0x93, 0x57, 0x8a, 0x0, 0x78, 0xf3, 0x56, 0x1b} \
|
||||
}
|
||||
|
||||
typedef struct _EFI_MM_CONTROL_PROTOCOL EFI_MM_CONTROL_PROTOCOL;
|
||||
typedef UINTN EFI_MM_PERIOD;
|
||||
|
||||
/**
|
||||
Invokes MMI activation from either the preboot or runtime environment.
|
||||
|
||||
This function generates an MMI.
|
||||
|
||||
@param[in] This The EFI_MM_CONTROL_PROTOCOL instance.
|
||||
@param[in,out] CommandPort The value written to the command port.
|
||||
@param[in,out] DataPort The value written to the data port.
|
||||
@param[in] Periodic Optional mechanism to engender a periodic stream.
|
||||
@param[in] ActivationInterval Optional parameter to repeat at this period one
|
||||
time or, if the Periodic Boolean is set, periodically.
|
||||
|
||||
@retval EFI_SUCCESS The MMI/PMI has been engendered.
|
||||
@retval EFI_DEVICE_ERROR The timing is unsupported.
|
||||
@retval EFI_INVALID_PARAMETER The activation period is unsupported.
|
||||
@retval EFI_INVALID_PARAMETER The last periodic activation has not been cleared.
|
||||
@retval EFI_NOT_STARTED The MM base service has not been initialized.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_ACTIVATE)(
|
||||
IN CONST EFI_MM_CONTROL_PROTOCOL *This,
|
||||
IN OUT UINT8 *CommandPort OPTIONAL,
|
||||
IN OUT UINT8 *DataPort OPTIONAL,
|
||||
IN BOOLEAN Periodic OPTIONAL,
|
||||
IN UINTN ActivationInterval OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Clears any system state that was created in response to the Trigger() call.
|
||||
|
||||
This function acknowledges and causes the deassertion of the MMI activation source.
|
||||
|
||||
@param[in] This The EFI_MM_CONTROL_PROTOCOL instance.
|
||||
@param[in] Periodic Optional parameter to repeat at this period one time
|
||||
|
||||
@retval EFI_SUCCESS The MMI/PMI has been engendered.
|
||||
@retval EFI_DEVICE_ERROR The source could not be cleared.
|
||||
@retval EFI_INVALID_PARAMETER The service did not support the Periodic input argument.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_DEACTIVATE)(
|
||||
IN CONST EFI_MM_CONTROL_PROTOCOL *This,
|
||||
IN BOOLEAN Periodic OPTIONAL
|
||||
);
|
||||
|
||||
///
|
||||
/// The EFI_MM_CONTROL_PROTOCOL is produced by a runtime driver. It provides an
|
||||
/// abstraction of the platform hardware that generates an MMI. There are often I/O ports that, when
|
||||
/// accessed, will generate the MMI. Also, the hardware optionally supports the periodic generation of
|
||||
/// these signals.
|
||||
///
|
||||
struct _EFI_MM_CONTROL_PROTOCOL {
|
||||
EFI_MM_ACTIVATE Trigger;
|
||||
EFI_MM_DEACTIVATE Clear;
|
||||
///
|
||||
/// Minimum interval at which the platform can set the period. A maximum is not
|
||||
/// specified in that the MM infrastructure code can emulate a maximum interval that is
|
||||
/// greater than the hardware capabilities by using software emulation in the MM
|
||||
/// infrastructure code.
|
||||
///
|
||||
EFI_MM_PERIOD MinimumTriggerPeriod;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmControlProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,247 @@
|
|||
/** @file
|
||||
EFI MM CPU Protocol as defined in the PI 1.5 specification.
|
||||
|
||||
This protocol allows MM drivers to access architecture-standard registers from any of the CPU
|
||||
save state areas. In some cases, difference processors provide the same information in the save state,
|
||||
but not in the same format. These so-called pseudo-registers provide this information in a standard
|
||||
format.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_CPU_H_
|
||||
#define _MM_CPU_H_
|
||||
|
||||
#define EFI_MM_CPU_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xeb346b97, 0x975f, 0x4a9f, { 0x8b, 0x22, 0xf8, 0xe9, 0x2b, 0xb3, 0xd5, 0x69 } \
|
||||
}
|
||||
|
||||
///
|
||||
/// Save State register index
|
||||
///
|
||||
typedef enum {
|
||||
///
|
||||
/// x86/X64 standard registers
|
||||
///
|
||||
EFI_MM_SAVE_STATE_REGISTER_GDTBASE = 4,
|
||||
EFI_MM_SAVE_STATE_REGISTER_IDTBASE = 5,
|
||||
EFI_MM_SAVE_STATE_REGISTER_LDTBASE = 6,
|
||||
EFI_MM_SAVE_STATE_REGISTER_GDTLIMIT = 7,
|
||||
EFI_MM_SAVE_STATE_REGISTER_IDTLIMIT = 8,
|
||||
EFI_MM_SAVE_STATE_REGISTER_LDTLIMIT = 9,
|
||||
EFI_MM_SAVE_STATE_REGISTER_LDTINFO = 10,
|
||||
EFI_MM_SAVE_STATE_REGISTER_ES = 20,
|
||||
EFI_MM_SAVE_STATE_REGISTER_CS = 21,
|
||||
EFI_MM_SAVE_STATE_REGISTER_SS = 22,
|
||||
EFI_MM_SAVE_STATE_REGISTER_DS = 23,
|
||||
EFI_MM_SAVE_STATE_REGISTER_FS = 24,
|
||||
EFI_MM_SAVE_STATE_REGISTER_GS = 25,
|
||||
EFI_MM_SAVE_STATE_REGISTER_LDTR_SEL = 26,
|
||||
EFI_MM_SAVE_STATE_REGISTER_TR_SEL = 27,
|
||||
EFI_MM_SAVE_STATE_REGISTER_DR7 = 28,
|
||||
EFI_MM_SAVE_STATE_REGISTER_DR6 = 29,
|
||||
EFI_MM_SAVE_STATE_REGISTER_R8 = 30,
|
||||
EFI_MM_SAVE_STATE_REGISTER_R9 = 31,
|
||||
EFI_MM_SAVE_STATE_REGISTER_R10 = 32,
|
||||
EFI_MM_SAVE_STATE_REGISTER_R11 = 33,
|
||||
EFI_MM_SAVE_STATE_REGISTER_R12 = 34,
|
||||
EFI_MM_SAVE_STATE_REGISTER_R13 = 35,
|
||||
EFI_MM_SAVE_STATE_REGISTER_R14 = 36,
|
||||
EFI_MM_SAVE_STATE_REGISTER_R15 = 37,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RAX = 38,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RBX = 39,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RCX = 40,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RDX = 41,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RSP = 42,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RBP = 43,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RSI = 44,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RDI = 45,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RIP = 46,
|
||||
EFI_MM_SAVE_STATE_REGISTER_RFLAGS = 51,
|
||||
EFI_MM_SAVE_STATE_REGISTER_CR0 = 52,
|
||||
EFI_MM_SAVE_STATE_REGISTER_CR3 = 53,
|
||||
EFI_MM_SAVE_STATE_REGISTER_CR4 = 54,
|
||||
EFI_MM_SAVE_STATE_REGISTER_FCW = 256,
|
||||
EFI_MM_SAVE_STATE_REGISTER_FSW = 257,
|
||||
EFI_MM_SAVE_STATE_REGISTER_FTW = 258,
|
||||
EFI_MM_SAVE_STATE_REGISTER_OPCODE = 259,
|
||||
EFI_MM_SAVE_STATE_REGISTER_FP_EIP = 260,
|
||||
EFI_MM_SAVE_STATE_REGISTER_FP_CS = 261,
|
||||
EFI_MM_SAVE_STATE_REGISTER_DATAOFFSET = 262,
|
||||
EFI_MM_SAVE_STATE_REGISTER_FP_DS = 263,
|
||||
EFI_MM_SAVE_STATE_REGISTER_MM0 = 264,
|
||||
EFI_MM_SAVE_STATE_REGISTER_MM1 = 265,
|
||||
EFI_MM_SAVE_STATE_REGISTER_MM2 = 266,
|
||||
EFI_MM_SAVE_STATE_REGISTER_MM3 = 267,
|
||||
EFI_MM_SAVE_STATE_REGISTER_MM4 = 268,
|
||||
EFI_MM_SAVE_STATE_REGISTER_MM5 = 269,
|
||||
EFI_MM_SAVE_STATE_REGISTER_MM6 = 270,
|
||||
EFI_MM_SAVE_STATE_REGISTER_MM7 = 271,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM0 = 272,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM1 = 273,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM2 = 274,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM3 = 275,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM4 = 276,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM5 = 277,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM6 = 278,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM7 = 279,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM8 = 280,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM9 = 281,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM10 = 282,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM11 = 283,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM12 = 284,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM13 = 285,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM14 = 286,
|
||||
EFI_MM_SAVE_STATE_REGISTER_XMM15 = 287,
|
||||
///
|
||||
/// Pseudo-Registers
|
||||
///
|
||||
EFI_MM_SAVE_STATE_REGISTER_IO = 512,
|
||||
EFI_MM_SAVE_STATE_REGISTER_LMA = 513,
|
||||
EFI_MM_SAVE_STATE_REGISTER_PROCESSOR_ID = 514
|
||||
} EFI_MM_SAVE_STATE_REGISTER;
|
||||
|
||||
///
|
||||
/// The EFI_MM_SAVE_STATE_REGISTER_LMA pseudo-register values
|
||||
/// If the processor acts in 32-bit mode at the time the MMI occurred, the pseudo register value
|
||||
/// EFI_MM_SAVE_STATE_REGISTER_LMA_32BIT is returned in Buffer. Otherwise,
|
||||
/// EFI_MM_SAVE_STATE_REGISTER_LMA_64BIT is returned in Buffer.
|
||||
///
|
||||
#define EFI_MM_SAVE_STATE_REGISTER_LMA_32BIT 32
|
||||
#define EFI_MM_SAVE_STATE_REGISTER_LMA_64BIT 64
|
||||
|
||||
///
|
||||
/// Size width of I/O instruction
|
||||
///
|
||||
typedef enum {
|
||||
EFI_MM_SAVE_STATE_IO_WIDTH_UINT8 = 0,
|
||||
EFI_MM_SAVE_STATE_IO_WIDTH_UINT16 = 1,
|
||||
EFI_MM_SAVE_STATE_IO_WIDTH_UINT32 = 2,
|
||||
EFI_MM_SAVE_STATE_IO_WIDTH_UINT64 = 3
|
||||
} EFI_MM_SAVE_STATE_IO_WIDTH;
|
||||
|
||||
///
|
||||
/// Types of I/O instruction
|
||||
///
|
||||
typedef enum {
|
||||
EFI_MM_SAVE_STATE_IO_TYPE_INPUT = 1,
|
||||
EFI_MM_SAVE_STATE_IO_TYPE_OUTPUT = 2,
|
||||
EFI_MM_SAVE_STATE_IO_TYPE_STRING = 4,
|
||||
EFI_MM_SAVE_STATE_IO_TYPE_REP_PREFIX = 8
|
||||
} EFI_MM_SAVE_STATE_IO_TYPE;
|
||||
|
||||
///
|
||||
/// Structure of the data which is returned when ReadSaveState() is called with
|
||||
/// EFI_MM_SAVE_STATE_REGISTER_IO. If there was no I/O then ReadSaveState() will
|
||||
/// return EFI_NOT_FOUND.
|
||||
///
|
||||
/// This structure describes the I/O operation which was in process when the MMI was generated.
|
||||
///
|
||||
typedef struct _EFI_MM_SAVE_STATE_IO_INFO {
|
||||
///
|
||||
/// For input instruction (IN, INS), this is data read before the MMI occurred. For output
|
||||
/// instructions (OUT, OUTS) this is data that was written before the MMI occurred. The
|
||||
/// width of the data is specified by IoWidth.
|
||||
///
|
||||
UINT64 IoData;
|
||||
///
|
||||
/// The I/O port that was being accessed when the MMI was triggered.
|
||||
///
|
||||
UINT16 IoPort;
|
||||
///
|
||||
/// Defines the size width (UINT8, UINT16, UINT32, UINT64) for IoData.
|
||||
///
|
||||
EFI_MM_SAVE_STATE_IO_WIDTH IoWidth;
|
||||
///
|
||||
/// Defines type of I/O instruction.
|
||||
///
|
||||
EFI_MM_SAVE_STATE_IO_TYPE IoType;
|
||||
} EFI_MM_SAVE_STATE_IO_INFO;
|
||||
|
||||
typedef struct _EFI_MM_CPU_PROTOCOL EFI_MM_CPU_PROTOCOL;
|
||||
|
||||
/**
|
||||
Read data from the CPU save state.
|
||||
|
||||
This function is used to read the specified number of bytes of the specified register from the CPU
|
||||
save state of the specified CPU and place the value into the buffer. If the CPU does not support the
|
||||
specified register Register, then EFI_NOT_FOUND should be returned. If the CPU does not
|
||||
support the specified register width Width, then EFI_INVALID_PARAMETER is returned.
|
||||
|
||||
@param[in] This The EFI_MM_CPU_PROTOCOL instance.
|
||||
@param[in] Width The number of bytes to read from the CPU save state.
|
||||
@param[in] Register Specifies the CPU register to read form the save state.
|
||||
@param[in] CpuIndex Specifies the zero-based index of the CPU save state.
|
||||
@param[out] Buffer Upon return, this holds the CPU register value read from the save state.
|
||||
|
||||
@retval EFI_SUCCESS The register was read from Save State.
|
||||
@retval EFI_NOT_FOUND The register is not defined for the Save State of Processor.
|
||||
@retval EFI_INVALID_PARAMETER Input parameters are not valid, for example, Processor No or register width
|
||||
is not correct.This or Buffer is NULL.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_READ_SAVE_STATE)(
|
||||
IN CONST EFI_MM_CPU_PROTOCOL *This,
|
||||
IN UINTN Width,
|
||||
IN EFI_MM_SAVE_STATE_REGISTER Register,
|
||||
IN UINTN CpuIndex,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Write data to the CPU save state.
|
||||
|
||||
This function is used to write the specified number of bytes of the specified register to the CPU save
|
||||
state of the specified CPU and place the value into the buffer. If the CPU does not support the
|
||||
specified register Register, then EFI_UNSUPPORTED should be returned. If the CPU does not
|
||||
support the specified register width Width, then EFI_INVALID_PARAMETER is returned.
|
||||
|
||||
@param[in] This The EFI_MM_CPU_PROTOCOL instance.
|
||||
@param[in] Width The number of bytes to write to the CPU save state.
|
||||
@param[in] Register Specifies the CPU register to write to the save state.
|
||||
@param[in] CpuIndex Specifies the zero-based index of the CPU save state.
|
||||
@param[in] Buffer Upon entry, this holds the new CPU register value.
|
||||
|
||||
@retval EFI_SUCCESS The register was written to Save State.
|
||||
@retval EFI_NOT_FOUND The register is not defined for the Save State of Processor.
|
||||
@retval EFI_INVALID_PARAMETER Input parameters are not valid. For example:
|
||||
ProcessorIndex or Width is not correct.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_WRITE_SAVE_STATE)(
|
||||
IN CONST EFI_MM_CPU_PROTOCOL *This,
|
||||
IN UINTN Width,
|
||||
IN EFI_MM_SAVE_STATE_REGISTER Register,
|
||||
IN UINTN CpuIndex,
|
||||
IN CONST VOID *Buffer
|
||||
);
|
||||
|
||||
///
|
||||
/// EFI MM CPU Protocol provides access to CPU-related information while in MM.
|
||||
///
|
||||
/// This protocol allows MM drivers to access architecture-standard registers from any of the CPU
|
||||
/// save state areas. In some cases, difference processors provide the same information in the save state,
|
||||
/// but not in the same format. These so-called pseudo-registers provide this information in a standard
|
||||
/// format.
|
||||
///
|
||||
struct _EFI_MM_CPU_PROTOCOL {
|
||||
EFI_MM_READ_SAVE_STATE ReadSaveState;
|
||||
EFI_MM_WRITE_SAVE_STATE WriteSaveState;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmCpuProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
/** @file
|
||||
MM CPU I/O 2 protocol as defined in the PI 1.5 specification.
|
||||
|
||||
This protocol provides CPU I/O and memory access within MM.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_CPU_IO_H_
|
||||
#define _MM_CPU_IO_H_
|
||||
|
||||
#define EFI_MM_CPU_IO_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x3242A9D8, 0xCE70, 0x4AA0, { 0x95, 0x5D, 0x5E, 0x7B, 0x14, 0x0D, 0xE4, 0xD2 } \
|
||||
}
|
||||
|
||||
typedef struct _EFI_MM_CPU_IO_PROTOCOL EFI_MM_CPU_IO_PROTOCOL;
|
||||
|
||||
///
|
||||
/// Width of the MM CPU I/O operations
|
||||
///
|
||||
typedef enum {
|
||||
MM_IO_UINT8 = 0,
|
||||
MM_IO_UINT16 = 1,
|
||||
MM_IO_UINT32 = 2,
|
||||
MM_IO_UINT64 = 3
|
||||
} EFI_MM_IO_WIDTH;
|
||||
|
||||
/**
|
||||
Provides the basic memory and I/O interfaces used toabstract accesses to devices.
|
||||
|
||||
The I/O operations are carried out exactly as requested. The caller is
|
||||
responsible for any alignment and I/O width issues that the bus, device,
|
||||
platform, or type of I/O might require.
|
||||
|
||||
@param[in] This The EFI_MM_CPU_IO_PROTOCOL instance.
|
||||
@param[in] Width Signifies the width of the I/O operations.
|
||||
@param[in] Address The base address of the I/O operations. The caller is
|
||||
responsible for aligning the Address if required.
|
||||
@param[in] Count The number of I/O operations to perform.
|
||||
@param[in,out] Buffer For read operations, the destination buffer to store
|
||||
the results. For write operations, the source buffer
|
||||
from which to write data.
|
||||
|
||||
@retval EFI_SUCCESS The data was read from or written to the device.
|
||||
@retval EFI_UNSUPPORTED The Address is not valid for this system.
|
||||
@retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack
|
||||
of resources.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_CPU_IO)(
|
||||
IN CONST EFI_MM_CPU_IO_PROTOCOL *This,
|
||||
IN EFI_MM_IO_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN OUT VOID *Buffer
|
||||
);
|
||||
|
||||
typedef struct {
|
||||
///
|
||||
/// This service provides the various modalities of memory and I/O read.
|
||||
///
|
||||
EFI_MM_CPU_IO Read;
|
||||
///
|
||||
/// This service provides the various modalities of memory and I/O write.
|
||||
///
|
||||
EFI_MM_CPU_IO Write;
|
||||
} EFI_MM_IO_ACCESS;
|
||||
|
||||
///
|
||||
/// MM CPU I/O Protocol provides CPU I/O and memory access within MM.
|
||||
///
|
||||
struct _EFI_MM_CPU_IO_PROTOCOL {
|
||||
///
|
||||
/// Allows reads and writes to memory-mapped I/O space.
|
||||
///
|
||||
EFI_MM_IO_ACCESS Mem;
|
||||
///
|
||||
/// Allows reads and writes to I/O space.
|
||||
///
|
||||
EFI_MM_IO_ACCESS Io;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmCpuIoProtocolGuid;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,30 @@
|
|||
/** @file
|
||||
MM End Of Dxe protocol introduced in the PI 1.5 specification.
|
||||
|
||||
This protocol is a mandatory protocol published by MM Foundation code.
|
||||
This protocol is an MM counterpart of the End of DXE Event.
|
||||
This protocol prorogates End of DXE notification into MM environment.
|
||||
This protocol is installed prior to installation of the MM Ready to Lock Protocol.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_END_OF_DXE_H_
|
||||
#define _MM_END_OF_DXE_H_
|
||||
|
||||
#define EFI_MM_END_OF_DXE_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x24e70042, 0xd5c5, 0x4260, { 0x8c, 0x39, 0xa, 0xd3, 0xaa, 0x32, 0xe9, 0x3d } \
|
||||
}
|
||||
|
||||
extern EFI_GUID gEfiMmEndOfDxeProtocolGuid;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,125 @@
|
|||
/** @file
|
||||
MM General Purpose Input (GPI) Dispatch Protocol as defined in PI 1.5 Specification
|
||||
Volume 4 Management Mode Core Interface.
|
||||
|
||||
This protocol provides the parent dispatch service for the General Purpose Input
|
||||
(GPI) MMI source generator.
|
||||
|
||||
The EFI_MM_GPI_DISPATCH_PROTOCOL provides the ability to install child handlers for the
|
||||
given event types. Several inputs can be enabled. This purpose of this interface is to generate an
|
||||
MMI in response to any of these inputs having a true value provided.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
@par Revision Reference:
|
||||
This protocol is from PI Version 1.5.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_GPI_DISPATCH_H_
|
||||
#define _MM_GPI_DISPATCH_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_GPI_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x25566b03, 0xb577, 0x4cbf, {0x95, 0x8c, 0xed, 0x66, 0x3e, 0xa2, 0x43, 0x80 } \
|
||||
}
|
||||
|
||||
///
|
||||
/// The dispatch function's context.
|
||||
///
|
||||
typedef struct {
|
||||
///
|
||||
/// A number from one of 2^64 possible GPIs that can generate an MMI. A
|
||||
/// 0 corresponds to logical GPI[0]; 1 corresponds to logical GPI[1]; and
|
||||
/// GpiNum of N corresponds to GPI[N], where N can span from 0 to 2^64-1.
|
||||
///
|
||||
UINT64 GpiNum;
|
||||
} EFI_MM_GPI_REGISTER_CONTEXT;
|
||||
|
||||
typedef struct _EFI_MM_GPI_DISPATCH_PROTOCOL EFI_MM_GPI_DISPATCH_PROTOCOL;
|
||||
|
||||
/**
|
||||
Registers a child MMI source dispatch function with a parent MM driver.
|
||||
|
||||
This service registers a function (DispatchFunction) which will be called when an MMI is
|
||||
generated because of one or more of the GPIs specified by RegisterContext. On return,
|
||||
DispatchHandle contains a unique handle which may be used later to unregister the function
|
||||
using UnRegister().
|
||||
The DispatchFunction will be called with Context set to the same value as was passed into
|
||||
this function in RegisterContext and with CommBuffer pointing to another instance of
|
||||
EFI_MM_GPI_REGISTER_CONTEXT describing the GPIs which actually caused the MMI and
|
||||
CommBufferSize pointing to the size of the structure.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_GPI_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchFunction Function to register for handler when the specified GPI causes an MMI.
|
||||
@param[in] RegisterContext Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function the GPI(s) for which the dispatch function
|
||||
should be invoked.
|
||||
@param[out] DispatchHandle Handle generated by the dispatcher to track the
|
||||
function instance.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully
|
||||
registered and the MMI source has been enabled.
|
||||
@retval EFI_DEVICE_ERROR The driver was unable to enable the MMI source.
|
||||
@retval EFI_INVALID_PARAMETER RegisterContext is invalid. The GPI input value
|
||||
is not within valid range.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory (system or MM) to manage this child.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_GPI_REGISTER)(
|
||||
IN CONST EFI_MM_GPI_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_MM_HANDLER_ENTRY_POINT DispatchFunction,
|
||||
IN CONST EFI_MM_GPI_REGISTER_CONTEXT *RegisterContext,
|
||||
OUT EFI_HANDLE *DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Unregisters a General Purpose Input (GPI) service.
|
||||
|
||||
This service removes the handler associated with DispatchHandle so that it will no longer be
|
||||
called when the GPI triggers an MMI.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_GPI_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchHandle Handle of the service to remove.
|
||||
|
||||
@retval EFI_SUCCESS Handle of the service to remove.
|
||||
@retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_GPI_UNREGISTER)(
|
||||
IN CONST EFI_MM_GPI_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
///
|
||||
/// Interface structure for the MM GPI MMI Dispatch Protocol
|
||||
///
|
||||
/// The MM GPI MMI Dispatch Protocol provides the parent dispatch service
|
||||
/// for the General Purpose Input (GPI) MMI source generator.
|
||||
///
|
||||
struct _EFI_MM_GPI_DISPATCH_PROTOCOL {
|
||||
EFI_MM_GPI_REGISTER Register;
|
||||
EFI_MM_GPI_UNREGISTER UnRegister;
|
||||
///
|
||||
/// Denotes the maximum value of inputs that can have handlers attached.
|
||||
///
|
||||
UINTN NumSupportedGpis;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmGpiDispatchProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
/** @file
|
||||
MM IO Trap Dispatch Protocol as defined in PI 1.5 Specification
|
||||
Volume 4 Management Mode Core Interface.
|
||||
|
||||
This protocol provides a parent dispatch service for IO trap MMI sources.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
@par Revision Reference:
|
||||
This protocol is from PI Version 1.5.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_IO_TRAP_DISPATCH_H_
|
||||
#define _MM_IO_TRAP_DISPATCH_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_IO_TRAP_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x58dc368d, 0x7bfa, 0x4e77, {0xab, 0xbc, 0xe, 0x29, 0x41, 0x8d, 0xf9, 0x30 } \
|
||||
}
|
||||
|
||||
///
|
||||
/// IO Trap valid types
|
||||
///
|
||||
typedef enum {
|
||||
WriteTrap,
|
||||
ReadTrap,
|
||||
ReadWriteTrap,
|
||||
IoTrapTypeMaximum
|
||||
} EFI_MM_IO_TRAP_DISPATCH_TYPE;
|
||||
|
||||
///
|
||||
/// IO Trap context structure containing information about the
|
||||
/// IO trap event that should invoke the handler
|
||||
///
|
||||
typedef struct {
|
||||
UINT16 Address;
|
||||
UINT16 Length;
|
||||
EFI_MM_IO_TRAP_DISPATCH_TYPE Type;
|
||||
} EFI_MM_IO_TRAP_REGISTER_CONTEXT;
|
||||
|
||||
///
|
||||
/// IO Trap context structure containing information about the IO trap that occurred
|
||||
///
|
||||
typedef struct {
|
||||
UINT32 WriteData;
|
||||
} EFI_MM_IO_TRAP_CONTEXT;
|
||||
|
||||
typedef struct _EFI_MM_IO_TRAP_DISPATCH_PROTOCOL EFI_MM_IO_TRAP_DISPATCH_PROTOCOL;
|
||||
|
||||
/**
|
||||
Register an IO trap MMI child handler for a specified MMI.
|
||||
|
||||
This service registers a function (DispatchFunction) which will be called when an MMI is
|
||||
generated because of an access to an I/O port specified by RegisterContext. On return,
|
||||
DispatchHandle contains a unique handle which may be used later to unregister the function
|
||||
using UnRegister(). If the base of the I/O range specified is zero, then an I/O range with the
|
||||
specified length and characteristics will be allocated and the Address field in RegisterContext
|
||||
updated. If no range could be allocated, then EFI_OUT_OF_RESOURCES will be returned.
|
||||
|
||||
The service will not perform GCD allocation if the base address is non-zero or
|
||||
EFI_MM_READY_TO_LOCK has been installed. In this case, the caller is responsible for the
|
||||
existence and allocation of the specific IO range.
|
||||
An error may be returned if some or all of the requested resources conflict with an existing IO trap
|
||||
child handler.
|
||||
|
||||
It is not required that implementations will allow multiple children for a single IO trap MMI source.
|
||||
Some implementations may support multiple children.
|
||||
The DispatchFunction will be called with Context updated to contain information
|
||||
concerning the I/O action that actually happened and is passed in RegisterContext, with
|
||||
CommBuffer pointing to the data actually written and CommBufferSize pointing to the size of
|
||||
the data in CommBuffer.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_IO_TRAP_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchFunction Function to register for handler when I/O trap location is accessed.
|
||||
@param[in] RegisterContext Pointer to the dispatch function's context. The caller fills this
|
||||
context in before calling the register function to indicate to the register
|
||||
function the IO trap MMI source for which the dispatch function should be invoked.
|
||||
@param[out] DispatchHandle Handle of the dispatch function, for when interfacing with the parent MM driver.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully registered.
|
||||
@retval EFI_DEVICE_ERROR The driver was unable to complete due to hardware error.
|
||||
@retval EFI_OUT_OF_RESOURCES Insufficient resources are available to fulfill the IO trap range request.
|
||||
@retval EFI_INVALID_PARAMETER RegisterContext is invalid. The input value is not within a valid range.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_IO_TRAP_DISPATCH_REGISTER)(
|
||||
IN CONST EFI_MM_IO_TRAP_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_MM_HANDLER_ENTRY_POINT DispatchFunction,
|
||||
IN OUT EFI_MM_IO_TRAP_REGISTER_CONTEXT *RegisterContext,
|
||||
OUT EFI_HANDLE *DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Unregister a child MMI source dispatch function with a parent MM driver.
|
||||
|
||||
This service removes a previously installed child dispatch handler. This does not guarantee that the
|
||||
system resources will be freed from the GCD.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_IO_TRAP_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchHandle Handle of the child service to remove.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully unregistered.
|
||||
@retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_IO_TRAP_DISPATCH_UNREGISTER)(
|
||||
IN CONST EFI_MM_IO_TRAP_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
///
|
||||
/// Interface structure for the MM IO Trap Dispatch Protocol.
|
||||
///
|
||||
/// This protocol provides a parent dispatch service for IO trap MMI sources.
|
||||
///
|
||||
struct _EFI_MM_IO_TRAP_DISPATCH_PROTOCOL {
|
||||
EFI_MM_IO_TRAP_DISPATCH_REGISTER Register;
|
||||
EFI_MM_IO_TRAP_DISPATCH_UNREGISTER UnRegister;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmIoTrapDispatchProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
/** @file
|
||||
MM PCI Root Bridge IO protocol as defined in the PI 1.5 specification.
|
||||
|
||||
This protocol provides PCI I/O and memory access within MM.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_PCI_ROOT_BRIDGE_IO_H_
|
||||
#define _MM_PCI_ROOT_BRIDGE_IO_H_
|
||||
|
||||
#include <Protocol/PciRootBridgeIo.h>
|
||||
|
||||
#define EFI_MM_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x8bc1714d, 0xffcb, 0x41c3, { 0x89, 0xdc, 0x6c, 0x74, 0xd0, 0x6d, 0x98, 0xea } \
|
||||
}
|
||||
|
||||
///
|
||||
/// This protocol provides the same functionality as the PCI Root Bridge I/O Protocol defined in the
|
||||
/// UEFI 2.1 Specifcation, section 13.2, except that the functions for Map() and Unmap() may return
|
||||
/// EFI_UNSUPPORTED.
|
||||
///
|
||||
typedef EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL EFI_MM_PCI_ROOT_BRIDGE_IO_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiMmPciRootBridgeIoProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,170 @@
|
|||
/** @file
|
||||
MM Periodic Timer Dispatch Protocol as defined in PI 1.5 Specification
|
||||
Volume 4 Management Mode Core Interface.
|
||||
|
||||
This protocol provides the parent dispatch service for the periodical timer MMI source generator.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
@par Revision Reference:
|
||||
This protocol is from PI Version 1.5.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_PERIODIC_TIMER_DISPATCH_H_
|
||||
#define _MM_PERIODIC_TIMER_DISPATCH_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x4cec368e, 0x8e8e, 0x4d71, {0x8b, 0xe1, 0x95, 0x8c, 0x45, 0xfc, 0x8a, 0x53 } \
|
||||
}
|
||||
|
||||
///
|
||||
/// Example: A chipset supports periodic MMIs on every 64ms or 2 seconds.
|
||||
/// A child wishes schedule a period MMI to fire on a period of 3 seconds, there
|
||||
/// are several ways to approach the problem:
|
||||
/// 1. The child may accept a 4 second periodic rate, in which case it registers with
|
||||
/// Period = 40000
|
||||
/// MmiTickInterval = 20000
|
||||
/// The resulting MMI will occur every 2 seconds with the child called back on
|
||||
/// every 2nd MMI.
|
||||
/// NOTE: the same result would occur if the child set MmiTickInterval = 0.
|
||||
/// 2. The child may choose the finer granularity MMI (64ms):
|
||||
/// Period = 30000
|
||||
/// MmiTickInterval = 640
|
||||
/// The resulting MMI will occur every 64ms with the child called back on
|
||||
/// every 47th MMI.
|
||||
/// NOTE: the child driver should be aware that this will result in more
|
||||
/// MMIs occuring during system runtime which can negatively impact system
|
||||
/// performance.
|
||||
///
|
||||
typedef struct {
|
||||
///
|
||||
/// The minimum period of time in 100 nanosecond units that the child gets called. The
|
||||
/// child will be called back after a time greater than the time Period.
|
||||
///
|
||||
UINT64 Period;
|
||||
///
|
||||
/// The period of time interval between MMIs. Children of this interface should use this
|
||||
/// field when registering for periodic timer intervals when a finer granularity periodic
|
||||
/// MMI is desired.
|
||||
///
|
||||
UINT64 MmiTickInterval;
|
||||
} EFI_MM_PERIODIC_TIMER_REGISTER_CONTEXT;
|
||||
|
||||
///
|
||||
/// The DispatchFunction will be called with Context set to the same value as was passed into
|
||||
/// Register() in RegisterContext and with CommBuffer pointing to an instance of
|
||||
/// EFI_MM_PERIODIC_TIMER_CONTEXT and CommBufferSize pointing to its size.
|
||||
///
|
||||
typedef struct {
|
||||
///
|
||||
/// ElapsedTime is the actual time in 100 nanosecond units elapsed since last called, a
|
||||
/// value of 0 indicates an unknown amount of time.
|
||||
///
|
||||
UINT64 ElapsedTime;
|
||||
} EFI_MM_PERIODIC_TIMER_CONTEXT;
|
||||
|
||||
typedef struct _EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL;
|
||||
|
||||
/**
|
||||
Register a child MMI source dispatch function for MM periodic timer.
|
||||
|
||||
This service registers a function (DispatchFunction) which will be called when at least the
|
||||
amount of time specified by RegisterContext has elapsed. On return, DispatchHandle
|
||||
contains a unique handle which may be used later to unregister the function using UnRegister().
|
||||
The DispatchFunction will be called with Context set to the same value as was passed into
|
||||
this function in RegisterContext and with CommBuffer pointing to an instance of
|
||||
EFI_MM_PERIODIC_TIMER_CONTEXT and CommBufferSize pointing to its size.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchFunction Function to register for handler when at least the specified amount
|
||||
of time has elapsed.
|
||||
@param[in] RegisterContext Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function the period at which the dispatch function
|
||||
should be invoked.
|
||||
@param[out] DispatchHandle Handle generated by the dispatcher to track the function instance.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully
|
||||
registered and the MMI source has been enabled.
|
||||
@retval EFI_DEVICE_ERROR The driver was unable to enable the MMI source.
|
||||
@retval EFI_INVALID_PARAMETER RegisterContext is invalid. The period input value
|
||||
is not within valid range.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory (system or MM) to manage this child.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_PERIODIC_TIMER_REGISTER)(
|
||||
IN CONST EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_MM_HANDLER_ENTRY_POINT DispatchFunction,
|
||||
IN CONST EFI_MM_PERIODIC_TIMER_REGISTER_CONTEXT *RegisterContext,
|
||||
OUT EFI_HANDLE *DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Unregisters a periodic timer service.
|
||||
|
||||
This service removes the handler associated with DispatchHandle so that it will no longer be
|
||||
called when the time has elapsed.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchHandle Handle of the service to remove.
|
||||
|
||||
@retval EFI_SUCCESS The service has been successfully removed.
|
||||
@retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_PERIODIC_TIMER_UNREGISTER)(
|
||||
IN CONST EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Returns the next MMI tick period supported by the chipset.
|
||||
|
||||
The order returned is from longest to shortest interval period.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL instance.
|
||||
@param[in,out] MmiTickInterval Pointer to pointer of next shorter MMI interval
|
||||
period supported by the child. This parameter works as a get-first,
|
||||
get-next field.The first time this function is called, *MmiTickInterval
|
||||
should be set to NULL to get the longest MMI interval.The returned
|
||||
*MmiTickInterval should be passed in on subsequent calls to get the
|
||||
next shorter interval period until *MmiTickInterval = NULL.
|
||||
|
||||
@retval EFI_SUCCESS The service returned successfully.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_PERIODIC_TIMER_INTERVAL)(
|
||||
IN CONST EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL *This,
|
||||
IN OUT UINT64 **MmiTickInterval
|
||||
);
|
||||
|
||||
///
|
||||
/// Interface structure for the MM Periodic Timer Dispatch Protocol
|
||||
///
|
||||
/// This protocol provides the parent dispatch service for the periodical timer MMI source generator.
|
||||
///
|
||||
struct _EFI_MM_PERIODIC_TIMER_DISPATCH_PROTOCOL {
|
||||
EFI_MM_PERIODIC_TIMER_REGISTER Register;
|
||||
EFI_MM_PERIODIC_TIMER_UNREGISTER UnRegister;
|
||||
EFI_MM_PERIODIC_TIMER_INTERVAL GetNextShorterInterval;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmPeriodicTimerDispatchProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
/** @file
|
||||
MM Power Button Dispatch Protocol as defined in PI 1.5 Specification
|
||||
Volume 4 Management Mode Core Interface.
|
||||
|
||||
This protocol provides the parent dispatch service for the power button MMI source generator.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
@par Revision Reference:
|
||||
This protocol is from PI Version 1.5.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_POWER_BUTTON_DISPATCH_H_
|
||||
#define _MM_POWER_BUTTON_DISPATCH_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_POWER_BUTTON_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x1b1183fa, 0x1823, 0x46a7, {0x88, 0x72, 0x9c, 0x57, 0x87, 0x55, 0x40, 0x9d } \
|
||||
}
|
||||
|
||||
///
|
||||
/// Power Button phases.
|
||||
///
|
||||
typedef enum {
|
||||
EfiPowerButtonEntry,
|
||||
EfiPowerButtonExit,
|
||||
EfiPowerButtonMax
|
||||
} EFI_POWER_BUTTON_PHASE;
|
||||
|
||||
///
|
||||
/// The dispatch function's context.
|
||||
///
|
||||
typedef struct {
|
||||
///
|
||||
/// Designates whether this handler should be invoked upon entry or exit.
|
||||
///
|
||||
EFI_POWER_BUTTON_PHASE Phase;
|
||||
} EFI_MM_POWER_BUTTON_REGISTER_CONTEXT;
|
||||
|
||||
typedef struct _EFI_MM_POWER_BUTTON_DISPATCH_PROTOCOL EFI_MM_POWER_BUTTON_DISPATCH_PROTOCOL;
|
||||
|
||||
/**
|
||||
Provides the parent dispatch service for a power button event.
|
||||
|
||||
This service registers a function (DispatchFunction) which will be called when an MMI is
|
||||
generated because the power button was pressed or released, as specified by RegisterContext.
|
||||
On return, DispatchHandle contains a unique handle which may be used later to unregister the
|
||||
function using UnRegister().
|
||||
The DispatchFunction will be called with Context set to the same value as was passed into
|
||||
this function in RegisterContext and with CommBuffer and CommBufferSize set to NULL.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_POWER_BUTTON_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchFunction Function to register for handler when power button is pressed or released.
|
||||
@param[in] RegisterContext Pointer to the dispatch function's context. The caller fills in this context
|
||||
before calling the Register() function to indicate to the Register() function
|
||||
the power button MMI phase for which the dispatch function should be invoked.
|
||||
@param[out] DispatchHandle Handle generated by the dispatcher to track the function instance.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully
|
||||
registered and the MMI source has been enabled.
|
||||
@retval EFI_DEVICE_ERROR The driver was unable to enable the MMI source.
|
||||
@retval EFI_INVALID_PARAMETER RegisterContext is invalid. The power button input value
|
||||
is not within valid range.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory (system or MM) to manage this child.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_POWER_BUTTON_REGISTER)(
|
||||
IN CONST EFI_MM_POWER_BUTTON_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_MM_HANDLER_ENTRY_POINT DispatchFunction,
|
||||
IN EFI_MM_POWER_BUTTON_REGISTER_CONTEXT *RegisterContext,
|
||||
OUT EFI_HANDLE *DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Unregisters a power-button service.
|
||||
|
||||
This service removes the handler associated with DispatchHandle so that it will no longer be
|
||||
called when the standby button is pressed or released.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_POWER_BUTTON_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchHandle Handle of the service to remove.
|
||||
|
||||
@retval EFI_SUCCESS The service has been successfully removed.
|
||||
@retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_POWER_BUTTON_UNREGISTER)(
|
||||
IN CONST EFI_MM_POWER_BUTTON_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
///
|
||||
/// Interface structure for the MM Power Button Dispatch Protocol.
|
||||
///
|
||||
/// This protocol provides the parent dispatch service for the power button MMI source generator.
|
||||
///
|
||||
struct _EFI_MM_POWER_BUTTON_DISPATCH_PROTOCOL {
|
||||
EFI_MM_POWER_BUTTON_REGISTER Register;
|
||||
EFI_MM_POWER_BUTTON_UNREGISTER UnRegister;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmPowerButtonDispatchProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/** @file
|
||||
MM Ready To Lock protocol introduced in the PI 1.5 specification.
|
||||
|
||||
This protocol is a mandatory protocol published by the MM Foundation
|
||||
code when the system is preparing to lock certain resources and interfaces
|
||||
in anticipation of the invocation of 3rd party extensible modules.
|
||||
This protocol is an MM counterpart of the DXE MM Ready to Lock Protocol.
|
||||
This protocol prorogates resource locking notification into MM environment.
|
||||
This protocol is installed after installation of the MM End of DXE Protocol.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_READY_TO_LOCK_H_
|
||||
#define _MM_READY_TO_LOCK_H_
|
||||
|
||||
#define EFI_MM_READY_TO_LOCK_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x47b7fa8c, 0xf4bd, 0x4af6, { 0x82, 0x00, 0x33, 0x30, 0x86, 0xf0, 0xd2, 0xc8 } \
|
||||
}
|
||||
|
||||
extern EFI_GUID gEfiMmReadyToLockProtocolGuid;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,81 @@
|
|||
/** @file
|
||||
This protocol provides registering and unregistering services to status code consumers while in DXE MM.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __MM_REPORT_STATUS_CODE_HANDLER_PROTOCOL_H__
|
||||
#define __MM_REPORT_STATUS_CODE_HANDLER_PROTOCOL_H__
|
||||
|
||||
#define EFI_MM_RSC_HANDLER_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x2ff29fa7, 0x5e80, 0x4ed9, {0xb3, 0x80, 0x1, 0x7d, 0x3c, 0x55, 0x4f, 0xf4} \
|
||||
}
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_RSC_HANDLER_CALLBACK)(
|
||||
IN EFI_STATUS_CODE_TYPE CodeType,
|
||||
IN EFI_STATUS_CODE_VALUE Value,
|
||||
IN UINT32 Instance,
|
||||
IN EFI_GUID *CallerId,
|
||||
IN EFI_STATUS_CODE_DATA *Data
|
||||
);
|
||||
|
||||
/**
|
||||
Register the callback function for ReportStatusCode() notification.
|
||||
|
||||
When this function is called the function pointer is added to an internal list and any future calls to
|
||||
ReportStatusCode() will be forwarded to the Callback function.
|
||||
|
||||
@param[in] Callback A pointer to a function of type EFI_MM_RSC_HANDLER_CALLBACK that is
|
||||
called when a call to ReportStatusCode() occurs.
|
||||
|
||||
@retval EFI_SUCCESS Function was successfully registered.
|
||||
@retval EFI_INVALID_PARAMETER The callback function was NULL.
|
||||
@retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be
|
||||
registered.
|
||||
@retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_RSC_HANDLER_REGISTER)(
|
||||
IN EFI_MM_RSC_HANDLER_CALLBACK Callback
|
||||
);
|
||||
|
||||
/**
|
||||
Remove a previously registered callback function from the notification list.
|
||||
|
||||
A callback function must be unregistered before it is deallocated. It is important that any registered
|
||||
callbacks that are not runtime complaint be unregistered when ExitBootServices() is called.
|
||||
|
||||
@param[in] Callback A pointer to a function of type EFI_MM_RSC_HANDLER_CALLBACK that is to be
|
||||
unregistered.
|
||||
|
||||
@retval EFI_SUCCESS The function was successfully unregistered.
|
||||
@retval EFI_INVALID_PARAMETER The callback function was NULL.
|
||||
@retval EFI_NOT_FOUND The callback function was not found to be unregistered.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_RSC_HANDLER_UNREGISTER)(
|
||||
IN EFI_MM_RSC_HANDLER_CALLBACK Callback
|
||||
);
|
||||
|
||||
typedef struct _EFI_MM_RSC_HANDLER_PROTOCOL {
|
||||
EFI_MM_RSC_HANDLER_REGISTER Register;
|
||||
EFI_MM_RSC_HANDLER_UNREGISTER Unregister;
|
||||
} EFI_MM_RSC_HANDLER_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiMmRscHandlerProtocolGuid;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,119 @@
|
|||
/** @file
|
||||
MM Standby Button Dispatch Protocol as defined in PI 1.5 Specification
|
||||
Volume 4 Management Mode Core Interface.
|
||||
|
||||
This protocol provides the parent dispatch service for the standby button MMI source generator.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
@par Revision Reference:
|
||||
This protocol is from PI Version 1.5.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_STANDBY_BUTTON_DISPATCH_H_
|
||||
#define _MM_STANDBY_BUTTON_DISPATCH_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_STANDBY_BUTTON_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x7300c4a1, 0x43f2, 0x4017, {0xa5, 0x1b, 0xc8, 0x1a, 0x7f, 0x40, 0x58, 0x5b } \
|
||||
}
|
||||
|
||||
///
|
||||
/// Standby Button phases
|
||||
///
|
||||
typedef enum {
|
||||
EfiStandbyButtonEntry,
|
||||
EfiStandbyButtonExit,
|
||||
EfiStandbyButtonMax
|
||||
} EFI_STANDBY_BUTTON_PHASE;
|
||||
|
||||
///
|
||||
/// The dispatch function's context.
|
||||
///
|
||||
typedef struct {
|
||||
///
|
||||
/// Describes whether the child handler should be invoked upon the entry to the button
|
||||
/// activation or upon exit.
|
||||
///
|
||||
EFI_STANDBY_BUTTON_PHASE Phase;
|
||||
} EFI_MM_STANDBY_BUTTON_REGISTER_CONTEXT;
|
||||
|
||||
typedef struct _EFI_MM_STANDBY_BUTTON_DISPATCH_PROTOCOL EFI_MM_STANDBY_BUTTON_DISPATCH_PROTOCOL;
|
||||
|
||||
/**
|
||||
Provides the parent dispatch service for a standby button event.
|
||||
|
||||
This service registers a function (DispatchFunction) which will be called when an MMI is
|
||||
generated because the standby button was pressed or released, as specified by
|
||||
RegisterContext. On return, DispatchHandle contains a unique handle which may be used
|
||||
later to unregister the function using UnRegister().
|
||||
The DispatchFunction will be called with Context set to the same value as was passed into
|
||||
this function in RegisterContext and with CommBuffer and CommBufferSize set to NULL.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_STANDBY_BUTTON_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchFunction Function to register for handler when the standby button is pressed or released.
|
||||
@param[in] RegisterContext Pointer to the dispatch function's context. The caller fills in this context
|
||||
before calling the register function to indicate to the register function the
|
||||
standby button MMI source for which the dispatch function should be invoked.
|
||||
@param[out] DispatchHandle Handle generated by the dispatcher to track the function instance.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully
|
||||
registered and the MMI source has been enabled.
|
||||
@retval EFI_DEVICE_ERROR The driver was unable to enable the MMI source.
|
||||
@retval EFI_INVALID_PARAMETER RegisterContext is invalid. The standby button input value
|
||||
is not within valid range.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory (system or MM) to manage this child.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_STANDBY_BUTTON_REGISTER)(
|
||||
IN CONST EFI_MM_STANDBY_BUTTON_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_MM_HANDLER_ENTRY_POINT DispatchFunction,
|
||||
IN EFI_MM_STANDBY_BUTTON_REGISTER_CONTEXT *RegisterContext,
|
||||
OUT EFI_HANDLE *DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Unregisters a child MMI source dispatch function with a parent MM driver.
|
||||
|
||||
This service removes the handler associated with DispatchHandle so that it will no longer be
|
||||
called when the standby button is pressed or released.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_STANDBY_BUTTON_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchHandle Handle of the service to remove.
|
||||
|
||||
@retval EFI_SUCCESS The service has been successfully removed.
|
||||
@retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_STANDBY_BUTTON_UNREGISTER)(
|
||||
IN CONST EFI_MM_STANDBY_BUTTON_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
///
|
||||
/// Interface structure for the MM Standby Button Dispatch Protocol.
|
||||
///
|
||||
/// This protocol provides the parent dispatch service for the standby
|
||||
/// button MMI source generator.
|
||||
///
|
||||
struct _EFI_MM_STANDBY_BUTTON_DISPATCH_PROTOCOL {
|
||||
EFI_MM_STANDBY_BUTTON_REGISTER Register;
|
||||
EFI_MM_STANDBY_BUTTON_UNREGISTER UnRegister;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmStandbyButtonDispatchProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/** @file
|
||||
EFI MM Status Code Protocol as defined in the PI 1.5 specification.
|
||||
|
||||
This protocol provides the basic status code services while in MM.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_STATUS_CODE_H__
|
||||
#define _MM_STATUS_CODE_H__
|
||||
|
||||
|
||||
#define EFI_MM_STATUS_CODE_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x6afd2b77, 0x98c1, 0x4acd, {0xa6, 0xf9, 0x8a, 0x94, 0x39, 0xde, 0xf, 0xb1} \
|
||||
}
|
||||
|
||||
typedef struct _EFI_MM_STATUS_CODE_PROTOCOL EFI_MM_STATUS_CODE_PROTOCOL;
|
||||
|
||||
/**
|
||||
Service to emit the status code in MM.
|
||||
|
||||
The EFI_MM_STATUS_CODE_PROTOCOL.ReportStatusCode() function enables a driver
|
||||
to emit a status code while in MM. The reason that there is a separate protocol definition from the
|
||||
DXE variant of this service is that the publisher of this protocol will provide a service that is
|
||||
capability of coexisting with a foreground operational environment, such as an operating system
|
||||
after the termination of boot services.
|
||||
|
||||
@param[in] This Points to this instance of the EFI_MM_STATUS_CODE_PROTOCOL.
|
||||
@param[in] CodeType DIndicates the type of status code being reported.
|
||||
@param[in] Value Describes the current status of a hardware or software entity.
|
||||
@param[in] Instance The enumeration of a hardware or software entity within the system.
|
||||
@param[in] CallerId This optional parameter may be used to identify the caller.
|
||||
@param[in] Data This optional parameter may be used to pass additional data.
|
||||
|
||||
@retval EFI_SUCCESS The function completed successfully.
|
||||
@retval EFI_INVALID_PARAMETER The function should not be completed due to a device error.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_REPORT_STATUS_CODE)(
|
||||
IN CONST EFI_MM_STATUS_CODE_PROTOCOL *This,
|
||||
IN EFI_STATUS_CODE_TYPE CodeType,
|
||||
IN EFI_STATUS_CODE_VALUE Value,
|
||||
IN UINT32 Instance,
|
||||
IN CONST EFI_GUID *CallerId,
|
||||
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
|
||||
);
|
||||
|
||||
struct _EFI_MM_STATUS_CODE_PROTOCOL {
|
||||
EFI_MM_REPORT_STATUS_CODE ReportStatusCode;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmStatusCodeProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
/** @file
|
||||
MM Software Dispatch Protocol introduced from PI 1.5 Specification
|
||||
Volume 4 Management Mode Core Interface.
|
||||
|
||||
This protocol provides the parent dispatch service for a given MMI source generator.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_SW_DISPATCH2_H_
|
||||
#define _MM_SW_DISPATCH2_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_SW_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x18a3c6dc, 0x5eea, 0x48c8, {0xa1, 0xc1, 0xb5, 0x33, 0x89, 0xf9, 0x89, 0x99 } \
|
||||
}
|
||||
|
||||
///
|
||||
/// A particular chipset may not support all possible software MMI input values.
|
||||
/// For example, the ICH supports only values 00h to 0FFh. The parent only allows a single
|
||||
/// child registration for each SwMmiInputValue.
|
||||
///
|
||||
typedef struct {
|
||||
UINTN SwMmiInputValue;
|
||||
} EFI_MM_SW_REGISTER_CONTEXT;
|
||||
|
||||
///
|
||||
/// The DispatchFunction will be called with Context set to the same value as was passed into
|
||||
/// this function in RegisterContext and with CommBuffer (and CommBufferSize) pointing
|
||||
/// to an instance of EFI_MM_SW_CONTEXT indicating the index of the CPU which generated the
|
||||
/// software MMI.
|
||||
///
|
||||
typedef struct {
|
||||
///
|
||||
/// The 0-based index of the CPU which generated the software MMI.
|
||||
///
|
||||
UINTN SwMmiCpuIndex;
|
||||
///
|
||||
/// This value corresponds directly to the CommandPort parameter used in the call to Trigger().
|
||||
///
|
||||
UINT8 CommandPort;
|
||||
///
|
||||
/// This value corresponds directly to the DataPort parameter used in the call to Trigger().
|
||||
///
|
||||
UINT8 DataPort;
|
||||
} EFI_MM_SW_CONTEXT;
|
||||
|
||||
typedef struct _EFI_MM_SW_DISPATCH_PROTOCOL EFI_MM_SW_DISPATCH_PROTOCOL;
|
||||
|
||||
/**
|
||||
Register a child MMI source dispatch function for the specified software MMI.
|
||||
|
||||
This service registers a function (DispatchFunction) which will be called when the software
|
||||
MMI source specified by RegisterContext->SwMmiCpuIndex is detected. On return,
|
||||
DispatchHandle contains a unique handle which may be used later to unregister the function
|
||||
using UnRegister().
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_SW_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchFunction Function to register for handler when the specified software
|
||||
MMI is generated.
|
||||
@param[in, out] RegisterContext Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function which Software MMI input value the
|
||||
dispatch function should be invoked for.
|
||||
@param[out] DispatchHandle Handle generated by the dispatcher to track the
|
||||
function instance.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully
|
||||
registered and the MMI source has been enabled.
|
||||
@retval EFI_DEVICE_ERROR The SW driver was unable to enable the MMI source.
|
||||
@retval EFI_INVALID_PARAMETER RegisterContext is invalid. The SW MMI input value
|
||||
is not within a valid range or is already in use.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory (system or MM) to manage this
|
||||
child.
|
||||
@retval EFI_OUT_OF_RESOURCES A unique software MMI value could not be assigned
|
||||
for this dispatch.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_SW_REGISTER)(
|
||||
IN CONST EFI_MM_SW_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_MM_HANDLER_ENTRY_POINT DispatchFunction,
|
||||
IN OUT EFI_MM_SW_REGISTER_CONTEXT *RegisterContext,
|
||||
OUT EFI_HANDLE *DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Unregister a child MMI source dispatch function for the specified software MMI.
|
||||
|
||||
This service removes the handler associated with DispatchHandle so that it will no longer be
|
||||
called in response to a software MMI.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_SW_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchHandle Handle of dispatch function to deregister.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully unregistered.
|
||||
@retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_SW_UNREGISTER)(
|
||||
IN CONST EFI_MM_SW_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
///
|
||||
/// Interface structure for the MM Software MMI Dispatch Protocol.
|
||||
///
|
||||
/// The EFI_MM_SW_DISPATCH2_PROTOCOL provides the ability to install child handlers for the
|
||||
/// given software. These handlers will respond to software interrupts, and the maximum software
|
||||
/// interrupt in the EFI_MM_SW_REGISTER_CONTEXT is denoted by MaximumSwiValue.
|
||||
///
|
||||
struct _EFI_MM_SW_DISPATCH_PROTOCOL {
|
||||
EFI_MM_SW_REGISTER Register;
|
||||
EFI_MM_SW_UNREGISTER UnRegister;
|
||||
///
|
||||
/// A read-only field that describes the maximum value that can be used in the
|
||||
/// EFI_MM_SW_DISPATCH_PROTOCOL.Register() service.
|
||||
///
|
||||
UINTN MaximumSwiValue;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmSwDispatchProtocolGuid;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,135 @@
|
|||
/** @file
|
||||
MM Sx Dispatch Protocol as defined in PI 1.5 Specification
|
||||
Volume 4 Management Mode Core Interface.
|
||||
|
||||
Provides the parent dispatch service for a given Sx-state source generator.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_SX_DISPATCH_H_
|
||||
#define _MM_SX_DISPATCH_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_SX_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x456d2859, 0xa84b, 0x4e47, {0xa2, 0xee, 0x32, 0x76, 0xd8, 0x86, 0x99, 0x7d } \
|
||||
}
|
||||
|
||||
///
|
||||
/// Sleep states S0-S5
|
||||
///
|
||||
typedef enum {
|
||||
SxS0,
|
||||
SxS1,
|
||||
SxS2,
|
||||
SxS3,
|
||||
SxS4,
|
||||
SxS5,
|
||||
EfiMaximumSleepType
|
||||
} EFI_SLEEP_TYPE;
|
||||
|
||||
///
|
||||
/// Sleep state phase: entry or exit
|
||||
///
|
||||
typedef enum {
|
||||
SxEntry,
|
||||
SxExit,
|
||||
EfiMaximumPhase
|
||||
} EFI_SLEEP_PHASE;
|
||||
|
||||
///
|
||||
/// The dispatch function's context
|
||||
///
|
||||
typedef struct {
|
||||
EFI_SLEEP_TYPE Type;
|
||||
EFI_SLEEP_PHASE Phase;
|
||||
} EFI_MM_SX_REGISTER_CONTEXT;
|
||||
|
||||
typedef struct _EFI_MM_SX_DISPATCH_PROTOCOL EFI_MM_SX_DISPATCH_PROTOCOL;
|
||||
|
||||
/**
|
||||
Provides the parent dispatch service for a given Sx source generator.
|
||||
|
||||
This service registers a function (DispatchFunction) which will be called when the sleep state
|
||||
event specified by RegisterContext is detected. On return, DispatchHandle contains a
|
||||
unique handle which may be used later to unregister the function using UnRegister().
|
||||
The DispatchFunction will be called with Context set to the same value as was passed into
|
||||
this function in RegisterContext and with CommBuffer and CommBufferSize set to
|
||||
NULL and 0 respectively.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_SX_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchFunction Function to register for handler when the specified sleep state event occurs.
|
||||
@param[in] RegisterContext Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function which Sx state type and phase the caller
|
||||
wishes to be called back on. For this intertace,
|
||||
the Sx driver will call the registered handlers for
|
||||
all Sx type and phases, so the Sx state handler(s)
|
||||
must check the Type and Phase field of the Dispatch
|
||||
context and act accordingly.
|
||||
@param[out] DispatchHandle Handle of dispatch function, for when interfacing
|
||||
with the parent Sx state MM driver.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully
|
||||
registered and the MMI source has been enabled.
|
||||
@retval EFI_UNSUPPORTED The Sx driver or hardware does not support that
|
||||
Sx Type/Phase.
|
||||
@retval EFI_DEVICE_ERROR The Sx driver was unable to enable the MMI source.
|
||||
@retval EFI_INVALID_PARAMETER RegisterContext is invalid. Type & Phase are not
|
||||
within valid range.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory (system or MM) to manage this
|
||||
child.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_SX_REGISTER)(
|
||||
IN CONST EFI_MM_SX_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_MM_HANDLER_ENTRY_POINT DispatchFunction,
|
||||
IN CONST EFI_MM_SX_REGISTER_CONTEXT *RegisterContext,
|
||||
OUT EFI_HANDLE *DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Unregisters an Sx-state service.
|
||||
|
||||
This service removes the handler associated with DispatchHandle so that it will no longer be
|
||||
called in response to sleep event.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_SX_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchHandle Handle of the service to remove.
|
||||
|
||||
@retval EFI_SUCCESS The service has been successfully removed.
|
||||
@retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_SX_UNREGISTER)(
|
||||
IN CONST EFI_MM_SX_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
///
|
||||
/// Interface structure for the MM Sx Dispatch Protocol
|
||||
///
|
||||
/// The EFI_MM_SX_DISPATCH_PROTOCOL provides the ability to install child handlers to
|
||||
/// respond to sleep state related events.
|
||||
///
|
||||
struct _EFI_MM_SX_DISPATCH_PROTOCOL {
|
||||
EFI_MM_SX_REGISTER Register;
|
||||
EFI_MM_SX_UNREGISTER UnRegister;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmSxDispatchProtocolGuid;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,130 @@
|
|||
/** @file
|
||||
MM USB Dispatch Protocol as defined in PI 1.5 Specification
|
||||
Volume 4 Management Mode Core Interface.
|
||||
|
||||
Provides the parent dispatch service for the USB MMI source generator.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
@par Revision Reference:
|
||||
This protocol is from PI Version 1.5.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _MM_USB_DISPATCH_H_
|
||||
#define _MM_USB_DISPATCH_H_
|
||||
|
||||
#include <Pi/PiMmCis.h>
|
||||
|
||||
#define EFI_MM_USB_DISPATCH_PROTOCOL_GUID \
|
||||
{ \
|
||||
0xee9b8d90, 0xc5a6, 0x40a2, {0xbd, 0xe2, 0x52, 0x55, 0x8d, 0x33, 0xcc, 0xa1 } \
|
||||
}
|
||||
|
||||
///
|
||||
/// USB MMI event types
|
||||
///
|
||||
typedef enum {
|
||||
UsbLegacy,
|
||||
UsbWake
|
||||
} EFI_USB_MMI_TYPE;
|
||||
|
||||
///
|
||||
/// The dispatch function's context.
|
||||
///
|
||||
typedef struct {
|
||||
///
|
||||
/// Describes whether this child handler will be invoked in response to a USB legacy
|
||||
/// emulation event, such as port-trap on the PS/2* keyboard control registers, or to a
|
||||
/// USB wake event, such as resumption from a sleep state.
|
||||
///
|
||||
EFI_USB_MMI_TYPE Type;
|
||||
///
|
||||
/// The device path is part of the context structure and describes the location of the
|
||||
/// particular USB host controller in the system for which this register event will occur.
|
||||
/// This location is important because of the possible integration of several USB host
|
||||
/// controllers in a system.
|
||||
///
|
||||
EFI_DEVICE_PATH_PROTOCOL *Device;
|
||||
} EFI_MM_USB_REGISTER_CONTEXT;
|
||||
|
||||
typedef struct _EFI_MM_USB_DISPATCH_PROTOCOL EFI_MM_USB_DISPATCH_PROTOCOL;
|
||||
|
||||
/**
|
||||
Provides the parent dispatch service for the USB MMI source generator.
|
||||
|
||||
This service registers a function (DispatchFunction) which will be called when the USB-
|
||||
related MMI specified by RegisterContext has occurred. On return, DispatchHandle
|
||||
contains a unique handle which may be used later to unregister the function using UnRegister().
|
||||
The DispatchFunction will be called with Context set to the same value as was passed into
|
||||
this function in RegisterContext and with CommBuffer containing NULL and
|
||||
CommBufferSize containing zero.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_USB_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchFunction Function to register for handler when a USB-related MMI occurs.
|
||||
@param[in] RegisterContext Pointer to the dispatch function's context.
|
||||
The caller fills this context in before calling
|
||||
the register function to indicate to the register
|
||||
function the USB MMI types for which the dispatch
|
||||
function should be invoked.
|
||||
@param[out] DispatchHandle Handle generated by the dispatcher to track the function instance.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully
|
||||
registered and the MMI source has been enabled.
|
||||
@retval EFI_DEVICE_ERROR The driver was unable to enable the MMI source.
|
||||
@retval EFI_INVALID_PARAMETER RegisterContext is invalid. The USB MMI type
|
||||
is not within valid range.
|
||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory (system or MM) to manage this child.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_USB_REGISTER)(
|
||||
IN CONST EFI_MM_USB_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_MM_HANDLER_ENTRY_POINT DispatchFunction,
|
||||
IN CONST EFI_MM_USB_REGISTER_CONTEXT *RegisterContext,
|
||||
OUT EFI_HANDLE *DispatchHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Unregisters a USB service.
|
||||
|
||||
This service removes the handler associated with DispatchHandle so that it will no longer be
|
||||
called when the USB event occurs.
|
||||
|
||||
@param[in] This Pointer to the EFI_MM_USB_DISPATCH_PROTOCOL instance.
|
||||
@param[in] DispatchHandle Handle of the service to remove.
|
||||
|
||||
@retval EFI_SUCCESS The dispatch function has been successfully
|
||||
unregistered and the MMI source has been disabled
|
||||
if there are no other registered child dispatch
|
||||
functions for this MMI source.
|
||||
@retval EFI_INVALID_PARAMETER The DispatchHandle was not valid.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_MM_USB_UNREGISTER)(
|
||||
IN CONST EFI_MM_USB_DISPATCH_PROTOCOL *This,
|
||||
IN EFI_HANDLE DispatchHandle
|
||||
);
|
||||
|
||||
///
|
||||
/// Interface structure for the MM USB MMI Dispatch Protocol
|
||||
///
|
||||
/// This protocol provides the parent dispatch service for the USB MMI source generator.
|
||||
///
|
||||
struct _EFI_MM_USB_DISPATCH_PROTOCOL {
|
||||
EFI_MM_USB_REGISTER Register;
|
||||
EFI_MM_USB_UNREGISTER UnRegister;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiMmUsbDispatchProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
|
@ -1178,6 +1178,73 @@
|
|||
## Include/Protocol/I2cBusConfigurationManagement.h
|
||||
gEfiI2cBusConfigurationManagementProtocolGuid = { 0x55b71fb5, 0x17c6, 0x410e, { 0xb5, 0xbd, 0x5f, 0xa2, 0xe3, 0xd4, 0x46, 0x6b }}
|
||||
|
||||
#
|
||||
# Protocols defined in PI 1.5.
|
||||
#
|
||||
|
||||
## Include/Protocol/MmEndOfDxe.h
|
||||
gEfiMmEndOfDxeProtocolGuid = { 0x24e70042, 0xd5c5, 0x4260, { 0x8c, 0x39, 0xa, 0xd3, 0xaa, 0x32, 0xe9, 0x3d }}
|
||||
|
||||
## Include/Protocol/MmIoTrapDispatch.h
|
||||
gEfiMmIoTrapDispatchProtocolGuid = { 0x58dc368d, 0x7bfa, 0x4e77, {0xab, 0xbc, 0xe, 0x29, 0x41, 0x8d, 0xf9, 0x30 }}
|
||||
|
||||
## Include/Protocol/MmPowerButtonDispatch.h
|
||||
gEfiMmPowerButtonDispatchProtocolGuid = { 0x1b1183fa, 0x1823, 0x46a7, {0x88, 0x72, 0x9c, 0x57, 0x87, 0x55, 0x40, 0x9d }}
|
||||
|
||||
## Include/Protocol/MmStandbyButtonDispatch.h
|
||||
gEfiMmStandbyButtonDispatchProtocolGuid = { 0x7300c4a1, 0x43f2, 0x4017, {0xa5, 0x1b, 0xc8, 0x1a, 0x7f, 0x40, 0x58, 0x5b }}
|
||||
|
||||
## Include/Protocol/MmGpiDispatch.h
|
||||
gEfiMmGpiDispatchProtocolGuid = { 0x25566b03, 0xb577, 0x4cbf, {0x95, 0x8c, 0xed, 0x66, 0x3e, 0xa2, 0x43, 0x80 }}
|
||||
|
||||
## Include/Protocol/MmUsbDispatch.h
|
||||
gEfiMmUsbDispatchProtocolGuid = { 0xee9b8d90, 0xc5a6, 0x40a2, {0xbd, 0xe2, 0x52, 0x55, 0x8d, 0x33, 0xcc, 0xa1 }}
|
||||
|
||||
## Include/Protocol/MmPeriodicTimerDispatch.h
|
||||
gEfiMmPeriodicTimerDispatchProtocolGuid = { 0x4cec368e, 0x8e8e, 0x4d71, {0x8b, 0xe1, 0x95, 0x8c, 0x45, 0xfc, 0x8a, 0x53 }}
|
||||
|
||||
## Include/Protocol/MmSxDispatch.h
|
||||
gEfiMmSxDispatchProtocolGuid = { 0x456d2859, 0xa84b, 0x4e47, {0xa2, 0xee, 0x32, 0x76, 0xd8, 0x86, 0x99, 0x7d }}
|
||||
|
||||
## Include/Protocol/MmSwDispatch.h
|
||||
gEfiMmSwDispatchProtocolGuid = { 0x18a3c6dc, 0x5eea, 0x48c8, {0xa1, 0xc1, 0xb5, 0x33, 0x89, 0xf9, 0x89, 0x99 }}
|
||||
|
||||
## Include/Protocol/MmPciRootBridgeIo.h
|
||||
gEfiMmPciRootBridgeIoProtocolGuid = { 0x8bc1714d, 0xffcb, 0x41c3, { 0x89, 0xdc, 0x6c, 0x74, 0xd0, 0x6d, 0x98, 0xea }}
|
||||
|
||||
## Include/Protocol/MmCpu.h
|
||||
gEfiMmCpuProtocolGuid = { 0xeb346b97, 0x975f, 0x4a9f, { 0x8b, 0x22, 0xf8, 0xe9, 0x2b, 0xb3, 0xd5, 0x69 }}
|
||||
|
||||
## Include/Protocol/MmStatusCode.h
|
||||
gEfiMmStatusCodeProtocolGuid = { 0x6afd2b77, 0x98c1, 0x4acd, { 0xa6, 0xf9, 0x8a, 0x94, 0x39, 0xde, 0xf, 0xb1}}
|
||||
|
||||
## Include/Protocol/DxeMmReadyToLock.h
|
||||
gEfiDxeMmReadyToLockProtocolGuid = { 0x60ff8964, 0xe906, 0x41d0, { 0xaf, 0xed, 0xf2, 0x41, 0xe9, 0x74, 0xe0, 0x8e }}
|
||||
|
||||
## Include/Protocol/MmConfiguration.h
|
||||
gEfiMmConfigurationProtocolGuid= { 0x26eeb3de, 0xb689, 0x492e, { 0x80, 0xf0, 0xbe, 0x8b, 0xd7, 0xda, 0x4b, 0xa7 }}
|
||||
|
||||
## Include/Protocol/MmReadyToLock.h
|
||||
gEfiMmReadyToLockProtocolGuid = { 0x47b7fa8c, 0xf4bd, 0x4af6, { 0x82, 0x00, 0x33, 0x30, 0x86, 0xf0, 0xd2, 0xc8 }}
|
||||
|
||||
## Include/Protocol/MmControl.h
|
||||
gEfiMmControlProtocolGuid = { 0x843dc720, 0xab1e, 0x42cb, { 0x93, 0x57, 0x8a, 0x0, 0x78, 0xf3, 0x56, 0x1b}}
|
||||
|
||||
## Include/Protocol/MmAccess.h
|
||||
gEfiMmAccessProtocolGuid = { 0xc2702b74, 0x800c, 0x4131, { 0x87, 0x46, 0x8f, 0xb5, 0xb8, 0x9c, 0xe4, 0xac }}
|
||||
|
||||
## Include/Protocol/MmBase.h
|
||||
gEfiMmBaseProtocolGuid = { 0xf4ccbfb7, 0xf6e0, 0x47fd, { 0x9d, 0xd4, 0x10, 0xa8, 0xf1, 0x50, 0xc1, 0x91 }}
|
||||
|
||||
## Include/Protocol/MmCpuIo.h
|
||||
gEfiMmCpuIoProtocolGuid = { 0x3242a9d8, 0xce70, 0x4aa0, { 0x95, 0x5d, 0x5e, 0x7b, 0x14, 0x0d, 0xe4, 0xd2 }}
|
||||
|
||||
## Include/Protocol/MmReportStatusCodeHandler.h
|
||||
gEfiMmRscHandlerProtocolGuid = { 0x2ff29fa7, 0x5e80, 0x4ed9, { 0xb3, 0x80, 0x1, 0x7d, 0x3c, 0x55, 0x4f, 0xf4 }}
|
||||
|
||||
## Include/Protocol/MmCommunication.h
|
||||
gEfiMmCommunicationProtocolGuid = { 0xc68ed8e2, 0x9dc6, 0x4cbd, { 0x9d, 0x94, 0xdb, 0x65, 0xac, 0xc5, 0xc3, 0x32 }}
|
||||
|
||||
#
|
||||
# Protocols defined in UEFI2.1/UEFI2.0/EFI1.1
|
||||
#
|
||||
|
|
Loading…
Reference in New Issue