iPXE
Functions | Variables
efi_init.c File Reference
#include <string.h>
#include <errno.h>
#include <endian.h>
#include <ipxe/init.h>
#include <ipxe/rotate.h>
#include <ipxe/efi/efi.h>
#include <ipxe/efi/efi_driver.h>
#include <ipxe/efi/efi_path.h>
#include <ipxe/efi/Protocol/LoadedImage.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER)
 
EFI_SYSTEM_TABLE_C2 (PLATFORM, _systab)
 System table passed to entry point. More...
 
static EFI_STATUS EFIAPI efi_unload (EFI_HANDLE image_handle __unused)
 Shut down EFI environment. More...
 
static EFIAPI void efi_shutdown_hook (EFI_EVENT event __unused, void *context __unused)
 Shut down in preparation for booting an OS. More...
 
static void * efi_find_table (EFI_GUID *guid)
 Look up EFI configuration table. More...
 
unsigned long efi_stack_cookie (EFI_HANDLE handle)
 Construct a stack cookie value. More...
 
EFI_STATUS efi_init (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
 Initialise EFI environment. More...
 
void __stack_chk_fail (void)
 Abort on stack check failure. More...
 
void efi_raise_tpl (struct efi_saved_tpl *tpl)
 Raise task priority level to TPL_CALLBACK. More...
 
void efi_restore_tpl (struct efi_saved_tpl *tpl)
 Restore task priority level. More...
 

Variables

EFI_HANDLE efi_image_handle
 Image handle passed to entry point. More...
 
EFI_LOADED_IMAGE_PROTOCOLefi_loaded_image
 Loaded image protocol for this image. More...
 
EFI_DEVICE_PATH_PROTOCOLefi_loaded_image_path
 Device path for the loaded image's device handle. More...
 
EFI_TPL efi_external_tpl = TPL_APPLICATION
 External task priority level. More...
 
int efi_shutdown_in_progress
 EFI shutdown is in progress. More...
 
static EFI_EVENT efi_shutdown_event
 Event used to signal shutdown. More...
 
unsigned long __stack_chk_guard
 Stack cookie. More...
 
static EFI_EXIT efi_exit
 Exit function. More...
 

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER  )

◆ _C2()

EFI_SYSTEM_TABLE* _C2 ( PLATFORM  ,
_systab   
)

System table passed to entry point.

We construct the symbol name efi_systab via the PLATFORM macro. This ensures that the symbol is defined only in EFI builds, and so prevents EFI code from being incorrectly linked in to a non-EFI build.

◆ efi_unload()

static EFI_STATUS EFIAPI efi_unload ( EFI_HANDLE image_handle  __unused)
static

Shut down EFI environment.

Parameters
image_handleImage handle

Definition at line 316 of file efi_init.c.

316  {
318  EFI_SYSTEM_TABLE *systab = efi_systab;
319 
320  DBGC ( systab, "EFI image unloading\n" );
321 
322  /* Shut down */
323  shutdown_exit();
324 
325  /* Disconnect any remaining devices */
327 
328  /* Uninstall driver binding protocol */
330 
331  /* Uninstall exit boot services event */
333 
334  /* Free copy of loaded image's device handle's device path */
336 
337  DBGC ( systab, "EFI image unloaded\n" );
338 
339  return 0;
340 }
void efi_driver_uninstall(void)
Uninstall EFI driver.
Definition: efi_driver.c:418
EFI_BOOT_SERVICES * BootServices
A pointer to the EFI Boot Services Table.
Definition: UefiSpec.h:2000
#define DBGC(...)
Definition: compiler.h:505
EFI_CLOSE_EVENT CloseEvent
Definition: UefiSpec.h:1864
EFI_DEVICE_PATH_PROTOCOL * efi_loaded_image_path
Device path for the loaded image's device handle.
Definition: efi_init.c:39
static EFI_EVENT efi_shutdown_event
Event used to signal shutdown.
Definition: efi_init.c:57
static void shutdown_exit(void)
Shut down system for exit back to firmware.
Definition: init.h:84
EFI Boot Services Table.
Definition: UefiSpec.h:1836
void efi_driver_disconnect_all(void)
Disconnect EFI driver from all possible devices.
Definition: efi_driver.c:584
EFI System Table.
Definition: UefiSpec.h:1949
EFI_FREE_POOL FreePool
Definition: UefiSpec.h:1855
EFI_SYSTEM_TABLE * efi_systab

