Execute EFI image.
152 DBGC (
image,
"EFIIMAGE %p could not identify SNP device\n",
160 DBGC (
image,
"EFIIMAGE %p could not install file protocol: " 162 goto err_file_install;
167 DBGC (
image,
"EFIIMAGE %p could not install PXE protocol: " 169 goto err_pxe_install;
174 DBGC (
image,
"EFIIMAGE %p could not install iPXE download " 176 goto err_download_install;
182 DBGC (
image,
"EFIIMAGE %p could not create device path\n",
191 DBGC (
image,
"EFIIMAGE %p could not create command line\n",
204 DBGC (
image,
"EFIIMAGE %p could not load: %s\n",
207 goto err_load_image_security_violation;
220 goto err_open_protocol;
224 if ( loaded.image->DeviceHandle ==
NULL ) {
225 DBGC (
image,
"EFIIMAGE %p filling in missing DeviceHandle\n",
227 loaded.image->DeviceHandle = snpdev->
handle;
232 assert ( loaded.image->DeviceHandle == snpdev->
handle );
233 assert ( loaded.image->LoadOptionsSize == 0 );
237 type = loaded.image->ImageCodeType;
240 loaded.image->LoadOptions =
cmdline;
241 loaded.image->LoadOptionsSize =
256 DBGC (
image,
"EFIIMAGE %p could not start (or returned with " 258 goto err_start_image;
287 err_load_image_security_violation:
296 err_download_install:
EFI_BOOT_SERVICES * BootServices
A pointer to the EFI Boot Services Table.
struct arbelprm_rc_send_wqe rc
void efi_download_uninstall(EFI_HANDLE handle)
Uninstall iPXE download protocol.
#define EEFI(efirc)
Convert an EFI status code to an iPXE status code.
userptr_t data
Raw file image.
#define EEFI_START(efirc)
EFI_GUID efi_loaded_image_protocol_guid
Loaded image protocol GUID.
void efi_file_uninstall(EFI_HANDLE handle)
Uninstall EFI simple file system protocol.
EFI_IMAGE_UNLOAD UnloadImage
This protocol can be used on any device handle to obtain generic path/location information concerning...
static void efi_snp_claim(void)
Claim network devices for use by iPXE.
EFI_HANDLE handle
EFI device handle.
size_t wcslen(const wchar_t *string)
Calculate length of wide-character string.
int efi_file_install(EFI_HANDLE handle)
Install EFI simple file system protocol.
struct net_device * netdev
The underlying iPXE network device.
struct efi_snp_device * last_opened_snpdev(void)
Get most recently opened SNP device.
#define ENOMEM
Not enough space.
Can be used on any image handle to obtain information about the loaded image.
void efi_pxe_uninstall(EFI_HANDLE handle)
Uninstall PXE base code protocol.
void efi_driver_reconnect_all(void)
Reconnect original EFI drivers to all possible devices.
EFI_MEMORY_TYPE
Enumeration of memory types introduced in UEFI.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
void efi_wrap(EFI_HANDLE handle)
Wrap the calls made by a loaded image.
#define EFI_OPEN_PROTOCOL_GET_PROTOCOL
The code portions of a loaded Boot Services Driver.
int efi_pxe_install(EFI_HANDLE handle, struct net_device *netdev)
Install PXE base code protocol.
char * strerror(int errno)
Retrieve string representation of error number.
static void(* free)(struct refcnt *refcnt))
EFI_HANDLE efi_image_handle
Image handle passed to entry point.
size_t len
Length of raw file image.
#define ENODEV
No such device.
static void efi_snp_release(void)
Release network devices for use via SNP.
static void console_reset(void)
Reset console.
EFI_IMAGE_START StartImage
#define EFI_SECURITY_VIOLATION
Enumeration of EFI_STATUS.
static wchar_t * efi_image_cmdline(struct image *image)
Create command line for image.
static EFI_DEVICE_PATH_PROTOCOL * efi_image_path(struct image *image, EFI_DEVICE_PATH_PROTOCOL *parent)
Create device path for image.
RETURN_STATUS EFI_STATUS
Function return status for EFI API.
void * user_to_virt(userptr_t userptr, off_t offset)
Convert user pointer to virtual address.
int efi_download_install(EFI_HANDLE handle)
Install iPXE download protocol.
EFI_SYSTEM_TABLE * efi_systab
EFI_OPEN_PROTOCOL OpenProtocol
EFI_DEVICE_PATH_PROTOCOL * path
The device path.
#define NULL
NULL pointer (VOID *)