iPXE
Functions
efi_wrap.h File Reference

EFI driver interface. More...

#include <ipxe/efi/efi.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
void efi_wrap_bs (EFI_BOOT_SERVICES *wrapped)
 Wrap a boot services table. More...
 
void efi_wrap_rs (EFI_RUNTIME_SERVICES *wrapped)
 Wrap a runtime services table. More...
 
void efi_wrap_systab (int global)
 Wrap the public EFI system table. More...
 
void efi_unwrap (void)
 Remove boot services table wrapper. More...
 
void efi_wrap_image (EFI_HANDLE handle)
 Wrap calls made by a newly loaded image. More...
 

Detailed Description

EFI driver interface.

Definition in file efi_wrap.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ efi_wrap_bs()

void efi_wrap_bs ( EFI_BOOT_SERVICES wrapper)

Wrap a boot services table.

Parameters
wrapperBoot services table to wrap

Definition at line 1412 of file efi_wrap.c.

1412  {
1414 
1415  /* Do nothing unless debugging is enabled */
1416  if ( ! DBG_LOG )
1417  return;
1418 
1419  /* Build boot services table wrapper */
1420  memcpy ( wrapper, bs, sizeof ( *wrapper ) );
1421  wrapper->RaiseTPL = efi_raise_tpl_wrapper;
1424  wrapper->FreePages = efi_free_pages_wrapper;
1427  wrapper->FreePool = efi_free_pool_wrapper;
1429  wrapper->SetTimer = efi_set_timer_wrapper;
1434  wrapper->InstallProtocolInterface
1444  wrapper->InstallConfigurationTable
1446  wrapper->LoadImage = efi_load_image_wrapper;
1448  wrapper->Exit = efi_exit_wrapper;
1452  wrapper->Stall = efi_stall_wrapper;
1458  wrapper->OpenProtocolInformation
1468 }
EFI_BOOT_SERVICES * BootServices
A pointer to the EFI Boot Services Table.
Definition: UefiSpec.h:2098
static EFI_STATUS EFIAPI efi_set_timer_wrapper(EFI_EVENT event, EFI_TIMER_DELAY type, UINT64 trigger_time)
Wrap SetTimer()
Definition: efi_wrap.c:475
static VOID EFIAPI efi_restore_tpl_wrapper(EFI_TPL old_tpl)
Wrap RestoreTPL()
Definition: efi_wrap.c:320
EFI_SET_WATCHDOG_TIMER SetWatchdogTimer
Definition: UefiSpec.h:1988
EFI_RAISE_TPL RaiseTPL
Definition: UefiSpec.h:1939
EFI_LOCATE_PROTOCOL LocateProtocol
Definition: UefiSpec.h:2008
EFI_STALL Stall
Definition: UefiSpec.h:1987
static EFI_STATUS EFIAPI efi_reinstall_protocol_interface_wrapper(EFI_HANDLE handle, EFI_GUID *protocol, VOID *old_interface, VOID *new_interface)
Wrap ReinstallProtocolInterface()
Definition: efi_wrap.c:588
static EFI_STATUS EFIAPI efi_locate_handle_wrapper(EFI_LOCATE_SEARCH_TYPE search_type, EFI_GUID *protocol, VOID *search_key, UINTN *buffer_size, EFI_HANDLE *buffer)
Wrap LocateHandle()
Definition: efi_wrap.c:668
static EFI_STATUS EFIAPI efi_register_protocol_notify_wrapper(EFI_GUID *protocol, EFI_EVENT event, VOID **registration)
Wrap RegisterProtocolNotify()
Definition: efi_wrap.c:649
EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface
Definition: UefiSpec.h:1965
EFI_EXIT_BOOT_SERVICES ExitBootServices
Definition: UefiSpec.h:1981
EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface
Definition: UefiSpec.h:1966
EFI_IMAGE_LOAD LoadImage
Definition: UefiSpec.h:1977
static EFI_STATUS EFIAPI efi_close_protocol_wrapper(EFI_HANDLE handle, EFI_GUID *protocol, EFI_HANDLE agent_handle, EFI_HANDLE controller_handle)
Wrap CloseProtocol()
Definition: efi_wrap.c:997
static EFI_STATUS EFIAPI efi_protocols_per_handle_wrapper(EFI_HANDLE handle, EFI_GUID ***protocol_buffer, UINTN *protocol_buffer_count)
Wrap ProtocolsPerHandle()
Definition: efi_wrap.c:1043
static EFI_STATUS EFIAPI efi_handle_protocol_wrapper(EFI_HANDLE handle, EFI_GUID *protocol, VOID **interface)
Wrap HandleProtocol()
Definition: efi_wrap.c:630
EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces
Definition: UefiSpec.h:2009
static EFI_STATUS EFIAPI efi_install_configuration_table_wrapper(EFI_GUID *guid, VOID *table)
Wrap InstallConfigurationTable()
Definition: efi_wrap.c:722
EFI_CLOSE_EVENT CloseEvent
Definition: UefiSpec.h:1958
EFI_SET_TIMER SetTimer
Definition: UefiSpec.h:1955
static EFI_STATUS EFIAPI efi_signal_event_wrapper(EFI_EVENT event)
Wrap SignalEvent()
Definition: efi_wrap.c:519
EFI_LOCATE_HANDLE LocateHandle
Definition: UefiSpec.h:1970
static EFI_STATUS EFIAPI efi_create_event_wrapper(UINT32 type, EFI_TPL notify_tpl, EFI_EVENT_NOTIFY notify_function, VOID *notify_context, EFI_EVENT *event)
Wrap CreateEvent()
Definition: efi_wrap.c:454
EFI_IMAGE_UNLOAD UnloadImage
Definition: UefiSpec.h:1980
static EFI_STATUS EFIAPI efi_get_next_monotonic_count_wrapper(UINT64 *count)
Wrap GetNextMonotonicCount()
Definition: efi_wrap.c:864
EFI_CLOSE_PROTOCOL CloseProtocol
Definition: UefiSpec.h:2000
EFI_CREATE_EVENT_EX CreateEventEx
Definition: UefiSpec.h:2022
static EFI_STATUS EFIAPI efi_create_event_ex_wrapper(UINT32 type, EFI_TPL notify_tpl, EFI_EVENT_NOTIFY notify_function, CONST VOID *notify_context, CONST EFI_GUID *event_group, EFI_EVENT *event)
Wrap CreateEventEx()
Definition: efi_wrap.c:1226
static EFI_STATUS EFIAPI efi_get_memory_map_wrapper(UINTN *memory_map_size, EFI_MEMORY_DESCRIPTOR *memory_map, UINTN *map_key, UINTN *descriptor_size, UINT32 *descriptor_version)
Wrap GetMemoryMap()
Definition: efi_wrap.c:374
void * memcpy(void *dest, const void *src, size_t len) __nonnull
EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface
Definition: UefiSpec.h:1964
EFI_CREATE_EVENT CreateEvent
Definition: UefiSpec.h:1954
EFI_HANDLE_PROTOCOL HandleProtocol
Definition: UefiSpec.h:1967
EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify
Definition: UefiSpec.h:1969
static EFI_STATUS EFIAPI efi_free_pages_wrapper(EFI_PHYSICAL_ADDRESS memory, UINTN pages)
Wrap FreePages()
Definition: efi_wrap.c:356
static EFI_STATUS EFIAPI efi_start_image_wrapper(EFI_HANDLE image_handle, UINTN *exit_data_size, CHAR16 **exit_data)
Wrap StartImage()
Definition: efi_wrap.c:771
EFI_SIGNAL_EVENT SignalEvent
Definition: UefiSpec.h:1957
EFI Boot Services Table.
Definition: UefiSpec.h:1930
static EFI_STATUS EFIAPI efi_set_watchdog_timer_wrapper(UINTN timeout, UINT64 watchdog_code, UINTN data_size, CHAR16 *watchdog_data)
Wrap SetWatchdogTimer()
Definition: efi_wrap.c:899
EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount
Definition: UefiSpec.h:1986
static EFI_STATUS EFIAPI efi_install_protocol_interface_wrapper(EFI_HANDLE *handle, EFI_GUID *protocol, EFI_INTERFACE_TYPE interface_type, VOID *interface)
Wrap InstallProtocolInterface()
Definition: efi_wrap.c:566
static EFI_STATUS EFIAPI efi_open_protocol_information_wrapper(EFI_HANDLE handle, EFI_GUID *protocol, EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **entry_buffer, UINTN *entry_count)
Wrap OpenProtocolInformation()
Definition: efi_wrap.c:1020
static EFI_STATUS EFIAPI efi_wait_for_event_wrapper(UINTN number_of_events, EFI_EVENT *event, UINTN *index)
Wrap WaitForEvent()
Definition: efi_wrap.c:495
EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces
Definition: UefiSpec.h:2010
EFI_CONNECT_CONTROLLER ConnectController
Definition: UefiSpec.h:1993
static EFI_STATUS EFIAPI efi_connect_controller_wrapper(EFI_HANDLE controller_handle, EFI_HANDLE *driver_image_handle, EFI_DEVICE_PATH_PROTOCOL *remaining_path, BOOLEAN recursive)
Wrap ConnectController()
Definition: efi_wrap.c:919
static EFI_STATUS EFIAPI efi_locate_protocol_wrapper(EFI_GUID *protocol, VOID *registration, VOID **interface)
Wrap LocateProtocol()
Definition: efi_wrap.c:1104
static EFI_STATUS EFIAPI efi_allocate_pages_wrapper(EFI_ALLOCATE_TYPE type, EFI_MEMORY_TYPE memory_type, UINTN pages, EFI_PHYSICAL_ADDRESS *memory)
Wrap AllocatePages()
Definition: efi_wrap.c:334
EFI_IMAGE_START StartImage
Definition: UefiSpec.h:1978
static EFI_TPL EFIAPI efi_raise_tpl_wrapper(EFI_TPL new_tpl)
Wrap RaiseTPL()
Definition: efi_wrap.c:304
static EFI_STATUS EFIAPI efi_install_multiple_protocol_interfaces_wrapper(EFI_HANDLE *handle,...)
Wrap InstallMultipleProtocolInterfaces()
Definition: efi_wrap.c:1126
static EFI_STATUS EFIAPI efi_unload_image_wrapper(EFI_HANDLE image_handle)
Wrap UnloadImage()
Definition: efi_wrap.c:817
EFI_WAIT_FOR_EVENT WaitForEvent
Definition: UefiSpec.h:1956
EFI_FREE_POOL FreePool
Definition: UefiSpec.h:1949
EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation
Definition: UefiSpec.h:2001
static EFI_STATUS EFIAPI efi_uninstall_protocol_interface_wrapper(EFI_HANDLE handle, EFI_GUID *protocol, VOID *interface)
Wrap UninstallProtocolInterface()
Definition: efi_wrap.c:610
EFI_GET_MEMORY_MAP GetMemoryMap
Definition: UefiSpec.h:1947
EFI_ALLOCATE_PAGES AllocatePages
Definition: UefiSpec.h:1945
static EFI_STATUS EFIAPI efi_allocate_pool_wrapper(EFI_MEMORY_TYPE pool_type, UINTN size, VOID **buffer)
Wrap AllocatePool()
Definition: efi_wrap.c:418
EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle
Definition: UefiSpec.h:2006
static EFI_STATUS EFIAPI efi_locate_handle_buffer_wrapper(EFI_LOCATE_SEARCH_TYPE search_type, EFI_GUID *protocol, VOID *search_key, UINTN *no_handles, EFI_HANDLE **buffer)
Wrap LocateHandleBuffer()
Definition: efi_wrap.c:1073
static EFI_STATUS EFIAPI efi_open_protocol_wrapper(EFI_HANDLE handle, EFI_GUID *protocol, VOID **interface, EFI_HANDLE agent_handle, EFI_HANDLE controller_handle, UINT32 attributes)
Wrap OpenProtocol()
Definition: efi_wrap.c:973
EFI_CHECK_EVENT CheckEvent
Definition: UefiSpec.h:1959
static EFI_STATUS EFIAPI efi_close_event_wrapper(EFI_EVENT event)
Wrap CloseEvent()
Definition: efi_wrap.c:535
static EFI_STATUS EFIAPI efi_load_image_wrapper(BOOLEAN boot_policy, EFI_HANDLE parent_image_handle, EFI_DEVICE_PATH_PROTOCOL *device_path, VOID *source_buffer, UINTN source_size, EFI_HANDLE *image_handle)
Wrap LoadImage()
Definition: efi_wrap.c:739
static EFI_STATUS EFIAPI efi_disconnect_controller_wrapper(EFI_HANDLE controller_handle, EFI_HANDLE driver_image_handle, EFI_HANDLE child_handle)
Wrap DisconnectController()
Definition: efi_wrap.c:950
static EFI_STATUS EFIAPI efi_locate_device_path_wrapper(EFI_GUID *protocol, EFI_DEVICE_PATH_PROTOCOL **device_path, EFI_HANDLE *device)
Wrap LocateDevicePath()
Definition: efi_wrap.c:701
static EFI_STATUS EFIAPI efi_exit_boot_services_wrapper(EFI_HANDLE image_handle, UINTN map_key)
Wrap ExitBootServices()
Definition: efi_wrap.c:834
EFI_SYSTEM_TABLE * efi_systab
EFI_OPEN_PROTOCOL OpenProtocol
Definition: UefiSpec.h:1999
static EFI_STATUS EFIAPI efi_exit_wrapper(EFI_HANDLE image_handle, EFI_STATUS exit_status, UINTN exit_data_size, CHAR16 *exit_data)
Wrap Exit()
Definition: efi_wrap.c:793
EFI_RESTORE_TPL RestoreTPL
Definition: UefiSpec.h:1940
static EFI_STATUS EFIAPI efi_stall_wrapper(UINTN microseconds)
Wrap Stall()
Definition: efi_wrap.c:881
static EFI_STATUS EFIAPI efi_uninstall_multiple_protocol_interfaces_wrapper(EFI_HANDLE handle,...)
Wrap UninstallMultipleProtocolInterfaces()
Definition: efi_wrap.c:1176
static EFI_STATUS EFIAPI efi_check_event_wrapper(EFI_EVENT event)
Wrap CheckEvent()
Definition: efi_wrap.c:550
EFI_FREE_PAGES FreePages
Definition: UefiSpec.h:1946
#define DBG_LOG
Definition: compiler.h:317
EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer
Definition: UefiSpec.h:2007
EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable
Definition: UefiSpec.h:1972
EFI_LOCATE_DEVICE_PATH LocateDevicePath
Definition: UefiSpec.h:1971
static EFI_STATUS EFIAPI efi_free_pool_wrapper(VOID *buffer)
Wrap FreePool()
Definition: efi_wrap.c:438
EFI_ALLOCATE_POOL AllocatePool
Definition: UefiSpec.h:1948
EFI_DISCONNECT_CONTROLLER DisconnectController
Definition: UefiSpec.h:1994

