| /** @file | |
| The internal header file includes the common header files, defines | |
| internal structure and functions used by SmmCore module. | |
| Copyright (c) 2009 - 2012, 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 _SMM_CORE_H_ | |
| #define _SMM_CORE_H_ | |
| #include <PiSmm.h> | |
| #include <Protocol/DxeSmmReadyToLock.h> | |
| #include <Protocol/SmmReadyToLock.h> | |
| #include <Protocol/SmmEndOfDxe.h> | |
| #include <Protocol/CpuIo2.h> | |
| #include <Protocol/SmmCommunication.h> | |
| #include <Protocol/SmmAccess2.h> | |
| #include <Protocol/FirmwareVolume2.h> | |
| #include <Protocol/LoadedImage.h> | |
| #include <Protocol/DevicePath.h> | |
| #include <Protocol/Security.h> | |
| #include <Protocol/Security2.h> | |
| #include <Guid/Apriori.h> | |
| #include <Guid/EventGroup.h> | |
| #include <Guid/EventLegacyBios.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/PeCoffLib.h> | |
| #include <Library/CacheMaintenanceLib.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/ReportStatusCodeLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/DevicePathLib.h> | |
| #include <Library/UefiLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/PcdLib.h> | |
| #include <Library/SmmCorePlatformHookLib.h> | |
| #include <Library/PerformanceLib.h> | |
| #include <Library/TimerLib.h> | |
| #include "PiSmmCorePrivateData.h" | |
| // | |
| // Used to build a table of SMI Handlers that the SMM Core registers | |
| // | |
| typedef struct { | |
| EFI_SMM_HANDLER_ENTRY_POINT2 Handler; | |
| EFI_GUID *HandlerType; | |
| EFI_HANDLE DispatchHandle; | |
| BOOLEAN UnRegister; | |
| } SMM_CORE_SMI_HANDLERS; | |
| // | |
| // Structure for recording the state of an SMM Driver | |
| // | |
| #define EFI_SMM_DRIVER_ENTRY_SIGNATURE SIGNATURE_32('s', 'd','r','v') | |
| typedef struct { | |
| UINTN Signature; | |
| LIST_ENTRY Link; // mDriverList | |
| LIST_ENTRY ScheduledLink; // mScheduledQueue | |
| EFI_HANDLE FvHandle; | |
| EFI_GUID FileName; | |
| EFI_DEVICE_PATH_PROTOCOL *FvFileDevicePath; | |
| EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; | |
| VOID *Depex; | |
| UINTN DepexSize; | |
| BOOLEAN Before; | |
| BOOLEAN After; | |
| EFI_GUID BeforeAfterGuid; | |
| BOOLEAN Dependent; | |
| BOOLEAN Scheduled; | |
| BOOLEAN Initialized; | |
| BOOLEAN DepexProtocolError; | |
| EFI_HANDLE ImageHandle; | |
| EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; | |
| // | |
| // Image EntryPoint in SMRAM | |
| // | |
| PHYSICAL_ADDRESS ImageEntryPoint; | |
| // | |
| // Image Buffer in SMRAM | |
| // | |
| PHYSICAL_ADDRESS ImageBuffer; | |
| // | |
| // Image Page Number | |
| // | |
| UINTN NumberOfPage; | |
| } EFI_SMM_DRIVER_ENTRY; | |
| #define EFI_HANDLE_SIGNATURE SIGNATURE_32('h','n','d','l') | |
| /// | |
| /// IHANDLE - contains a list of protocol handles | |
| /// | |
| typedef struct { | |
| UINTN Signature; | |
| /// All handles list of IHANDLE | |
| LIST_ENTRY AllHandles; | |
| /// List of PROTOCOL_INTERFACE's for this handle | |
| LIST_ENTRY Protocols; | |
| UINTN LocateRequest; | |
| } IHANDLE; | |
| #define ASSERT_IS_HANDLE(a) ASSERT((a)->Signature == EFI_HANDLE_SIGNATURE) | |
| #define PROTOCOL_ENTRY_SIGNATURE SIGNATURE_32('p','r','t','e') | |
| /// | |
| /// PROTOCOL_ENTRY - each different protocol has 1 entry in the protocol | |
| /// database. Each handler that supports this protocol is listed, along | |
| /// with a list of registered notifies. | |
| /// | |
| typedef struct { | |
| UINTN Signature; | |
| /// Link Entry inserted to mProtocolDatabase | |
| LIST_ENTRY AllEntries; | |
| /// ID of the protocol | |
| EFI_GUID ProtocolID; | |
| /// All protocol interfaces | |
| LIST_ENTRY Protocols; | |
| /// Registerd notification handlers | |
| LIST_ENTRY Notify; | |
| } PROTOCOL_ENTRY; | |
| #define PROTOCOL_INTERFACE_SIGNATURE SIGNATURE_32('p','i','f','c') | |
| /// | |
| /// PROTOCOL_INTERFACE - each protocol installed on a handle is tracked | |
| /// with a protocol interface structure | |
| /// | |
| typedef struct { | |
| UINTN Signature; | |
| /// Link on IHANDLE.Protocols | |
| LIST_ENTRY Link; | |
| /// Back pointer | |
| IHANDLE *Handle; | |
| /// Link on PROTOCOL_ENTRY.Protocols | |
| LIST_ENTRY ByProtocol; | |
| /// The protocol ID | |
| PROTOCOL_ENTRY *Protocol; | |
| /// The interface value | |
| VOID *Interface; | |
| } PROTOCOL_INTERFACE; | |
| #define PROTOCOL_NOTIFY_SIGNATURE SIGNATURE_32('p','r','t','n') | |
| /// | |
| /// PROTOCOL_NOTIFY - used for each register notification for a protocol | |
| /// | |
| typedef struct { | |
| UINTN Signature; | |
| PROTOCOL_ENTRY *Protocol; | |
| /// All notifications for this protocol | |
| LIST_ENTRY Link; | |
| /// Notification function | |
| EFI_SMM_NOTIFY_FN Function; | |
| /// Last position notified | |
| LIST_ENTRY *Position; | |
| } PROTOCOL_NOTIFY; | |
| // | |
| // SMM Core Global Variables | |
| // | |
| extern SMM_CORE_PRIVATE_DATA *gSmmCorePrivate; | |
| extern EFI_SMM_SYSTEM_TABLE2 gSmmCoreSmst; | |
| extern LIST_ENTRY gHandleList; | |
| extern EFI_PHYSICAL_ADDRESS gLoadModuleAtFixAddressSmramBase; | |
| /** | |
| Called to initialize the memory service. | |
| @param SmramRangeCount Number of SMRAM Regions | |
| @param SmramRanges Pointer to SMRAM Descriptors | |
| **/ | |
| VOID | |
| SmmInitializeMemoryServices ( | |
| IN UINTN SmramRangeCount, | |
| IN EFI_SMRAM_DESCRIPTOR *SmramRanges | |
| ); | |
| /** | |
| The SmmInstallConfigurationTable() function is used to maintain the list | |
| of configuration tables that are stored in the System Management 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 SystemTable A pointer to the SMM System Table (SMST). | |
| @param Guid A pointer to the GUID for the entry to add, update, or remove. | |
| @param Table A pointer to the buffer of the table to add. | |
| @param 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. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmInstallConfigurationTable ( | |
| IN CONST EFI_SMM_SYSTEM_TABLE2 *SystemTable, | |
| IN CONST EFI_GUID *Guid, | |
| IN VOID *Table, | |
| IN UINTN TableSize | |
| ); | |
| /** | |
| Wrapper function to SmmInstallProtocolInterfaceNotify. This is the public API which | |
| Calls the private one which contains a BOOLEAN parameter for notifications | |
| @param UserHandle The handle to install the protocol handler on, | |
| or NULL if a new handle is to be allocated | |
| @param Protocol The protocol to add to the handle | |
| @param InterfaceType Indicates whether Interface is supplied in | |
| native form. | |
| @param Interface The interface for the protocol being added | |
| @return Status code | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmInstallProtocolInterface ( | |
| IN OUT EFI_HANDLE *UserHandle, | |
| IN EFI_GUID *Protocol, | |
| IN EFI_INTERFACE_TYPE InterfaceType, | |
| IN VOID *Interface | |
| ); | |
| /** | |
| Allocates pages from the memory map. | |
| @param Type The type of allocation to perform | |
| @param MemoryType The type of memory to turn the allocated pages | |
| into | |
| @param NumberOfPages The number of pages to allocate | |
| @param Memory A pointer to receive the base allocated memory | |
| address | |
| @retval EFI_INVALID_PARAMETER Parameters violate checking rules defined in spec. | |
| @retval EFI_NOT_FOUND Could not allocate pages match the requirement. | |
| @retval EFI_OUT_OF_RESOURCES No enough pages to allocate. | |
| @retval EFI_SUCCESS Pages successfully allocated. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmAllocatePages ( | |
| IN EFI_ALLOCATE_TYPE Type, | |
| IN EFI_MEMORY_TYPE MemoryType, | |
| IN UINTN NumberOfPages, | |
| OUT EFI_PHYSICAL_ADDRESS *Memory | |
| ); | |
| /** | |
| Frees previous allocated pages. | |
| @param Memory Base address of memory being freed | |
| @param NumberOfPages The number of pages to free | |
| @retval EFI_NOT_FOUND Could not find the entry that covers the range | |
| @retval EFI_INVALID_PARAMETER Address not aligned | |
| @return EFI_SUCCESS Pages successfully freed. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmFreePages ( | |
| IN EFI_PHYSICAL_ADDRESS Memory, | |
| IN UINTN NumberOfPages | |
| ); | |
| /** | |
| Allocate pool of a particular type. | |
| @param PoolType Type of pool to allocate | |
| @param Size The amount of pool to allocate | |
| @param Buffer The address to return a pointer to the allocated | |
| pool | |
| @retval EFI_INVALID_PARAMETER PoolType not valid | |
| @retval EFI_OUT_OF_RESOURCES Size exceeds max pool size or allocation failed. | |
| @retval EFI_SUCCESS Pool successfully allocated. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmAllocatePool ( | |
| IN EFI_MEMORY_TYPE PoolType, | |
| IN UINTN Size, | |
| OUT VOID **Buffer | |
| ); | |
| /** | |
| Frees pool. | |
| @param Buffer The allocated pool entry to free | |
| @retval EFI_INVALID_PARAMETER Buffer is not a valid value. | |
| @retval EFI_SUCCESS Pool successfully freed. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmFreePool ( | |
| IN VOID *Buffer | |
| ); | |
| /** | |
| Installs a protocol interface into the boot services environment. | |
| @param UserHandle The handle to install the protocol handler on, | |
| or NULL if a new handle is to be allocated | |
| @param Protocol The protocol to add to the handle | |
| @param InterfaceType Indicates whether Interface is supplied in | |
| native form. | |
| @param Interface The interface for the protocol being added | |
| @param Notify indicates whether notify the notification list | |
| for this protocol | |
| @retval EFI_INVALID_PARAMETER Invalid parameter | |
| @retval EFI_OUT_OF_RESOURCES No enough buffer to allocate | |
| @retval EFI_SUCCESS Protocol interface successfully installed | |
| **/ | |
| EFI_STATUS | |
| SmmInstallProtocolInterfaceNotify ( | |
| IN OUT EFI_HANDLE *UserHandle, | |
| IN EFI_GUID *Protocol, | |
| IN EFI_INTERFACE_TYPE InterfaceType, | |
| IN VOID *Interface, | |
| IN BOOLEAN Notify | |
| ); | |
| /** | |
| Uninstalls all instances of a protocol:interfacer from a handle. | |
| If the last protocol interface is remove from the handle, the | |
| handle is freed. | |
| @param UserHandle The handle to remove the protocol handler from | |
| @param Protocol The protocol, of protocol:interface, to remove | |
| @param Interface The interface, of protocol:interface, to remove | |
| @retval EFI_INVALID_PARAMETER Protocol is NULL. | |
| @retval EFI_SUCCESS Protocol interface successfully uninstalled. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmUninstallProtocolInterface ( | |
| IN EFI_HANDLE UserHandle, | |
| IN EFI_GUID *Protocol, | |
| IN VOID *Interface | |
| ); | |
| /** | |
| Queries a handle to determine if it supports a specified protocol. | |
| @param UserHandle The handle being queried. | |
| @param Protocol The published unique identifier of the protocol. | |
| @param Interface Supplies the address where a pointer to the | |
| corresponding Protocol Interface is returned. | |
| @return The requested protocol interface for the handle | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmHandleProtocol ( | |
| IN EFI_HANDLE UserHandle, | |
| IN EFI_GUID *Protocol, | |
| OUT VOID **Interface | |
| ); | |
| /** | |
| Add a new protocol notification record for the request protocol. | |
| @param Protocol The requested protocol to add the notify | |
| registration | |
| @param Function Points to the notification function | |
| @param Registration Returns the registration record | |
| @retval EFI_INVALID_PARAMETER Invalid parameter | |
| @retval EFI_SUCCESS Successfully returned the registration record | |
| that has been added | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmRegisterProtocolNotify ( | |
| IN CONST EFI_GUID *Protocol, | |
| IN EFI_SMM_NOTIFY_FN Function, | |
| OUT VOID **Registration | |
| ); | |
| /** | |
| Locates the requested handle(s) and returns them in Buffer. | |
| @param SearchType The type of search to perform to locate the | |
| handles | |
| @param Protocol The protocol to search for | |
| @param SearchKey Dependant on SearchType | |
| @param BufferSize On input the size of Buffer. On output the | |
| size of data returned. | |
| @param Buffer The buffer to return the results in | |
| @retval EFI_BUFFER_TOO_SMALL Buffer too small, required buffer size is | |
| returned in BufferSize. | |
| @retval EFI_INVALID_PARAMETER Invalid parameter | |
| @retval EFI_SUCCESS Successfully found the requested handle(s) and | |
| returns them in Buffer. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmLocateHandle ( | |
| IN EFI_LOCATE_SEARCH_TYPE SearchType, | |
| IN EFI_GUID *Protocol OPTIONAL, | |
| IN VOID *SearchKey OPTIONAL, | |
| IN OUT UINTN *BufferSize, | |
| OUT EFI_HANDLE *Buffer | |
| ); | |
| /** | |
| Return the first Protocol Interface that matches the Protocol GUID. If | |
| Registration is pasased in return a Protocol Instance that was just add | |
| to the system. If Retistration is NULL return the first Protocol Interface | |
| you find. | |
| @param Protocol The protocol to search for | |
| @param Registration Optional Registration Key returned from | |
| RegisterProtocolNotify() | |
| @param Interface Return the Protocol interface (instance). | |
| @retval EFI_SUCCESS If a valid Interface is returned | |
| @retval EFI_INVALID_PARAMETER Invalid parameter | |
| @retval EFI_NOT_FOUND Protocol interface not found | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmLocateProtocol ( | |
| IN EFI_GUID *Protocol, | |
| IN VOID *Registration OPTIONAL, | |
| OUT VOID **Interface | |
| ); | |
| /** | |
| Manage SMI of a particular type. | |
| @param HandlerType Points to the handler type or NULL for root SMI handlers. | |
| @param Context Points to an optional context buffer. | |
| @param CommBuffer Points to the optional communication buffer. | |
| @param CommBufferSize Points to the size of the optional communication buffer. | |
| @retval EFI_SUCCESS Interrupt source was processed successfully but not quiesced. | |
| @retval EFI_INTERRUPT_PENDING One or more SMI sources could not be quiesced. | |
| @retval EFI_WARN_INTERRUPT_SOURCE_PENDING Interrupt source was not handled or quiesced. | |
| @retval EFI_WARN_INTERRUPT_SOURCE_QUIESCED Interrupt source was handled and quiesced. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmiManage ( | |
| IN CONST EFI_GUID *HandlerType, | |
| IN CONST VOID *Context OPTIONAL, | |
| IN OUT VOID *CommBuffer OPTIONAL, | |
| IN OUT UINTN *CommBufferSize OPTIONAL | |
| ); | |
| /** | |
| Registers a handler to execute within SMM. | |
| @param Handler Handler service funtion pointer. | |
| @param HandlerType Points to the handler type or NULL for root SMI handlers. | |
| @param DispatchHandle On return, contains a unique handle which can be used to later unregister the handler function. | |
| @retval EFI_SUCCESS Handler register success. | |
| @retval EFI_INVALID_PARAMETER Handler or DispatchHandle is NULL. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmiHandlerRegister ( | |
| IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler, | |
| IN CONST EFI_GUID *HandlerType OPTIONAL, | |
| OUT EFI_HANDLE *DispatchHandle | |
| ); | |
| /** | |
| Unregister a handler in SMM. | |
| @param 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. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmiHandlerUnRegister ( | |
| IN EFI_HANDLE DispatchHandle | |
| ); | |
| /** | |
| This function is the main entry point for an SMM handler dispatch | |
| or communicate-based callback. | |
| @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). | |
| @param Context Points to an optional handler context which was specified when the handler was registered. | |
| @param CommBuffer A pointer to a collection of data in memory that will | |
| be conveyed from a non-SMM environment into an SMM environment. | |
| @param CommBufferSize The size of the CommBuffer. | |
| @return Status Code | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmDriverDispatchHandler ( | |
| IN EFI_HANDLE DispatchHandle, | |
| IN CONST VOID *Context, OPTIONAL | |
| IN OUT VOID *CommBuffer, OPTIONAL | |
| IN OUT UINTN *CommBufferSize OPTIONAL | |
| ); | |
| /** | |
| This function is the main entry point for an SMM handler dispatch | |
| or communicate-based callback. | |
| @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). | |
| @param Context Points to an optional handler context which was specified when the handler was registered. | |
| @param CommBuffer A pointer to a collection of data in memory that will | |
| be conveyed from a non-SMM environment into an SMM environment. | |
| @param CommBufferSize The size of the CommBuffer. | |
| @return Status Code | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmLegacyBootHandler ( | |
| IN EFI_HANDLE DispatchHandle, | |
| IN CONST VOID *Context, OPTIONAL | |
| IN OUT VOID *CommBuffer, OPTIONAL | |
| IN OUT UINTN *CommBufferSize OPTIONAL | |
| ); | |
| /** | |
| This function is the main entry point for an SMM handler dispatch | |
| or communicate-based callback. | |
| @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). | |
| @param Context Points to an optional handler context which was specified when the handler was registered. | |
| @param CommBuffer A pointer to a collection of data in memory that will | |
| be conveyed from a non-SMM environment into an SMM environment. | |
| @param CommBufferSize The size of the CommBuffer. | |
| @return Status Code | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmReadyToLockHandler ( | |
| IN EFI_HANDLE DispatchHandle, | |
| IN CONST VOID *Context, OPTIONAL | |
| IN OUT VOID *CommBuffer, OPTIONAL | |
| IN OUT UINTN *CommBufferSize OPTIONAL | |
| ); | |
| /** | |
| This function is the main entry point for an SMM handler dispatch | |
| or communicate-based callback. | |
| @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). | |
| @param Context Points to an optional handler context which was specified when the handler was registered. | |
| @param CommBuffer A pointer to a collection of data in memory that will | |
| be conveyed from a non-SMM environment into an SMM environment. | |
| @param CommBufferSize The size of the CommBuffer. | |
| @return Status Code | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmEndOfDxeHandler ( | |
| IN EFI_HANDLE DispatchHandle, | |
| IN CONST VOID *Context, OPTIONAL | |
| IN OUT VOID *CommBuffer, OPTIONAL | |
| IN OUT UINTN *CommBufferSize OPTIONAL | |
| ); | |
| /** | |
| Place holder function until all the SMM System Table Service are available. | |
| @param Arg1 Undefined | |
| @param Arg2 Undefined | |
| @param Arg3 Undefined | |
| @param Arg4 Undefined | |
| @param Arg5 Undefined | |
| @return EFI_NOT_AVAILABLE_YET | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| SmmEfiNotAvailableYetArg5 ( | |
| UINTN Arg1, | |
| UINTN Arg2, | |
| UINTN Arg3, | |
| UINTN Arg4, | |
| UINTN Arg5 | |
| ); | |
| // | |
| //Functions used during debug buils | |
| // | |
| /** | |
| Traverse the discovered list for any drivers that were discovered but not loaded | |
| because the dependency experessions evaluated to false. | |
| **/ | |
| VOID | |
| SmmDisplayDiscoveredNotDispatched ( | |
| VOID | |
| ); | |
| /** | |
| Add free SMRAM region for use by memory service. | |
| @param MemBase Base address of memory region. | |
| @param MemLength Length of the memory region. | |
| @param Type Memory type. | |
| @param Attributes Memory region state. | |
| **/ | |
| VOID | |
| SmmAddMemoryRegion ( | |
| IN EFI_PHYSICAL_ADDRESS MemBase, | |
| IN UINT64 MemLength, | |
| IN EFI_MEMORY_TYPE Type, | |
| IN UINT64 Attributes | |
| ); | |
| /** | |
| Finds the protocol entry for the requested protocol. | |
| @param Protocol The ID of the protocol | |
| @param Create Create a new entry if not found | |
| @return Protocol entry | |
| **/ | |
| PROTOCOL_ENTRY * | |
| SmmFindProtocolEntry ( | |
| IN EFI_GUID *Protocol, | |
| IN BOOLEAN Create | |
| ); | |
| /** | |
| Signal event for every protocol in protocol entry. | |
| @param Prot Protocol interface | |
| **/ | |
| VOID | |
| SmmNotifyProtocol ( | |
| IN PROTOCOL_INTERFACE *Prot | |
| ); | |
| /** | |
| Finds the protocol instance for the requested handle and protocol. | |
| Note: This function doesn't do parameters checking, it's caller's responsibility | |
| to pass in valid parameters. | |
| @param Handle The handle to search the protocol on | |
| @param Protocol GUID of the protocol | |
| @param Interface The interface for the protocol being searched | |
| @return Protocol instance (NULL: Not found) | |
| **/ | |
| PROTOCOL_INTERFACE * | |
| SmmFindProtocolInterface ( | |
| IN IHANDLE *Handle, | |
| IN EFI_GUID *Protocol, | |
| IN VOID *Interface | |
| ); | |
| /** | |
| Removes Protocol from the protocol list (but not the handle list). | |
| @param Handle The handle to remove protocol on. | |
| @param Protocol GUID of the protocol to be moved | |
| @param Interface The interface of the protocol | |
| @return Protocol Entry | |
| **/ | |
| PROTOCOL_INTERFACE * | |
| SmmRemoveInterfaceFromProtocol ( | |
| IN IHANDLE *Handle, | |
| IN EFI_GUID *Protocol, | |
| IN VOID *Interface | |
| ); | |
| /** | |
| This is the POSTFIX version of the dependency evaluator. This code does | |
| not need to handle Before or After, as it is not valid to call this | |
| routine in this case. POSTFIX means all the math is done on top of the stack. | |
| @param DriverEntry DriverEntry element to update. | |
| @retval TRUE If driver is ready to run. | |
| @retval FALSE If driver is not ready to run or some fatal error | |
| was found. | |
| **/ | |
| BOOLEAN | |
| SmmIsSchedulable ( | |
| IN EFI_SMM_DRIVER_ENTRY *DriverEntry | |
| ); | |
| #endif |