1*1370a723SSascha Wildner /** @file 2*1370a723SSascha Wildner Include file that supports UEFI. 3*1370a723SSascha Wildner 4*1370a723SSascha Wildner This include file must contain things defined in the UEFI 2.7 specification. 5*1370a723SSascha Wildner If a code construct is defined in the UEFI 2.7 specification it must be included 6*1370a723SSascha Wildner by this include file. 7*1370a723SSascha Wildner 8*1370a723SSascha Wildner Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR> 9*1370a723SSascha Wildner Portions Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR> 10*1370a723SSascha Wildner Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> 11*1370a723SSascha Wildner 12*1370a723SSascha Wildner SPDX-License-Identifier: BSD-2-Clause-Patent 13*1370a723SSascha Wildner 14*1370a723SSascha Wildner **/ 15*1370a723SSascha Wildner 16*1370a723SSascha Wildner #ifndef __UEFI_SPEC_H__ 17*1370a723SSascha Wildner #define __UEFI_SPEC_H__ 18*1370a723SSascha Wildner 19*1370a723SSascha Wildner #include <Uefi/UefiMultiPhase.h> 20*1370a723SSascha Wildner 21*1370a723SSascha Wildner #include <Protocol/DevicePath.h> 22*1370a723SSascha Wildner #include <Protocol/SimpleTextIn.h> 23*1370a723SSascha Wildner #include <Protocol/SimpleTextInEx.h> 24*1370a723SSascha Wildner #include <Protocol/SimpleTextOut.h> 25*1370a723SSascha Wildner 26*1370a723SSascha Wildner /// 27*1370a723SSascha Wildner /// Enumeration of EFI memory allocation types. 28*1370a723SSascha Wildner /// 29*1370a723SSascha Wildner typedef enum { 30*1370a723SSascha Wildner /// 31*1370a723SSascha Wildner /// Allocate any available range of pages that satisfies the request. 32*1370a723SSascha Wildner /// 33*1370a723SSascha Wildner AllocateAnyPages, 34*1370a723SSascha Wildner /// 35*1370a723SSascha Wildner /// Allocate any available range of pages whose uppermost address is less than 36*1370a723SSascha Wildner /// or equal to a specified maximum address. 37*1370a723SSascha Wildner /// 38*1370a723SSascha Wildner AllocateMaxAddress, 39*1370a723SSascha Wildner /// 40*1370a723SSascha Wildner /// Allocate pages at a specified address. 41*1370a723SSascha Wildner /// 42*1370a723SSascha Wildner AllocateAddress, 43*1370a723SSascha Wildner /// 44*1370a723SSascha Wildner /// Maximum enumeration value that may be used for bounds checking. 45*1370a723SSascha Wildner /// 46*1370a723SSascha Wildner MaxAllocateType 47*1370a723SSascha Wildner } EFI_ALLOCATE_TYPE; 48*1370a723SSascha Wildner 49*1370a723SSascha Wildner // 50*1370a723SSascha Wildner // Bit definitions for EFI_TIME.Daylight 51*1370a723SSascha Wildner // 52*1370a723SSascha Wildner #define EFI_TIME_ADJUST_DAYLIGHT 0x01 53*1370a723SSascha Wildner #define EFI_TIME_IN_DAYLIGHT 0x02 54*1370a723SSascha Wildner 55*1370a723SSascha Wildner /// 56*1370a723SSascha Wildner /// Value definition for EFI_TIME.TimeZone. 57*1370a723SSascha Wildner /// 58*1370a723SSascha Wildner #define EFI_UNSPECIFIED_TIMEZONE 0x07FF 59*1370a723SSascha Wildner 60*1370a723SSascha Wildner // 61*1370a723SSascha Wildner // Memory cacheability attributes 62*1370a723SSascha Wildner // 63*1370a723SSascha Wildner #define EFI_MEMORY_UC 0x0000000000000001ULL 64*1370a723SSascha Wildner #define EFI_MEMORY_WC 0x0000000000000002ULL 65*1370a723SSascha Wildner #define EFI_MEMORY_WT 0x0000000000000004ULL 66*1370a723SSascha Wildner #define EFI_MEMORY_WB 0x0000000000000008ULL 67*1370a723SSascha Wildner #define EFI_MEMORY_UCE 0x0000000000000010ULL 68*1370a723SSascha Wildner // 69*1370a723SSascha Wildner // Physical memory protection attributes 70*1370a723SSascha Wildner // 71*1370a723SSascha Wildner // Note: UEFI spec 2.5 and following: use EFI_MEMORY_RO as write-protected physical memory 72*1370a723SSascha Wildner // protection attribute. Also, EFI_MEMORY_WP means cacheability attribute. 73*1370a723SSascha Wildner // 74*1370a723SSascha Wildner #define EFI_MEMORY_WP 0x0000000000001000ULL 75*1370a723SSascha Wildner #define EFI_MEMORY_RP 0x0000000000002000ULL 76*1370a723SSascha Wildner #define EFI_MEMORY_XP 0x0000000000004000ULL 77*1370a723SSascha Wildner #define EFI_MEMORY_RO 0x0000000000020000ULL 78*1370a723SSascha Wildner // 79*1370a723SSascha Wildner // Physical memory persistence attribute. 80*1370a723SSascha Wildner // The memory region supports byte-addressable non-volatility. 81*1370a723SSascha Wildner // 82*1370a723SSascha Wildner #define EFI_MEMORY_NV 0x0000000000008000ULL 83*1370a723SSascha Wildner // 84*1370a723SSascha Wildner // The memory region provides higher reliability relative to other memory in the system. 85*1370a723SSascha Wildner // If all memory has the same reliability, then this bit is not used. 86*1370a723SSascha Wildner // 87*1370a723SSascha Wildner #define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000ULL 88*1370a723SSascha Wildner 89*1370a723SSascha Wildner // 90*1370a723SSascha Wildner // Note: UEFI spec 2.8 and following: 91*1370a723SSascha Wildner // 92*1370a723SSascha Wildner // Specific-purpose memory (SPM). The memory is earmarked for 93*1370a723SSascha Wildner // specific purposes such as for specific device drivers or applications. 94*1370a723SSascha Wildner // The SPM attribute serves as a hint to the OS to avoid allocating this 95*1370a723SSascha Wildner // memory for core OS data or code that can not be relocated. 96*1370a723SSascha Wildner // 97*1370a723SSascha Wildner #define EFI_MEMORY_SP 0x0000000000040000ULL 98*1370a723SSascha Wildner // 99*1370a723SSascha Wildner // If this flag is set, the memory region is capable of being 100*1370a723SSascha Wildner // protected with the CPU's memory cryptographic 101*1370a723SSascha Wildner // capabilities. If this flag is clear, the memory region is not 102*1370a723SSascha Wildner // capable of being protected with the CPU's memory 103*1370a723SSascha Wildner // cryptographic capabilities or the CPU does not support CPU 104*1370a723SSascha Wildner // memory cryptographic capabilities. 105*1370a723SSascha Wildner // 106*1370a723SSascha Wildner #define EFI_MEMORY_CPU_CRYPTO 0x0000000000080000ULL 107*1370a723SSascha Wildner 108*1370a723SSascha Wildner // 109*1370a723SSascha Wildner // Runtime memory attribute 110*1370a723SSascha Wildner // 111*1370a723SSascha Wildner #define EFI_MEMORY_RUNTIME 0x8000000000000000ULL 112*1370a723SSascha Wildner 113*1370a723SSascha Wildner // 114*1370a723SSascha Wildner // Attributes bitmasks, grouped by type 115*1370a723SSascha Wildner // 116*1370a723SSascha Wildner #define EFI_CACHE_ATTRIBUTE_MASK (EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT | EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_WP) 117*1370a723SSascha Wildner #define EFI_MEMORY_ACCESS_MASK (EFI_MEMORY_RP | EFI_MEMORY_XP | EFI_MEMORY_RO) 118*1370a723SSascha Wildner #define EFI_MEMORY_ATTRIBUTE_MASK (EFI_MEMORY_ACCESS_MASK | EFI_MEMORY_SP | EFI_MEMORY_CPU_CRYPTO) 119*1370a723SSascha Wildner 120*1370a723SSascha Wildner /// 121*1370a723SSascha Wildner /// Memory descriptor version number. 122*1370a723SSascha Wildner /// 123*1370a723SSascha Wildner #define EFI_MEMORY_DESCRIPTOR_VERSION 1 124*1370a723SSascha Wildner 125*1370a723SSascha Wildner /// 126*1370a723SSascha Wildner /// Definition of an EFI memory descriptor. 127*1370a723SSascha Wildner /// 128*1370a723SSascha Wildner typedef struct { 129*1370a723SSascha Wildner /// 130*1370a723SSascha Wildner /// Type of the memory region. 131*1370a723SSascha Wildner /// Type EFI_MEMORY_TYPE is defined in the 132*1370a723SSascha Wildner /// AllocatePages() function description. 133*1370a723SSascha Wildner /// 134*1370a723SSascha Wildner UINT32 Type; 135*1370a723SSascha Wildner /// 136*1370a723SSascha Wildner /// Physical address of the first byte in the memory region. PhysicalStart must be 137*1370a723SSascha Wildner /// aligned on a 4 KiB boundary, and must not be above 0xfffffffffffff000. Type 138*1370a723SSascha Wildner /// EFI_PHYSICAL_ADDRESS is defined in the AllocatePages() function description 139*1370a723SSascha Wildner /// 140*1370a723SSascha Wildner EFI_PHYSICAL_ADDRESS PhysicalStart; 141*1370a723SSascha Wildner /// 142*1370a723SSascha Wildner /// Virtual address of the first byte in the memory region. 143*1370a723SSascha Wildner /// VirtualStart must be aligned on a 4 KiB boundary, 144*1370a723SSascha Wildner /// and must not be above 0xfffffffffffff000. 145*1370a723SSascha Wildner /// 146*1370a723SSascha Wildner EFI_VIRTUAL_ADDRESS VirtualStart; 147*1370a723SSascha Wildner /// 148*1370a723SSascha Wildner /// NumberOfPagesNumber of 4 KiB pages in the memory region. 149*1370a723SSascha Wildner /// NumberOfPages must not be 0, and must not be any value 150*1370a723SSascha Wildner /// that would represent a memory page with a start address, 151*1370a723SSascha Wildner /// either physical or virtual, above 0xfffffffffffff000. 152*1370a723SSascha Wildner /// 153*1370a723SSascha Wildner UINT64 NumberOfPages; 154*1370a723SSascha Wildner /// 155*1370a723SSascha Wildner /// Attributes of the memory region that describe the bit mask of capabilities 156*1370a723SSascha Wildner /// for that memory region, and not necessarily the current settings for that 157*1370a723SSascha Wildner /// memory region. 158*1370a723SSascha Wildner /// 159*1370a723SSascha Wildner UINT64 Attribute; 160*1370a723SSascha Wildner } EFI_MEMORY_DESCRIPTOR; 161*1370a723SSascha Wildner 162*1370a723SSascha Wildner /** 163*1370a723SSascha Wildner Allocates memory pages from the system. 164*1370a723SSascha Wildner 165*1370a723SSascha Wildner @param[in] Type The type of allocation to perform. 166*1370a723SSascha Wildner @param[in] MemoryType The type of memory to allocate. 167*1370a723SSascha Wildner MemoryType values in the range 0x70000000..0x7FFFFFFF 168*1370a723SSascha Wildner are reserved for OEM use. MemoryType values in the range 169*1370a723SSascha Wildner 0x80000000..0xFFFFFFFF are reserved for use by UEFI OS loaders 170*1370a723SSascha Wildner that are provided by operating system vendors. 171*1370a723SSascha Wildner @param[in] Pages The number of contiguous 4 KB pages to allocate. 172*1370a723SSascha Wildner @param[in, out] Memory The pointer to a physical address. On input, the way in which the address is 173*1370a723SSascha Wildner used depends on the value of Type. 174*1370a723SSascha Wildner 175*1370a723SSascha Wildner @retval EFI_SUCCESS The requested pages were allocated. 176*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER 1) Type is not AllocateAnyPages or 177*1370a723SSascha Wildner AllocateMaxAddress or AllocateAddress. 178*1370a723SSascha Wildner 2) MemoryType is in the range 179*1370a723SSascha Wildner EfiMaxMemoryType..0x6FFFFFFF. 180*1370a723SSascha Wildner 3) Memory is NULL. 181*1370a723SSascha Wildner 4) MemoryType is EfiPersistentMemory. 182*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES The pages could not be allocated. 183*1370a723SSascha Wildner @retval EFI_NOT_FOUND The requested pages could not be found. 184*1370a723SSascha Wildner 185*1370a723SSascha Wildner **/ 186*1370a723SSascha Wildner typedef 187*1370a723SSascha Wildner EFI_STATUS 188*1370a723SSascha Wildner (EFIAPI *EFI_ALLOCATE_PAGES)( 189*1370a723SSascha Wildner IN EFI_ALLOCATE_TYPE Type, 190*1370a723SSascha Wildner IN EFI_MEMORY_TYPE MemoryType, 191*1370a723SSascha Wildner IN UINTN Pages, 192*1370a723SSascha Wildner IN OUT EFI_PHYSICAL_ADDRESS *Memory 193*1370a723SSascha Wildner ); 194*1370a723SSascha Wildner 195*1370a723SSascha Wildner /** 196*1370a723SSascha Wildner Frees memory pages. 197*1370a723SSascha Wildner 198*1370a723SSascha Wildner @param[in] Memory The base physical address of the pages to be freed. 199*1370a723SSascha Wildner @param[in] Pages The number of contiguous 4 KB pages to free. 200*1370a723SSascha Wildner 201*1370a723SSascha Wildner @retval EFI_SUCCESS The requested pages were freed. 202*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Memory is not a page-aligned address or Pages is invalid. 203*1370a723SSascha Wildner @retval EFI_NOT_FOUND The requested memory pages were not allocated with 204*1370a723SSascha Wildner AllocatePages(). 205*1370a723SSascha Wildner 206*1370a723SSascha Wildner **/ 207*1370a723SSascha Wildner typedef 208*1370a723SSascha Wildner EFI_STATUS 209*1370a723SSascha Wildner (EFIAPI *EFI_FREE_PAGES)( 210*1370a723SSascha Wildner IN EFI_PHYSICAL_ADDRESS Memory, 211*1370a723SSascha Wildner IN UINTN Pages 212*1370a723SSascha Wildner ); 213*1370a723SSascha Wildner 214*1370a723SSascha Wildner /** 215*1370a723SSascha Wildner Returns the current memory map. 216*1370a723SSascha Wildner 217*1370a723SSascha Wildner @param[in, out] MemoryMapSize A pointer to the size, in bytes, of the MemoryMap buffer. 218*1370a723SSascha Wildner On input, this is the size of the buffer allocated by the caller. 219*1370a723SSascha Wildner On output, it is the size of the buffer returned by the firmware if 220*1370a723SSascha Wildner the buffer was large enough, or the size of the buffer needed to contain 221*1370a723SSascha Wildner the map if the buffer was too small. 222*1370a723SSascha Wildner @param[out] MemoryMap A pointer to the buffer in which firmware places the current memory 223*1370a723SSascha Wildner map. 224*1370a723SSascha Wildner @param[out] MapKey A pointer to the location in which firmware returns the key for the 225*1370a723SSascha Wildner current memory map. 226*1370a723SSascha Wildner @param[out] DescriptorSize A pointer to the location in which firmware returns the size, in bytes, of 227*1370a723SSascha Wildner an individual EFI_MEMORY_DESCRIPTOR. 228*1370a723SSascha Wildner @param[out] DescriptorVersion A pointer to the location in which firmware returns the version number 229*1370a723SSascha Wildner associated with the EFI_MEMORY_DESCRIPTOR. 230*1370a723SSascha Wildner 231*1370a723SSascha Wildner @retval EFI_SUCCESS The memory map was returned in the MemoryMap buffer. 232*1370a723SSascha Wildner @retval EFI_BUFFER_TOO_SMALL The MemoryMap buffer was too small. The current buffer size 233*1370a723SSascha Wildner needed to hold the memory map is returned in MemoryMapSize. 234*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER 1) MemoryMapSize is NULL. 235*1370a723SSascha Wildner 2) The MemoryMap buffer is not too small and MemoryMap is 236*1370a723SSascha Wildner NULL. 237*1370a723SSascha Wildner 238*1370a723SSascha Wildner **/ 239*1370a723SSascha Wildner typedef 240*1370a723SSascha Wildner EFI_STATUS 241*1370a723SSascha Wildner (EFIAPI *EFI_GET_MEMORY_MAP)( 242*1370a723SSascha Wildner IN OUT UINTN *MemoryMapSize, 243*1370a723SSascha Wildner OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, 244*1370a723SSascha Wildner OUT UINTN *MapKey, 245*1370a723SSascha Wildner OUT UINTN *DescriptorSize, 246*1370a723SSascha Wildner OUT UINT32 *DescriptorVersion 247*1370a723SSascha Wildner ); 248*1370a723SSascha Wildner 249*1370a723SSascha Wildner /** 250*1370a723SSascha Wildner Allocates pool memory. 251*1370a723SSascha Wildner 252*1370a723SSascha Wildner @param[in] PoolType The type of pool to allocate. 253*1370a723SSascha Wildner MemoryType values in the range 0x70000000..0x7FFFFFFF 254*1370a723SSascha Wildner are reserved for OEM use. MemoryType values in the range 255*1370a723SSascha Wildner 0x80000000..0xFFFFFFFF are reserved for use by UEFI OS loaders 256*1370a723SSascha Wildner that are provided by operating system vendors. 257*1370a723SSascha Wildner @param[in] Size The number of bytes to allocate from the pool. 258*1370a723SSascha Wildner @param[out] Buffer A pointer to a pointer to the allocated buffer if the call succeeds; 259*1370a723SSascha Wildner undefined otherwise. 260*1370a723SSascha Wildner 261*1370a723SSascha Wildner @retval EFI_SUCCESS The requested number of bytes was allocated. 262*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES The pool requested could not be allocated. 263*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Buffer is NULL. 264*1370a723SSascha Wildner PoolType is in the range EfiMaxMemoryType..0x6FFFFFFF. 265*1370a723SSascha Wildner PoolType is EfiPersistentMemory. 266*1370a723SSascha Wildner 267*1370a723SSascha Wildner **/ 268*1370a723SSascha Wildner typedef 269*1370a723SSascha Wildner EFI_STATUS 270*1370a723SSascha Wildner (EFIAPI *EFI_ALLOCATE_POOL)( 271*1370a723SSascha Wildner IN EFI_MEMORY_TYPE PoolType, 272*1370a723SSascha Wildner IN UINTN Size, 273*1370a723SSascha Wildner OUT VOID **Buffer 274*1370a723SSascha Wildner ); 275*1370a723SSascha Wildner 276*1370a723SSascha Wildner /** 277*1370a723SSascha Wildner Returns pool memory to the system. 278*1370a723SSascha Wildner 279*1370a723SSascha Wildner @param[in] Buffer The pointer to the buffer to free. 280*1370a723SSascha Wildner 281*1370a723SSascha Wildner @retval EFI_SUCCESS The memory was returned to the system. 282*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Buffer was invalid. 283*1370a723SSascha Wildner 284*1370a723SSascha Wildner **/ 285*1370a723SSascha Wildner typedef 286*1370a723SSascha Wildner EFI_STATUS 287*1370a723SSascha Wildner (EFIAPI *EFI_FREE_POOL)( 288*1370a723SSascha Wildner IN VOID *Buffer 289*1370a723SSascha Wildner ); 290*1370a723SSascha Wildner 291*1370a723SSascha Wildner /** 292*1370a723SSascha Wildner Changes the runtime addressing mode of EFI firmware from physical to virtual. 293*1370a723SSascha Wildner 294*1370a723SSascha Wildner @param[in] MemoryMapSize The size in bytes of VirtualMap. 295*1370a723SSascha Wildner @param[in] DescriptorSize The size in bytes of an entry in the VirtualMap. 296*1370a723SSascha Wildner @param[in] DescriptorVersion The version of the structure entries in VirtualMap. 297*1370a723SSascha Wildner @param[in] VirtualMap An array of memory descriptors which contain new virtual 298*1370a723SSascha Wildner address mapping information for all runtime ranges. 299*1370a723SSascha Wildner 300*1370a723SSascha Wildner @retval EFI_SUCCESS The virtual address map has been applied. 301*1370a723SSascha Wildner @retval EFI_UNSUPPORTED EFI firmware is not at runtime, or the EFI firmware is already in 302*1370a723SSascha Wildner virtual address mapped mode. 303*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER DescriptorSize or DescriptorVersion is invalid. 304*1370a723SSascha Wildner @retval EFI_NO_MAPPING A virtual address was not supplied for a range in the memory 305*1370a723SSascha Wildner map that requires a mapping. 306*1370a723SSascha Wildner @retval EFI_NOT_FOUND A virtual address was supplied for an address that is not found 307*1370a723SSascha Wildner in the memory map. 308*1370a723SSascha Wildner 309*1370a723SSascha Wildner **/ 310*1370a723SSascha Wildner typedef 311*1370a723SSascha Wildner EFI_STATUS 312*1370a723SSascha Wildner (EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP)( 313*1370a723SSascha Wildner IN UINTN MemoryMapSize, 314*1370a723SSascha Wildner IN UINTN DescriptorSize, 315*1370a723SSascha Wildner IN UINT32 DescriptorVersion, 316*1370a723SSascha Wildner IN EFI_MEMORY_DESCRIPTOR *VirtualMap 317*1370a723SSascha Wildner ); 318*1370a723SSascha Wildner 319*1370a723SSascha Wildner /** 320*1370a723SSascha Wildner Connects one or more drivers to a controller. 321*1370a723SSascha Wildner 322*1370a723SSascha Wildner @param[in] ControllerHandle The handle of the controller to which driver(s) are to be connected. 323*1370a723SSascha Wildner @param[in] DriverImageHandle A pointer to an ordered list handles that support the 324*1370a723SSascha Wildner EFI_DRIVER_BINDING_PROTOCOL. 325*1370a723SSascha Wildner @param[in] RemainingDevicePath A pointer to the device path that specifies a child of the 326*1370a723SSascha Wildner controller specified by ControllerHandle. 327*1370a723SSascha Wildner @param[in] Recursive If TRUE, then ConnectController() is called recursively 328*1370a723SSascha Wildner until the entire tree of controllers below the controller specified 329*1370a723SSascha Wildner by ControllerHandle have been created. If FALSE, then 330*1370a723SSascha Wildner the tree of controllers is only expanded one level. 331*1370a723SSascha Wildner 332*1370a723SSascha Wildner @retval EFI_SUCCESS 1) One or more drivers were connected to ControllerHandle. 333*1370a723SSascha Wildner 2) No drivers were connected to ControllerHandle, but 334*1370a723SSascha Wildner RemainingDevicePath is not NULL, and it is an End Device 335*1370a723SSascha Wildner Path Node. 336*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. 337*1370a723SSascha Wildner @retval EFI_NOT_FOUND 1) There are no EFI_DRIVER_BINDING_PROTOCOL instances 338*1370a723SSascha Wildner present in the system. 339*1370a723SSascha Wildner 2) No drivers were connected to ControllerHandle. 340*1370a723SSascha Wildner @retval EFI_SECURITY_VIOLATION 341*1370a723SSascha Wildner The user has no permission to start UEFI device drivers on the device path 342*1370a723SSascha Wildner associated with the ControllerHandle or specified by the RemainingDevicePath. 343*1370a723SSascha Wildner **/ 344*1370a723SSascha Wildner typedef 345*1370a723SSascha Wildner EFI_STATUS 346*1370a723SSascha Wildner (EFIAPI *EFI_CONNECT_CONTROLLER)( 347*1370a723SSascha Wildner IN EFI_HANDLE ControllerHandle, 348*1370a723SSascha Wildner IN EFI_HANDLE *DriverImageHandle OPTIONAL, 349*1370a723SSascha Wildner IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL, 350*1370a723SSascha Wildner IN BOOLEAN Recursive 351*1370a723SSascha Wildner ); 352*1370a723SSascha Wildner 353*1370a723SSascha Wildner /** 354*1370a723SSascha Wildner Disconnects one or more drivers from a controller. 355*1370a723SSascha Wildner 356*1370a723SSascha Wildner @param[in] ControllerHandle The handle of the controller from which driver(s) are to be disconnected. 357*1370a723SSascha Wildner @param[in] DriverImageHandle The driver to disconnect from ControllerHandle. 358*1370a723SSascha Wildner If DriverImageHandle is NULL, then all the drivers currently managing 359*1370a723SSascha Wildner ControllerHandle are disconnected from ControllerHandle. 360*1370a723SSascha Wildner @param[in] ChildHandle The handle of the child to destroy. 361*1370a723SSascha Wildner If ChildHandle is NULL, then all the children of ControllerHandle are 362*1370a723SSascha Wildner destroyed before the drivers are disconnected from ControllerHandle. 363*1370a723SSascha Wildner 364*1370a723SSascha Wildner @retval EFI_SUCCESS 1) One or more drivers were disconnected from the controller. 365*1370a723SSascha Wildner 2) On entry, no drivers are managing ControllerHandle. 366*1370a723SSascha Wildner 3) DriverImageHandle is not NULL, and on entry 367*1370a723SSascha Wildner DriverImageHandle is not managing ControllerHandle. 368*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER 1) ControllerHandle is NULL. 369*1370a723SSascha Wildner 2) DriverImageHandle is not NULL, and it is not a valid EFI_HANDLE. 370*1370a723SSascha Wildner 3) ChildHandle is not NULL, and it is not a valid EFI_HANDLE. 371*1370a723SSascha Wildner 4) DriverImageHandle does not support the EFI_DRIVER_BINDING_PROTOCOL. 372*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES There are not enough resources available to disconnect any drivers from 373*1370a723SSascha Wildner ControllerHandle. 374*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The controller could not be disconnected because of a device error. 375*1370a723SSascha Wildner 376*1370a723SSascha Wildner **/ 377*1370a723SSascha Wildner typedef 378*1370a723SSascha Wildner EFI_STATUS 379*1370a723SSascha Wildner (EFIAPI *EFI_DISCONNECT_CONTROLLER)( 380*1370a723SSascha Wildner IN EFI_HANDLE ControllerHandle, 381*1370a723SSascha Wildner IN EFI_HANDLE DriverImageHandle OPTIONAL, 382*1370a723SSascha Wildner IN EFI_HANDLE ChildHandle OPTIONAL 383*1370a723SSascha Wildner ); 384*1370a723SSascha Wildner 385*1370a723SSascha Wildner // 386*1370a723SSascha Wildner // ConvertPointer DebugDisposition type. 387*1370a723SSascha Wildner // 388*1370a723SSascha Wildner #define EFI_OPTIONAL_PTR 0x00000001 389*1370a723SSascha Wildner 390*1370a723SSascha Wildner /** 391*1370a723SSascha Wildner Determines the new virtual address that is to be used on subsequent memory accesses. 392*1370a723SSascha Wildner 393*1370a723SSascha Wildner @param[in] DebugDisposition Supplies type information for the pointer being converted. 394*1370a723SSascha Wildner @param[in, out] Address A pointer to a pointer that is to be fixed to be the value needed 395*1370a723SSascha Wildner for the new virtual address mappings being applied. 396*1370a723SSascha Wildner 397*1370a723SSascha Wildner @retval EFI_SUCCESS The pointer pointed to by Address was modified. 398*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER 1) Address is NULL. 399*1370a723SSascha Wildner 2) *Address is NULL and DebugDisposition does 400*1370a723SSascha Wildner not have the EFI_OPTIONAL_PTR bit set. 401*1370a723SSascha Wildner @retval EFI_NOT_FOUND The pointer pointed to by Address was not found to be part 402*1370a723SSascha Wildner of the current memory map. This is normally fatal. 403*1370a723SSascha Wildner 404*1370a723SSascha Wildner **/ 405*1370a723SSascha Wildner typedef 406*1370a723SSascha Wildner EFI_STATUS 407*1370a723SSascha Wildner (EFIAPI *EFI_CONVERT_POINTER)( 408*1370a723SSascha Wildner IN UINTN DebugDisposition, 409*1370a723SSascha Wildner IN OUT VOID **Address 410*1370a723SSascha Wildner ); 411*1370a723SSascha Wildner 412*1370a723SSascha Wildner // 413*1370a723SSascha Wildner // These types can be ORed together as needed - for example, 414*1370a723SSascha Wildner // EVT_TIMER might be Ored with EVT_NOTIFY_WAIT or 415*1370a723SSascha Wildner // EVT_NOTIFY_SIGNAL. 416*1370a723SSascha Wildner // 417*1370a723SSascha Wildner #define EVT_TIMER 0x80000000 418*1370a723SSascha Wildner #define EVT_RUNTIME 0x40000000 419*1370a723SSascha Wildner #define EVT_NOTIFY_WAIT 0x00000100 420*1370a723SSascha Wildner #define EVT_NOTIFY_SIGNAL 0x00000200 421*1370a723SSascha Wildner 422*1370a723SSascha Wildner #define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 423*1370a723SSascha Wildner #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 424*1370a723SSascha Wildner 425*1370a723SSascha Wildner // 426*1370a723SSascha Wildner // The event's NotifyContext pointer points to a runtime memory 427*1370a723SSascha Wildner // address. 428*1370a723SSascha Wildner // The event is deprecated in UEFI2.0 and later specifications. 429*1370a723SSascha Wildner // 430*1370a723SSascha Wildner #define EVT_RUNTIME_CONTEXT 0x20000000 431*1370a723SSascha Wildner 432*1370a723SSascha Wildner /** 433*1370a723SSascha Wildner Invoke a notification event 434*1370a723SSascha Wildner 435*1370a723SSascha Wildner @param[in] Event Event whose notification function is being invoked. 436*1370a723SSascha Wildner @param[in] Context The pointer to the notification function's context, 437*1370a723SSascha Wildner which is implementation-dependent. 438*1370a723SSascha Wildner 439*1370a723SSascha Wildner **/ 440*1370a723SSascha Wildner typedef 441*1370a723SSascha Wildner VOID 442*1370a723SSascha Wildner (EFIAPI *EFI_EVENT_NOTIFY)( 443*1370a723SSascha Wildner IN EFI_EVENT Event, 444*1370a723SSascha Wildner IN VOID *Context 445*1370a723SSascha Wildner ); 446*1370a723SSascha Wildner 447*1370a723SSascha Wildner /** 448*1370a723SSascha Wildner Creates an event. 449*1370a723SSascha Wildner 450*1370a723SSascha Wildner @param[in] Type The type of event to create and its mode and attributes. 451*1370a723SSascha Wildner @param[in] NotifyTpl The task priority level of event notifications, if needed. 452*1370a723SSascha Wildner @param[in] NotifyFunction The pointer to the event's notification function, if any. 453*1370a723SSascha Wildner @param[in] NotifyContext The pointer to the notification function's context; corresponds to parameter 454*1370a723SSascha Wildner Context in the notification function. 455*1370a723SSascha Wildner @param[out] Event The pointer to the newly created event if the call succeeds; undefined 456*1370a723SSascha Wildner otherwise. 457*1370a723SSascha Wildner 458*1370a723SSascha Wildner @retval EFI_SUCCESS The event structure was created. 459*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER One or more parameters are invalid. 460*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES The event could not be allocated. 461*1370a723SSascha Wildner 462*1370a723SSascha Wildner **/ 463*1370a723SSascha Wildner typedef 464*1370a723SSascha Wildner EFI_STATUS 465*1370a723SSascha Wildner (EFIAPI *EFI_CREATE_EVENT)( 466*1370a723SSascha Wildner IN UINT32 Type, 467*1370a723SSascha Wildner IN EFI_TPL NotifyTpl, 468*1370a723SSascha Wildner IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, 469*1370a723SSascha Wildner IN VOID *NotifyContext OPTIONAL, 470*1370a723SSascha Wildner OUT EFI_EVENT *Event 471*1370a723SSascha Wildner ); 472*1370a723SSascha Wildner 473*1370a723SSascha Wildner /** 474*1370a723SSascha Wildner Creates an event in a group. 475*1370a723SSascha Wildner 476*1370a723SSascha Wildner @param[in] Type The type of event to create and its mode and attributes. 477*1370a723SSascha Wildner @param[in] NotifyTpl The task priority level of event notifications,if needed. 478*1370a723SSascha Wildner @param[in] NotifyFunction The pointer to the event's notification function, if any. 479*1370a723SSascha Wildner @param[in] NotifyContext The pointer to the notification function's context; corresponds to parameter 480*1370a723SSascha Wildner Context in the notification function. 481*1370a723SSascha Wildner @param[in] EventGroup The pointer to the unique identifier of the group to which this event belongs. 482*1370a723SSascha Wildner If this is NULL, then the function behaves as if the parameters were passed 483*1370a723SSascha Wildner to CreateEvent. 484*1370a723SSascha Wildner @param[out] Event The pointer to the newly created event if the call succeeds; undefined 485*1370a723SSascha Wildner otherwise. 486*1370a723SSascha Wildner 487*1370a723SSascha Wildner @retval EFI_SUCCESS The event structure was created. 488*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER One or more parameters are invalid. 489*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES The event could not be allocated. 490*1370a723SSascha Wildner 491*1370a723SSascha Wildner **/ 492*1370a723SSascha Wildner typedef 493*1370a723SSascha Wildner EFI_STATUS 494*1370a723SSascha Wildner (EFIAPI *EFI_CREATE_EVENT_EX)( 495*1370a723SSascha Wildner IN UINT32 Type, 496*1370a723SSascha Wildner IN EFI_TPL NotifyTpl, 497*1370a723SSascha Wildner IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, 498*1370a723SSascha Wildner IN CONST VOID *NotifyContext OPTIONAL, 499*1370a723SSascha Wildner IN CONST EFI_GUID *EventGroup OPTIONAL, 500*1370a723SSascha Wildner OUT EFI_EVENT *Event 501*1370a723SSascha Wildner ); 502*1370a723SSascha Wildner 503*1370a723SSascha Wildner /// 504*1370a723SSascha Wildner /// Timer delay types 505*1370a723SSascha Wildner /// 506*1370a723SSascha Wildner typedef enum { 507*1370a723SSascha Wildner /// 508*1370a723SSascha Wildner /// An event's timer settings is to be cancelled and not trigger time is to be set/ 509*1370a723SSascha Wildner /// 510*1370a723SSascha Wildner TimerCancel, 511*1370a723SSascha Wildner /// 512*1370a723SSascha Wildner /// An event is to be signaled periodically at a specified interval from the current time. 513*1370a723SSascha Wildner /// 514*1370a723SSascha Wildner TimerPeriodic, 515*1370a723SSascha Wildner /// 516*1370a723SSascha Wildner /// An event is to be signaled once at a specified interval from the current time. 517*1370a723SSascha Wildner /// 518*1370a723SSascha Wildner TimerRelative 519*1370a723SSascha Wildner } EFI_TIMER_DELAY; 520*1370a723SSascha Wildner 521*1370a723SSascha Wildner /** 522*1370a723SSascha Wildner Sets the type of timer and the trigger time for a timer event. 523*1370a723SSascha Wildner 524*1370a723SSascha Wildner @param[in] Event The timer event that is to be signaled at the specified time. 525*1370a723SSascha Wildner @param[in] Type The type of time that is specified in TriggerTime. 526*1370a723SSascha Wildner @param[in] TriggerTime The number of 100ns units until the timer expires. 527*1370a723SSascha Wildner A TriggerTime of 0 is legal. 528*1370a723SSascha Wildner If Type is TimerRelative and TriggerTime is 0, then the timer 529*1370a723SSascha Wildner event will be signaled on the next timer tick. 530*1370a723SSascha Wildner If Type is TimerPeriodic and TriggerTime is 0, then the timer 531*1370a723SSascha Wildner event will be signaled on every timer tick. 532*1370a723SSascha Wildner 533*1370a723SSascha Wildner @retval EFI_SUCCESS The event has been set to be signaled at the requested time. 534*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Event or Type is not valid. 535*1370a723SSascha Wildner 536*1370a723SSascha Wildner **/ 537*1370a723SSascha Wildner typedef 538*1370a723SSascha Wildner EFI_STATUS 539*1370a723SSascha Wildner (EFIAPI *EFI_SET_TIMER)( 540*1370a723SSascha Wildner IN EFI_EVENT Event, 541*1370a723SSascha Wildner IN EFI_TIMER_DELAY Type, 542*1370a723SSascha Wildner IN UINT64 TriggerTime 543*1370a723SSascha Wildner ); 544*1370a723SSascha Wildner 545*1370a723SSascha Wildner /** 546*1370a723SSascha Wildner Signals an event. 547*1370a723SSascha Wildner 548*1370a723SSascha Wildner @param[in] Event The event to signal. 549*1370a723SSascha Wildner 550*1370a723SSascha Wildner @retval EFI_SUCCESS The event has been signaled. 551*1370a723SSascha Wildner 552*1370a723SSascha Wildner **/ 553*1370a723SSascha Wildner typedef 554*1370a723SSascha Wildner EFI_STATUS 555*1370a723SSascha Wildner (EFIAPI *EFI_SIGNAL_EVENT)( 556*1370a723SSascha Wildner IN EFI_EVENT Event 557*1370a723SSascha Wildner ); 558*1370a723SSascha Wildner 559*1370a723SSascha Wildner /** 560*1370a723SSascha Wildner Stops execution until an event is signaled. 561*1370a723SSascha Wildner 562*1370a723SSascha Wildner @param[in] NumberOfEvents The number of events in the Event array. 563*1370a723SSascha Wildner @param[in] Event An array of EFI_EVENT. 564*1370a723SSascha Wildner @param[out] Index The pointer to the index of the event which satisfied the wait condition. 565*1370a723SSascha Wildner 566*1370a723SSascha Wildner @retval EFI_SUCCESS The event indicated by Index was signaled. 567*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER 1) NumberOfEvents is 0. 568*1370a723SSascha Wildner 2) The event indicated by Index is of type 569*1370a723SSascha Wildner EVT_NOTIFY_SIGNAL. 570*1370a723SSascha Wildner @retval EFI_UNSUPPORTED The current TPL is not TPL_APPLICATION. 571*1370a723SSascha Wildner 572*1370a723SSascha Wildner **/ 573*1370a723SSascha Wildner typedef 574*1370a723SSascha Wildner EFI_STATUS 575*1370a723SSascha Wildner (EFIAPI *EFI_WAIT_FOR_EVENT)( 576*1370a723SSascha Wildner IN UINTN NumberOfEvents, 577*1370a723SSascha Wildner IN EFI_EVENT *Event, 578*1370a723SSascha Wildner OUT UINTN *Index 579*1370a723SSascha Wildner ); 580*1370a723SSascha Wildner 581*1370a723SSascha Wildner /** 582*1370a723SSascha Wildner Closes an event. 583*1370a723SSascha Wildner 584*1370a723SSascha Wildner @param[in] Event The event to close. 585*1370a723SSascha Wildner 586*1370a723SSascha Wildner @retval EFI_SUCCESS The event has been closed. 587*1370a723SSascha Wildner 588*1370a723SSascha Wildner **/ 589*1370a723SSascha Wildner typedef 590*1370a723SSascha Wildner EFI_STATUS 591*1370a723SSascha Wildner (EFIAPI *EFI_CLOSE_EVENT)( 592*1370a723SSascha Wildner IN EFI_EVENT Event 593*1370a723SSascha Wildner ); 594*1370a723SSascha Wildner 595*1370a723SSascha Wildner /** 596*1370a723SSascha Wildner Checks whether an event is in the signaled state. 597*1370a723SSascha Wildner 598*1370a723SSascha Wildner @param[in] Event The event to check. 599*1370a723SSascha Wildner 600*1370a723SSascha Wildner @retval EFI_SUCCESS The event is in the signaled state. 601*1370a723SSascha Wildner @retval EFI_NOT_READY The event is not in the signaled state. 602*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Event is of type EVT_NOTIFY_SIGNAL. 603*1370a723SSascha Wildner 604*1370a723SSascha Wildner **/ 605*1370a723SSascha Wildner typedef 606*1370a723SSascha Wildner EFI_STATUS 607*1370a723SSascha Wildner (EFIAPI *EFI_CHECK_EVENT)( 608*1370a723SSascha Wildner IN EFI_EVENT Event 609*1370a723SSascha Wildner ); 610*1370a723SSascha Wildner 611*1370a723SSascha Wildner // 612*1370a723SSascha Wildner // Task priority level 613*1370a723SSascha Wildner // 614*1370a723SSascha Wildner #define TPL_APPLICATION 4 615*1370a723SSascha Wildner #define TPL_CALLBACK 8 616*1370a723SSascha Wildner #define TPL_NOTIFY 16 617*1370a723SSascha Wildner #define TPL_HIGH_LEVEL 31 618*1370a723SSascha Wildner 619*1370a723SSascha Wildner /** 620*1370a723SSascha Wildner Raises a task's priority level and returns its previous level. 621*1370a723SSascha Wildner 622*1370a723SSascha Wildner @param[in] NewTpl The new task priority level. 623*1370a723SSascha Wildner 624*1370a723SSascha Wildner @return Previous task priority level 625*1370a723SSascha Wildner 626*1370a723SSascha Wildner **/ 627*1370a723SSascha Wildner typedef 628*1370a723SSascha Wildner EFI_TPL 629*1370a723SSascha Wildner (EFIAPI *EFI_RAISE_TPL)( 630*1370a723SSascha Wildner IN EFI_TPL NewTpl 631*1370a723SSascha Wildner ); 632*1370a723SSascha Wildner 633*1370a723SSascha Wildner /** 634*1370a723SSascha Wildner Restores a task's priority level to its previous value. 635*1370a723SSascha Wildner 636*1370a723SSascha Wildner @param[in] OldTpl The previous task priority level to restore. 637*1370a723SSascha Wildner 638*1370a723SSascha Wildner **/ 639*1370a723SSascha Wildner typedef 640*1370a723SSascha Wildner VOID 641*1370a723SSascha Wildner (EFIAPI *EFI_RESTORE_TPL)( 642*1370a723SSascha Wildner IN EFI_TPL OldTpl 643*1370a723SSascha Wildner ); 644*1370a723SSascha Wildner 645*1370a723SSascha Wildner /** 646*1370a723SSascha Wildner Returns the value of a variable. 647*1370a723SSascha Wildner 648*1370a723SSascha Wildner @param[in] VariableName A Null-terminated string that is the name of the vendor's 649*1370a723SSascha Wildner variable. 650*1370a723SSascha Wildner @param[in] VendorGuid A unique identifier for the vendor. 651*1370a723SSascha Wildner @param[out] Attributes If not NULL, a pointer to the memory location to return the 652*1370a723SSascha Wildner attributes bitmask for the variable. 653*1370a723SSascha Wildner @param[in, out] DataSize On input, the size in bytes of the return Data buffer. 654*1370a723SSascha Wildner On output the size of data returned in Data. 655*1370a723SSascha Wildner @param[out] Data The buffer to return the contents of the variable. May be NULL 656*1370a723SSascha Wildner with a zero DataSize in order to determine the size buffer needed. 657*1370a723SSascha Wildner 658*1370a723SSascha Wildner @retval EFI_SUCCESS The function completed successfully. 659*1370a723SSascha Wildner @retval EFI_NOT_FOUND The variable was not found. 660*1370a723SSascha Wildner @retval EFI_BUFFER_TOO_SMALL The DataSize is too small for the result. 661*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER VariableName is NULL. 662*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER VendorGuid is NULL. 663*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER DataSize is NULL. 664*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER The DataSize is not too small and Data is NULL. 665*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error. 666*1370a723SSascha Wildner @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due to an authentication failure. 667*1370a723SSascha Wildner 668*1370a723SSascha Wildner **/ 669*1370a723SSascha Wildner typedef 670*1370a723SSascha Wildner EFI_STATUS 671*1370a723SSascha Wildner (EFIAPI *EFI_GET_VARIABLE)( 672*1370a723SSascha Wildner IN CHAR16 *VariableName, 673*1370a723SSascha Wildner IN EFI_GUID *VendorGuid, 674*1370a723SSascha Wildner OUT UINT32 *Attributes OPTIONAL, 675*1370a723SSascha Wildner IN OUT UINTN *DataSize, 676*1370a723SSascha Wildner OUT VOID *Data OPTIONAL 677*1370a723SSascha Wildner ); 678*1370a723SSascha Wildner 679*1370a723SSascha Wildner /** 680*1370a723SSascha Wildner Enumerates the current variable names. 681*1370a723SSascha Wildner 682*1370a723SSascha Wildner @param[in, out] VariableNameSize The size of the VariableName buffer. The size must be large 683*1370a723SSascha Wildner enough to fit input string supplied in VariableName buffer. 684*1370a723SSascha Wildner @param[in, out] VariableName On input, supplies the last VariableName that was returned 685*1370a723SSascha Wildner by GetNextVariableName(). On output, returns the Nullterminated 686*1370a723SSascha Wildner string of the current variable. 687*1370a723SSascha Wildner @param[in, out] VendorGuid On input, supplies the last VendorGuid that was returned by 688*1370a723SSascha Wildner GetNextVariableName(). On output, returns the 689*1370a723SSascha Wildner VendorGuid of the current variable. 690*1370a723SSascha Wildner 691*1370a723SSascha Wildner @retval EFI_SUCCESS The function completed successfully. 692*1370a723SSascha Wildner @retval EFI_NOT_FOUND The next variable was not found. 693*1370a723SSascha Wildner @retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the result. 694*1370a723SSascha Wildner VariableNameSize has been updated with the size needed to complete the request. 695*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER VariableNameSize is NULL. 696*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER VariableName is NULL. 697*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER VendorGuid is NULL. 698*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER The input values of VariableName and VendorGuid are not a name and 699*1370a723SSascha Wildner GUID of an existing variable. 700*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Null-terminator is not found in the first VariableNameSize bytes of 701*1370a723SSascha Wildner the input VariableName buffer. 702*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error. 703*1370a723SSascha Wildner 704*1370a723SSascha Wildner **/ 705*1370a723SSascha Wildner typedef 706*1370a723SSascha Wildner EFI_STATUS 707*1370a723SSascha Wildner (EFIAPI *EFI_GET_NEXT_VARIABLE_NAME)( 708*1370a723SSascha Wildner IN OUT UINTN *VariableNameSize, 709*1370a723SSascha Wildner IN OUT CHAR16 *VariableName, 710*1370a723SSascha Wildner IN OUT EFI_GUID *VendorGuid 711*1370a723SSascha Wildner ); 712*1370a723SSascha Wildner 713*1370a723SSascha Wildner /** 714*1370a723SSascha Wildner Sets the value of a variable. 715*1370a723SSascha Wildner 716*1370a723SSascha Wildner @param[in] VariableName A Null-terminated string that is the name of the vendor's variable. 717*1370a723SSascha Wildner Each VariableName is unique for each VendorGuid. VariableName must 718*1370a723SSascha Wildner contain 1 or more characters. If VariableName is an empty string, 719*1370a723SSascha Wildner then EFI_INVALID_PARAMETER is returned. 720*1370a723SSascha Wildner @param[in] VendorGuid A unique identifier for the vendor. 721*1370a723SSascha Wildner @param[in] Attributes Attributes bitmask to set for the variable. 722*1370a723SSascha Wildner @param[in] DataSize The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE or 723*1370a723SSascha Wildner EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero 724*1370a723SSascha Wildner causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is 725*1370a723SSascha Wildner set, then a SetVariable() call with a DataSize of zero will not cause any change to 726*1370a723SSascha Wildner the variable value (the timestamp associated with the variable may be updated however 727*1370a723SSascha Wildner even if no new data value is provided,see the description of the 728*1370a723SSascha Wildner EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not 729*1370a723SSascha Wildner be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated). 730*1370a723SSascha Wildner @param[in] Data The contents for the variable. 731*1370a723SSascha Wildner 732*1370a723SSascha Wildner @retval EFI_SUCCESS The firmware has successfully stored the variable and its data as 733*1370a723SSascha Wildner defined by the Attributes. 734*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits, name, and GUID was supplied, or the 735*1370a723SSascha Wildner DataSize exceeds the maximum allowed. 736*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER VariableName is an empty string. 737*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data. 738*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error. 739*1370a723SSascha Wildner @retval EFI_WRITE_PROTECTED The variable in question is read-only. 740*1370a723SSascha Wildner @retval EFI_WRITE_PROTECTED The variable in question cannot be deleted. 741*1370a723SSascha Wildner @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS being set, 742*1370a723SSascha Wildner but the AuthInfo does NOT pass the validation check carried out by the firmware. 743*1370a723SSascha Wildner 744*1370a723SSascha Wildner @retval EFI_NOT_FOUND The variable trying to be updated or deleted was not found. 745*1370a723SSascha Wildner 746*1370a723SSascha Wildner **/ 747*1370a723SSascha Wildner typedef 748*1370a723SSascha Wildner EFI_STATUS 749*1370a723SSascha Wildner (EFIAPI *EFI_SET_VARIABLE)( 750*1370a723SSascha Wildner IN CHAR16 *VariableName, 751*1370a723SSascha Wildner IN EFI_GUID *VendorGuid, 752*1370a723SSascha Wildner IN UINT32 Attributes, 753*1370a723SSascha Wildner IN UINTN DataSize, 754*1370a723SSascha Wildner IN VOID *Data 755*1370a723SSascha Wildner ); 756*1370a723SSascha Wildner 757*1370a723SSascha Wildner /// 758*1370a723SSascha Wildner /// This provides the capabilities of the 759*1370a723SSascha Wildner /// real time clock device as exposed through the EFI interfaces. 760*1370a723SSascha Wildner /// 761*1370a723SSascha Wildner typedef struct { 762*1370a723SSascha Wildner /// 763*1370a723SSascha Wildner /// Provides the reporting resolution of the real-time clock device in 764*1370a723SSascha Wildner /// counts per second. For a normal PC-AT CMOS RTC device, this 765*1370a723SSascha Wildner /// value would be 1 Hz, or 1, to indicate that the device only reports 766*1370a723SSascha Wildner /// the time to the resolution of 1 second. 767*1370a723SSascha Wildner /// 768*1370a723SSascha Wildner UINT32 Resolution; 769*1370a723SSascha Wildner /// 770*1370a723SSascha Wildner /// Provides the timekeeping accuracy of the real-time clock in an 771*1370a723SSascha Wildner /// error rate of 1E-6 parts per million. For a clock with an accuracy 772*1370a723SSascha Wildner /// of 50 parts per million, the value in this field would be 773*1370a723SSascha Wildner /// 50,000,000. 774*1370a723SSascha Wildner /// 775*1370a723SSascha Wildner UINT32 Accuracy; 776*1370a723SSascha Wildner /// 777*1370a723SSascha Wildner /// A TRUE indicates that a time set operation clears the device's 778*1370a723SSascha Wildner /// time below the Resolution reporting level. A FALSE 779*1370a723SSascha Wildner /// indicates that the state below the Resolution level of the 780*1370a723SSascha Wildner /// device is not cleared when the time is set. Normal PC-AT CMOS 781*1370a723SSascha Wildner /// RTC devices set this value to FALSE. 782*1370a723SSascha Wildner /// 783*1370a723SSascha Wildner BOOLEAN SetsToZero; 784*1370a723SSascha Wildner } EFI_TIME_CAPABILITIES; 785*1370a723SSascha Wildner 786*1370a723SSascha Wildner /** 787*1370a723SSascha Wildner Returns the current time and date information, and the time-keeping capabilities 788*1370a723SSascha Wildner of the hardware platform. 789*1370a723SSascha Wildner 790*1370a723SSascha Wildner @param[out] Time A pointer to storage to receive a snapshot of the current time. 791*1370a723SSascha Wildner @param[out] Capabilities An optional pointer to a buffer to receive the real time clock 792*1370a723SSascha Wildner device's capabilities. 793*1370a723SSascha Wildner 794*1370a723SSascha Wildner @retval EFI_SUCCESS The operation completed successfully. 795*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Time is NULL. 796*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The time could not be retrieved due to hardware error. 797*1370a723SSascha Wildner 798*1370a723SSascha Wildner **/ 799*1370a723SSascha Wildner typedef 800*1370a723SSascha Wildner EFI_STATUS 801*1370a723SSascha Wildner (EFIAPI *EFI_GET_TIME)( 802*1370a723SSascha Wildner OUT EFI_TIME *Time, 803*1370a723SSascha Wildner OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL 804*1370a723SSascha Wildner ); 805*1370a723SSascha Wildner 806*1370a723SSascha Wildner /** 807*1370a723SSascha Wildner Sets the current local time and date information. 808*1370a723SSascha Wildner 809*1370a723SSascha Wildner @param[in] Time A pointer to the current time. 810*1370a723SSascha Wildner 811*1370a723SSascha Wildner @retval EFI_SUCCESS The operation completed successfully. 812*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER A time field is out of range. 813*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The time could not be set due due to hardware error. 814*1370a723SSascha Wildner 815*1370a723SSascha Wildner **/ 816*1370a723SSascha Wildner typedef 817*1370a723SSascha Wildner EFI_STATUS 818*1370a723SSascha Wildner (EFIAPI *EFI_SET_TIME)( 819*1370a723SSascha Wildner IN EFI_TIME *Time 820*1370a723SSascha Wildner ); 821*1370a723SSascha Wildner 822*1370a723SSascha Wildner /** 823*1370a723SSascha Wildner Returns the current wakeup alarm clock setting. 824*1370a723SSascha Wildner 825*1370a723SSascha Wildner @param[out] Enabled Indicates if the alarm is currently enabled or disabled. 826*1370a723SSascha Wildner @param[out] Pending Indicates if the alarm signal is pending and requires acknowledgement. 827*1370a723SSascha Wildner @param[out] Time The current alarm setting. 828*1370a723SSascha Wildner 829*1370a723SSascha Wildner @retval EFI_SUCCESS The alarm settings were returned. 830*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Enabled is NULL. 831*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Pending is NULL. 832*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Time is NULL. 833*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The wakeup time could not be retrieved due to a hardware error. 834*1370a723SSascha Wildner @retval EFI_UNSUPPORTED A wakeup timer is not supported on this platform. 835*1370a723SSascha Wildner 836*1370a723SSascha Wildner **/ 837*1370a723SSascha Wildner typedef 838*1370a723SSascha Wildner EFI_STATUS 839*1370a723SSascha Wildner (EFIAPI *EFI_GET_WAKEUP_TIME)( 840*1370a723SSascha Wildner OUT BOOLEAN *Enabled, 841*1370a723SSascha Wildner OUT BOOLEAN *Pending, 842*1370a723SSascha Wildner OUT EFI_TIME *Time 843*1370a723SSascha Wildner ); 844*1370a723SSascha Wildner 845*1370a723SSascha Wildner /** 846*1370a723SSascha Wildner Sets the system wakeup alarm clock time. 847*1370a723SSascha Wildner 848*1370a723SSascha Wildner @param[in] Enable Enable or disable the wakeup alarm. 849*1370a723SSascha Wildner @param[in] Time If Enable is TRUE, the time to set the wakeup alarm for. 850*1370a723SSascha Wildner If Enable is FALSE, then this parameter is optional, and may be NULL. 851*1370a723SSascha Wildner 852*1370a723SSascha Wildner @retval EFI_SUCCESS If Enable is TRUE, then the wakeup alarm was enabled. If 853*1370a723SSascha Wildner Enable is FALSE, then the wakeup alarm was disabled. 854*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER A time field is out of range. 855*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The wakeup time could not be set due to a hardware error. 856*1370a723SSascha Wildner @retval EFI_UNSUPPORTED A wakeup timer is not supported on this platform. 857*1370a723SSascha Wildner 858*1370a723SSascha Wildner **/ 859*1370a723SSascha Wildner typedef 860*1370a723SSascha Wildner EFI_STATUS 861*1370a723SSascha Wildner (EFIAPI *EFI_SET_WAKEUP_TIME)( 862*1370a723SSascha Wildner IN BOOLEAN Enable, 863*1370a723SSascha Wildner IN EFI_TIME *Time OPTIONAL 864*1370a723SSascha Wildner ); 865*1370a723SSascha Wildner 866*1370a723SSascha Wildner /** 867*1370a723SSascha Wildner Loads an EFI image into memory. 868*1370a723SSascha Wildner 869*1370a723SSascha Wildner @param[in] BootPolicy If TRUE, indicates that the request originates from the boot 870*1370a723SSascha Wildner manager, and that the boot manager is attempting to load 871*1370a723SSascha Wildner FilePath as a boot selection. Ignored if SourceBuffer is 872*1370a723SSascha Wildner not NULL. 873*1370a723SSascha Wildner @param[in] ParentImageHandle The caller's image handle. 874*1370a723SSascha Wildner @param[in] DevicePath The DeviceHandle specific file path from which the image is 875*1370a723SSascha Wildner loaded. 876*1370a723SSascha Wildner @param[in] SourceBuffer If not NULL, a pointer to the memory location containing a copy 877*1370a723SSascha Wildner of the image to be loaded. 878*1370a723SSascha Wildner @param[in] SourceSize The size in bytes of SourceBuffer. Ignored if SourceBuffer is NULL. 879*1370a723SSascha Wildner @param[out] ImageHandle The pointer to the returned image handle that is created when the 880*1370a723SSascha Wildner image is successfully loaded. 881*1370a723SSascha Wildner 882*1370a723SSascha Wildner @retval EFI_SUCCESS Image was loaded into memory correctly. 883*1370a723SSascha Wildner @retval EFI_NOT_FOUND Both SourceBuffer and DevicePath are NULL. 884*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER One or more parametes are invalid. 885*1370a723SSascha Wildner @retval EFI_UNSUPPORTED The image type is not supported. 886*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES Image was not loaded due to insufficient resources. 887*1370a723SSascha Wildner @retval EFI_LOAD_ERROR Image was not loaded because the image format was corrupt or not 888*1370a723SSascha Wildner understood. 889*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR Image was not loaded because the device returned a read error. 890*1370a723SSascha Wildner @retval EFI_ACCESS_DENIED Image was not loaded because the platform policy prohibits the 891*1370a723SSascha Wildner image from being loaded. NULL is returned in *ImageHandle. 892*1370a723SSascha Wildner @retval EFI_SECURITY_VIOLATION Image was loaded and an ImageHandle was created with a 893*1370a723SSascha Wildner valid EFI_LOADED_IMAGE_PROTOCOL. However, the current 894*1370a723SSascha Wildner platform policy specifies that the image should not be started. 895*1370a723SSascha Wildner **/ 896*1370a723SSascha Wildner typedef 897*1370a723SSascha Wildner EFI_STATUS 898*1370a723SSascha Wildner (EFIAPI *EFI_IMAGE_LOAD)( 899*1370a723SSascha Wildner IN BOOLEAN BootPolicy, 900*1370a723SSascha Wildner IN EFI_HANDLE ParentImageHandle, 901*1370a723SSascha Wildner IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, 902*1370a723SSascha Wildner IN VOID *SourceBuffer OPTIONAL, 903*1370a723SSascha Wildner IN UINTN SourceSize, 904*1370a723SSascha Wildner OUT EFI_HANDLE *ImageHandle 905*1370a723SSascha Wildner ); 906*1370a723SSascha Wildner 907*1370a723SSascha Wildner /** 908*1370a723SSascha Wildner Transfers control to a loaded image's entry point. 909*1370a723SSascha Wildner 910*1370a723SSascha Wildner @param[in] ImageHandle Handle of image to be started. 911*1370a723SSascha Wildner @param[out] ExitDataSize The pointer to the size, in bytes, of ExitData. 912*1370a723SSascha Wildner @param[out] ExitData The pointer to a pointer to a data buffer that includes a Null-terminated 913*1370a723SSascha Wildner string, optionally followed by additional binary data. 914*1370a723SSascha Wildner 915*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER ImageHandle is either an invalid image handle or the image 916*1370a723SSascha Wildner has already been initialized with StartImage. 917*1370a723SSascha Wildner @retval EFI_SECURITY_VIOLATION The current platform policy specifies that the image should not be started. 918*1370a723SSascha Wildner @return Exit code from image 919*1370a723SSascha Wildner 920*1370a723SSascha Wildner **/ 921*1370a723SSascha Wildner typedef 922*1370a723SSascha Wildner EFI_STATUS 923*1370a723SSascha Wildner (EFIAPI *EFI_IMAGE_START)( 924*1370a723SSascha Wildner IN EFI_HANDLE ImageHandle, 925*1370a723SSascha Wildner OUT UINTN *ExitDataSize, 926*1370a723SSascha Wildner OUT CHAR16 **ExitData OPTIONAL 927*1370a723SSascha Wildner ); 928*1370a723SSascha Wildner 929*1370a723SSascha Wildner /** 930*1370a723SSascha Wildner Terminates a loaded EFI image and returns control to boot services. 931*1370a723SSascha Wildner 932*1370a723SSascha Wildner @param[in] ImageHandle Handle that identifies the image. This parameter is passed to the 933*1370a723SSascha Wildner image on entry. 934*1370a723SSascha Wildner @param[in] ExitStatus The image's exit code. 935*1370a723SSascha Wildner @param[in] ExitDataSize The size, in bytes, of ExitData. Ignored if ExitStatus is EFI_SUCCESS. 936*1370a723SSascha Wildner @param[in] ExitData The pointer to a data buffer that includes a Null-terminated string, 937*1370a723SSascha Wildner optionally followed by additional binary data. The string is a 938*1370a723SSascha Wildner description that the caller may use to further indicate the reason 939*1370a723SSascha Wildner for the image's exit. ExitData is only valid if ExitStatus 940*1370a723SSascha Wildner is something other than EFI_SUCCESS. The ExitData buffer 941*1370a723SSascha Wildner must be allocated by calling AllocatePool(). 942*1370a723SSascha Wildner 943*1370a723SSascha Wildner @retval EFI_SUCCESS The image specified by ImageHandle was unloaded. 944*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER The image specified by ImageHandle has been loaded and 945*1370a723SSascha Wildner started with LoadImage() and StartImage(), but the 946*1370a723SSascha Wildner image is not the currently executing image. 947*1370a723SSascha Wildner 948*1370a723SSascha Wildner **/ 949*1370a723SSascha Wildner typedef 950*1370a723SSascha Wildner EFI_STATUS 951*1370a723SSascha Wildner (EFIAPI *EFI_EXIT)( 952*1370a723SSascha Wildner IN EFI_HANDLE ImageHandle, 953*1370a723SSascha Wildner IN EFI_STATUS ExitStatus, 954*1370a723SSascha Wildner IN UINTN ExitDataSize, 955*1370a723SSascha Wildner IN CHAR16 *ExitData OPTIONAL 956*1370a723SSascha Wildner ); 957*1370a723SSascha Wildner 958*1370a723SSascha Wildner /** 959*1370a723SSascha Wildner Unloads an image. 960*1370a723SSascha Wildner 961*1370a723SSascha Wildner @param[in] ImageHandle Handle that identifies the image to be unloaded. 962*1370a723SSascha Wildner 963*1370a723SSascha Wildner @retval EFI_SUCCESS The image has been unloaded. 964*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER ImageHandle is not a valid image handle. 965*1370a723SSascha Wildner 966*1370a723SSascha Wildner **/ 967*1370a723SSascha Wildner typedef 968*1370a723SSascha Wildner EFI_STATUS 969*1370a723SSascha Wildner (EFIAPI *EFI_IMAGE_UNLOAD)( 970*1370a723SSascha Wildner IN EFI_HANDLE ImageHandle 971*1370a723SSascha Wildner ); 972*1370a723SSascha Wildner 973*1370a723SSascha Wildner /** 974*1370a723SSascha Wildner Terminates all boot services. 975*1370a723SSascha Wildner 976*1370a723SSascha Wildner @param[in] ImageHandle Handle that identifies the exiting image. 977*1370a723SSascha Wildner @param[in] MapKey Key to the latest memory map. 978*1370a723SSascha Wildner 979*1370a723SSascha Wildner @retval EFI_SUCCESS Boot services have been terminated. 980*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER MapKey is incorrect. 981*1370a723SSascha Wildner 982*1370a723SSascha Wildner **/ 983*1370a723SSascha Wildner typedef 984*1370a723SSascha Wildner EFI_STATUS 985*1370a723SSascha Wildner (EFIAPI *EFI_EXIT_BOOT_SERVICES)( 986*1370a723SSascha Wildner IN EFI_HANDLE ImageHandle, 987*1370a723SSascha Wildner IN UINTN MapKey 988*1370a723SSascha Wildner ); 989*1370a723SSascha Wildner 990*1370a723SSascha Wildner /** 991*1370a723SSascha Wildner Induces a fine-grained stall. 992*1370a723SSascha Wildner 993*1370a723SSascha Wildner @param[in] Microseconds The number of microseconds to stall execution. 994*1370a723SSascha Wildner 995*1370a723SSascha Wildner @retval EFI_SUCCESS Execution was stalled at least the requested number of 996*1370a723SSascha Wildner Microseconds. 997*1370a723SSascha Wildner 998*1370a723SSascha Wildner **/ 999*1370a723SSascha Wildner typedef 1000*1370a723SSascha Wildner EFI_STATUS 1001*1370a723SSascha Wildner (EFIAPI *EFI_STALL)( 1002*1370a723SSascha Wildner IN UINTN Microseconds 1003*1370a723SSascha Wildner ); 1004*1370a723SSascha Wildner 1005*1370a723SSascha Wildner /** 1006*1370a723SSascha Wildner Sets the system's watchdog timer. 1007*1370a723SSascha Wildner 1008*1370a723SSascha Wildner @param[in] Timeout The number of seconds to set the watchdog timer to. 1009*1370a723SSascha Wildner @param[in] WatchdogCode The numeric code to log on a watchdog timer timeout event. 1010*1370a723SSascha Wildner @param[in] DataSize The size, in bytes, of WatchdogData. 1011*1370a723SSascha Wildner @param[in] WatchdogData A data buffer that includes a Null-terminated string, optionally 1012*1370a723SSascha Wildner followed by additional binary data. 1013*1370a723SSascha Wildner 1014*1370a723SSascha Wildner @retval EFI_SUCCESS The timeout has been set. 1015*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER The supplied WatchdogCode is invalid. 1016*1370a723SSascha Wildner @retval EFI_UNSUPPORTED The system does not have a watchdog timer. 1017*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The watchdog timer could not be programmed due to a hardware 1018*1370a723SSascha Wildner error. 1019*1370a723SSascha Wildner 1020*1370a723SSascha Wildner **/ 1021*1370a723SSascha Wildner typedef 1022*1370a723SSascha Wildner EFI_STATUS 1023*1370a723SSascha Wildner (EFIAPI *EFI_SET_WATCHDOG_TIMER)( 1024*1370a723SSascha Wildner IN UINTN Timeout, 1025*1370a723SSascha Wildner IN UINT64 WatchdogCode, 1026*1370a723SSascha Wildner IN UINTN DataSize, 1027*1370a723SSascha Wildner IN CHAR16 *WatchdogData OPTIONAL 1028*1370a723SSascha Wildner ); 1029*1370a723SSascha Wildner 1030*1370a723SSascha Wildner /** 1031*1370a723SSascha Wildner Resets the entire platform. 1032*1370a723SSascha Wildner 1033*1370a723SSascha Wildner @param[in] ResetType The type of reset to perform. 1034*1370a723SSascha Wildner @param[in] ResetStatus The status code for the reset. 1035*1370a723SSascha Wildner @param[in] DataSize The size, in bytes, of ResetData. 1036*1370a723SSascha Wildner @param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, or 1037*1370a723SSascha Wildner EfiResetShutdown the data buffer starts with a Null-terminated 1038*1370a723SSascha Wildner string, optionally followed by additional binary data. 1039*1370a723SSascha Wildner The string is a description that the caller may use to further 1040*1370a723SSascha Wildner indicate the reason for the system reset. 1041*1370a723SSascha Wildner For a ResetType of EfiResetPlatformSpecific the data buffer 1042*1370a723SSascha Wildner also starts with a Null-terminated string that is followed 1043*1370a723SSascha Wildner by an EFI_GUID that describes the specific type of reset to perform. 1044*1370a723SSascha Wildner **/ 1045*1370a723SSascha Wildner typedef 1046*1370a723SSascha Wildner VOID 1047*1370a723SSascha Wildner (EFIAPI *EFI_RESET_SYSTEM)( 1048*1370a723SSascha Wildner IN EFI_RESET_TYPE ResetType, 1049*1370a723SSascha Wildner IN EFI_STATUS ResetStatus, 1050*1370a723SSascha Wildner IN UINTN DataSize, 1051*1370a723SSascha Wildner IN VOID *ResetData OPTIONAL 1052*1370a723SSascha Wildner ); 1053*1370a723SSascha Wildner 1054*1370a723SSascha Wildner /** 1055*1370a723SSascha Wildner Returns a monotonically increasing count for the platform. 1056*1370a723SSascha Wildner 1057*1370a723SSascha Wildner @param[out] Count The pointer to returned value. 1058*1370a723SSascha Wildner 1059*1370a723SSascha Wildner @retval EFI_SUCCESS The next monotonic count was returned. 1060*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Count is NULL. 1061*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The device is not functioning properly. 1062*1370a723SSascha Wildner 1063*1370a723SSascha Wildner **/ 1064*1370a723SSascha Wildner typedef 1065*1370a723SSascha Wildner EFI_STATUS 1066*1370a723SSascha Wildner (EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT)( 1067*1370a723SSascha Wildner OUT UINT64 *Count 1068*1370a723SSascha Wildner ); 1069*1370a723SSascha Wildner 1070*1370a723SSascha Wildner /** 1071*1370a723SSascha Wildner Returns the next high 32 bits of the platform's monotonic counter. 1072*1370a723SSascha Wildner 1073*1370a723SSascha Wildner @param[out] HighCount The pointer to returned value. 1074*1370a723SSascha Wildner 1075*1370a723SSascha Wildner @retval EFI_SUCCESS The next high monotonic count was returned. 1076*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER HighCount is NULL. 1077*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The device is not functioning properly. 1078*1370a723SSascha Wildner 1079*1370a723SSascha Wildner **/ 1080*1370a723SSascha Wildner typedef 1081*1370a723SSascha Wildner EFI_STATUS 1082*1370a723SSascha Wildner (EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT)( 1083*1370a723SSascha Wildner OUT UINT32 *HighCount 1084*1370a723SSascha Wildner ); 1085*1370a723SSascha Wildner 1086*1370a723SSascha Wildner /** 1087*1370a723SSascha Wildner Computes and returns a 32-bit CRC for a data buffer. 1088*1370a723SSascha Wildner 1089*1370a723SSascha Wildner @param[in] Data A pointer to the buffer on which the 32-bit CRC is to be computed. 1090*1370a723SSascha Wildner @param[in] DataSize The number of bytes in the buffer Data. 1091*1370a723SSascha Wildner @param[out] Crc32 The 32-bit CRC that was computed for the data buffer specified by Data 1092*1370a723SSascha Wildner and DataSize. 1093*1370a723SSascha Wildner 1094*1370a723SSascha Wildner @retval EFI_SUCCESS The 32-bit CRC was computed for the data buffer and returned in 1095*1370a723SSascha Wildner Crc32. 1096*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Data is NULL. 1097*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Crc32 is NULL. 1098*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER DataSize is 0. 1099*1370a723SSascha Wildner 1100*1370a723SSascha Wildner **/ 1101*1370a723SSascha Wildner typedef 1102*1370a723SSascha Wildner EFI_STATUS 1103*1370a723SSascha Wildner (EFIAPI *EFI_CALCULATE_CRC32)( 1104*1370a723SSascha Wildner IN VOID *Data, 1105*1370a723SSascha Wildner IN UINTN DataSize, 1106*1370a723SSascha Wildner OUT UINT32 *Crc32 1107*1370a723SSascha Wildner ); 1108*1370a723SSascha Wildner 1109*1370a723SSascha Wildner /** 1110*1370a723SSascha Wildner Copies the contents of one buffer to another buffer. 1111*1370a723SSascha Wildner 1112*1370a723SSascha Wildner @param[in] Destination The pointer to the destination buffer of the memory copy. 1113*1370a723SSascha Wildner @param[in] Source The pointer to the source buffer of the memory copy. 1114*1370a723SSascha Wildner @param[in] Length Number of bytes to copy from Source to Destination. 1115*1370a723SSascha Wildner 1116*1370a723SSascha Wildner **/ 1117*1370a723SSascha Wildner typedef 1118*1370a723SSascha Wildner VOID 1119*1370a723SSascha Wildner (EFIAPI *EFI_COPY_MEM)( 1120*1370a723SSascha Wildner IN VOID *Destination, 1121*1370a723SSascha Wildner IN VOID *Source, 1122*1370a723SSascha Wildner IN UINTN Length 1123*1370a723SSascha Wildner ); 1124*1370a723SSascha Wildner 1125*1370a723SSascha Wildner /** 1126*1370a723SSascha Wildner The SetMem() function fills a buffer with a specified value. 1127*1370a723SSascha Wildner 1128*1370a723SSascha Wildner @param[in] Buffer The pointer to the buffer to fill. 1129*1370a723SSascha Wildner @param[in] Size Number of bytes in Buffer to fill. 1130*1370a723SSascha Wildner @param[in] Value Value to fill Buffer with. 1131*1370a723SSascha Wildner 1132*1370a723SSascha Wildner **/ 1133*1370a723SSascha Wildner typedef 1134*1370a723SSascha Wildner VOID 1135*1370a723SSascha Wildner (EFIAPI *EFI_SET_MEM)( 1136*1370a723SSascha Wildner IN VOID *Buffer, 1137*1370a723SSascha Wildner IN UINTN Size, 1138*1370a723SSascha Wildner IN UINT8 Value 1139*1370a723SSascha Wildner ); 1140*1370a723SSascha Wildner 1141*1370a723SSascha Wildner /// 1142*1370a723SSascha Wildner /// Enumeration of EFI Interface Types 1143*1370a723SSascha Wildner /// 1144*1370a723SSascha Wildner typedef enum { 1145*1370a723SSascha Wildner /// 1146*1370a723SSascha Wildner /// Indicates that the supplied protocol interface is supplied in native form. 1147*1370a723SSascha Wildner /// 1148*1370a723SSascha Wildner EFI_NATIVE_INTERFACE 1149*1370a723SSascha Wildner } EFI_INTERFACE_TYPE; 1150*1370a723SSascha Wildner 1151*1370a723SSascha Wildner /** 1152*1370a723SSascha Wildner Installs a protocol interface on a device handle. If the handle does not exist, it is created and added 1153*1370a723SSascha Wildner to the list of handles in the system. InstallMultipleProtocolInterfaces() performs 1154*1370a723SSascha Wildner more error checking than InstallProtocolInterface(), so it is recommended that 1155*1370a723SSascha Wildner InstallMultipleProtocolInterfaces() be used in place of 1156*1370a723SSascha Wildner InstallProtocolInterface() 1157*1370a723SSascha Wildner 1158*1370a723SSascha Wildner @param[in, out] Handle A pointer to the EFI_HANDLE on which the interface is to be installed. 1159*1370a723SSascha Wildner @param[in] Protocol The numeric ID of the protocol interface. 1160*1370a723SSascha Wildner @param[in] InterfaceType Indicates whether Interface is supplied in native form. 1161*1370a723SSascha Wildner @param[in] Interface A pointer to the protocol interface. 1162*1370a723SSascha Wildner 1163*1370a723SSascha Wildner @retval EFI_SUCCESS The protocol interface was installed. 1164*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES Space for a new handle could not be allocated. 1165*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Handle is NULL. 1166*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Protocol is NULL. 1167*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER InterfaceType is not EFI_NATIVE_INTERFACE. 1168*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Protocol is already installed on the handle specified by Handle. 1169*1370a723SSascha Wildner 1170*1370a723SSascha Wildner **/ 1171*1370a723SSascha Wildner typedef 1172*1370a723SSascha Wildner EFI_STATUS 1173*1370a723SSascha Wildner (EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE)( 1174*1370a723SSascha Wildner IN OUT EFI_HANDLE *Handle, 1175*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1176*1370a723SSascha Wildner IN EFI_INTERFACE_TYPE InterfaceType, 1177*1370a723SSascha Wildner IN VOID *Interface 1178*1370a723SSascha Wildner ); 1179*1370a723SSascha Wildner 1180*1370a723SSascha Wildner /** 1181*1370a723SSascha Wildner Installs one or more protocol interfaces into the boot services environment. 1182*1370a723SSascha Wildner 1183*1370a723SSascha Wildner @param[in, out] Handle The pointer to a handle to install the new protocol interfaces on, 1184*1370a723SSascha Wildner or a pointer to NULL if a new handle is to be allocated. 1185*1370a723SSascha Wildner @param ... A variable argument list containing pairs of protocol GUIDs and protocol 1186*1370a723SSascha Wildner interfaces. 1187*1370a723SSascha Wildner 1188*1370a723SSascha Wildner @retval EFI_SUCCESS All the protocol interface was installed. 1189*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols. 1190*1370a723SSascha Wildner @retval EFI_ALREADY_STARTED A Device Path Protocol instance was passed in that is already present in 1191*1370a723SSascha Wildner the handle database. 1192*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Handle is NULL. 1193*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Protocol is already installed on the handle specified by Handle. 1194*1370a723SSascha Wildner 1195*1370a723SSascha Wildner **/ 1196*1370a723SSascha Wildner typedef 1197*1370a723SSascha Wildner EFI_STATUS 1198*1370a723SSascha Wildner (EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES)( 1199*1370a723SSascha Wildner IN OUT EFI_HANDLE *Handle, 1200*1370a723SSascha Wildner ... 1201*1370a723SSascha Wildner ); 1202*1370a723SSascha Wildner 1203*1370a723SSascha Wildner /** 1204*1370a723SSascha Wildner Reinstalls a protocol interface on a device handle. 1205*1370a723SSascha Wildner 1206*1370a723SSascha Wildner @param[in] Handle Handle on which the interface is to be reinstalled. 1207*1370a723SSascha Wildner @param[in] Protocol The numeric ID of the interface. 1208*1370a723SSascha Wildner @param[in] OldInterface A pointer to the old interface. NULL can be used if a structure is not 1209*1370a723SSascha Wildner associated with Protocol. 1210*1370a723SSascha Wildner @param[in] NewInterface A pointer to the new interface. 1211*1370a723SSascha Wildner 1212*1370a723SSascha Wildner @retval EFI_SUCCESS The protocol interface was reinstalled. 1213*1370a723SSascha Wildner @retval EFI_NOT_FOUND The OldInterface on the handle was not found. 1214*1370a723SSascha Wildner @retval EFI_ACCESS_DENIED The protocol interface could not be reinstalled, 1215*1370a723SSascha Wildner because OldInterface is still being used by a 1216*1370a723SSascha Wildner driver that will not release it. 1217*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Handle is NULL. 1218*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Protocol is NULL. 1219*1370a723SSascha Wildner 1220*1370a723SSascha Wildner **/ 1221*1370a723SSascha Wildner typedef 1222*1370a723SSascha Wildner EFI_STATUS 1223*1370a723SSascha Wildner (EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE)( 1224*1370a723SSascha Wildner IN EFI_HANDLE Handle, 1225*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1226*1370a723SSascha Wildner IN VOID *OldInterface, 1227*1370a723SSascha Wildner IN VOID *NewInterface 1228*1370a723SSascha Wildner ); 1229*1370a723SSascha Wildner 1230*1370a723SSascha Wildner /** 1231*1370a723SSascha Wildner Removes a protocol interface from a device handle. It is recommended that 1232*1370a723SSascha Wildner UninstallMultipleProtocolInterfaces() be used in place of 1233*1370a723SSascha Wildner UninstallProtocolInterface(). 1234*1370a723SSascha Wildner 1235*1370a723SSascha Wildner @param[in] Handle The handle on which the interface was installed. 1236*1370a723SSascha Wildner @param[in] Protocol The numeric ID of the interface. 1237*1370a723SSascha Wildner @param[in] Interface A pointer to the interface. 1238*1370a723SSascha Wildner 1239*1370a723SSascha Wildner @retval EFI_SUCCESS The interface was removed. 1240*1370a723SSascha Wildner @retval EFI_NOT_FOUND The interface was not found. 1241*1370a723SSascha Wildner @retval EFI_ACCESS_DENIED The interface was not removed because the interface 1242*1370a723SSascha Wildner is still being used by a driver. 1243*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Handle is NULL. 1244*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Protocol is NULL. 1245*1370a723SSascha Wildner 1246*1370a723SSascha Wildner **/ 1247*1370a723SSascha Wildner typedef 1248*1370a723SSascha Wildner EFI_STATUS 1249*1370a723SSascha Wildner (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE)( 1250*1370a723SSascha Wildner IN EFI_HANDLE Handle, 1251*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1252*1370a723SSascha Wildner IN VOID *Interface 1253*1370a723SSascha Wildner ); 1254*1370a723SSascha Wildner 1255*1370a723SSascha Wildner /** 1256*1370a723SSascha Wildner Removes one or more protocol interfaces into the boot services environment. 1257*1370a723SSascha Wildner 1258*1370a723SSascha Wildner @param[in] Handle The handle to remove the protocol interfaces from. 1259*1370a723SSascha Wildner @param ... A variable argument list containing pairs of protocol GUIDs and 1260*1370a723SSascha Wildner protocol interfaces. 1261*1370a723SSascha Wildner 1262*1370a723SSascha Wildner @retval EFI_SUCCESS All the protocol interfaces were removed. 1263*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER One of the protocol interfaces was not previously installed on Handle. 1264*1370a723SSascha Wildner 1265*1370a723SSascha Wildner **/ 1266*1370a723SSascha Wildner typedef 1267*1370a723SSascha Wildner EFI_STATUS 1268*1370a723SSascha Wildner (EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES)( 1269*1370a723SSascha Wildner IN EFI_HANDLE Handle, 1270*1370a723SSascha Wildner ... 1271*1370a723SSascha Wildner ); 1272*1370a723SSascha Wildner 1273*1370a723SSascha Wildner /** 1274*1370a723SSascha Wildner Queries a handle to determine if it supports a specified protocol. 1275*1370a723SSascha Wildner 1276*1370a723SSascha Wildner @param[in] Handle The handle being queried. 1277*1370a723SSascha Wildner @param[in] Protocol The published unique identifier of the protocol. 1278*1370a723SSascha Wildner @param[out] Interface Supplies the address where a pointer to the corresponding Protocol 1279*1370a723SSascha Wildner Interface is returned. 1280*1370a723SSascha Wildner 1281*1370a723SSascha Wildner @retval EFI_SUCCESS The interface information for the specified protocol was returned. 1282*1370a723SSascha Wildner @retval EFI_UNSUPPORTED The device does not support the specified protocol. 1283*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Handle is NULL. 1284*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Protocol is NULL. 1285*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Interface is NULL. 1286*1370a723SSascha Wildner 1287*1370a723SSascha Wildner **/ 1288*1370a723SSascha Wildner typedef 1289*1370a723SSascha Wildner EFI_STATUS 1290*1370a723SSascha Wildner (EFIAPI *EFI_HANDLE_PROTOCOL)( 1291*1370a723SSascha Wildner IN EFI_HANDLE Handle, 1292*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1293*1370a723SSascha Wildner OUT VOID **Interface 1294*1370a723SSascha Wildner ); 1295*1370a723SSascha Wildner 1296*1370a723SSascha Wildner #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 1297*1370a723SSascha Wildner #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 1298*1370a723SSascha Wildner #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 1299*1370a723SSascha Wildner #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 1300*1370a723SSascha Wildner #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 1301*1370a723SSascha Wildner #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 1302*1370a723SSascha Wildner 1303*1370a723SSascha Wildner /** 1304*1370a723SSascha Wildner Queries a handle to determine if it supports a specified protocol. If the protocol is supported by the 1305*1370a723SSascha Wildner handle, it opens the protocol on behalf of the calling agent. 1306*1370a723SSascha Wildner 1307*1370a723SSascha Wildner @param[in] Handle The handle for the protocol interface that is being opened. 1308*1370a723SSascha Wildner @param[in] Protocol The published unique identifier of the protocol. 1309*1370a723SSascha Wildner @param[out] Interface Supplies the address where a pointer to the corresponding Protocol 1310*1370a723SSascha Wildner Interface is returned. 1311*1370a723SSascha Wildner @param[in] AgentHandle The handle of the agent that is opening the protocol interface 1312*1370a723SSascha Wildner specified by Protocol and Interface. 1313*1370a723SSascha Wildner @param[in] ControllerHandle If the agent that is opening a protocol is a driver that follows the 1314*1370a723SSascha Wildner UEFI Driver Model, then this parameter is the controller handle 1315*1370a723SSascha Wildner that requires the protocol interface. If the agent does not follow 1316*1370a723SSascha Wildner the UEFI Driver Model, then this parameter is optional and may 1317*1370a723SSascha Wildner be NULL. 1318*1370a723SSascha Wildner @param[in] Attributes The open mode of the protocol interface specified by Handle 1319*1370a723SSascha Wildner and Protocol. 1320*1370a723SSascha Wildner 1321*1370a723SSascha Wildner @retval EFI_SUCCESS An item was added to the open list for the protocol interface, and the 1322*1370a723SSascha Wildner protocol interface was returned in Interface. 1323*1370a723SSascha Wildner @retval EFI_UNSUPPORTED Handle does not support Protocol. 1324*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER One or more parameters are invalid. 1325*1370a723SSascha Wildner @retval EFI_ACCESS_DENIED Required attributes can't be supported in current environment. 1326*1370a723SSascha Wildner @retval EFI_ALREADY_STARTED Item on the open list already has requierd attributes whose agent 1327*1370a723SSascha Wildner handle is the same as AgentHandle. 1328*1370a723SSascha Wildner 1329*1370a723SSascha Wildner **/ 1330*1370a723SSascha Wildner typedef 1331*1370a723SSascha Wildner EFI_STATUS 1332*1370a723SSascha Wildner (EFIAPI *EFI_OPEN_PROTOCOL)( 1333*1370a723SSascha Wildner IN EFI_HANDLE Handle, 1334*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1335*1370a723SSascha Wildner OUT VOID **Interface OPTIONAL, 1336*1370a723SSascha Wildner IN EFI_HANDLE AgentHandle, 1337*1370a723SSascha Wildner IN EFI_HANDLE ControllerHandle, 1338*1370a723SSascha Wildner IN UINT32 Attributes 1339*1370a723SSascha Wildner ); 1340*1370a723SSascha Wildner 1341*1370a723SSascha Wildner /** 1342*1370a723SSascha Wildner Closes a protocol on a handle that was opened using OpenProtocol(). 1343*1370a723SSascha Wildner 1344*1370a723SSascha Wildner @param[in] Handle The handle for the protocol interface that was previously opened 1345*1370a723SSascha Wildner with OpenProtocol(), and is now being closed. 1346*1370a723SSascha Wildner @param[in] Protocol The published unique identifier of the protocol. 1347*1370a723SSascha Wildner @param[in] AgentHandle The handle of the agent that is closing the protocol interface. 1348*1370a723SSascha Wildner @param[in] ControllerHandle If the agent that opened a protocol is a driver that follows the 1349*1370a723SSascha Wildner UEFI Driver Model, then this parameter is the controller handle 1350*1370a723SSascha Wildner that required the protocol interface. 1351*1370a723SSascha Wildner 1352*1370a723SSascha Wildner @retval EFI_SUCCESS The protocol instance was closed. 1353*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER 1) Handle is NULL. 1354*1370a723SSascha Wildner 2) AgentHandle is NULL. 1355*1370a723SSascha Wildner 3) ControllerHandle is not NULL and ControllerHandle is not a valid EFI_HANDLE. 1356*1370a723SSascha Wildner 4) Protocol is NULL. 1357*1370a723SSascha Wildner @retval EFI_NOT_FOUND 1) Handle does not support the protocol specified by Protocol. 1358*1370a723SSascha Wildner 2) The protocol interface specified by Handle and Protocol is not 1359*1370a723SSascha Wildner currently open by AgentHandle and ControllerHandle. 1360*1370a723SSascha Wildner 1361*1370a723SSascha Wildner **/ 1362*1370a723SSascha Wildner typedef 1363*1370a723SSascha Wildner EFI_STATUS 1364*1370a723SSascha Wildner (EFIAPI *EFI_CLOSE_PROTOCOL)( 1365*1370a723SSascha Wildner IN EFI_HANDLE Handle, 1366*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1367*1370a723SSascha Wildner IN EFI_HANDLE AgentHandle, 1368*1370a723SSascha Wildner IN EFI_HANDLE ControllerHandle 1369*1370a723SSascha Wildner ); 1370*1370a723SSascha Wildner 1371*1370a723SSascha Wildner /// 1372*1370a723SSascha Wildner /// EFI Oprn Protocol Information Entry 1373*1370a723SSascha Wildner /// 1374*1370a723SSascha Wildner typedef struct { 1375*1370a723SSascha Wildner EFI_HANDLE AgentHandle; 1376*1370a723SSascha Wildner EFI_HANDLE ControllerHandle; 1377*1370a723SSascha Wildner UINT32 Attributes; 1378*1370a723SSascha Wildner UINT32 OpenCount; 1379*1370a723SSascha Wildner } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; 1380*1370a723SSascha Wildner 1381*1370a723SSascha Wildner /** 1382*1370a723SSascha Wildner Retrieves the list of agents that currently have a protocol interface opened. 1383*1370a723SSascha Wildner 1384*1370a723SSascha Wildner @param[in] Handle The handle for the protocol interface that is being queried. 1385*1370a723SSascha Wildner @param[in] Protocol The published unique identifier of the protocol. 1386*1370a723SSascha Wildner @param[out] EntryBuffer A pointer to a buffer of open protocol information in the form of 1387*1370a723SSascha Wildner EFI_OPEN_PROTOCOL_INFORMATION_ENTRY structures. 1388*1370a723SSascha Wildner @param[out] EntryCount A pointer to the number of entries in EntryBuffer. 1389*1370a723SSascha Wildner 1390*1370a723SSascha Wildner @retval EFI_SUCCESS The open protocol information was returned in EntryBuffer, and the 1391*1370a723SSascha Wildner number of entries was returned EntryCount. 1392*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES There are not enough resources available to allocate EntryBuffer. 1393*1370a723SSascha Wildner @retval EFI_NOT_FOUND Handle does not support the protocol specified by Protocol. 1394*1370a723SSascha Wildner 1395*1370a723SSascha Wildner **/ 1396*1370a723SSascha Wildner typedef 1397*1370a723SSascha Wildner EFI_STATUS 1398*1370a723SSascha Wildner (EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION)( 1399*1370a723SSascha Wildner IN EFI_HANDLE Handle, 1400*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1401*1370a723SSascha Wildner OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, 1402*1370a723SSascha Wildner OUT UINTN *EntryCount 1403*1370a723SSascha Wildner ); 1404*1370a723SSascha Wildner 1405*1370a723SSascha Wildner /** 1406*1370a723SSascha Wildner Retrieves the list of protocol interface GUIDs that are installed on a handle in a buffer allocated 1407*1370a723SSascha Wildner from pool. 1408*1370a723SSascha Wildner 1409*1370a723SSascha Wildner @param[in] Handle The handle from which to retrieve the list of protocol interface 1410*1370a723SSascha Wildner GUIDs. 1411*1370a723SSascha Wildner @param[out] ProtocolBuffer A pointer to the list of protocol interface GUID pointers that are 1412*1370a723SSascha Wildner installed on Handle. 1413*1370a723SSascha Wildner @param[out] ProtocolBufferCount A pointer to the number of GUID pointers present in 1414*1370a723SSascha Wildner ProtocolBuffer. 1415*1370a723SSascha Wildner 1416*1370a723SSascha Wildner @retval EFI_SUCCESS The list of protocol interface GUIDs installed on Handle was returned in 1417*1370a723SSascha Wildner ProtocolBuffer. The number of protocol interface GUIDs was 1418*1370a723SSascha Wildner returned in ProtocolBufferCount. 1419*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES There is not enough pool memory to store the results. 1420*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Handle is NULL. 1421*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Handle is not a valid EFI_HANDLE. 1422*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER ProtocolBuffer is NULL. 1423*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER ProtocolBufferCount is NULL. 1424*1370a723SSascha Wildner 1425*1370a723SSascha Wildner **/ 1426*1370a723SSascha Wildner typedef 1427*1370a723SSascha Wildner EFI_STATUS 1428*1370a723SSascha Wildner (EFIAPI *EFI_PROTOCOLS_PER_HANDLE)( 1429*1370a723SSascha Wildner IN EFI_HANDLE Handle, 1430*1370a723SSascha Wildner OUT EFI_GUID ***ProtocolBuffer, 1431*1370a723SSascha Wildner OUT UINTN *ProtocolBufferCount 1432*1370a723SSascha Wildner ); 1433*1370a723SSascha Wildner 1434*1370a723SSascha Wildner /** 1435*1370a723SSascha Wildner Creates an event that is to be signaled whenever an interface is installed for a specified protocol. 1436*1370a723SSascha Wildner 1437*1370a723SSascha Wildner @param[in] Protocol The numeric ID of the protocol for which the event is to be registered. 1438*1370a723SSascha Wildner @param[in] Event Event that is to be signaled whenever a protocol interface is registered 1439*1370a723SSascha Wildner for Protocol. 1440*1370a723SSascha Wildner @param[out] Registration A pointer to a memory location to receive the registration value. 1441*1370a723SSascha Wildner 1442*1370a723SSascha Wildner @retval EFI_SUCCESS The notification event has been registered. 1443*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES Space for the notification event could not be allocated. 1444*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Protocol is NULL. 1445*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Event is NULL. 1446*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Registration is NULL. 1447*1370a723SSascha Wildner 1448*1370a723SSascha Wildner **/ 1449*1370a723SSascha Wildner typedef 1450*1370a723SSascha Wildner EFI_STATUS 1451*1370a723SSascha Wildner (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY)( 1452*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1453*1370a723SSascha Wildner IN EFI_EVENT Event, 1454*1370a723SSascha Wildner OUT VOID **Registration 1455*1370a723SSascha Wildner ); 1456*1370a723SSascha Wildner 1457*1370a723SSascha Wildner /// 1458*1370a723SSascha Wildner /// Enumeration of EFI Locate Search Types 1459*1370a723SSascha Wildner /// 1460*1370a723SSascha Wildner typedef enum { 1461*1370a723SSascha Wildner /// 1462*1370a723SSascha Wildner /// Retrieve all the handles in the handle database. 1463*1370a723SSascha Wildner /// 1464*1370a723SSascha Wildner AllHandles, 1465*1370a723SSascha Wildner /// 1466*1370a723SSascha Wildner /// Retrieve the next handle fron a RegisterProtocolNotify() event. 1467*1370a723SSascha Wildner /// 1468*1370a723SSascha Wildner ByRegisterNotify, 1469*1370a723SSascha Wildner /// 1470*1370a723SSascha Wildner /// Retrieve the set of handles from the handle database that support a 1471*1370a723SSascha Wildner /// specified protocol. 1472*1370a723SSascha Wildner /// 1473*1370a723SSascha Wildner ByProtocol 1474*1370a723SSascha Wildner } EFI_LOCATE_SEARCH_TYPE; 1475*1370a723SSascha Wildner 1476*1370a723SSascha Wildner /** 1477*1370a723SSascha Wildner Returns an array of handles that support a specified protocol. 1478*1370a723SSascha Wildner 1479*1370a723SSascha Wildner @param[in] SearchType Specifies which handle(s) are to be returned. 1480*1370a723SSascha Wildner @param[in] Protocol Specifies the protocol to search by. 1481*1370a723SSascha Wildner @param[in] SearchKey Specifies the search key. 1482*1370a723SSascha Wildner @param[in, out] BufferSize On input, the size in bytes of Buffer. On output, the size in bytes of 1483*1370a723SSascha Wildner the array returned in Buffer (if the buffer was large enough) or the 1484*1370a723SSascha Wildner size, in bytes, of the buffer needed to obtain the array (if the buffer was 1485*1370a723SSascha Wildner not large enough). 1486*1370a723SSascha Wildner @param[out] Buffer The buffer in which the array is returned. 1487*1370a723SSascha Wildner 1488*1370a723SSascha Wildner @retval EFI_SUCCESS The array of handles was returned. 1489*1370a723SSascha Wildner @retval EFI_NOT_FOUND No handles match the search. 1490*1370a723SSascha Wildner @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small for the result. 1491*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER SearchType is not a member of EFI_LOCATE_SEARCH_TYPE. 1492*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER SearchType is ByRegisterNotify and SearchKey is NULL. 1493*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER SearchType is ByProtocol and Protocol is NULL. 1494*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER One or more matches are found and BufferSize is NULL. 1495*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER BufferSize is large enough for the result and Buffer is NULL. 1496*1370a723SSascha Wildner 1497*1370a723SSascha Wildner **/ 1498*1370a723SSascha Wildner typedef 1499*1370a723SSascha Wildner EFI_STATUS 1500*1370a723SSascha Wildner (EFIAPI *EFI_LOCATE_HANDLE)( 1501*1370a723SSascha Wildner IN EFI_LOCATE_SEARCH_TYPE SearchType, 1502*1370a723SSascha Wildner IN EFI_GUID *Protocol OPTIONAL, 1503*1370a723SSascha Wildner IN VOID *SearchKey OPTIONAL, 1504*1370a723SSascha Wildner IN OUT UINTN *BufferSize, 1505*1370a723SSascha Wildner OUT EFI_HANDLE *Buffer 1506*1370a723SSascha Wildner ); 1507*1370a723SSascha Wildner 1508*1370a723SSascha Wildner /** 1509*1370a723SSascha Wildner Locates the handle to a device on the device path that supports the specified protocol. 1510*1370a723SSascha Wildner 1511*1370a723SSascha Wildner @param[in] Protocol Specifies the protocol to search for. 1512*1370a723SSascha Wildner @param[in, out] DevicePath On input, a pointer to a pointer to the device path. On output, the device 1513*1370a723SSascha Wildner path pointer is modified to point to the remaining part of the device 1514*1370a723SSascha Wildner path. 1515*1370a723SSascha Wildner @param[out] Device A pointer to the returned device handle. 1516*1370a723SSascha Wildner 1517*1370a723SSascha Wildner @retval EFI_SUCCESS The resulting handle was returned. 1518*1370a723SSascha Wildner @retval EFI_NOT_FOUND No handles match the search. 1519*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Protocol is NULL. 1520*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER DevicePath is NULL. 1521*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER A handle matched the search and Device is NULL. 1522*1370a723SSascha Wildner 1523*1370a723SSascha Wildner **/ 1524*1370a723SSascha Wildner typedef 1525*1370a723SSascha Wildner EFI_STATUS 1526*1370a723SSascha Wildner (EFIAPI *EFI_LOCATE_DEVICE_PATH)( 1527*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1528*1370a723SSascha Wildner IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath, 1529*1370a723SSascha Wildner OUT EFI_HANDLE *Device 1530*1370a723SSascha Wildner ); 1531*1370a723SSascha Wildner 1532*1370a723SSascha Wildner /** 1533*1370a723SSascha Wildner Adds, updates, or removes a configuration table entry from the EFI System Table. 1534*1370a723SSascha Wildner 1535*1370a723SSascha Wildner @param[in] Guid A pointer to the GUID for the entry to add, update, or remove. 1536*1370a723SSascha Wildner @param[in] Table A pointer to the configuration table for the entry to add, update, or 1537*1370a723SSascha Wildner remove. May be NULL. 1538*1370a723SSascha Wildner 1539*1370a723SSascha Wildner @retval EFI_SUCCESS The (Guid, Table) pair was added, updated, or removed. 1540*1370a723SSascha Wildner @retval EFI_NOT_FOUND An attempt was made to delete a nonexistent entry. 1541*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Guid is NULL. 1542*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES There is not enough memory available to complete the operation. 1543*1370a723SSascha Wildner 1544*1370a723SSascha Wildner **/ 1545*1370a723SSascha Wildner typedef 1546*1370a723SSascha Wildner EFI_STATUS 1547*1370a723SSascha Wildner (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE)( 1548*1370a723SSascha Wildner IN EFI_GUID *Guid, 1549*1370a723SSascha Wildner IN VOID *Table 1550*1370a723SSascha Wildner ); 1551*1370a723SSascha Wildner 1552*1370a723SSascha Wildner /** 1553*1370a723SSascha Wildner Returns an array of handles that support the requested protocol in a buffer allocated from pool. 1554*1370a723SSascha Wildner 1555*1370a723SSascha Wildner @param[in] SearchType Specifies which handle(s) are to be returned. 1556*1370a723SSascha Wildner @param[in] Protocol Provides the protocol to search by. 1557*1370a723SSascha Wildner This parameter is only valid for a SearchType of ByProtocol. 1558*1370a723SSascha Wildner @param[in] SearchKey Supplies the search key depending on the SearchType. 1559*1370a723SSascha Wildner @param[out] NoHandles The number of handles returned in Buffer. 1560*1370a723SSascha Wildner @param[out] Buffer A pointer to the buffer to return the requested array of handles that 1561*1370a723SSascha Wildner support Protocol. 1562*1370a723SSascha Wildner 1563*1370a723SSascha Wildner @retval EFI_SUCCESS The array of handles was returned in Buffer, and the number of 1564*1370a723SSascha Wildner handles in Buffer was returned in NoHandles. 1565*1370a723SSascha Wildner @retval EFI_NOT_FOUND No handles match the search. 1566*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES There is not enough pool memory to store the matching results. 1567*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER NoHandles is NULL. 1568*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Buffer is NULL. 1569*1370a723SSascha Wildner 1570*1370a723SSascha Wildner **/ 1571*1370a723SSascha Wildner typedef 1572*1370a723SSascha Wildner EFI_STATUS 1573*1370a723SSascha Wildner (EFIAPI *EFI_LOCATE_HANDLE_BUFFER)( 1574*1370a723SSascha Wildner IN EFI_LOCATE_SEARCH_TYPE SearchType, 1575*1370a723SSascha Wildner IN EFI_GUID *Protocol OPTIONAL, 1576*1370a723SSascha Wildner IN VOID *SearchKey OPTIONAL, 1577*1370a723SSascha Wildner OUT UINTN *NoHandles, 1578*1370a723SSascha Wildner OUT EFI_HANDLE **Buffer 1579*1370a723SSascha Wildner ); 1580*1370a723SSascha Wildner 1581*1370a723SSascha Wildner /** 1582*1370a723SSascha Wildner Returns the first protocol instance that matches the given protocol. 1583*1370a723SSascha Wildner 1584*1370a723SSascha Wildner @param[in] Protocol Provides the protocol to search for. 1585*1370a723SSascha Wildner @param[in] Registration Optional registration key returned from 1586*1370a723SSascha Wildner RegisterProtocolNotify(). 1587*1370a723SSascha Wildner @param[out] Interface On return, a pointer to the first interface that matches Protocol and 1588*1370a723SSascha Wildner Registration. 1589*1370a723SSascha Wildner 1590*1370a723SSascha Wildner @retval EFI_SUCCESS A protocol instance matching Protocol was found and returned in 1591*1370a723SSascha Wildner Interface. 1592*1370a723SSascha Wildner @retval EFI_NOT_FOUND No protocol instances were found that match Protocol and 1593*1370a723SSascha Wildner Registration. 1594*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER Interface is NULL. 1595*1370a723SSascha Wildner Protocol is NULL. 1596*1370a723SSascha Wildner 1597*1370a723SSascha Wildner **/ 1598*1370a723SSascha Wildner typedef 1599*1370a723SSascha Wildner EFI_STATUS 1600*1370a723SSascha Wildner (EFIAPI *EFI_LOCATE_PROTOCOL)( 1601*1370a723SSascha Wildner IN EFI_GUID *Protocol, 1602*1370a723SSascha Wildner IN VOID *Registration OPTIONAL, 1603*1370a723SSascha Wildner OUT VOID **Interface 1604*1370a723SSascha Wildner ); 1605*1370a723SSascha Wildner 1606*1370a723SSascha Wildner /// 1607*1370a723SSascha Wildner /// EFI Capsule Block Descriptor 1608*1370a723SSascha Wildner /// 1609*1370a723SSascha Wildner typedef struct { 1610*1370a723SSascha Wildner /// 1611*1370a723SSascha Wildner /// Length in bytes of the data pointed to by DataBlock/ContinuationPointer. 1612*1370a723SSascha Wildner /// 1613*1370a723SSascha Wildner UINT64 Length; 1614*1370a723SSascha Wildner union { 1615*1370a723SSascha Wildner /// 1616*1370a723SSascha Wildner /// Physical address of the data block. This member of the union is 1617*1370a723SSascha Wildner /// used if Length is not equal to zero. 1618*1370a723SSascha Wildner /// 1619*1370a723SSascha Wildner EFI_PHYSICAL_ADDRESS DataBlock; 1620*1370a723SSascha Wildner /// 1621*1370a723SSascha Wildner /// Physical address of another block of 1622*1370a723SSascha Wildner /// EFI_CAPSULE_BLOCK_DESCRIPTOR structures. This 1623*1370a723SSascha Wildner /// member of the union is used if Length is equal to zero. If 1624*1370a723SSascha Wildner /// ContinuationPointer is zero this entry represents the end of the list. 1625*1370a723SSascha Wildner /// 1626*1370a723SSascha Wildner EFI_PHYSICAL_ADDRESS ContinuationPointer; 1627*1370a723SSascha Wildner } Union; 1628*1370a723SSascha Wildner } EFI_CAPSULE_BLOCK_DESCRIPTOR; 1629*1370a723SSascha Wildner 1630*1370a723SSascha Wildner /// 1631*1370a723SSascha Wildner /// EFI Capsule Header. 1632*1370a723SSascha Wildner /// 1633*1370a723SSascha Wildner typedef struct { 1634*1370a723SSascha Wildner /// 1635*1370a723SSascha Wildner /// A GUID that defines the contents of a capsule. 1636*1370a723SSascha Wildner /// 1637*1370a723SSascha Wildner EFI_GUID CapsuleGuid; 1638*1370a723SSascha Wildner /// 1639*1370a723SSascha Wildner /// The size of the capsule header. This may be larger than the size of 1640*1370a723SSascha Wildner /// the EFI_CAPSULE_HEADER since CapsuleGuid may imply 1641*1370a723SSascha Wildner /// extended header entries 1642*1370a723SSascha Wildner /// 1643*1370a723SSascha Wildner UINT32 HeaderSize; 1644*1370a723SSascha Wildner /// 1645*1370a723SSascha Wildner /// Bit-mapped list describing the capsule attributes. The Flag values 1646*1370a723SSascha Wildner /// of 0x0000 - 0xFFFF are defined by CapsuleGuid. Flag values 1647*1370a723SSascha Wildner /// of 0x10000 - 0xFFFFFFFF are defined by this specification 1648*1370a723SSascha Wildner /// 1649*1370a723SSascha Wildner UINT32 Flags; 1650*1370a723SSascha Wildner /// 1651*1370a723SSascha Wildner /// Size in bytes of the capsule. 1652*1370a723SSascha Wildner /// 1653*1370a723SSascha Wildner UINT32 CapsuleImageSize; 1654*1370a723SSascha Wildner } EFI_CAPSULE_HEADER; 1655*1370a723SSascha Wildner 1656*1370a723SSascha Wildner /// 1657*1370a723SSascha Wildner /// The EFI System Table entry must point to an array of capsules 1658*1370a723SSascha Wildner /// that contain the same CapsuleGuid value. The array must be 1659*1370a723SSascha Wildner /// prefixed by a UINT32 that represents the size of the array of capsules. 1660*1370a723SSascha Wildner /// 1661*1370a723SSascha Wildner typedef struct { 1662*1370a723SSascha Wildner /// 1663*1370a723SSascha Wildner /// the size of the array of capsules. 1664*1370a723SSascha Wildner /// 1665*1370a723SSascha Wildner UINT32 CapsuleArrayNumber; 1666*1370a723SSascha Wildner /// 1667*1370a723SSascha Wildner /// Point to an array of capsules that contain the same CapsuleGuid value. 1668*1370a723SSascha Wildner /// 1669*1370a723SSascha Wildner VOID *CapsulePtr[1]; 1670*1370a723SSascha Wildner } EFI_CAPSULE_TABLE; 1671*1370a723SSascha Wildner 1672*1370a723SSascha Wildner #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 1673*1370a723SSascha Wildner #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 1674*1370a723SSascha Wildner #define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 1675*1370a723SSascha Wildner 1676*1370a723SSascha Wildner /** 1677*1370a723SSascha Wildner Passes capsules to the firmware with both virtual and physical mapping. Depending on the intended 1678*1370a723SSascha Wildner consumption, the firmware may process the capsule immediately. If the payload should persist 1679*1370a723SSascha Wildner across a system reset, the reset value returned from EFI_QueryCapsuleCapabilities must 1680*1370a723SSascha Wildner be passed into ResetSystem() and will cause the capsule to be processed by the firmware as 1681*1370a723SSascha Wildner part of the reset process. 1682*1370a723SSascha Wildner 1683*1370a723SSascha Wildner @param[in] CapsuleHeaderArray Virtual pointer to an array of virtual pointers to the capsules 1684*1370a723SSascha Wildner being passed into update capsule. 1685*1370a723SSascha Wildner @param[in] CapsuleCount Number of pointers to EFI_CAPSULE_HEADER in 1686*1370a723SSascha Wildner CaspuleHeaderArray. 1687*1370a723SSascha Wildner @param[in] ScatterGatherList Physical pointer to a set of 1688*1370a723SSascha Wildner EFI_CAPSULE_BLOCK_DESCRIPTOR that describes the 1689*1370a723SSascha Wildner location in physical memory of a set of capsules. 1690*1370a723SSascha Wildner 1691*1370a723SSascha Wildner @retval EFI_SUCCESS Valid capsule was passed. If 1692*1370a723SSascha Wildner CAPSULE_FLAGS_PERSIT_ACROSS_RESET is not set, the 1693*1370a723SSascha Wildner capsule has been successfully processed by the firmware. 1694*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER CapsuleSize is NULL, or an incompatible set of flags were 1695*1370a723SSascha Wildner set in the capsule header. 1696*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER CapsuleCount is 0. 1697*1370a723SSascha Wildner @retval EFI_DEVICE_ERROR The capsule update was started, but failed due to a device error. 1698*1370a723SSascha Wildner @retval EFI_UNSUPPORTED The capsule type is not supported on this platform. 1699*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has been previously called this error indicates the capsule 1700*1370a723SSascha Wildner is compatible with this platform but is not capable of being submitted or processed 1701*1370a723SSascha Wildner in runtime. The caller may resubmit the capsule prior to ExitBootServices(). 1702*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has not been previously called then this error indicates 1703*1370a723SSascha Wildner the capsule is compatible with this platform but there are insufficient resources to process. 1704*1370a723SSascha Wildner 1705*1370a723SSascha Wildner **/ 1706*1370a723SSascha Wildner typedef 1707*1370a723SSascha Wildner EFI_STATUS 1708*1370a723SSascha Wildner (EFIAPI *EFI_UPDATE_CAPSULE)( 1709*1370a723SSascha Wildner IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, 1710*1370a723SSascha Wildner IN UINTN CapsuleCount, 1711*1370a723SSascha Wildner IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL 1712*1370a723SSascha Wildner ); 1713*1370a723SSascha Wildner 1714*1370a723SSascha Wildner /** 1715*1370a723SSascha Wildner Returns if the capsule can be supported via UpdateCapsule(). 1716*1370a723SSascha Wildner 1717*1370a723SSascha Wildner @param[in] CapsuleHeaderArray Virtual pointer to an array of virtual pointers to the capsules 1718*1370a723SSascha Wildner being passed into update capsule. 1719*1370a723SSascha Wildner @param[in] CapsuleCount Number of pointers to EFI_CAPSULE_HEADER in 1720*1370a723SSascha Wildner CaspuleHeaderArray. 1721*1370a723SSascha Wildner @param[out] MaxiumCapsuleSize On output the maximum size that UpdateCapsule() can 1722*1370a723SSascha Wildner support as an argument to UpdateCapsule() via 1723*1370a723SSascha Wildner CapsuleHeaderArray and ScatterGatherList. 1724*1370a723SSascha Wildner @param[out] ResetType Returns the type of reset required for the capsule update. 1725*1370a723SSascha Wildner 1726*1370a723SSascha Wildner @retval EFI_SUCCESS Valid answer returned. 1727*1370a723SSascha Wildner @retval EFI_UNSUPPORTED The capsule type is not supported on this platform, and 1728*1370a723SSascha Wildner MaximumCapsuleSize and ResetType are undefined. 1729*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER MaximumCapsuleSize is NULL. 1730*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has been previously called this error indicates the capsule 1731*1370a723SSascha Wildner is compatible with this platform but is not capable of being submitted or processed 1732*1370a723SSascha Wildner in runtime. The caller may resubmit the capsule prior to ExitBootServices(). 1733*1370a723SSascha Wildner @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has not been previously called then this error indicates 1734*1370a723SSascha Wildner the capsule is compatible with this platform but there are insufficient resources to process. 1735*1370a723SSascha Wildner 1736*1370a723SSascha Wildner **/ 1737*1370a723SSascha Wildner typedef 1738*1370a723SSascha Wildner EFI_STATUS 1739*1370a723SSascha Wildner (EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES)( 1740*1370a723SSascha Wildner IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, 1741*1370a723SSascha Wildner IN UINTN CapsuleCount, 1742*1370a723SSascha Wildner OUT UINT64 *MaximumCapsuleSize, 1743*1370a723SSascha Wildner OUT EFI_RESET_TYPE *ResetType 1744*1370a723SSascha Wildner ); 1745*1370a723SSascha Wildner 1746*1370a723SSascha Wildner /** 1747*1370a723SSascha Wildner Returns information about the EFI variables. 1748*1370a723SSascha Wildner 1749*1370a723SSascha Wildner @param[in] Attributes Attributes bitmask to specify the type of variables on 1750*1370a723SSascha Wildner which to return information. 1751*1370a723SSascha Wildner @param[out] MaximumVariableStorageSize On output the maximum size of the storage space 1752*1370a723SSascha Wildner available for the EFI variables associated with the 1753*1370a723SSascha Wildner attributes specified. 1754*1370a723SSascha Wildner @param[out] RemainingVariableStorageSize Returns the remaining size of the storage space 1755*1370a723SSascha Wildner available for the EFI variables associated with the 1756*1370a723SSascha Wildner attributes specified. 1757*1370a723SSascha Wildner @param[out] MaximumVariableSize Returns the maximum size of the individual EFI 1758*1370a723SSascha Wildner variables associated with the attributes specified. 1759*1370a723SSascha Wildner 1760*1370a723SSascha Wildner @retval EFI_SUCCESS Valid answer returned. 1761*1370a723SSascha Wildner @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits was supplied 1762*1370a723SSascha Wildner @retval EFI_UNSUPPORTED The attribute is not supported on this platform, and the 1763*1370a723SSascha Wildner MaximumVariableStorageSize, 1764*1370a723SSascha Wildner RemainingVariableStorageSize, MaximumVariableSize 1765*1370a723SSascha Wildner are undefined. 1766*1370a723SSascha Wildner 1767*1370a723SSascha Wildner **/ 1768*1370a723SSascha Wildner typedef 1769*1370a723SSascha Wildner EFI_STATUS 1770*1370a723SSascha Wildner (EFIAPI *EFI_QUERY_VARIABLE_INFO)( 1771*1370a723SSascha Wildner IN UINT32 Attributes, 1772*1370a723SSascha Wildner OUT UINT64 *MaximumVariableStorageSize, 1773*1370a723SSascha Wildner OUT UINT64 *RemainingVariableStorageSize, 1774*1370a723SSascha Wildner OUT UINT64 *MaximumVariableSize 1775*1370a723SSascha Wildner ); 1776*1370a723SSascha Wildner 1777*1370a723SSascha Wildner // 1778*1370a723SSascha Wildner // Firmware should stop at a firmware user interface on next boot 1779*1370a723SSascha Wildner // 1780*1370a723SSascha Wildner #define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001 1781*1370a723SSascha Wildner #define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION 0x0000000000000002 1782*1370a723SSascha Wildner #define EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED 0x0000000000000004 1783*1370a723SSascha Wildner #define EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED 0x0000000000000008 1784*1370a723SSascha Wildner #define EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED 0x0000000000000010 1785*1370a723SSascha Wildner #define EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY 0x0000000000000040 1786*1370a723SSascha Wildner #define EFI_OS_INDICATIONS_JSON_CONFIG_DATA_REFRESH 0x0000000000000080 1787*1370a723SSascha Wildner 1788*1370a723SSascha Wildner // 1789*1370a723SSascha Wildner // EFI Runtime Services Table 1790*1370a723SSascha Wildner // 1791*1370a723SSascha Wildner #define EFI_SYSTEM_TABLE_SIGNATURE SIGNATURE_64 ('I','B','I',' ','S','Y','S','T') 1792*1370a723SSascha Wildner #define EFI_2_80_SYSTEM_TABLE_REVISION ((2 << 16) | (80)) 1793*1370a723SSascha Wildner #define EFI_2_70_SYSTEM_TABLE_REVISION ((2 << 16) | (70)) 1794*1370a723SSascha Wildner #define EFI_2_60_SYSTEM_TABLE_REVISION ((2 << 16) | (60)) 1795*1370a723SSascha Wildner #define EFI_2_50_SYSTEM_TABLE_REVISION ((2 << 16) | (50)) 1796*1370a723SSascha Wildner #define EFI_2_40_SYSTEM_TABLE_REVISION ((2 << 16) | (40)) 1797*1370a723SSascha Wildner #define EFI_2_31_SYSTEM_TABLE_REVISION ((2 << 16) | (31)) 1798*1370a723SSascha Wildner #define EFI_2_30_SYSTEM_TABLE_REVISION ((2 << 16) | (30)) 1799*1370a723SSascha Wildner #define EFI_2_20_SYSTEM_TABLE_REVISION ((2 << 16) | (20)) 1800*1370a723SSascha Wildner #define EFI_2_10_SYSTEM_TABLE_REVISION ((2 << 16) | (10)) 1801*1370a723SSascha Wildner #define EFI_2_00_SYSTEM_TABLE_REVISION ((2 << 16) | (00)) 1802*1370a723SSascha Wildner #define EFI_1_10_SYSTEM_TABLE_REVISION ((1 << 16) | (10)) 1803*1370a723SSascha Wildner #define EFI_1_02_SYSTEM_TABLE_REVISION ((1 << 16) | (02)) 1804*1370a723SSascha Wildner #define EFI_SYSTEM_TABLE_REVISION EFI_2_70_SYSTEM_TABLE_REVISION 1805*1370a723SSascha Wildner #define EFI_SPECIFICATION_VERSION EFI_SYSTEM_TABLE_REVISION 1806*1370a723SSascha Wildner 1807*1370a723SSascha Wildner #define EFI_RUNTIME_SERVICES_SIGNATURE SIGNATURE_64 ('R','U','N','T','S','E','R','V') 1808*1370a723SSascha Wildner #define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION 1809*1370a723SSascha Wildner 1810*1370a723SSascha Wildner /// 1811*1370a723SSascha Wildner /// EFI Runtime Services Table. 1812*1370a723SSascha Wildner /// 1813*1370a723SSascha Wildner typedef struct { 1814*1370a723SSascha Wildner /// 1815*1370a723SSascha Wildner /// The table header for the EFI Runtime Services Table. 1816*1370a723SSascha Wildner /// 1817*1370a723SSascha Wildner EFI_TABLE_HEADER Hdr; 1818*1370a723SSascha Wildner 1819*1370a723SSascha Wildner // 1820*1370a723SSascha Wildner // Time Services 1821*1370a723SSascha Wildner // 1822*1370a723SSascha Wildner EFI_GET_TIME GetTime; 1823*1370a723SSascha Wildner EFI_SET_TIME SetTime; 1824*1370a723SSascha Wildner EFI_GET_WAKEUP_TIME GetWakeupTime; 1825*1370a723SSascha Wildner EFI_SET_WAKEUP_TIME SetWakeupTime; 1826*1370a723SSascha Wildner 1827*1370a723SSascha Wildner // 1828*1370a723SSascha Wildner // Virtual Memory Services 1829*1370a723SSascha Wildner // 1830*1370a723SSascha Wildner EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; 1831*1370a723SSascha Wildner EFI_CONVERT_POINTER ConvertPointer; 1832*1370a723SSascha Wildner 1833*1370a723SSascha Wildner // 1834*1370a723SSascha Wildner // Variable Services 1835*1370a723SSascha Wildner // 1836*1370a723SSascha Wildner EFI_GET_VARIABLE GetVariable; 1837*1370a723SSascha Wildner EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; 1838*1370a723SSascha Wildner EFI_SET_VARIABLE SetVariable; 1839*1370a723SSascha Wildner 1840*1370a723SSascha Wildner // 1841*1370a723SSascha Wildner // Miscellaneous Services 1842*1370a723SSascha Wildner // 1843*1370a723SSascha Wildner EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; 1844*1370a723SSascha Wildner EFI_RESET_SYSTEM ResetSystem; 1845*1370a723SSascha Wildner 1846*1370a723SSascha Wildner // 1847*1370a723SSascha Wildner // UEFI 2.0 Capsule Services 1848*1370a723SSascha Wildner // 1849*1370a723SSascha Wildner EFI_UPDATE_CAPSULE UpdateCapsule; 1850*1370a723SSascha Wildner EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; 1851*1370a723SSascha Wildner 1852*1370a723SSascha Wildner // 1853*1370a723SSascha Wildner // Miscellaneous UEFI 2.0 Service 1854*1370a723SSascha Wildner // 1855*1370a723SSascha Wildner EFI_QUERY_VARIABLE_INFO QueryVariableInfo; 1856*1370a723SSascha Wildner } EFI_RUNTIME_SERVICES; 1857*1370a723SSascha Wildner 1858*1370a723SSascha Wildner #define EFI_BOOT_SERVICES_SIGNATURE SIGNATURE_64 ('B','O','O','T','S','E','R','V') 1859*1370a723SSascha Wildner #define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION 1860*1370a723SSascha Wildner 1861*1370a723SSascha Wildner /// 1862*1370a723SSascha Wildner /// EFI Boot Services Table. 1863*1370a723SSascha Wildner /// 1864*1370a723SSascha Wildner typedef struct { 1865*1370a723SSascha Wildner /// 1866*1370a723SSascha Wildner /// The table header for the EFI Boot Services Table. 1867*1370a723SSascha Wildner /// 1868*1370a723SSascha Wildner EFI_TABLE_HEADER Hdr; 1869*1370a723SSascha Wildner 1870*1370a723SSascha Wildner // 1871*1370a723SSascha Wildner // Task Priority Services 1872*1370a723SSascha Wildner // 1873*1370a723SSascha Wildner EFI_RAISE_TPL RaiseTPL; 1874*1370a723SSascha Wildner EFI_RESTORE_TPL RestoreTPL; 1875*1370a723SSascha Wildner 1876*1370a723SSascha Wildner // 1877*1370a723SSascha Wildner // Memory Services 1878*1370a723SSascha Wildner // 1879*1370a723SSascha Wildner EFI_ALLOCATE_PAGES AllocatePages; 1880*1370a723SSascha Wildner EFI_FREE_PAGES FreePages; 1881*1370a723SSascha Wildner EFI_GET_MEMORY_MAP GetMemoryMap; 1882*1370a723SSascha Wildner EFI_ALLOCATE_POOL AllocatePool; 1883*1370a723SSascha Wildner EFI_FREE_POOL FreePool; 1884*1370a723SSascha Wildner 1885*1370a723SSascha Wildner // 1886*1370a723SSascha Wildner // Event & Timer Services 1887*1370a723SSascha Wildner // 1888*1370a723SSascha Wildner EFI_CREATE_EVENT CreateEvent; 1889*1370a723SSascha Wildner EFI_SET_TIMER SetTimer; 1890*1370a723SSascha Wildner EFI_WAIT_FOR_EVENT WaitForEvent; 1891*1370a723SSascha Wildner EFI_SIGNAL_EVENT SignalEvent; 1892*1370a723SSascha Wildner EFI_CLOSE_EVENT CloseEvent; 1893*1370a723SSascha Wildner EFI_CHECK_EVENT CheckEvent; 1894*1370a723SSascha Wildner 1895*1370a723SSascha Wildner // 1896*1370a723SSascha Wildner // Protocol Handler Services 1897*1370a723SSascha Wildner // 1898*1370a723SSascha Wildner EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; 1899*1370a723SSascha Wildner EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; 1900*1370a723SSascha Wildner EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; 1901*1370a723SSascha Wildner EFI_HANDLE_PROTOCOL HandleProtocol; 1902*1370a723SSascha Wildner VOID *Reserved; 1903*1370a723SSascha Wildner EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; 1904*1370a723SSascha Wildner EFI_LOCATE_HANDLE LocateHandle; 1905*1370a723SSascha Wildner EFI_LOCATE_DEVICE_PATH LocateDevicePath; 1906*1370a723SSascha Wildner EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; 1907*1370a723SSascha Wildner 1908*1370a723SSascha Wildner // 1909*1370a723SSascha Wildner // Image Services 1910*1370a723SSascha Wildner // 1911*1370a723SSascha Wildner EFI_IMAGE_LOAD LoadImage; 1912*1370a723SSascha Wildner EFI_IMAGE_START StartImage; 1913*1370a723SSascha Wildner EFI_EXIT Exit; 1914*1370a723SSascha Wildner EFI_IMAGE_UNLOAD UnloadImage; 1915*1370a723SSascha Wildner EFI_EXIT_BOOT_SERVICES ExitBootServices; 1916*1370a723SSascha Wildner 1917*1370a723SSascha Wildner // 1918*1370a723SSascha Wildner // Miscellaneous Services 1919*1370a723SSascha Wildner // 1920*1370a723SSascha Wildner EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; 1921*1370a723SSascha Wildner EFI_STALL Stall; 1922*1370a723SSascha Wildner EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; 1923*1370a723SSascha Wildner 1924*1370a723SSascha Wildner // 1925*1370a723SSascha Wildner // DriverSupport Services 1926*1370a723SSascha Wildner // 1927*1370a723SSascha Wildner EFI_CONNECT_CONTROLLER ConnectController; 1928*1370a723SSascha Wildner EFI_DISCONNECT_CONTROLLER DisconnectController; 1929*1370a723SSascha Wildner 1930*1370a723SSascha Wildner // 1931*1370a723SSascha Wildner // Open and Close Protocol Services 1932*1370a723SSascha Wildner // 1933*1370a723SSascha Wildner EFI_OPEN_PROTOCOL OpenProtocol; 1934*1370a723SSascha Wildner EFI_CLOSE_PROTOCOL CloseProtocol; 1935*1370a723SSascha Wildner EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; 1936*1370a723SSascha Wildner 1937*1370a723SSascha Wildner // 1938*1370a723SSascha Wildner // Library Services 1939*1370a723SSascha Wildner // 1940*1370a723SSascha Wildner EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; 1941*1370a723SSascha Wildner EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; 1942*1370a723SSascha Wildner EFI_LOCATE_PROTOCOL LocateProtocol; 1943*1370a723SSascha Wildner EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; 1944*1370a723SSascha Wildner EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; 1945*1370a723SSascha Wildner 1946*1370a723SSascha Wildner // 1947*1370a723SSascha Wildner // 32-bit CRC Services 1948*1370a723SSascha Wildner // 1949*1370a723SSascha Wildner EFI_CALCULATE_CRC32 CalculateCrc32; 1950*1370a723SSascha Wildner 1951*1370a723SSascha Wildner // 1952*1370a723SSascha Wildner // Miscellaneous Services 1953*1370a723SSascha Wildner // 1954*1370a723SSascha Wildner EFI_COPY_MEM CopyMem; 1955*1370a723SSascha Wildner EFI_SET_MEM SetMem; 1956*1370a723SSascha Wildner EFI_CREATE_EVENT_EX CreateEventEx; 1957*1370a723SSascha Wildner } EFI_BOOT_SERVICES; 1958*1370a723SSascha Wildner 1959*1370a723SSascha Wildner /// 1960*1370a723SSascha Wildner /// Contains a set of GUID/pointer pairs comprised of the ConfigurationTable field in the 1961*1370a723SSascha Wildner /// EFI System Table. 1962*1370a723SSascha Wildner /// 1963*1370a723SSascha Wildner typedef struct { 1964*1370a723SSascha Wildner /// 1965*1370a723SSascha Wildner /// The 128-bit GUID value that uniquely identifies the system configuration table. 1966*1370a723SSascha Wildner /// 1967*1370a723SSascha Wildner EFI_GUID VendorGuid; 1968*1370a723SSascha Wildner /// 1969*1370a723SSascha Wildner /// A pointer to the table associated with VendorGuid. 1970*1370a723SSascha Wildner /// 1971*1370a723SSascha Wildner VOID *VendorTable; 1972*1370a723SSascha Wildner } EFI_CONFIGURATION_TABLE; 1973*1370a723SSascha Wildner 1974*1370a723SSascha Wildner /// 1975*1370a723SSascha Wildner /// EFI System Table 1976*1370a723SSascha Wildner /// 1977*1370a723SSascha Wildner typedef struct { 1978*1370a723SSascha Wildner /// 1979*1370a723SSascha Wildner /// The table header for the EFI System Table. 1980*1370a723SSascha Wildner /// 1981*1370a723SSascha Wildner EFI_TABLE_HEADER Hdr; 1982*1370a723SSascha Wildner /// 1983*1370a723SSascha Wildner /// A pointer to a null terminated string that identifies the vendor 1984*1370a723SSascha Wildner /// that produces the system firmware for the platform. 1985*1370a723SSascha Wildner /// 1986*1370a723SSascha Wildner CHAR16 *FirmwareVendor; 1987*1370a723SSascha Wildner /// 1988*1370a723SSascha Wildner /// A firmware vendor specific value that identifies the revision 1989*1370a723SSascha Wildner /// of the system firmware for the platform. 1990*1370a723SSascha Wildner /// 1991*1370a723SSascha Wildner UINT32 FirmwareRevision; 1992*1370a723SSascha Wildner /// 1993*1370a723SSascha Wildner /// The handle for the active console input device. This handle must support 1994*1370a723SSascha Wildner /// EFI_SIMPLE_TEXT_INPUT_PROTOCOL and EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL. 1995*1370a723SSascha Wildner /// 1996*1370a723SSascha Wildner EFI_HANDLE ConsoleInHandle; 1997*1370a723SSascha Wildner /// 1998*1370a723SSascha Wildner /// A pointer to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL interface that is 1999*1370a723SSascha Wildner /// associated with ConsoleInHandle. 2000*1370a723SSascha Wildner /// 2001*1370a723SSascha Wildner EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn; 2002*1370a723SSascha Wildner /// 2003*1370a723SSascha Wildner /// The handle for the active console output device. 2004*1370a723SSascha Wildner /// 2005*1370a723SSascha Wildner EFI_HANDLE ConsoleOutHandle; 2006*1370a723SSascha Wildner /// 2007*1370a723SSascha Wildner /// A pointer to the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL interface 2008*1370a723SSascha Wildner /// that is associated with ConsoleOutHandle. 2009*1370a723SSascha Wildner /// 2010*1370a723SSascha Wildner EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut; 2011*1370a723SSascha Wildner /// 2012*1370a723SSascha Wildner /// The handle for the active standard error console device. 2013*1370a723SSascha Wildner /// This handle must support the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL. 2014*1370a723SSascha Wildner /// 2015*1370a723SSascha Wildner EFI_HANDLE StandardErrorHandle; 2016*1370a723SSascha Wildner /// 2017*1370a723SSascha Wildner /// A pointer to the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL interface 2018*1370a723SSascha Wildner /// that is associated with StandardErrorHandle. 2019*1370a723SSascha Wildner /// 2020*1370a723SSascha Wildner EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *StdErr; 2021*1370a723SSascha Wildner /// 2022*1370a723SSascha Wildner /// A pointer to the EFI Runtime Services Table. 2023*1370a723SSascha Wildner /// 2024*1370a723SSascha Wildner EFI_RUNTIME_SERVICES *RuntimeServices; 2025*1370a723SSascha Wildner /// 2026*1370a723SSascha Wildner /// A pointer to the EFI Boot Services Table. 2027*1370a723SSascha Wildner /// 2028*1370a723SSascha Wildner EFI_BOOT_SERVICES *BootServices; 2029*1370a723SSascha Wildner /// 2030*1370a723SSascha Wildner /// The number of system configuration tables in the buffer ConfigurationTable. 2031*1370a723SSascha Wildner /// 2032*1370a723SSascha Wildner UINTN NumberOfTableEntries; 2033*1370a723SSascha Wildner /// 2034*1370a723SSascha Wildner /// A pointer to the system configuration tables. 2035*1370a723SSascha Wildner /// The number of entries in the table is NumberOfTableEntries. 2036*1370a723SSascha Wildner /// 2037*1370a723SSascha Wildner EFI_CONFIGURATION_TABLE *ConfigurationTable; 2038*1370a723SSascha Wildner } EFI_SYSTEM_TABLE; 2039*1370a723SSascha Wildner 2040*1370a723SSascha Wildner /** 2041*1370a723SSascha Wildner This is the declaration of an EFI image entry point. This entry point is 2042*1370a723SSascha Wildner the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers including 2043*1370a723SSascha Wildner both device drivers and bus drivers. 2044*1370a723SSascha Wildner 2045*1370a723SSascha Wildner @param[in] ImageHandle The firmware allocated handle for the UEFI image. 2046*1370a723SSascha Wildner @param[in] SystemTable A pointer to the EFI System Table. 2047*1370a723SSascha Wildner 2048*1370a723SSascha Wildner @retval EFI_SUCCESS The operation completed successfully. 2049*1370a723SSascha Wildner @retval Others An unexpected error occurred. 2050*1370a723SSascha Wildner **/ 2051*1370a723SSascha Wildner typedef 2052*1370a723SSascha Wildner EFI_STATUS 2053*1370a723SSascha Wildner (EFIAPI *EFI_IMAGE_ENTRY_POINT)( 2054*1370a723SSascha Wildner IN EFI_HANDLE ImageHandle, 2055*1370a723SSascha Wildner IN EFI_SYSTEM_TABLE *SystemTable 2056*1370a723SSascha Wildner ); 2057*1370a723SSascha Wildner 2058*1370a723SSascha Wildner // 2059*1370a723SSascha Wildner // EFI Load Option. This data structure describes format of UEFI boot option variables. 2060*1370a723SSascha Wildner // 2061*1370a723SSascha Wildner // NOTE: EFI Load Option is a byte packed buffer of variable length fields. 2062*1370a723SSascha Wildner // The first two fields have fixed length. They are declared as members of the 2063*1370a723SSascha Wildner // EFI_LOAD_OPTION structure. All the other fields are variable length fields. 2064*1370a723SSascha Wildner // They are listed in the comment block below for reference purposes. 2065*1370a723SSascha Wildner // 2066*1370a723SSascha Wildner #pragma pack(1) 2067*1370a723SSascha Wildner typedef struct _EFI_LOAD_OPTION { 2068*1370a723SSascha Wildner /// 2069*1370a723SSascha Wildner /// The attributes for this load option entry. All unused bits must be zero 2070*1370a723SSascha Wildner /// and are reserved by the UEFI specification for future growth. 2071*1370a723SSascha Wildner /// 2072*1370a723SSascha Wildner UINT32 Attributes; 2073*1370a723SSascha Wildner /// 2074*1370a723SSascha Wildner /// Length in bytes of the FilePathList. OptionalData starts at offset 2075*1370a723SSascha Wildner /// sizeof(UINT32) + sizeof(UINT16) + StrSize(Description) + FilePathListLength 2076*1370a723SSascha Wildner /// of the EFI_LOAD_OPTION descriptor. 2077*1370a723SSascha Wildner /// 2078*1370a723SSascha Wildner UINT16 FilePathListLength; 2079*1370a723SSascha Wildner /// 2080*1370a723SSascha Wildner /// The user readable description for the load option. 2081*1370a723SSascha Wildner /// This field ends with a Null character. 2082*1370a723SSascha Wildner /// 2083*1370a723SSascha Wildner // CHAR16 Description[]; 2084*1370a723SSascha Wildner /// 2085*1370a723SSascha Wildner /// A packed array of UEFI device paths. The first element of the array is a 2086*1370a723SSascha Wildner /// device path that describes the device and location of the Image for this 2087*1370a723SSascha Wildner /// load option. The FilePathList[0] is specific to the device type. Other 2088*1370a723SSascha Wildner /// device paths may optionally exist in the FilePathList, but their usage is 2089*1370a723SSascha Wildner /// OSV specific. Each element in the array is variable length, and ends at 2090*1370a723SSascha Wildner /// the device path end structure. Because the size of Description is 2091*1370a723SSascha Wildner /// arbitrary, this data structure is not guaranteed to be aligned on a 2092*1370a723SSascha Wildner /// natural boundary. This data structure may have to be copied to an aligned 2093*1370a723SSascha Wildner /// natural boundary before it is used. 2094*1370a723SSascha Wildner /// 2095*1370a723SSascha Wildner // EFI_DEVICE_PATH_PROTOCOL FilePathList[]; 2096*1370a723SSascha Wildner /// 2097*1370a723SSascha Wildner /// The remaining bytes in the load option descriptor are a binary data buffer 2098*1370a723SSascha Wildner /// that is passed to the loaded image. If the field is zero bytes long, a 2099*1370a723SSascha Wildner /// NULL pointer is passed to the loaded image. The number of bytes in 2100*1370a723SSascha Wildner /// OptionalData can be computed by subtracting the starting offset of 2101*1370a723SSascha Wildner /// OptionalData from total size in bytes of the EFI_LOAD_OPTION. 2102*1370a723SSascha Wildner /// 2103*1370a723SSascha Wildner // UINT8 OptionalData[]; 2104*1370a723SSascha Wildner } EFI_LOAD_OPTION; 2105*1370a723SSascha Wildner #pragma pack() 2106*1370a723SSascha Wildner 2107*1370a723SSascha Wildner // 2108*1370a723SSascha Wildner // EFI Load Options Attributes 2109*1370a723SSascha Wildner // 2110*1370a723SSascha Wildner #define LOAD_OPTION_ACTIVE 0x00000001 2111*1370a723SSascha Wildner #define LOAD_OPTION_FORCE_RECONNECT 0x00000002 2112*1370a723SSascha Wildner #define LOAD_OPTION_HIDDEN 0x00000008 2113*1370a723SSascha Wildner #define LOAD_OPTION_CATEGORY 0x00001F00 2114*1370a723SSascha Wildner 2115*1370a723SSascha Wildner #define LOAD_OPTION_CATEGORY_BOOT 0x00000000 2116*1370a723SSascha Wildner #define LOAD_OPTION_CATEGORY_APP 0x00000100 2117*1370a723SSascha Wildner 2118*1370a723SSascha Wildner #define EFI_BOOT_OPTION_SUPPORT_KEY 0x00000001 2119*1370a723SSascha Wildner #define EFI_BOOT_OPTION_SUPPORT_APP 0x00000002 2120*1370a723SSascha Wildner #define EFI_BOOT_OPTION_SUPPORT_SYSPREP 0x00000010 2121*1370a723SSascha Wildner #define EFI_BOOT_OPTION_SUPPORT_COUNT 0x00000300 2122*1370a723SSascha Wildner 2123*1370a723SSascha Wildner /// 2124*1370a723SSascha Wildner /// EFI Boot Key Data 2125*1370a723SSascha Wildner /// 2126*1370a723SSascha Wildner typedef union { 2127*1370a723SSascha Wildner struct { 2128*1370a723SSascha Wildner /// 2129*1370a723SSascha Wildner /// Indicates the revision of the EFI_KEY_OPTION structure. This revision level should be 0. 2130*1370a723SSascha Wildner /// 2131*1370a723SSascha Wildner UINT32 Revision : 8; 2132*1370a723SSascha Wildner /// 2133*1370a723SSascha Wildner /// Either the left or right Shift keys must be pressed (1) or must not be pressed (0). 2134*1370a723SSascha Wildner /// 2135*1370a723SSascha Wildner UINT32 ShiftPressed : 1; 2136*1370a723SSascha Wildner /// 2137*1370a723SSascha Wildner /// Either the left or right Control keys must be pressed (1) or must not be pressed (0). 2138*1370a723SSascha Wildner /// 2139*1370a723SSascha Wildner UINT32 ControlPressed : 1; 2140*1370a723SSascha Wildner /// 2141*1370a723SSascha Wildner /// Either the left or right Alt keys must be pressed (1) or must not be pressed (0). 2142*1370a723SSascha Wildner /// 2143*1370a723SSascha Wildner UINT32 AltPressed : 1; 2144*1370a723SSascha Wildner /// 2145*1370a723SSascha Wildner /// Either the left or right Logo keys must be pressed (1) or must not be pressed (0). 2146*1370a723SSascha Wildner /// 2147*1370a723SSascha Wildner UINT32 LogoPressed : 1; 2148*1370a723SSascha Wildner /// 2149*1370a723SSascha Wildner /// The Menu key must be pressed (1) or must not be pressed (0). 2150*1370a723SSascha Wildner /// 2151*1370a723SSascha Wildner UINT32 MenuPressed : 1; 2152*1370a723SSascha Wildner /// 2153*1370a723SSascha Wildner /// The SysReq key must be pressed (1) or must not be pressed (0). 2154*1370a723SSascha Wildner /// 2155*1370a723SSascha Wildner UINT32 SysReqPressed : 1; 2156*1370a723SSascha Wildner UINT32 Reserved : 16; 2157*1370a723SSascha Wildner /// 2158*1370a723SSascha Wildner /// Specifies the actual number of entries in EFI_KEY_OPTION.Keys, from 0-3. If 2159*1370a723SSascha Wildner /// zero, then only the shift state is considered. If more than one, then the boot option will 2160*1370a723SSascha Wildner /// only be launched if all of the specified keys are pressed with the same shift state. 2161*1370a723SSascha Wildner /// 2162*1370a723SSascha Wildner UINT32 InputKeyCount : 2; 2163*1370a723SSascha Wildner } Options; 2164*1370a723SSascha Wildner UINT32 PackedValue; 2165*1370a723SSascha Wildner } EFI_BOOT_KEY_DATA; 2166*1370a723SSascha Wildner 2167*1370a723SSascha Wildner /// 2168*1370a723SSascha Wildner /// EFI Key Option. 2169*1370a723SSascha Wildner /// 2170*1370a723SSascha Wildner #pragma pack(1) 2171*1370a723SSascha Wildner typedef struct { 2172*1370a723SSascha Wildner /// 2173*1370a723SSascha Wildner /// Specifies options about how the key will be processed. 2174*1370a723SSascha Wildner /// 2175*1370a723SSascha Wildner EFI_BOOT_KEY_DATA KeyData; 2176*1370a723SSascha Wildner /// 2177*1370a723SSascha Wildner /// The CRC-32 which should match the CRC-32 of the entire EFI_LOAD_OPTION to 2178*1370a723SSascha Wildner /// which BootOption refers. If the CRC-32s do not match this value, then this key 2179*1370a723SSascha Wildner /// option is ignored. 2180*1370a723SSascha Wildner /// 2181*1370a723SSascha Wildner UINT32 BootOptionCrc; 2182*1370a723SSascha Wildner /// 2183*1370a723SSascha Wildner /// The Boot#### option which will be invoked if this key is pressed and the boot option 2184*1370a723SSascha Wildner /// is active (LOAD_OPTION_ACTIVE is set). 2185*1370a723SSascha Wildner /// 2186*1370a723SSascha Wildner UINT16 BootOption; 2187*1370a723SSascha Wildner /// 2188*1370a723SSascha Wildner /// The key codes to compare against those returned by the 2189*1370a723SSascha Wildner /// EFI_SIMPLE_TEXT_INPUT and EFI_SIMPLE_TEXT_INPUT_EX protocols. 2190*1370a723SSascha Wildner /// The number of key codes (0-3) is specified by the EFI_KEY_CODE_COUNT field in KeyOptions. 2191*1370a723SSascha Wildner /// 2192*1370a723SSascha Wildner // EFI_INPUT_KEY Keys[]; 2193*1370a723SSascha Wildner } EFI_KEY_OPTION; 2194*1370a723SSascha Wildner #pragma pack() 2195*1370a723SSascha Wildner 2196*1370a723SSascha Wildner // 2197*1370a723SSascha Wildner // EFI File location to boot from on removable media devices 2198*1370a723SSascha Wildner // 2199*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME_IA32 L"\\EFI\\BOOT\\BOOTIA32.EFI" 2200*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME_IA64 L"\\EFI\\BOOT\\BOOTIA64.EFI" 2201*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME_X64 L"\\EFI\\BOOT\\BOOTX64.EFI" 2202*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME_ARM L"\\EFI\\BOOT\\BOOTARM.EFI" 2203*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64 L"\\EFI\\BOOT\\BOOTAA64.EFI" 2204*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME_RISCV64 L"\\EFI\\BOOT\\BOOTRISCV64.EFI" 2205*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME_LOONGARCH64 L"\\EFI\\BOOT\\BOOTLOONGARCH64.EFI" 2206*1370a723SSascha Wildner 2207*1370a723SSascha Wildner #if !defined (EFI_REMOVABLE_MEDIA_FILE_NAME) 2208*1370a723SSascha Wildner #if defined (MDE_CPU_IA32) 2209*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_IA32 2210*1370a723SSascha Wildner #elif defined (MDE_CPU_X64) 2211*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_X64 2212*1370a723SSascha Wildner #elif defined (MDE_CPU_EBC) 2213*1370a723SSascha Wildner #elif defined (MDE_CPU_ARM) 2214*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_ARM 2215*1370a723SSascha Wildner #elif defined (MDE_CPU_AARCH64) 2216*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64 2217*1370a723SSascha Wildner #elif defined (MDE_CPU_RISCV64) 2218*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_RISCV64 2219*1370a723SSascha Wildner #elif defined (MDE_CPU_LOONGARCH64) 2220*1370a723SSascha Wildner #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_LOONGARCH64 2221*1370a723SSascha Wildner #else 2222*1370a723SSascha Wildner #error Unknown Processor Type 2223*1370a723SSascha Wildner #endif 2224*1370a723SSascha Wildner #endif 2225*1370a723SSascha Wildner 2226*1370a723SSascha Wildner // 2227*1370a723SSascha Wildner // The directory within the active EFI System Partition defined for delivery of capsule to firmware 2228*1370a723SSascha Wildner // 2229*1370a723SSascha Wildner #define EFI_CAPSULE_FILE_DIRECTORY L"\\EFI\\UpdateCapsule\\" 2230*1370a723SSascha Wildner 2231*1370a723SSascha Wildner #include <Uefi/UefiPxe.h> 2232*1370a723SSascha Wildner #include <Uefi/UefiGpt.h> 2233*1370a723SSascha Wildner #include <Uefi/UefiInternalFormRepresentation.h> 2234*1370a723SSascha Wildner 2235*1370a723SSascha Wildner #endif 2236