36 return EFI_INVALID_PARAMETER;
39 if (Handle->Signature != EFI_HANDLE_SIGNATURE) {
40 return EFI_INVALID_PARAMETER;
70 for (Link = mProtocolDatabase.ForwardLink;
71 Link != &mProtocolDatabase;
72 Link = Link->ForwardLink)
88 if ((ProtEntry ==
NULL) && Create) {
90 if (ProtEntry !=
NULL) {
94 ProtEntry->Signature = PROTOCOL_ENTRY_SIGNATURE;
138 if (ProtEntry !=
NULL) {
142 for (Link = Handle->Protocols.ForwardLink; Link != &Handle->Protocols; Link = Link->ForwardLink) {
220 VOID *ExistingInterface;
226 if ((UserHandle ==
NULL) || (Protocol ==
NULL)) {
227 return EFI_INVALID_PARAMETER;
231 return EFI_INVALID_PARAMETER;
237 DEBUG ((DEBUG_LOAD | DEBUG_INFO,
"SmmInstallProtocolInterface: %g %p\n", Protocol, Interface));
239 Status = EFI_OUT_OF_RESOURCES;
243 if (*UserHandle !=
NULL) {
245 if (!EFI_ERROR (Status)) {
246 return EFI_INVALID_PARAMETER;
254 if (ProtEntry ==
NULL) {
263 Status = EFI_OUT_OF_RESOURCES;
270 Handle = (
IHANDLE *)*UserHandle;
271 if (Handle ==
NULL) {
273 if (Handle ==
NULL) {
274 Status = EFI_OUT_OF_RESOURCES;
281 Handle->Signature = EFI_HANDLE_SIGNATURE;
291 if (EFI_ERROR (Status)) {
292 DEBUG ((DEBUG_ERROR,
"SmmInstallProtocolInterface: input handle at 0x%x is invalid\n", Handle));
305 Prot->Signature = PROTOCOL_INTERFACE_SIGNATURE;
332 if (!EFI_ERROR (Status)) {
336 *UserHandle = Handle;
345 DEBUG ((DEBUG_ERROR,
"SmmInstallProtocolInterface: %g %p failed with %r\n", Protocol, Interface, Status));
379 if (Protocol ==
NULL) {
380 return EFI_INVALID_PARAMETER;
387 if (EFI_ERROR (Status)) {
396 return EFI_NOT_FOUND;
402 Status = EFI_NOT_FOUND;
403 Handle = (
IHANDLE *)UserHandle;
424 Handle->Signature = 0;
454 if (EFI_ERROR (Status)) {
458 Handle = (
IHANDLE *)UserHandle;
463 for (Link = Handle->
Protocols.ForwardLink; Link != &Handle->
Protocols; Link = Link->ForwardLink) {
503 if (Protocol ==
NULL) {
504 return EFI_INVALID_PARAMETER;
510 if (Interface ==
NULL) {
511 return EFI_INVALID_PARAMETER;
520 if (EFI_ERROR (Status)) {
529 return EFI_UNSUPPORTED;
BOOLEAN EFIAPI IsListEmpty(IN CONST LIST_ENTRY *ListHead)
LIST_ENTRY *EFIAPI InsertHeadList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
#define INITIALIZE_LIST_HEAD_VARIABLE(ListHead)
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
GUID *EFIAPI CopyGuid(OUT GUID *DestinationGuid, IN CONST GUID *SourceGuid)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
PROTOCOL_INTERFACE * SmmFindProtocolInterface(IN IHANDLE *Handle, IN EFI_GUID *Protocol, IN VOID *Interface)
EFI_STATUS EFIAPI SmmUninstallProtocolInterface(IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, IN VOID *Interface)
EFI_STATUS EFIAPI SmmHandleProtocol(IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol, OUT VOID **Interface)
EFI_STATUS SmmValidateHandle(IN EFI_HANDLE UserHandle)
EFI_STATUS EFIAPI SmmInstallProtocolInterface(IN OUT EFI_HANDLE *UserHandle, IN EFI_GUID *Protocol, IN EFI_INTERFACE_TYPE InterfaceType, IN VOID *Interface)
EFI_STATUS SmmInstallProtocolInterfaceNotify(IN OUT EFI_HANDLE *UserHandle, IN EFI_GUID *Protocol, IN EFI_INTERFACE_TYPE InterfaceType, IN VOID *Interface, IN BOOLEAN Notify)
PROTOCOL_INTERFACE * SmmGetProtocolInterface(IN EFI_HANDLE UserHandle, IN EFI_GUID *Protocol)
PROTOCOL_ENTRY * SmmFindProtocolEntry(IN EFI_GUID *Protocol, IN BOOLEAN Create)
VOID SmmNotifyProtocol(IN PROTOCOL_INTERFACE *Prot)
PROTOCOL_INTERFACE * SmmRemoveInterfaceFromProtocol(IN IHANDLE *Handle, IN EFI_GUID *Protocol, IN VOID *Interface)
#define DEBUG(Expression)
#define CR(Record, TYPE, Field, TestSignature)
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
LIST_ENTRY AllHandles
All handles list of IHANDLE.
LIST_ENTRY Protocols
List of PROTOCOL_INTERFACE's for this handle.
LIST_ENTRY Notify
Registerd notification handlers.
LIST_ENTRY AllEntries
Link Entry inserted to mProtocolDatabase.
EFI_GUID ProtocolID
ID of the protocol.
LIST_ENTRY Protocols
All protocol interfaces.
LIST_ENTRY Link
Link on IHANDLE.Protocols.
IHANDLE * Handle
Back pointer.
PROTOCOL_ENTRY * Protocol
The protocol ID.
VOID * Interface
The interface value.
LIST_ENTRY ByProtocol
Link on PROTOCOL_ENTRY.Protocols.