References EFI_SYSTEM_TABLE::BootServices, EFI_BOOT_SERVICES::CloseEvent, DBGC, efi_driver_disconnect_all(), efi_driver_uninstall(), efi_loaded_image_path, efi_shutdown_event, efi_systab, EFI_BOOT_SERVICES::FreePool, and shutdown_exit().

Referenced by efi_init().

◆ efi_shutdown_hook()

static EFIAPI void efi_shutdown_hook ( EFI_EVENT event  __unused,
void *context  __unused 
)
static

Shut down in preparation for booting an OS.

This hook gets called at ExitBootServices time in order to make sure that everything is properly shut down before the OS takes over.

Definition at line 79 of file efi_init.c.

80  {
81 
82  /* Mark shutdown as being in progress, to indicate that large
83  * parts of the system (e.g. timers) are no longer functional.
84  */
86 
87  /* Shut down iPXE */
88  shutdown_boot();
89 }
static void shutdown_boot(void)
Shut down system for OS boot.
Definition: init.h:76
int efi_shutdown_in_progress
EFI shutdown is in progress.
Definition: efi_init.c:54

References efi_shutdown_in_progress, and shutdown_boot().

Referenced by efi_init().

◆ efi_find_table()

static void* efi_find_table ( EFI_GUID guid)
static

Look up EFI configuration table.

Parameters
guidConfiguration table GUID
Return values
tableConfiguration table, or NULL

Definition at line 97 of file efi_init.c.

97  {
98  unsigned int i;
99 
100  for ( i = 0 ; i < efi_systab->NumberOfTableEntries ; i++ ) {
102  guid, sizeof ( *guid ) ) == 0 )
104  }
105 
106  return NULL;
107 }
EFI_GUID VendorGuid
The 128-bit GUID value that uniquely identifies the system configuration table.
Definition: UefiSpec.h:1939
uint64_t guid
GUID.
Definition: edd.h:30
UINTN NumberOfTableEntries
The number of system configuration tables in the buffer ConfigurationTable.
Definition: UefiSpec.h:2004
EFI_SYSTEM_TABLE * efi_systab
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition: string.c:114
#define NULL
NULL pointer (VOID *)
Definition: Base.h:362
EFI_CONFIGURATION_TABLE * ConfigurationTable
A pointer to the system configuration tables.
Definition: UefiSpec.h:2009
VOID * VendorTable
A pointer to the table associated with VendorGuid.
Definition: UefiSpec.h:1943

References EFI_SYSTEM_TABLE::ConfigurationTable, efi_systab, guid, memcmp(), NULL, EFI_SYSTEM_TABLE::NumberOfTableEntries, EFI_CONFIGURATION_TABLE::VendorGuid, and EFI_CONFIGURATION_TABLE::VendorTable.

Referenced by efi_init().

◆ efi_stack_cookie()

unsigned long efi_stack_cookie ( EFI_HANDLE  handle)

Construct a stack cookie value.

Parameters
handleImage handle
Return values
cookieStack cookie

Definition at line 116 of file efi_init.c.

116  {
117  unsigned long cookie = 0;
118  unsigned int rotation = ( 8 * sizeof ( cookie ) / 4 );
119 
120  /* There is no viable source of entropy available at this
121  * point. Construct a value that is at least likely to vary
122  * between platforms and invocations.
123  */
124  cookie ^= ( ( unsigned long ) handle );
125  cookie = roll ( cookie, rotation );
126  cookie ^= ( ( unsigned long ) &handle );
127  cookie = roll ( cookie, rotation );
128  cookie ^= profile_timestamp();
129  cookie = roll ( cookie, rotation );
130  cookie ^= build_id;
131 
132  /* Ensure that the value contains a NUL byte, to act as a
133  * runaway string terminator. Construct the NUL using a shift
134  * rather than a mask, to avoid losing valuable entropy in the
135  * lower-order bits.
136  */
137  cookie <<= 8;
138 
139  /* Ensure that the NUL byte is placed at the bottom of the
140  * stack cookie, to avoid potential disclosure via an
141  * unterminated string.
142  */
143  if ( __BYTE_ORDER == __BIG_ENDIAN )
144  cookie >>= 8;
145 
146  return cookie;
147 }
#define __BYTE_ORDER
Definition: endian.h:6
unsigned long build_id
Build ID.
Definition: version.c:60
#define __BIG_ENDIAN
Constant representing big-endian byte order.
Definition: endian.h:21
static unsigned int rotation
Definition: rotate.h:22
uint16_t handle
Handle.
Definition: smbios.h:16