References EFI_BOOT_SERVICES::AllocatePages, EFI_BOOT_SERVICES::AllocatePool, EFI_SYSTEM_TABLE::BootServices, EFI_BOOT_SERVICES::CheckEvent, EFI_BOOT_SERVICES::CloseEvent, EFI_BOOT_SERVICES::CloseProtocol, EFI_BOOT_SERVICES::ConnectController, EFI_BOOT_SERVICES::CreateEvent, EFI_BOOT_SERVICES::CreateEventEx, DBG_LOG, EFI_BOOT_SERVICES::DisconnectController, efi_allocate_pages_wrapper(), efi_allocate_pool_wrapper(), efi_check_event_wrapper(), efi_close_event_wrapper(), efi_close_protocol_wrapper(), efi_connect_controller_wrapper(), efi_create_event_ex_wrapper(), efi_create_event_wrapper(), efi_disconnect_controller_wrapper(), efi_exit_boot_services_wrapper(), efi_exit_wrapper(), efi_free_pages_wrapper(), efi_free_pool_wrapper(), efi_get_memory_map_wrapper(), efi_get_next_monotonic_count_wrapper(), efi_handle_protocol_wrapper(), efi_install_configuration_table_wrapper(), efi_install_multiple_protocol_interfaces_wrapper(), efi_install_protocol_interface_wrapper(), efi_load_image_wrapper(), efi_locate_device_path_wrapper(), efi_locate_handle_buffer_wrapper(), efi_locate_handle_wrapper(), efi_locate_protocol_wrapper(), efi_open_protocol_information_wrapper(), efi_open_protocol_wrapper(), efi_protocols_per_handle_wrapper(), efi_raise_tpl_wrapper(), efi_register_protocol_notify_wrapper(), efi_reinstall_protocol_interface_wrapper(), efi_restore_tpl_wrapper(), efi_set_timer_wrapper(), efi_set_watchdog_timer_wrapper(), efi_signal_event_wrapper(), efi_stall_wrapper(), efi_start_image_wrapper(), efi_systab, efi_uninstall_multiple_protocol_interfaces_wrapper(), efi_uninstall_protocol_interface_wrapper(), efi_unload_image_wrapper(), efi_wait_for_event_wrapper(), EFI_BOOT_SERVICES::Exit, EFI_BOOT_SERVICES::ExitBootServices, EFI_BOOT_SERVICES::FreePages, EFI_BOOT_SERVICES::FreePool, EFI_BOOT_SERVICES::GetMemoryMap, EFI_BOOT_SERVICES::GetNextMonotonicCount, EFI_BOOT_SERVICES::HandleProtocol, EFI_BOOT_SERVICES::InstallConfigurationTable, EFI_BOOT_SERVICES::InstallMultipleProtocolInterfaces, EFI_BOOT_SERVICES::InstallProtocolInterface, EFI_BOOT_SERVICES::LoadImage, EFI_BOOT_SERVICES::LocateDevicePath, EFI_BOOT_SERVICES::LocateHandle, EFI_BOOT_SERVICES::LocateHandleBuffer, EFI_BOOT_SERVICES::LocateProtocol, memcpy(), EFI_BOOT_SERVICES::OpenProtocol, EFI_BOOT_SERVICES::OpenProtocolInformation, EFI_BOOT_SERVICES::ProtocolsPerHandle, EFI_BOOT_SERVICES::RaiseTPL, EFI_BOOT_SERVICES::RegisterProtocolNotify, EFI_BOOT_SERVICES::ReinstallProtocolInterface, EFI_BOOT_SERVICES::RestoreTPL, EFI_BOOT_SERVICES::SetTimer, EFI_BOOT_SERVICES::SetWatchdogTimer, EFI_BOOT_SERVICES::SignalEvent, EFI_BOOT_SERVICES::Stall, EFI_BOOT_SERVICES::StartImage, EFI_BOOT_SERVICES::UninstallMultipleProtocolInterfaces, EFI_BOOT_SERVICES::UninstallProtocolInterface, EFI_BOOT_SERVICES::UnloadImage, and EFI_BOOT_SERVICES::WaitForEvent.

