5 UEFI Services

This chapter focuses on the UEFI services that apply to the implementation of UEFI drivers. This includes descriptions of those services, along with code examples, that demonstrate how a UEFI driver typically uses those services. The EDK II provides a number of library functions that simplify the use of UEFI services as well as UEFI driver improvements in maintainability, portability, readability, robustness, and size. Additional descriptions and code examples using EDK II library functions also appear where applicable.

The UEFI Boot Services and UEFI Runtime Services available to UEFI Drivers fall into three general areas:

  • Commonly used services

  • Rarely used services

  • Services that should not be used from a UEFI driver

The full function prototypes and descriptions for each service, and their arguments, are available in the Boot Services and Runtime Services chapters of the UEFI Specification. The full function prototypes and descriptions of the EDK II library functions, and their arguments, are available in the EDK II MdePkg Package Document and the EDK II MdeModulePkg Package Document.

The following table lists alphabetically all UEFI Boot and Runtime Services.

Table 17-Alphabetical listing of UEFI services

Service

Type

Service Type

AllocatePool()

Boot

Memory Allocation

AllocatePages()

Boot

Memory Allocation

CalculateCrc32()

Boot

Miscellaneous

CheckEvent()

Boot

Event

CloseEvent()

Boot

Event

CloseProtocol()

Boot

Protocol Handler

ConnectController()

Boot

Protocol Handler

ConvertPointer()

Runtime

Miscellaneous

CopyMem()

Boot

Miscellaneous

CreateEvent()

Boot

Event

CreateEventEx()

Boot

Event

DisconnectController()

Boot

Protocol Handler

Exit()

Boot

Special

ExitBootServices()

Boot

Special

FreePages()

Boot

Memory Allocation

FreePool()

Boot

Memory Allocation

GetMemoryMap()

Boot

Memory Allocation

GetNextMonotonicCount()

Boot

Special

GetNextHighMonotonicCount()

Runtime

Special

GetNextVariableName()

Runtime

Variable

GetTime()

Runtime

Time-related

GetVariable()

Runtime

Variable

GetWakeupTime()

Runtime

Time-related

HandleProtocol()

Boot

Protocol Handler

InstallConfigurationTable()

Boot

Miscellaneous

InstallMultipleProtocolInterfaces()

Boot

Protocol Handler

InstallProtocolInterface()

Boot

Protocol Handler

LoadImage()

Boot

Image

LocateDevicePath()

Boot

Protocol Handler

LocateHandle()

Boot

Protocol Handler

LocateHandleBuffer()

Boot

Protocol Handler

LocateProtocol()

Boot

Protocol Handler

OpenProtocol()

Boot

Protocol Handler

OpenProtocolInformation()

Boot

Protocol Handler

ProtocolsPerHandle()

Boot

Protocol Handler

QueryCapsuleCapabilities()

Runtime

Special

QueryVariableInfo()

Runtime

Variable

RaiseTPL()

Boot

Task Priority

RegisterProtocolNotify()

Boot

Protocol Handler

ReinstallProtocolInterface()

Boot

Protocol Handler

ResetSystem()

Runtime

Special

RestoreTPL()

Boot

Task Priority

SetMem()

Boot

Miscellaneous

SetTime()

Runtime

Time-related

SetTimer()

Boot

Time-related

SetVariable()

Runtime

Variable

SetVirtualAddressMap()

Runtime

Special

SetWakeupTime()

Runtime

Time-related

SetWatchDogTimer()

Boot

Time-related

StartImage()

Boot

Image

SignalEvent()

Boot

Event

Stall()

Boot

Time-related

UninstallMultipleProtocolInterfaces()

Boot

Protocol Handler

UninstallProtocolInterface()

Boot

Protocol Handler

UnloadImage()

Boot

Image

UpdateCapsule()

Runtime

Special

WaitForEvent()

Boot

Event