@ -127,6 +127,7 @@ static unsigned long do_bootefi_exec(void *efi, void *fdt,
{
{
struct efi_loaded_image loaded_image_info = { } ;
struct efi_loaded_image loaded_image_info = { } ;
struct efi_object loaded_image_info_obj = { } ;
struct efi_object loaded_image_info_obj = { } ;
struct efi_device_path * memdp = NULL ;
ulong ret ;
ulong ret ;
ulong ( * entry ) ( void * image_handle , struct efi_system_table * st )
ulong ( * entry ) ( void * image_handle , struct efi_system_table * st )
@ -135,6 +136,20 @@ static unsigned long do_bootefi_exec(void *efi, void *fdt,
const efi_guid_t fdt_guid = EFI_FDT_GUID ;
const efi_guid_t fdt_guid = EFI_FDT_GUID ;
bootm_headers_t img = { 0 } ;
bootm_headers_t img = { 0 } ;
/*
* Special case for efi payload not loaded from disk , such as
* ' bootefi hello ' or for example payload loaded directly into
* memory via jtag / etc :
*/
if ( ! device_path & & ! image_path ) {
printf ( " WARNING: using memory device/image path, this may confuse some payloads! \n " ) ;
/* actual addresses filled in after efi_load_pe() */
memdp = efi_dp_from_mem ( 0 , 0 , 0 ) ;
device_path = image_path = memdp ;
} else {
assert ( device_path & & image_path ) ;
}
/* Initialize and populate EFI object list */
/* Initialize and populate EFI object list */
if ( ! efi_obj_list_initalized )
if ( ! efi_obj_list_initalized )
efi_init_obj_list ( ) ;
efi_init_obj_list ( ) ;
@ -181,6 +196,14 @@ static unsigned long do_bootefi_exec(void *efi, void *fdt,
goto exit ;
goto exit ;
}
}
if ( memdp ) {
struct efi_device_path_memory * mdp = ( void * ) memdp ;
mdp - > memory_type = loaded_image_info . image_code_type ;
mdp - > start_address = ( uintptr_t ) loaded_image_info . image_base ;
mdp - > end_address = mdp - > start_address +
loaded_image_info . image_size ;
}
/* we don't support much: */
/* we don't support much: */
env_set ( " efi_8be4df61-93ca-11d2-aa0d-00e098032b8c_OsIndicationsSupported " ,
env_set ( " efi_8be4df61-93ca-11d2-aa0d-00e098032b8c_OsIndicationsSupported " ,
" {ro,boot}(blob)0000000000000000 " ) ;
" {ro,boot}(blob)0000000000000000 " ) ;