Referenced by efi_wrap_systab().

◆ efi_wrap_rs()

void efi_wrap_rs ( EFI_RUNTIME_SERVICES wrapper)

Wrap a runtime services table.

Parameters
wrapperRuntime services table to wrap

Definition at line 1475 of file efi_wrap.c.

1475  {
1477 
1478  /* Do nothing unless debugging is enabled */
1479  if ( ! DBG_LOG )
1480  return;
1481 
1482  /* Build boot services table wrapper */
1483  memcpy ( wrapper, rs, sizeof ( *wrapper ) );
1484  wrapper->GetTime = efi_get_time_wrapper;
1485  wrapper->SetTime = efi_set_time_wrapper;
1492 }
static EFI_STATUS EFIAPI efi_set_wakeup_time_wrapper(BOOLEAN enable, EFI_TIME *time)
Wrap SetWakeupTime()
Definition: efi_wrap.c:1301
EFI_SET_TIME SetTime
Definition: UefiSpec.h:1889
EFI_GET_WAKEUP_TIME GetWakeupTime
Definition: UefiSpec.h:1890
static EFI_STATUS EFIAPI efi_set_time_wrapper(EFI_TIME *time)
Wrap SetTime()
Definition: efi_wrap.c:1266
static EFI_STATUS EFIAPI efi_get_wakeup_time_wrapper(BOOLEAN *enabled, BOOLEAN *pending, EFI_TIME *time)
Wrap GetWakeupTime()
Definition: efi_wrap.c:1282
static EFI_STATUS EFIAPI efi_get_time_wrapper(EFI_TIME *time, EFI_TIME_CAPABILITIES *cap)
Wrap GetTime()
Definition: efi_wrap.c:1249
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static EFI_STATUS EFIAPI efi_set_variable_wrapper(CHAR16 *name, EFI_GUID *guid, UINT32 attrs, UINTN len, VOID *data)
Wrap SetVariable()
Definition: efi_wrap.c:1370
EFI_SET_VARIABLE SetVariable
Definition: UefiSpec.h:1904
EFI_GET_VARIABLE GetVariable
Definition: UefiSpec.h:1902
EFI Runtime Services Table.
Definition: UefiSpec.h:1879
EFI_RESET_SYSTEM ResetSystem
Definition: UefiSpec.h:1910
EFI_GET_TIME GetTime
Definition: UefiSpec.h:1888
EFI_SET_WAKEUP_TIME SetWakeupTime
Definition: UefiSpec.h:1891
EFI_RUNTIME_SERVICES * RuntimeServices
A pointer to the EFI Runtime Services Table.
Definition: UefiSpec.h:2094
EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName
Definition: UefiSpec.h:1903
static VOID EFIAPI efi_reset_system_wrapper(EFI_RESET_TYPE type, EFI_STATUS status, UINTN len, VOID *data)
Wrap ResetSystem()
Definition: efi_wrap.c:1396
static EFI_STATUS EFIAPI efi_get_variable_wrapper(CHAR16 *name, EFI_GUID *guid, UINT32 *attrs, UINTN *len, VOID *data)
Wrap GetVariable()
Definition: efi_wrap.c:1318
EFI_SYSTEM_TABLE * efi_systab
#define DBG_LOG
Definition: compiler.h:317
static EFI_STATUS EFIAPI efi_get_next_variable_name_wrapper(UINTN *len, CHAR16 *name, EFI_GUID *guid)
Wrap GetNextVariableName()
Definition: efi_wrap.c:1350