References __BIG_ENDIAN, __BYTE_ORDER, build_id, handle, and rotation.

Referenced by efi_init_stack_guard().

◆ efi_init()

EFI_STATUS efi_init ( EFI_HANDLE  image_handle,
EFI_SYSTEM_TABLE systab 
)

Initialise EFI environment.

Parameters
image_handleImage handle
systabSystem table
Return values
efircEFI return status code

Definition at line 156 of file efi_init.c.

157  {
158  EFI_BOOT_SERVICES *bs;
159  struct efi_protocol *prot;
160  struct efi_config_table *tab;
161  void *loaded_image;
162  void *device_path;
163  void *device_path_copy;
164  size_t device_path_len;
165  EFI_STATUS efirc;
166  int rc;
167 
168  /* Store image handle and system table pointer for future use */
169  efi_image_handle = image_handle;
170  efi_systab = systab;
171 
172  /* Sanity checks */
173  if ( ! systab ) {
174  efirc = EFI_NOT_AVAILABLE_YET;
175  goto err_sanity;
176  }
177  if ( ! systab->ConOut ) {
178  efirc = EFI_NOT_AVAILABLE_YET;
179  goto err_sanity;
180  }
181  if ( ! systab->BootServices ) {
182  DBGC ( systab, "EFI provided no BootServices entry point\n" );
183  efirc = EFI_NOT_AVAILABLE_YET;
184  goto err_sanity;
185  }
186  if ( ! systab->RuntimeServices ) {
187  DBGC ( systab, "EFI provided no RuntimeServices entry "
188  "point\n" );
189  efirc = EFI_NOT_AVAILABLE_YET;
190  goto err_sanity;
191  }
192  DBGC ( systab, "EFI handle %p systab %p\n", image_handle, systab );
193  bs = systab->BootServices;
194 
195  /* Store abort function pointer */
196  efi_exit = bs->Exit;
197 
198  /* Look up used protocols */
200  if ( ( efirc = bs->LocateProtocol ( &prot->guid, NULL,
201  prot->protocol ) ) == 0 ) {
202  DBGC ( systab, "EFI protocol %s is at %p\n",
203  efi_guid_ntoa ( &prot->guid ),
204  *(prot->protocol) );
205  } else {
206  DBGC ( systab, "EFI does not provide protocol %s\n",
207  efi_guid_ntoa ( &prot->guid ) );
208  /* Fail if protocol is required */
209  if ( prot->required )
210  goto err_missing_protocol;
211  }
212  }
213 
214  /* Look up used configuration tables */
216  if ( ( *(tab->table) = efi_find_table ( &tab->guid ) ) ) {
217  DBGC ( systab, "EFI configuration table %s is at %p\n",
218  efi_guid_ntoa ( &tab->guid ), *(tab->table) );
219  } else {
220  DBGC ( systab, "EFI does not provide configuration "
221  "table %s\n", efi_guid_ntoa ( &tab->guid ) );
222  if ( tab->required ) {
223  efirc = EFI_NOT_AVAILABLE_YET;
224  goto err_missing_table;
225  }
226  }
227  }
228 
229  /* Get loaded image protocol */
230  if ( ( efirc = bs->OpenProtocol ( image_handle,
232  &loaded_image, image_handle, NULL,
233  EFI_OPEN_PROTOCOL_GET_PROTOCOL ) ) != 0 ) {
234  rc = -EEFI ( efirc );
235  DBGC ( systab, "EFI could not get loaded image protocol: %s",
236  strerror ( rc ) );
237  goto err_no_loaded_image;
238  }
239  efi_loaded_image = loaded_image;
240  DBGC ( systab, "EFI image base address %p\n",
242 
243  /* Get loaded image's device handle's device path */
244  if ( ( efirc = bs->OpenProtocol ( efi_loaded_image->DeviceHandle,
246  &device_path, image_handle, NULL,
247  EFI_OPEN_PROTOCOL_GET_PROTOCOL ) ) != 0 ) {
248  rc = -EEFI ( efirc );
249  DBGC ( systab, "EFI could not get loaded image's device path: "
250  "%s", strerror ( rc ) );
251  goto err_no_device_path;
252  }
253 
254  /* Make a copy of the loaded image's device handle's device
255  * path, since the device handle itself may become invalidated
256  * when we load our own drivers.
257  */
258  device_path_len = ( efi_path_len ( device_path ) +
259  sizeof ( EFI_DEVICE_PATH_PROTOCOL ) );
260  if ( ( efirc = bs->AllocatePool ( EfiBootServicesData, device_path_len,
261  &device_path_copy ) ) != 0 ) {
262  rc = -EEFI ( efirc );
263  goto err_alloc_device_path;
264  }
265  memcpy ( device_path_copy, device_path, device_path_len );
266  efi_loaded_image_path = device_path_copy;
267  DBGC ( systab, "EFI image device path %s\n",
269 
270  /* EFI is perfectly capable of gracefully shutting down any
271  * loaded devices if it decides to fall back to a legacy boot.
272  * For no particularly comprehensible reason, it doesn't
273  * bother doing so when ExitBootServices() is called.
274  */
275  if ( ( efirc = bs->CreateEvent ( EVT_SIGNAL_EXIT_BOOT_SERVICES,
277  NULL, &efi_shutdown_event ) ) != 0 ) {
278  rc = -EEFI ( efirc );
279  DBGC ( systab, "EFI could not create ExitBootServices event: "
280  "%s\n", strerror ( rc ) );
281  goto err_create_event;
282  }
283 
284  /* Install driver binding protocol */
285  if ( ( rc = efi_driver_install() ) != 0 ) {
286  DBGC ( systab, "EFI could not install driver: %s\n",
287  strerror ( rc ) );
288  efirc = EFIRC ( rc );
289  goto err_driver_install;
290  }
291 
292  /* Install image unload method */
294 
295  return 0;
296 
298  err_driver_install:
300  err_create_event:
302  err_alloc_device_path:
303  err_no_device_path:
304  err_no_loaded_image:
305  err_missing_table:
306  err_missing_protocol:
307  err_sanity:
308  return efirc;
309 }
void efi_driver_uninstall(void)
Uninstall EFI driver.
Definition: efi_driver.c:418
union edd_device_path device_path
Device path.
Definition: edd.h:24
EFI_BOOT_SERVICES * BootServices
A pointer to the EFI Boot Services Table.
Definition: UefiSpec.h:2000
void ** protocol
Variable containing pointer to protocol structure.
Definition: efi.h:79
EFI_LOADED_IMAGE_PROTOCOL * efi_loaded_image
Loaded image protocol for this image.
Definition: efi_init.c:36
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define EEFI(efirc)
Convert an EFI status code to an iPXE status code.
Definition: efi.h:162
EFI_LOCATE_PROTOCOL LocateProtocol
Definition: UefiSpec.h:1914
EFI_GUID guid
GUID.
Definition: efi.h:77
#define DBGC(...)
Definition: compiler.h:505
EFI_GUID efi_loaded_image_protocol_guid
Loaded image protocol GUID.
Definition: efi_guid.c:184
size_t efi_path_len(EFI_DEVICE_PATH_PROTOCOL *path)
Find length of device path (excluding terminator)
Definition: efi_path.c:67
EFI_CLOSE_EVENT CloseEvent
Definition: UefiSpec.h:1864
VOID * ImageBase
The base address at which the image was loaded.
Definition: LoadedImage.h:75
This protocol can be used on any device handle to obtain generic path/location information concerning...
Definition: DevicePath.h:51
#define EFI_PROTOCOLS
EFI protocol table.
Definition: efi.h:85
#define EVT_SIGNAL_EXIT_BOOT_SERVICES
Definition: UefiSpec.h:396
#define EFI_CONFIG_TABLES
EFI configuration table table.
Definition: efi.h:129
An EFI configuration table used by iPXE.
Definition: efi.h:119
EFI_DEVICE_PATH_PROTOCOL * efi_loaded_image_path
Device path for the loaded image's device handle.
Definition: efi_init.c:39
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define EFI_NOT_AVAILABLE_YET
If this value is returned by an API, it means the capability is not yet installed/available/ready to ...
Definition: PiMultiPhase.h:55
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL * ConOut
A pointer to the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL interface that is associated with ConsoleOutHandle.
Definition: UefiSpec.h:1982
static EFI_EVENT efi_shutdown_event
Event used to signal shutdown.
Definition: efi_init.c:57
static EFIAPI void efi_shutdown_hook(EFI_EVENT event __unused, void *context __unused)
Shut down in preparation for booting an OS.
Definition: efi_init.c:79
EFI_CREATE_EVENT CreateEvent
Definition: UefiSpec.h:1860
static void * efi_find_table(EFI_GUID *guid)
Look up EFI configuration table.
Definition: efi_init.c:97
const char * efi_devpath_text(EFI_DEVICE_PATH_PROTOCOL *path)
Get textual representation of device path.
Definition: efi_debug.c:375
#define EFI_OPEN_PROTOCOL_GET_PROTOCOL
Definition: UefiSpec.h:1271
An EFI protocol used by iPXE.
Definition: efi.h:75
const char * efi_guid_ntoa(CONST EFI_GUID *guid)
Convert GUID to a printable string.
Definition: efi_debug.c:192
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78
EFI Boot Services Table.
Definition: UefiSpec.h:1836
EFI_HANDLE efi_image_handle
Image handle passed to entry point.
Definition: efi_init.c:33
EFI_IMAGE_UNLOAD Unload
Definition: LoadedImage.h:79
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:358
#define TPL_CALLBACK
Definition: UefiSpec.h:591
EFI_GUID efi_device_path_protocol_guid
Device path protocol GUID.
Definition: efi_guid.c:132
EFI_FREE_POOL FreePool
Definition: UefiSpec.h:1855
void ** table
Variable containing pointer to configuration table.
Definition: efi.h:123
int required
Protocol is required.
Definition: efi.h:81
EFI_RUNTIME_SERVICES * RuntimeServices
A pointer to the EFI Runtime Services Table.
Definition: UefiSpec.h:1996
EFI_GUID guid
GUID.
Definition: efi.h:121
RETURN_STATUS EFI_STATUS
Function return status for EFI API.
Definition: UefiBaseType.h:35
static EFI_EXIT efi_exit
Exit function.
Definition: efi_init.c:67
EFI_SYSTEM_TABLE * efi_systab
EFI_OPEN_PROTOCOL OpenProtocol
Definition: UefiSpec.h:1905
The data portions of a loaded Boot Serves Driver, and the default data allocation type used by a Boot...
int required
Table is required for operation.
Definition: efi.h:125
static EFI_STATUS EFIAPI efi_unload(EFI_HANDLE image_handle)
Shut down EFI environment.
Definition: efi_init.c:316
#define NULL
NULL pointer (VOID *)
Definition: Base.h:362
int efi_driver_install(void)
Install EFI driver.
Definition: efi_driver.c:385
#define EFIRC(rc)
Convert an iPXE status code to an EFI status code.
Definition: efi.h:154
EFI_HANDLE DeviceHandle
The device handle that the EFI Image was loaded from.
Definition: LoadedImage.h:61
EFI_ALLOCATE_POOL AllocatePool
Definition: UefiSpec.h:1854

References EFI_BOOT_SERVICES::AllocatePool, EFI_SYSTEM_TABLE::BootServices, EFI_BOOT_SERVICES::CloseEvent, EFI_SYSTEM_TABLE::ConOut, EFI_BOOT_SERVICES::CreateEvent, DBGC, device_path, EFI_LOADED_IMAGE_PROTOCOL::DeviceHandle, EEFI, EFI_CONFIG_TABLES, efi_device_path_protocol_guid, efi_devpath_text(), efi_driver_install(), efi_driver_uninstall(), efi_exit, efi_find_table(), efi_guid_ntoa(), efi_image_handle, efi_loaded_image, efi_loaded_image_path, efi_loaded_image_protocol_guid, EFI_NOT_AVAILABLE_YET, EFI_OPEN_PROTOCOL_GET_PROTOCOL, efi_path_len(), EFI_PROTOCOLS, efi_shutdown_event, efi_shutdown_hook(), efi_systab, efi_unload(), EfiBootServicesData, EFIRC, EVT_SIGNAL_EXIT_BOOT_SERVICES, EFI_BOOT_SERVICES::Exit, for_each_table_entry, EFI_BOOT_SERVICES::FreePool, efi_protocol::guid, efi_config_table::guid, EFI_LOADED_IMAGE_PROTOCOL::ImageBase, EFI_BOOT_SERVICES::LocateProtocol, memcpy(), NULL, EFI_BOOT_SERVICES::OpenProtocol, efi_protocol::protocol, rc, efi_protocol::required, efi_config_table::required, EFI_SYSTEM_TABLE::RuntimeServices, strerror(), efi_config_table::table, TPL_CALLBACK, and EFI_LOADED_IMAGE_PROTOCOL::Unload.

Referenced by _efi_start(), and _efidrv_start().

◆ __stack_chk_fail()

void __stack_chk_fail ( void  )

Abort on stack check failure.

Definition at line 346 of file efi_init.c.

346  {
347  EFI_STATUS efirc;
348  int rc;
349 
350  /* Report failure (when debugging) */
351  DBGC ( efi_systab, "EFI stack check failed (cookie %#lx); aborting\n",
353 
354  /* Attempt to exit cleanly with an error status */
355  if ( efi_exit ) {
357  0, NULL );
358  rc = -EEFI ( efirc );
359  DBGC ( efi_systab, "EFI stack check exit failed: %s\n",
360  strerror ( rc ) );
361  }
362 
363  /* If the exit fails for any reason, lock the system */
364  while ( 1 ) {}
365 
366 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define EEFI(efirc)
Convert an EFI status code to an iPXE status code.
Definition: efi.h:162
#define DBGC(...)
Definition: compiler.h:505
#define EFI_COMPROMISED_DATA
Enumeration of EFI_STATUS.
Definition: UefiBaseType.h:151
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78
EFI_HANDLE efi_image_handle
Image handle passed to entry point.
Definition: efi_init.c:33
unsigned long __stack_chk_guard
Stack cookie.
Definition: efi_init.c:60
RETURN_STATUS EFI_STATUS
Function return status for EFI API.
Definition: UefiBaseType.h:35
static EFI_EXIT efi_exit
Exit function.
Definition: efi_init.c:67
EFI_SYSTEM_TABLE * efi_systab
#define NULL
NULL pointer (VOID *)
Definition: Base.h:362

References __stack_chk_guard, DBGC, EEFI, EFI_COMPROMISED_DATA, efi_exit, efi_image_handle, efi_systab, NULL, rc, and strerror().

◆ efi_raise_tpl()

void efi_raise_tpl ( struct efi_saved_tpl tpl)

Raise task priority level to TPL_CALLBACK.

Parameters
tplSaved TPL

Definition at line 373 of file efi_init.c.

373  {
375 
376  /* Record current external TPL */
377  tpl->previous = efi_external_tpl;
378 
379  /* Raise TPL and record previous TPL as new external TPL */
380  tpl->current = bs->RaiseTPL ( TPL_CALLBACK );
381  efi_external_tpl = tpl->current;
382 }
EFI_BOOT_SERVICES * BootServices
A pointer to the EFI Boot Services Table.
Definition: UefiSpec.h:2000
EFI_RAISE_TPL RaiseTPL
Definition: UefiSpec.h:1845
EFI_TPL current
Current external TPL.
Definition: efi.h:69
EFI Boot Services Table.
Definition: UefiSpec.h:1836
EFI_TPL previous
Previous external TPL.
Definition: efi.h:71
#define TPL_CALLBACK
Definition: UefiSpec.h:591
EFI_SYSTEM_TABLE * efi_systab
EFI_TPL efi_external_tpl
External task priority level.
Definition: efi_init.c:51

References EFI_SYSTEM_TABLE::BootServices, efi_saved_tpl::current, efi_external_tpl, efi_systab, efi_saved_tpl::previous, EFI_BOOT_SERVICES::RaiseTPL, and TPL_CALLBACK.

Referenced by _efidrv_start(), efi_driver_start(), efi_driver_stop(), efi_snp_add_claim(), efi_snp_get_status(), efi_snp_initialize(), efi_snp_receive(), efi_snp_reset(), efi_snp_shutdown(), efi_snp_transmit(), efi_snp_wait_for_packet(), efi_usb_async_interrupt_transfer(), efi_usb_bulk_transfer(), efi_usb_control_transfer(), efi_usb_get_string_descriptor(), and efi_usb_sync_interrupt_transfer().

◆ efi_restore_tpl()

void efi_restore_tpl ( struct efi_saved_tpl tpl)

Restore task priority level.

Parameters
tplSaved TPL

Definition at line 389 of file efi_init.c.

389  {
391 
392  /* Restore external TPL */
393  efi_external_tpl = tpl->previous;
394 
395  /* Restore TPL */
396  bs->RestoreTPL ( tpl->current );
397 }
EFI_BOOT_SERVICES * BootServices
A pointer to the EFI Boot Services Table.
Definition: UefiSpec.h:2000
EFI_TPL current
Current external TPL.
Definition: efi.h:69
EFI Boot Services Table.
Definition: UefiSpec.h:1836
EFI_TPL previous
Previous external TPL.
Definition: efi.h:71
EFI_SYSTEM_TABLE * efi_systab
EFI_RESTORE_TPL RestoreTPL
Definition: UefiSpec.h:1846
EFI_TPL efi_external_tpl
External task priority level.
Definition: efi_init.c:51

References EFI_SYSTEM_TABLE::BootServices, efi_saved_tpl::current, efi_external_tpl, efi_systab, efi_saved_tpl::previous, and EFI_BOOT_SERVICES::RestoreTPL.

Referenced by _efidrv_start(), efi_driver_start(), efi_driver_stop(), efi_snp_add_claim(), efi_snp_get_status(), efi_snp_initialize(), efi_snp_receive(), efi_snp_reset(), efi_snp_shutdown(), efi_snp_transmit(), efi_snp_wait_for_packet(), efi_usb_async_interrupt_transfer(), efi_usb_bulk_transfer(), efi_usb_control_transfer(), efi_usb_get_string_descriptor(), and efi_usb_sync_interrupt_transfer().

Variable Documentation

◆ efi_image_handle

EFI_HANDLE efi_image_handle

◆ efi_loaded_image

EFI_LOADED_IMAGE_PROTOCOL* efi_loaded_image

Loaded image protocol for this image.

Definition at line 36 of file efi_init.c.

Referenced by _efi_start(), chained_locate(), efi_autoexec_startup(), efi_init(), efi_init_application(), and efi_local_open_path().

◆ efi_loaded_image_path

EFI_DEVICE_PATH_PROTOCOL* efi_loaded_image_path

Device path for the loaded image's device handle.

Definition at line 39 of file efi_init.c.

Referenced by efi_init(), efi_local_open_volume(), and efi_unload().

◆ efi_external_tpl

EFI_TPL efi_external_tpl = TPL_APPLICATION

External task priority level.

Definition at line 51 of file efi_init.c.

Referenced by efi_currticks(), efi_entropy_enable(), efi_raise_tpl(), and efi_restore_tpl().

◆ efi_shutdown_in_progress

int efi_shutdown_in_progress

◆ efi_shutdown_event

EFI_EVENT efi_shutdown_event
static

Event used to signal shutdown.

Definition at line 57 of file efi_init.c.

Referenced by efi_init(), and efi_unload().

◆ __stack_chk_guard

unsigned long __stack_chk_guard

Stack cookie.

Definition at line 60 of file efi_init.c.

Referenced by __stack_chk_fail(), and efi_init_stack_guard().

◆ efi_exit

EFI_EXIT efi_exit
static

Exit function.

Cached to minimise external dependencies when a stack check failure is triggered.

Definition at line 67 of file efi_init.c.

Referenced by __stack_chk_fail(), and efi_init().