PiSmmCore.h revision 53ec4d7f98a6af8b00c891c3f13791967e52b6a3
1e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** @file 2e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney The internal header file includes the common header files, defines 3e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney internal structure and functions used by SmmCore module. 4e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 563aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR> 6e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney This program and the accompanying materials are licensed and made available 7e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney under the terms and conditions of the BSD License which accompanies this 8e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney distribution. The full text of the license may be found at 9e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney http://opensource.org/licenses/bsd-license.php 10e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 11e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 14e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 15e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 16e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#ifndef _SMM_CORE_H_ 17e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#define _SMM_CORE_H_ 18e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 19e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <PiSmm.h> 20e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 21e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Protocol/DxeSmmReadyToLock.h> 22e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Protocol/SmmReadyToLock.h> 2346ece1ff4f097678ddd3609ccb104a22c0bae469jyao#include <Protocol/SmmEndOfDxe.h> 24e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Protocol/CpuIo2.h> 25e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Protocol/SmmCommunication.h> 26e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Protocol/SmmAccess2.h> 27e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Protocol/FirmwareVolume2.h> 28e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Protocol/LoadedImage.h> 29e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Protocol/DevicePath.h> 30e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Protocol/Security.h> 31bc2dfdbcfc11dc785f0cc0ad2f519a63b98f88bclgao#include <Protocol/Security2.h> 3253ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng#include <Protocol/SmmExitBootServices.h> 3353ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng#include <Protocol/SmmLegacyBoot.h> 3453ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng#include <Protocol/SmmReadyToBoot.h> 35e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 36e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Guid/Apriori.h> 37e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Guid/EventGroup.h> 38e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Guid/EventLegacyBios.h> 3984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng#include <Guid/ZeroGuid.h> 4084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng#include <Guid/MemoryProfile.h> 41e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 42e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Library/BaseLib.h> 43e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Library/BaseMemoryLib.h> 44e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Library/PeCoffLib.h> 45e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Library/CacheMaintenanceLib.h> 46e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Library/DebugLib.h> 47e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Library/ReportStatusCodeLib.h> 48e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Library/MemoryAllocationLib.h> 49e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Library/DevicePathLib.h> 50e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include <Library/UefiLib.h> 513c447c2760b3438a6d5ff0a7f2dbd580526452e5jchen#include <Library/UefiBootServicesTableLib.h> 523c447c2760b3438a6d5ff0a7f2dbd580526452e5jchen#include <Library/PcdLib.h> 53495797c5578e88cd1a769e918502cf426f08d6b0rsun#include <Library/SmmCorePlatformHookLib.h> 54495797c5578e88cd1a769e918502cf426f08d6b0rsun#include <Library/PerformanceLib.h> 55c2cb08df473b9269bace69e21266218fcc817703lgao#include <Library/TimerLib.h> 563720ee6d32219fd67d391f53f2cb812dc197a86bJeff Fan#include <Library/HobLib.h> 57842b1242d19225bb6d6146861d3418a5c9549175Yao, Jiewen#include <Library/SmmMemLib.h> 58e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 59e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#include "PiSmmCorePrivateData.h" 60e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 61e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// 62e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// Used to build a table of SMI Handlers that the SMM Core registers 63e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// 64e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneytypedef struct { 65e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_SMM_HANDLER_ENTRY_POINT2 Handler; 66e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_GUID *HandlerType; 67e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_HANDLE DispatchHandle; 68e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney BOOLEAN UnRegister; 69e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney} SMM_CORE_SMI_HANDLERS; 70e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 71e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// 72e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// Structure for recording the state of an SMM Driver 73e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// 74e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#define EFI_SMM_DRIVER_ENTRY_SIGNATURE SIGNATURE_32('s', 'd','r','v') 75e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 76e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneytypedef struct { 77e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Signature; 78e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY Link; // mDriverList 79e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 80e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY ScheduledLink; // mScheduledQueue 81e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 82e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_HANDLE FvHandle; 83e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_GUID FileName; 84e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_DEVICE_PATH_PROTOCOL *FvFileDevicePath; 85e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; 86e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 87e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney VOID *Depex; 88e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN DepexSize; 89e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 90e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney BOOLEAN Before; 91e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney BOOLEAN After; 92e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_GUID BeforeAfterGuid; 93e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 94e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney BOOLEAN Dependent; 95e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney BOOLEAN Scheduled; 96e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney BOOLEAN Initialized; 97e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney BOOLEAN DepexProtocolError; 98e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 99e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_HANDLE ImageHandle; 100e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; 101e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney // 102e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney // Image EntryPoint in SMRAM 103e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney // 104e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney PHYSICAL_ADDRESS ImageEntryPoint; 105e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney // 106e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney // Image Buffer in SMRAM 107e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney // 108e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney PHYSICAL_ADDRESS ImageBuffer; 109e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney // 110e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney // Image Page Number 111e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney // 112e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN NumberOfPage; 113e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney} EFI_SMM_DRIVER_ENTRY; 114e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 115e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#define EFI_HANDLE_SIGNATURE SIGNATURE_32('h','n','d','l') 116e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 117e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// 118e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// IHANDLE - contains a list of protocol handles 119e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// 120e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneytypedef struct { 121e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Signature; 122e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// All handles list of IHANDLE 123e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY AllHandles; 124e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// List of PROTOCOL_INTERFACE's for this handle 125e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY Protocols; 126e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN LocateRequest; 127e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney} IHANDLE; 128e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 129e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#define ASSERT_IS_HANDLE(a) ASSERT((a)->Signature == EFI_HANDLE_SIGNATURE) 130e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 131e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#define PROTOCOL_ENTRY_SIGNATURE SIGNATURE_32('p','r','t','e') 132e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 133e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// 134e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// PROTOCOL_ENTRY - each different protocol has 1 entry in the protocol 135e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// database. Each handler that supports this protocol is listed, along 136e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// with a list of registered notifies. 137e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// 138e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneytypedef struct { 139e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Signature; 140e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// Link Entry inserted to mProtocolDatabase 141e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY AllEntries; 142e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// ID of the protocol 143e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_GUID ProtocolID; 144e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// All protocol interfaces 145e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY Protocols; 146e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// Registerd notification handlers 147e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY Notify; 148e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney} PROTOCOL_ENTRY; 149e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 150e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#define PROTOCOL_INTERFACE_SIGNATURE SIGNATURE_32('p','i','f','c') 151e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 152e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// 153e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// PROTOCOL_INTERFACE - each protocol installed on a handle is tracked 154e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// with a protocol interface structure 155e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// 156e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneytypedef struct { 157e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Signature; 158e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// Link on IHANDLE.Protocols 159e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY Link; 160e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// Back pointer 161e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IHANDLE *Handle; 162e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// Link on PROTOCOL_ENTRY.Protocols 163e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY ByProtocol; 164e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// The protocol ID 165e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney PROTOCOL_ENTRY *Protocol; 166e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// The interface value 167e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney VOID *Interface; 168e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney} PROTOCOL_INTERFACE; 169e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 170e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#define PROTOCOL_NOTIFY_SIGNATURE SIGNATURE_32('p','r','t','n') 171e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 172e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// 173e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// PROTOCOL_NOTIFY - used for each register notification for a protocol 174e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/// 175e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneytypedef struct { 176e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Signature; 177e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney PROTOCOL_ENTRY *Protocol; 178e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// All notifications for this protocol 179e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY Link; 180e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// Notification function 181e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney EFI_SMM_NOTIFY_FN Function; 182e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney /// Last position notified 183e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney LIST_ENTRY *Position; 184e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney} PROTOCOL_NOTIFY; 185e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 186e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// 187e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// SMM Core Global Variables 188e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// 189e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyextern SMM_CORE_PRIVATE_DATA *gSmmCorePrivate; 190e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyextern EFI_SMM_SYSTEM_TABLE2 gSmmCoreSmst; 191e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyextern LIST_ENTRY gHandleList; 1923c447c2760b3438a6d5ff0a7f2dbd580526452e5jchenextern EFI_PHYSICAL_ADDRESS gLoadModuleAtFixAddressSmramBase; 193e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 194e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 195e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Called to initialize the memory service. 196e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 197e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param SmramRangeCount Number of SMRAM Regions 198e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param SmramRanges Pointer to SMRAM Descriptors 199e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 200e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 201e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyVOID 202e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmInitializeMemoryServices ( 203e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN UINTN SmramRangeCount, 204e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_SMRAM_DESCRIPTOR *SmramRanges 205e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 206e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 207e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 208e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney The SmmInstallConfigurationTable() function is used to maintain the list 209e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney of configuration tables that are stored in the System Management System 210e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Table. The list is stored as an array of (GUID, Pointer) pairs. The list 211e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney must be allocated from pool memory with PoolType set to EfiRuntimeServicesData. 212e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 213e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param SystemTable A pointer to the SMM System Table (SMST). 214e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Guid A pointer to the GUID for the entry to add, update, or remove. 215e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Table A pointer to the buffer of the table to add. 216e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param TableSize The size of the table to install. 217e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 218e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS The (Guid, Table) pair was added, updated, or removed. 219e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Guid is not valid. 220e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_NOT_FOUND An attempt was made to delete a non-existent entry. 221e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_OUT_OF_RESOURCES There is not enough memory available to complete the operation. 222e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 223e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 224e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 225e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 226e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmInstallConfigurationTable ( 227e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN CONST EFI_SMM_SYSTEM_TABLE2 *SystemTable, 228e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN CONST EFI_GUID *Guid, 229e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN VOID *Table, 230e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN UINTN TableSize 231e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 232e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 233e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 234e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Wrapper function to SmmInstallProtocolInterfaceNotify. This is the public API which 235e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Calls the private one which contains a BOOLEAN parameter for notifications 236e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 237e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param UserHandle The handle to install the protocol handler on, 238e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney or NULL if a new handle is to be allocated 239e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol The protocol to add to the handle 240e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param InterfaceType Indicates whether Interface is supplied in 241e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney native form. 242e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Interface The interface for the protocol being added 243e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 244e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return Status code 245e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 246e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 247e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 248e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 249e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmInstallProtocolInterface ( 250e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT EFI_HANDLE *UserHandle, 251e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_GUID *Protocol, 252e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_INTERFACE_TYPE InterfaceType, 253e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN VOID *Interface 254e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 255e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 256e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 257e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Allocates pages from the memory map. 258e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 259e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Type The type of allocation to perform 260e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param MemoryType The type of memory to turn the allocated pages 261e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney into 262e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param NumberOfPages The number of pages to allocate 263e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Memory A pointer to receive the base allocated memory 264e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney address 265e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 266e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Parameters violate checking rules defined in spec. 267e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_NOT_FOUND Could not allocate pages match the requirement. 268e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_OUT_OF_RESOURCES No enough pages to allocate. 269e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Pages successfully allocated. 270e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 271e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 272e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 273e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 274e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmAllocatePages ( 275e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_ALLOCATE_TYPE Type, 276e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_MEMORY_TYPE MemoryType, 277e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN UINTN NumberOfPages, 278e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney OUT EFI_PHYSICAL_ADDRESS *Memory 279e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 280e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 281e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 28284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng Allocates pages from the memory map. 28384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 28484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param Type The type of allocation to perform 28584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param MemoryType The type of memory to turn the allocated pages 28684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng into 28784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param NumberOfPages The number of pages to allocate 28884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param Memory A pointer to receive the base allocated memory 28984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng address 29084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 29184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_INVALID_PARAMETER Parameters violate checking rules defined in spec. 29284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_NOT_FOUND Could not allocate pages match the requirement. 29384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_OUT_OF_RESOURCES No enough pages to allocate. 29484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_SUCCESS Pages successfully allocated. 29584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 29684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 29784edd20bd0756ef5719835498d4283435d6b5e77Star ZengEFI_STATUS 29884edd20bd0756ef5719835498d4283435d6b5e77Star ZengEFIAPI 29984edd20bd0756ef5719835498d4283435d6b5e77Star ZengSmmInternalAllocatePages ( 30084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN EFI_ALLOCATE_TYPE Type, 30184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN EFI_MEMORY_TYPE MemoryType, 30284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN UINTN NumberOfPages, 30384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng OUT EFI_PHYSICAL_ADDRESS *Memory 30484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 30584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 30684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 307e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Frees previous allocated pages. 308e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 309e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Memory Base address of memory being freed 310e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param NumberOfPages The number of pages to free 311e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 312e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_NOT_FOUND Could not find the entry that covers the range 313e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Address not aligned 314e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return EFI_SUCCESS Pages successfully freed. 315e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 316e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 317e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 318e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 319e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmFreePages ( 320e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_PHYSICAL_ADDRESS Memory, 321e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN UINTN NumberOfPages 322e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 323e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 324e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 32584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng Frees previous allocated pages. 32684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 32784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param Memory Base address of memory being freed 32884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param NumberOfPages The number of pages to free 32984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 33084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_NOT_FOUND Could not find the entry that covers the range 33184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_INVALID_PARAMETER Address not aligned 33284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @return EFI_SUCCESS Pages successfully freed. 33384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 33484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 33584edd20bd0756ef5719835498d4283435d6b5e77Star ZengEFI_STATUS 33684edd20bd0756ef5719835498d4283435d6b5e77Star ZengEFIAPI 33784edd20bd0756ef5719835498d4283435d6b5e77Star ZengSmmInternalFreePages ( 33884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN EFI_PHYSICAL_ADDRESS Memory, 33984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN UINTN NumberOfPages 34084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 34184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 34284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 343e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Allocate pool of a particular type. 344e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 345e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param PoolType Type of pool to allocate 346e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Size The amount of pool to allocate 347e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Buffer The address to return a pointer to the allocated 348e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney pool 349e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 350e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER PoolType not valid 351e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_OUT_OF_RESOURCES Size exceeds max pool size or allocation failed. 352e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Pool successfully allocated. 353e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 354e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 355e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 356e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 357e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmAllocatePool ( 358e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_MEMORY_TYPE PoolType, 359e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN UINTN Size, 360e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney OUT VOID **Buffer 361e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 362e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 363e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 36484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng Allocate pool of a particular type. 36584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 36684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param PoolType Type of pool to allocate 36784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param Size The amount of pool to allocate 36884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param Buffer The address to return a pointer to the allocated 36984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng pool 37084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 37184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_INVALID_PARAMETER PoolType not valid 37284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_OUT_OF_RESOURCES Size exceeds max pool size or allocation failed. 37384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_SUCCESS Pool successfully allocated. 37484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 37584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 37684edd20bd0756ef5719835498d4283435d6b5e77Star ZengEFI_STATUS 37784edd20bd0756ef5719835498d4283435d6b5e77Star ZengEFIAPI 37884edd20bd0756ef5719835498d4283435d6b5e77Star ZengSmmInternalAllocatePool ( 37984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN EFI_MEMORY_TYPE PoolType, 38084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN UINTN Size, 38184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng OUT VOID **Buffer 38284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 38384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 38484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 385e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Frees pool. 386e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 387e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Buffer The allocated pool entry to free 388e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 389e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Buffer is not a valid value. 390e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Pool successfully freed. 391e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 392e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 393e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 394e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 395e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmFreePool ( 396e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN VOID *Buffer 397e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 398e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 399e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 40084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng Frees pool. 40184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 40284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param Buffer The allocated pool entry to free 40384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 40484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_INVALID_PARAMETER Buffer is not a valid value. 40584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval EFI_SUCCESS Pool successfully freed. 40684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 40784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 40884edd20bd0756ef5719835498d4283435d6b5e77Star ZengEFI_STATUS 40984edd20bd0756ef5719835498d4283435d6b5e77Star ZengEFIAPI 41084edd20bd0756ef5719835498d4283435d6b5e77Star ZengSmmInternalFreePool ( 41184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN VOID *Buffer 41284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 41384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 41484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 415e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Installs a protocol interface into the boot services environment. 416e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 417e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param UserHandle The handle to install the protocol handler on, 418e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney or NULL if a new handle is to be allocated 419e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol The protocol to add to the handle 420e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param InterfaceType Indicates whether Interface is supplied in 421e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney native form. 422e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Interface The interface for the protocol being added 423e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Notify indicates whether notify the notification list 424e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney for this protocol 425e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 426e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Invalid parameter 427e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_OUT_OF_RESOURCES No enough buffer to allocate 428e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Protocol interface successfully installed 429e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 430e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 431e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 432e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmInstallProtocolInterfaceNotify ( 433e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT EFI_HANDLE *UserHandle, 434e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_GUID *Protocol, 435e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_INTERFACE_TYPE InterfaceType, 436e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN VOID *Interface, 437e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN BOOLEAN Notify 438e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 439e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 440e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 441e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Uninstalls all instances of a protocol:interfacer from a handle. 442e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney If the last protocol interface is remove from the handle, the 443e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney handle is freed. 444e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 445e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param UserHandle The handle to remove the protocol handler from 446e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol The protocol, of protocol:interface, to remove 447e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Interface The interface, of protocol:interface, to remove 448e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 449e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Protocol is NULL. 450e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Protocol interface successfully uninstalled. 451e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 452e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 453e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 454e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 455e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmUninstallProtocolInterface ( 456e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_HANDLE UserHandle, 457e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_GUID *Protocol, 458e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN VOID *Interface 459e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 460e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 461e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 462e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Queries a handle to determine if it supports a specified protocol. 463e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 464e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param UserHandle The handle being queried. 465e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol The published unique identifier of the protocol. 466e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Interface Supplies the address where a pointer to the 467e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney corresponding Protocol Interface is returned. 468e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 469e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return The requested protocol interface for the handle 470e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 471e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 472e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 473e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 474e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmHandleProtocol ( 475e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_HANDLE UserHandle, 476e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_GUID *Protocol, 477e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney OUT VOID **Interface 478e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 479e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 480e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 481e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Add a new protocol notification record for the request protocol. 482e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 483e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol The requested protocol to add the notify 484e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney registration 485e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Function Points to the notification function 486e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Registration Returns the registration record 487e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 488e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Invalid parameter 489e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Successfully returned the registration record 490e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney that has been added 491e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 492e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 493e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 494e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 495e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmRegisterProtocolNotify ( 496e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN CONST EFI_GUID *Protocol, 497e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_SMM_NOTIFY_FN Function, 498e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney OUT VOID **Registration 499e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 500e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 501e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 502e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Locates the requested handle(s) and returns them in Buffer. 503e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 504e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param SearchType The type of search to perform to locate the 505e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney handles 506e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol The protocol to search for 507e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param SearchKey Dependant on SearchType 508e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param BufferSize On input the size of Buffer. On output the 509e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney size of data returned. 510e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Buffer The buffer to return the results in 511e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 512e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_BUFFER_TOO_SMALL Buffer too small, required buffer size is 513e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney returned in BufferSize. 514e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Invalid parameter 515e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Successfully found the requested handle(s) and 516e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney returns them in Buffer. 517e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 518e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 519e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 520e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 521e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmLocateHandle ( 522e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_LOCATE_SEARCH_TYPE SearchType, 523e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_GUID *Protocol OPTIONAL, 524e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN VOID *SearchKey OPTIONAL, 525e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT UINTN *BufferSize, 526e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney OUT EFI_HANDLE *Buffer 527e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 528e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 529e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 530e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Return the first Protocol Interface that matches the Protocol GUID. If 531e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Registration is pasased in return a Protocol Instance that was just add 532e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney to the system. If Retistration is NULL return the first Protocol Interface 533e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney you find. 534e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 535e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol The protocol to search for 536e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Registration Optional Registration Key returned from 537e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney RegisterProtocolNotify() 538e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Interface Return the Protocol interface (instance). 539e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 540e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS If a valid Interface is returned 541e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Invalid parameter 542e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_NOT_FOUND Protocol interface not found 543e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 544e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 545e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 546e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 547e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmLocateProtocol ( 548e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_GUID *Protocol, 549e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN VOID *Registration OPTIONAL, 550e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney OUT VOID **Interface 551e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 552e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 553e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 554e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Manage SMI of a particular type. 555e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 556e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param HandlerType Points to the handler type or NULL for root SMI handlers. 557e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Context Points to an optional context buffer. 558e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param CommBuffer Points to the optional communication buffer. 559e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param CommBufferSize Points to the size of the optional communication buffer. 560e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 561e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Interrupt source was processed successfully but not quiesced. 562e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INTERRUPT_PENDING One or more SMI sources could not be quiesced. 563e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_WARN_INTERRUPT_SOURCE_PENDING Interrupt source was not handled or quiesced. 564e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_WARN_INTERRUPT_SOURCE_QUIESCED Interrupt source was handled and quiesced. 565e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 566e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 567e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 568e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 569e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmiManage ( 570e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN CONST EFI_GUID *HandlerType, 571e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN CONST VOID *Context OPTIONAL, 572e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT VOID *CommBuffer OPTIONAL, 573e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT UINTN *CommBufferSize OPTIONAL 574e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 575e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 576e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 577e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Registers a handler to execute within SMM. 578e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 579e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Handler Handler service funtion pointer. 580e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param HandlerType Points to the handler type or NULL for root SMI handlers. 581e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param DispatchHandle On return, contains a unique handle which can be used to later unregister the handler function. 582e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 583e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Handler register success. 584e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER Handler or DispatchHandle is NULL. 585e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 586e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 587e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 588e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 589e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmiHandlerRegister ( 590e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler, 591e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN CONST EFI_GUID *HandlerType OPTIONAL, 592e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney OUT EFI_HANDLE *DispatchHandle 593e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 594e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 595e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 596e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Unregister a handler in SMM. 597e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 598e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param DispatchHandle The handle that was specified when the handler was registered. 599e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 600e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_SUCCESS Handler function was successfully unregistered. 601e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval EFI_INVALID_PARAMETER DispatchHandle does not refer to a valid handle. 602e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 603e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 604e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 605e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 606e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmiHandlerUnRegister ( 607e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_HANDLE DispatchHandle 608e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 609e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 610e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 611e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney This function is the main entry point for an SMM handler dispatch 612e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney or communicate-based callback. 613e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 614e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). 615e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Context Points to an optional handler context which was specified when the handler was registered. 616e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param CommBuffer A pointer to a collection of data in memory that will 617e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney be conveyed from a non-SMM environment into an SMM environment. 618e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param CommBufferSize The size of the CommBuffer. 619e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 620e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return Status Code 621e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 622e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 623e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 624e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 625e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmDriverDispatchHandler ( 626e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_HANDLE DispatchHandle, 627e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN CONST VOID *Context, OPTIONAL 628e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT VOID *CommBuffer, OPTIONAL 629e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT UINTN *CommBufferSize OPTIONAL 630e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 631e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 632e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 633e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney This function is the main entry point for an SMM handler dispatch 634e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney or communicate-based callback. 635e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 636e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). 637e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Context Points to an optional handler context which was specified when the handler was registered. 638e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param CommBuffer A pointer to a collection of data in memory that will 639e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney be conveyed from a non-SMM environment into an SMM environment. 640e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param CommBufferSize The size of the CommBuffer. 641e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 642e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return Status Code 643e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 644e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 645e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 646e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 647e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmLegacyBootHandler ( 648e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_HANDLE DispatchHandle, 649e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN CONST VOID *Context, OPTIONAL 650e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT VOID *CommBuffer, OPTIONAL 651e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT UINTN *CommBufferSize OPTIONAL 652e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 653e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 654e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 655e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney This function is the main entry point for an SMM handler dispatch 656e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney or communicate-based callback. 657e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 658e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). 659e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Context Points to an optional handler context which was specified when the handler was registered. 660e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param CommBuffer A pointer to a collection of data in memory that will 661e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney be conveyed from a non-SMM environment into an SMM environment. 662e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param CommBufferSize The size of the CommBuffer. 663e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 664e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return Status Code 665e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 666e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 667e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 668e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 669e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmReadyToLockHandler ( 670e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_HANDLE DispatchHandle, 671e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN CONST VOID *Context, OPTIONAL 672e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT VOID *CommBuffer, OPTIONAL 673e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN OUT UINTN *CommBufferSize OPTIONAL 674e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 675e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 676e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 67746ece1ff4f097678ddd3609ccb104a22c0bae469jyao This function is the main entry point for an SMM handler dispatch 67846ece1ff4f097678ddd3609ccb104a22c0bae469jyao or communicate-based callback. 67946ece1ff4f097678ddd3609ccb104a22c0bae469jyao 68046ece1ff4f097678ddd3609ccb104a22c0bae469jyao @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). 68146ece1ff4f097678ddd3609ccb104a22c0bae469jyao @param Context Points to an optional handler context which was specified when the handler was registered. 68246ece1ff4f097678ddd3609ccb104a22c0bae469jyao @param CommBuffer A pointer to a collection of data in memory that will 68346ece1ff4f097678ddd3609ccb104a22c0bae469jyao be conveyed from a non-SMM environment into an SMM environment. 68446ece1ff4f097678ddd3609ccb104a22c0bae469jyao @param CommBufferSize The size of the CommBuffer. 68546ece1ff4f097678ddd3609ccb104a22c0bae469jyao 68646ece1ff4f097678ddd3609ccb104a22c0bae469jyao @return Status Code 68746ece1ff4f097678ddd3609ccb104a22c0bae469jyao 68846ece1ff4f097678ddd3609ccb104a22c0bae469jyao**/ 68946ece1ff4f097678ddd3609ccb104a22c0bae469jyaoEFI_STATUS 69046ece1ff4f097678ddd3609ccb104a22c0bae469jyaoEFIAPI 69146ece1ff4f097678ddd3609ccb104a22c0bae469jyaoSmmEndOfDxeHandler ( 69246ece1ff4f097678ddd3609ccb104a22c0bae469jyao IN EFI_HANDLE DispatchHandle, 69346ece1ff4f097678ddd3609ccb104a22c0bae469jyao IN CONST VOID *Context, OPTIONAL 69446ece1ff4f097678ddd3609ccb104a22c0bae469jyao IN OUT VOID *CommBuffer, OPTIONAL 69546ece1ff4f097678ddd3609ccb104a22c0bae469jyao IN OUT UINTN *CommBufferSize OPTIONAL 69646ece1ff4f097678ddd3609ccb104a22c0bae469jyao ); 69746ece1ff4f097678ddd3609ccb104a22c0bae469jyao 69846ece1ff4f097678ddd3609ccb104a22c0bae469jyao/** 69953ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng This function is the main entry point for an SMM handler dispatch 70053ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng or communicate-based callback. 70153ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng 70253ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). 70353ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @param Context Points to an optional handler context which was specified when the handler was registered. 70453ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @param CommBuffer A pointer to a collection of data in memory that will 70553ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng be conveyed from a non-SMM environment into an SMM environment. 70653ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @param CommBufferSize The size of the CommBuffer. 70753ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng 70853ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @return Status Code 70953ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng 71053ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng**/ 71153ec4d7f98a6af8b00c891c3f13791967e52b6a3Star ZengEFI_STATUS 71253ec4d7f98a6af8b00c891c3f13791967e52b6a3Star ZengEFIAPI 71353ec4d7f98a6af8b00c891c3f13791967e52b6a3Star ZengSmmExitBootServicesHandler ( 71453ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng IN EFI_HANDLE DispatchHandle, 71553ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng IN CONST VOID *Context, OPTIONAL 71653ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng IN OUT VOID *CommBuffer, OPTIONAL 71753ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng IN OUT UINTN *CommBufferSize OPTIONAL 71853ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng ); 71953ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng 72053ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng/** 72153ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng This function is the main entry point for an SMM handler dispatch 72253ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng or communicate-based callback. 72353ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng 72453ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister(). 72553ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @param Context Points to an optional handler context which was specified when the handler was registered. 72653ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @param CommBuffer A pointer to a collection of data in memory that will 72753ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng be conveyed from a non-SMM environment into an SMM environment. 72853ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @param CommBufferSize The size of the CommBuffer. 72953ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng 73053ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng @return Status Code 73153ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng 73253ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng**/ 73353ec4d7f98a6af8b00c891c3f13791967e52b6a3Star ZengEFI_STATUS 73453ec4d7f98a6af8b00c891c3f13791967e52b6a3Star ZengEFIAPI 73553ec4d7f98a6af8b00c891c3f13791967e52b6a3Star ZengSmmReadyToBootHandler ( 73653ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng IN EFI_HANDLE DispatchHandle, 73753ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng IN CONST VOID *Context, OPTIONAL 73853ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng IN OUT VOID *CommBuffer, OPTIONAL 73953ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng IN OUT UINTN *CommBufferSize OPTIONAL 74053ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng ); 74153ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng 74253ec4d7f98a6af8b00c891c3f13791967e52b6a3Star Zeng/** 743e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Place holder function until all the SMM System Table Service are available. 744e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 745e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Arg1 Undefined 746e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Arg2 Undefined 747e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Arg3 Undefined 748e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Arg4 Undefined 749e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Arg5 Undefined 750e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 751e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return EFI_NOT_AVAILABLE_YET 752e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 753e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 754e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFI_STATUS 755e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyEFIAPI 756e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmEfiNotAvailableYetArg5 ( 757e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Arg1, 758e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Arg2, 759e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Arg3, 760e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Arg4, 761e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney UINTN Arg5 762e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 763e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 764e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// 765e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney//Functions used during debug buils 766e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney// 767e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 768e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 769e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Traverse the discovered list for any drivers that were discovered but not loaded 770e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney because the dependency experessions evaluated to false. 771e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 772e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 773e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyVOID 774e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmDisplayDiscoveredNotDispatched ( 775e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney VOID 776e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 777e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 778e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 779e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Add free SMRAM region for use by memory service. 780e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 781e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param MemBase Base address of memory region. 782e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param MemLength Length of the memory region. 783e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Type Memory type. 784e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Attributes Memory region state. 785e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 786e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 787e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyVOID 788e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmAddMemoryRegion ( 789e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_PHYSICAL_ADDRESS MemBase, 790e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN UINT64 MemLength, 791e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_MEMORY_TYPE Type, 792e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN UINT64 Attributes 793e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 794e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 795e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 796e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Finds the protocol entry for the requested protocol. 797e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 798e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol The ID of the protocol 799e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Create Create a new entry if not found 800e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 801e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return Protocol entry 802e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 803e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 804e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyPROTOCOL_ENTRY * 805e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmFindProtocolEntry ( 806e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_GUID *Protocol, 807e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN BOOLEAN Create 808e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 809e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 810e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 811e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Signal event for every protocol in protocol entry. 812e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 813e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Prot Protocol interface 814e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 815e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 816e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyVOID 817e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmNotifyProtocol ( 818e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN PROTOCOL_INTERFACE *Prot 819e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 820e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 821e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 822e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Finds the protocol instance for the requested handle and protocol. 823e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Note: This function doesn't do parameters checking, it's caller's responsibility 824e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney to pass in valid parameters. 825e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 826e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Handle The handle to search the protocol on 827e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol GUID of the protocol 828e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Interface The interface for the protocol being searched 829e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 830e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return Protocol instance (NULL: Not found) 831e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 832e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 833e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyPROTOCOL_INTERFACE * 834e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmFindProtocolInterface ( 835e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN IHANDLE *Handle, 836e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_GUID *Protocol, 837e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN VOID *Interface 838e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 839e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 840e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 841e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney Removes Protocol from the protocol list (but not the handle list). 842e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 843e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Handle The handle to remove protocol on. 844e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Protocol GUID of the protocol to be moved 845e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param Interface The interface of the protocol 846e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 847e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @return Protocol Entry 848e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 849e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 850e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyPROTOCOL_INTERFACE * 851e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmRemoveInterfaceFromProtocol ( 852e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN IHANDLE *Handle, 853e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_GUID *Protocol, 854e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN VOID *Interface 855e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 856e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 857e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney/** 858e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney This is the POSTFIX version of the dependency evaluator. This code does 859e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney not need to handle Before or After, as it is not valid to call this 860fa542a1e770ac651b7a2f9e6650210465c824f7cmdkinney routine in this case. POSTFIX means all the math is done on top of the stack. 861e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 862e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @param DriverEntry DriverEntry element to update. 863e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 864e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval TRUE If driver is ready to run. 865e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney @retval FALSE If driver is not ready to run or some fatal error 866e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney was found. 867e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 868e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney**/ 869e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneyBOOLEAN 870e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinneySmmIsSchedulable ( 871e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney IN EFI_SMM_DRIVER_ENTRY *DriverEntry 872e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney ); 873e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney 87484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng// 87584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng// SmramProfile 87684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng// 87784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 87884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 87984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng Initialize SMRAM profile. 88084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 88184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 88284edd20bd0756ef5719835498d4283435d6b5e77Star ZengVOID 88384edd20bd0756ef5719835498d4283435d6b5e77Star ZengSmramProfileInit ( 88484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng VOID 88584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 88684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 88784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 88884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng Register SMM image to SMRAM profile. 88984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 89084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param DriverEntry SMM image info. 89184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param RegisterToDxe Register image to DXE. 89284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 89384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval TRUE Register success. 89484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval FALSE Register fail. 89584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 89684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 89784edd20bd0756ef5719835498d4283435d6b5e77Star ZengBOOLEAN 89884edd20bd0756ef5719835498d4283435d6b5e77Star ZengRegisterSmramProfileImage ( 89984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN EFI_SMM_DRIVER_ENTRY *DriverEntry, 90084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN BOOLEAN RegisterToDxe 90184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 90284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 90384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 90484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng Unregister image from SMRAM profile. 90584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 90684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param DriverEntry SMM image info. 90784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param UnregisterToDxe Unregister image from DXE. 90884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 90984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval TRUE Unregister success. 91084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval FALSE Unregister fail. 91184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 91284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 91384edd20bd0756ef5719835498d4283435d6b5e77Star ZengBOOLEAN 91484edd20bd0756ef5719835498d4283435d6b5e77Star ZengUnregisterSmramProfileImage ( 91584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN EFI_SMM_DRIVER_ENTRY *DriverEntry, 91684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN BOOLEAN UnregisterToDxe 91784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 91884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 91984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 92084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng Update SMRAM profile information. 92184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 92284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param CallerAddress Address of caller who call Allocate or Free. 92384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param Action This Allocate or Free action. 92484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param MemoryType Memory type. 92584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param Size Buffer size. 92684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @param Buffer Buffer address. 92784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 92884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval TRUE Profile udpate success. 92984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng @retval FALSE Profile update fail. 93084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 93184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 93284edd20bd0756ef5719835498d4283435d6b5e77Star ZengBOOLEAN 93384edd20bd0756ef5719835498d4283435d6b5e77Star ZengSmmCoreUpdateProfile ( 93484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN EFI_PHYSICAL_ADDRESS CallerAddress, 93584edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN MEMORY_PROFILE_ACTION Action, 93684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN EFI_MEMORY_TYPE MemoryType, // Valid for AllocatePages/AllocatePool 93784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN UINTN Size, // Valid for AllocatePages/FreePages/AllocatePool 93884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng IN VOID *Buffer 93984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 94084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 94184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 94284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng Register SMRAM profile handler. 94384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 94484edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 94584edd20bd0756ef5719835498d4283435d6b5e77Star ZengVOID 94684edd20bd0756ef5719835498d4283435d6b5e77Star ZengRegisterSmramProfileHandler ( 94784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng VOID 94884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 94984edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 95084edd20bd0756ef5719835498d4283435d6b5e77Star Zeng/** 95184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng SMRAM profile ready to lock callback function. 95284edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 95384edd20bd0756ef5719835498d4283435d6b5e77Star Zeng**/ 95484edd20bd0756ef5719835498d4283435d6b5e77Star ZengVOID 95584edd20bd0756ef5719835498d4283435d6b5e77Star ZengSmramProfileReadyToLock ( 95684edd20bd0756ef5719835498d4283435d6b5e77Star Zeng VOID 95784edd20bd0756ef5719835498d4283435d6b5e77Star Zeng ); 95884edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 95984edd20bd0756ef5719835498d4283435d6b5e77Star Zengextern UINTN mFullSmramRangeCount; 96084edd20bd0756ef5719835498d4283435d6b5e77Star Zengextern EFI_SMRAM_DESCRIPTOR *mFullSmramRanges; 96184edd20bd0756ef5719835498d4283435d6b5e77Star Zeng 96263aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 96363aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// Page management 96463aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 96563aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 96663aa86b0706929df73dca614f87e5b99bb58c48bStar Zengtypedef struct { 96763aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng LIST_ENTRY Link; 96863aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng UINTN NumberOfPages; 96963aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng} FREE_PAGE_LIST; 97063aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 97163aa86b0706929df73dca614f87e5b99bb58c48bStar Zengextern LIST_ENTRY mSmmMemoryMap; 97263aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 97363aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 97463aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// Pool management 97563aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 97663aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 97763aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 97863aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// MIN_POOL_SHIFT must not be less than 5 97963aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 98063aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng#define MIN_POOL_SHIFT 6 98163aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng#define MIN_POOL_SIZE (1 << MIN_POOL_SHIFT) 98263aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 98363aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 98463aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// MAX_POOL_SHIFT must not be less than EFI_PAGE_SHIFT - 1 98563aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 98663aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng#define MAX_POOL_SHIFT (EFI_PAGE_SHIFT - 1) 98763aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng#define MAX_POOL_SIZE (1 << MAX_POOL_SHIFT) 98863aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 98963aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 99063aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// MAX_POOL_INDEX are calculated by maximum and minimum pool sizes 99163aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng// 99263aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng#define MAX_POOL_INDEX (MAX_POOL_SHIFT - MIN_POOL_SHIFT + 1) 99363aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 99463aa86b0706929df73dca614f87e5b99bb58c48bStar Zengtypedef struct { 99563aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng UINTN Size; 99663aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng BOOLEAN Available; 99763aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng} POOL_HEADER; 99863aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 99963aa86b0706929df73dca614f87e5b99bb58c48bStar Zengtypedef struct { 100063aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng POOL_HEADER Header; 100163aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng LIST_ENTRY Link; 100263aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng} FREE_POOL_HEADER; 100363aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 100463aa86b0706929df73dca614f87e5b99bb58c48bStar Zengextern LIST_ENTRY mSmmPoolLists[MAX_POOL_INDEX]; 100563aa86b0706929df73dca614f87e5b99bb58c48bStar Zeng 1006e42e94041f7c71a5e2e57154bd568f3c14fd6eecmdkinney#endif 1007