References DBG_LOG, efi_get_next_variable_name_wrapper(), efi_get_time_wrapper(), efi_get_variable_wrapper(), efi_get_wakeup_time_wrapper(), efi_reset_system_wrapper(), efi_set_time_wrapper(), efi_set_variable_wrapper(), efi_set_wakeup_time_wrapper(), efi_systab, EFI_RUNTIME_SERVICES::GetNextVariableName, EFI_RUNTIME_SERVICES::GetTime, EFI_RUNTIME_SERVICES::GetVariable, EFI_RUNTIME_SERVICES::GetWakeupTime, memcpy(), EFI_RUNTIME_SERVICES::ResetSystem, EFI_SYSTEM_TABLE::RuntimeServices, EFI_RUNTIME_SERVICES::SetTime, EFI_RUNTIME_SERVICES::SetVariable, and EFI_RUNTIME_SERVICES::SetWakeupTime.

Referenced by efi_wrap_systab().

◆ efi_wrap_systab()

void efi_wrap_systab ( int  global)

Wrap the public EFI system table.

Parameters
globalPatch global boot services table in-place

Definition at line 1499 of file efi_wrap.c.

1499  {
1500  static EFI_BOOT_SERVICES local_bs;
1501  static EFI_RUNTIME_SERVICES local_rs;
1502  EFI_BOOT_SERVICES *bs;
1504 
1505  /* Do nothing unless debugging is enabled */
1506  if ( ! DBG_LOG )
1507  return;
1508 
1509  /* Preserve original system and boot services tables */
1510  if ( ! efi_systab_pub ) {
1514  memcpy ( &efi_bs_copy, efi_bs_orig, sizeof ( efi_bs_copy ) );
1515  memcpy ( &efi_rs_copy, efi_rs_orig, sizeof ( efi_rs_copy ) );
1516  }
1517 
1518  /* Construct and use private system table */
1519  if ( efi_systab != &efi_systab_priv ) {
1521  sizeof ( efi_systab_priv ) );
1525  }
1526 
1527  /* Wrap global or local boot services table as applicable */
1528  bs = ( global ? efi_bs_orig : &local_bs );
1529  rs = ( global ? efi_rs_orig : &local_rs );
1530  efi_wrap_bs ( bs );
1531  efi_wrap_rs ( rs );
1534  DBGC ( colour, "WRAP installed %s wrappers\n",
1535  ( global ? "global" : "local" ) );
1536 }
void efi_wrap_bs(EFI_BOOT_SERVICES *wrapper)
Wrap a boot services table.
Definition: efi_wrap.c:1412
EFI_BOOT_SERVICES * BootServices
A pointer to the EFI Boot Services Table.
Definition: UefiSpec.h:2098
static EFI_BOOT_SERVICES efi_bs_copy
Backup of original EFI boot services table.
Definition: efi_wrap.c:59
#define DBGC(...)
Definition: compiler.h:505
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static EFI_RUNTIME_SERVICES efi_rs_copy
Backup of original EFI runtime services table.
Definition: efi_wrap.c:65
void efi_wrap_rs(EFI_RUNTIME_SERVICES *wrapper)
Wrap a runtime services table.
Definition: efi_wrap.c:1475
static EFI_SYSTEM_TABLE efi_systab_priv
Private EFI system table used while wrapping is active.
Definition: efi_wrap.c:53
EFI Runtime Services Table.
Definition: UefiSpec.h:1879
EFI Boot Services Table.
Definition: UefiSpec.h:1930
static EFI_BOOT_SERVICES * efi_bs_orig
Original EFI boot services table pointer.
Definition: efi_wrap.c:56
EFI_RUNTIME_SERVICES * RuntimeServices
A pointer to the EFI Runtime Services Table.
Definition: UefiSpec.h:2094
static EFI_RUNTIME_SERVICES * efi_rs_orig
Original EFI runtime services table pointer.
Definition: efi_wrap.c:62
EFI_SYSTEM_TABLE * efi_systab
#define colour
Colour for debug messages.
Definition: efi_wrap.c:41
#define DBG_LOG
Definition: compiler.h:317
static EFI_SYSTEM_TABLE * efi_systab_pub
Public EFI system table pointer.
Definition: efi_wrap.c:50

References EFI_SYSTEM_TABLE::BootServices, colour, DBG_LOG, DBGC, efi_bs_copy, efi_bs_orig, efi_rs_copy, efi_rs_orig, efi_systab, efi_systab_priv, efi_systab_pub, efi_wrap_bs(), efi_wrap_rs(), memcpy(), and EFI_SYSTEM_TABLE::RuntimeServices.

Referenced by efi_wrap_image().

◆ efi_unwrap()

void efi_unwrap ( void  )

Remove boot services table wrapper.

Definition at line 1542 of file efi_wrap.c.

1542  {
1543 
1544  /* Do nothing unless debugging is enabled */
1545  if ( ! DBG_LOG )
1546  return;
1547 
1548  /* Do nothing if wrapping was never enabled */
1549  if ( ! efi_systab_pub )
1550  return;
1551 
1552  /* Restore original system and boot services tables */
1553  memcpy ( efi_bs_orig, &efi_bs_copy, sizeof ( *efi_bs_orig ) );
1555 
1556  /* Switch back to using public system table */
1558  DBGC ( colour, "WRAP uninstalled wrappers\n" );
1559 }
EFI_BOOT_SERVICES * BootServices
A pointer to the EFI Boot Services Table.
Definition: UefiSpec.h:2098
static EFI_BOOT_SERVICES efi_bs_copy
Backup of original EFI boot services table.
Definition: efi_wrap.c:59
#define DBGC(...)
Definition: compiler.h:505
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static EFI_BOOT_SERVICES * efi_bs_orig
Original EFI boot services table pointer.
Definition: efi_wrap.c:56
EFI_SYSTEM_TABLE * efi_systab
#define colour
Colour for debug messages.
Definition: efi_wrap.c:41
#define DBG_LOG
Definition: compiler.h:317
static EFI_SYSTEM_TABLE * efi_systab_pub
Public EFI system table pointer.
Definition: efi_wrap.c:50

References EFI_SYSTEM_TABLE::BootServices, colour, DBG_LOG, DBGC, efi_bs_copy, efi_bs_orig, efi_systab, efi_systab_pub, and memcpy().

Referenced by efi_block_exec(), and efi_image_exec().

◆ efi_wrap_image()

void efi_wrap_image ( EFI_HANDLE  handle)

Wrap calls made by a newly loaded image.

Parameters
handleImage handle

Definition at line 1566 of file efi_wrap.c.

1566  {
1567 
1568  /* Do nothing unless debugging is enabled */
1569  if ( ! DBG_LOG )
1570  return;
1571 
1572  /* Dump image information */
1573  efi_dump_image ( handle );
1574 
1575  /* Patch public system table */
1576  efi_wrap_systab ( 0 );
1577 }
static void efi_dump_image(EFI_HANDLE handle)
Dump information about a loaded image.
Definition: efi_wrap.c:275
void efi_wrap_systab(int global)
Wrap the public EFI system table.
Definition: efi_wrap.c:1499
#define DBG_LOG
Definition: compiler.h:317
uint16_t handle
Handle.
Definition: smbios.h:16

References DBG_LOG, efi_dump_image(), efi_wrap_systab(), and handle.

Referenced by efi_block_exec(), and efi_image_exec().