1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2f4f75ad5SArd Biesheuvel 3f4f75ad5SArd Biesheuvel #ifndef _DRIVERS_FIRMWARE_EFI_EFISTUB_H 4f4f75ad5SArd Biesheuvel #define _DRIVERS_FIRMWARE_EFI_EFISTUB_H 5f4f75ad5SArd Biesheuvel 6f4f75ad5SArd Biesheuvel /* error code which can't be mistaken for valid address */ 7f4f75ad5SArd Biesheuvel #define EFI_ERROR (~0UL) 8f4f75ad5SArd Biesheuvel 907e83dbbSArd Biesheuvel /* 1007e83dbbSArd Biesheuvel * __init annotations should not be used in the EFI stub, since the code is 1107e83dbbSArd Biesheuvel * either included in the decompressor (x86, ARM) where they have no effect, 1207e83dbbSArd Biesheuvel * or the whole stub is __init annotated at the section level (arm64), by 1307e83dbbSArd Biesheuvel * renaming the sections, in which case the __init annotation will be 1407e83dbbSArd Biesheuvel * redundant, and will result in section names like .init.init.text, and our 1507e83dbbSArd Biesheuvel * linker script does not expect that. 1607e83dbbSArd Biesheuvel */ 1707e83dbbSArd Biesheuvel #undef __init 1807e83dbbSArd Biesheuvel 19a6a14469SArd Biesheuvel /* 20a6a14469SArd Biesheuvel * Allow the platform to override the allocation granularity: this allows 21a6a14469SArd Biesheuvel * systems that have the capability to run with a larger page size to deal 22a6a14469SArd Biesheuvel * with the allocations for initrd and fdt more efficiently. 23a6a14469SArd Biesheuvel */ 24a6a14469SArd Biesheuvel #ifndef EFI_ALLOC_ALIGN 25a6a14469SArd Biesheuvel #define EFI_ALLOC_ALIGN EFI_PAGE_SIZE 26a6a14469SArd Biesheuvel #endif 27a6a14469SArd Biesheuvel 28105cb954SArvind Sankar #if defined(CONFIG_ARM) || defined(CONFIG_X86) 297d4e323dSArd Biesheuvel #define __efistub_global __section(.data) 307d4e323dSArd Biesheuvel #else 317d4e323dSArd Biesheuvel #define __efistub_global 327d4e323dSArd Biesheuvel #endif 337d4e323dSArd Biesheuvel 345193a33dSArd Biesheuvel extern bool __pure nochunk(void); 357d4e323dSArd Biesheuvel extern bool __pure nokaslr(void); 3679d3219dSArd Biesheuvel extern bool __pure noinitrd(void); 377d4e323dSArd Biesheuvel extern bool __pure is_quiet(void); 387d4e323dSArd Biesheuvel extern bool __pure novamap(void); 39eeff7d63SArd Biesheuvel 402fcdad2aSArd Biesheuvel extern __pure efi_system_table_t *efi_system_table(void); 412fcdad2aSArd Biesheuvel 4222090f84SArd Biesheuvel #ifndef efi_bs_call 4322090f84SArd Biesheuvel #define efi_bs_call(func, ...) efi_system_table()->boottime->func(__VA_ARGS__) 4422090f84SArd Biesheuvel #endif 4522090f84SArd Biesheuvel #ifndef efi_rt_call 4622090f84SArd Biesheuvel #define efi_rt_call(func, ...) efi_system_table()->runtime->func(__VA_ARGS__) 4722090f84SArd Biesheuvel #endif 4822090f84SArd Biesheuvel #ifndef efi_is_native 4922090f84SArd Biesheuvel #define efi_is_native() (true) 5022090f84SArd Biesheuvel #endif 5122090f84SArd Biesheuvel #ifndef efi_table_attr 5222090f84SArd Biesheuvel #define efi_table_attr(inst, attr) (inst->attr) 5322090f84SArd Biesheuvel #endif 5422090f84SArd Biesheuvel #ifndef efi_call_proto 5522090f84SArd Biesheuvel #define efi_call_proto(inst, func, ...) inst->func(inst, ##__VA_ARGS__) 5622090f84SArd Biesheuvel #endif 5722090f84SArd Biesheuvel 588173ec79SArd Biesheuvel #define pr_efi(msg) do { \ 598173ec79SArd Biesheuvel if (!is_quiet()) efi_printk("EFI stub: "msg); \ 60eeff7d63SArd Biesheuvel } while (0) 61eeff7d63SArd Biesheuvel 628173ec79SArd Biesheuvel #define pr_efi_err(msg) efi_printk("EFI stub: ERROR: "msg) 6360f38de7SArd Biesheuvel 64ac9aff8eSIngo Molnar /* Helper macros for the usual case of using simple C variables: */ 65ac9aff8eSIngo Molnar #ifndef fdt_setprop_inplace_var 66ac9aff8eSIngo Molnar #define fdt_setprop_inplace_var(fdt, node_offset, name, var) \ 67ac9aff8eSIngo Molnar fdt_setprop_inplace((fdt), (node_offset), (name), &(var), sizeof(var)) 68ac9aff8eSIngo Molnar #endif 69ac9aff8eSIngo Molnar 70ac9aff8eSIngo Molnar #ifndef fdt_setprop_var 71ac9aff8eSIngo Molnar #define fdt_setprop_var(fdt, node_offset, name, var) \ 72ac9aff8eSIngo Molnar fdt_setprop((fdt), (node_offset), (name), &(var), sizeof(var)) 73ac9aff8eSIngo Molnar #endif 74ac9aff8eSIngo Molnar 75966291f6SArd Biesheuvel #define get_efi_var(name, vendor, ...) \ 76966291f6SArd Biesheuvel efi_rt_call(get_variable, (efi_char16_t *)(name), \ 77966291f6SArd Biesheuvel (efi_guid_t *)(vendor), __VA_ARGS__) 78966291f6SArd Biesheuvel 79966291f6SArd Biesheuvel #define set_efi_var(name, vendor, ...) \ 80966291f6SArd Biesheuvel efi_rt_call(set_variable, (efi_char16_t *)(name), \ 81966291f6SArd Biesheuvel (efi_guid_t *)(vendor), __VA_ARGS__) 82966291f6SArd Biesheuvel 838166ec09SArd Biesheuvel #define efi_get_handle_at(array, idx) \ 848166ec09SArd Biesheuvel (efi_is_native() ? (array)[idx] \ 858166ec09SArd Biesheuvel : (efi_handle_t)(unsigned long)((u32 *)(array))[idx]) 868166ec09SArd Biesheuvel 878166ec09SArd Biesheuvel #define efi_get_handle_num(size) \ 888166ec09SArd Biesheuvel ((size) / (efi_is_native() ? sizeof(efi_handle_t) : sizeof(u32))) 898166ec09SArd Biesheuvel 908166ec09SArd Biesheuvel #define for_each_efi_handle(handle, array, size, i) \ 918166ec09SArd Biesheuvel for (i = 0; \ 928166ec09SArd Biesheuvel i < efi_get_handle_num(size) && \ 938166ec09SArd Biesheuvel ((handle = efi_get_handle_at((array), i)) || true); \ 948166ec09SArd Biesheuvel i++) 958166ec09SArd Biesheuvel 968166ec09SArd Biesheuvel /* 978166ec09SArd Biesheuvel * Allocation types for calls to boottime->allocate_pages. 988166ec09SArd Biesheuvel */ 998166ec09SArd Biesheuvel #define EFI_ALLOCATE_ANY_PAGES 0 1008166ec09SArd Biesheuvel #define EFI_ALLOCATE_MAX_ADDRESS 1 1018166ec09SArd Biesheuvel #define EFI_ALLOCATE_ADDRESS 2 1028166ec09SArd Biesheuvel #define EFI_MAX_ALLOCATE_TYPE 3 1038166ec09SArd Biesheuvel 1048166ec09SArd Biesheuvel /* 1058166ec09SArd Biesheuvel * The type of search to perform when calling boottime->locate_handle 1068166ec09SArd Biesheuvel */ 1078166ec09SArd Biesheuvel #define EFI_LOCATE_ALL_HANDLES 0 1088166ec09SArd Biesheuvel #define EFI_LOCATE_BY_REGISTER_NOTIFY 1 1098166ec09SArd Biesheuvel #define EFI_LOCATE_BY_PROTOCOL 2 1108166ec09SArd Biesheuvel 1118166ec09SArd Biesheuvel struct efi_boot_memmap { 1128166ec09SArd Biesheuvel efi_memory_desc_t **map; 1138166ec09SArd Biesheuvel unsigned long *map_size; 1148166ec09SArd Biesheuvel unsigned long *desc_size; 1158166ec09SArd Biesheuvel u32 *desc_ver; 1168166ec09SArd Biesheuvel unsigned long *key_ptr; 1178166ec09SArd Biesheuvel unsigned long *buff_size; 1188166ec09SArd Biesheuvel }; 1198166ec09SArd Biesheuvel 120abd26868SArd Biesheuvel typedef struct efi_generic_dev_path efi_device_path_protocol_t; 121abd26868SArd Biesheuvel 1228166ec09SArd Biesheuvel /* 1238166ec09SArd Biesheuvel * EFI Boot Services table 1248166ec09SArd Biesheuvel */ 1258166ec09SArd Biesheuvel union efi_boot_services { 1268166ec09SArd Biesheuvel struct { 1278166ec09SArd Biesheuvel efi_table_hdr_t hdr; 1288166ec09SArd Biesheuvel void *raise_tpl; 1298166ec09SArd Biesheuvel void *restore_tpl; 1308166ec09SArd Biesheuvel efi_status_t (__efiapi *allocate_pages)(int, int, unsigned long, 1318166ec09SArd Biesheuvel efi_physical_addr_t *); 1328166ec09SArd Biesheuvel efi_status_t (__efiapi *free_pages)(efi_physical_addr_t, 1338166ec09SArd Biesheuvel unsigned long); 1348166ec09SArd Biesheuvel efi_status_t (__efiapi *get_memory_map)(unsigned long *, void *, 1358166ec09SArd Biesheuvel unsigned long *, 1368166ec09SArd Biesheuvel unsigned long *, u32 *); 1378166ec09SArd Biesheuvel efi_status_t (__efiapi *allocate_pool)(int, unsigned long, 1388166ec09SArd Biesheuvel void **); 1398166ec09SArd Biesheuvel efi_status_t (__efiapi *free_pool)(void *); 1408166ec09SArd Biesheuvel void *create_event; 1418166ec09SArd Biesheuvel void *set_timer; 1428166ec09SArd Biesheuvel void *wait_for_event; 1438166ec09SArd Biesheuvel void *signal_event; 1448166ec09SArd Biesheuvel void *close_event; 1458166ec09SArd Biesheuvel void *check_event; 1468166ec09SArd Biesheuvel void *install_protocol_interface; 1478166ec09SArd Biesheuvel void *reinstall_protocol_interface; 1488166ec09SArd Biesheuvel void *uninstall_protocol_interface; 1498166ec09SArd Biesheuvel efi_status_t (__efiapi *handle_protocol)(efi_handle_t, 1508166ec09SArd Biesheuvel efi_guid_t *, void **); 1518166ec09SArd Biesheuvel void *__reserved; 1528166ec09SArd Biesheuvel void *register_protocol_notify; 1538166ec09SArd Biesheuvel efi_status_t (__efiapi *locate_handle)(int, efi_guid_t *, 1548166ec09SArd Biesheuvel void *, unsigned long *, 1558166ec09SArd Biesheuvel efi_handle_t *); 156abd26868SArd Biesheuvel efi_status_t (__efiapi *locate_device_path)(efi_guid_t *, 157abd26868SArd Biesheuvel efi_device_path_protocol_t **, 158abd26868SArd Biesheuvel efi_handle_t *); 1598166ec09SArd Biesheuvel efi_status_t (__efiapi *install_configuration_table)(efi_guid_t *, 1608166ec09SArd Biesheuvel void *); 1618166ec09SArd Biesheuvel void *load_image; 1628166ec09SArd Biesheuvel void *start_image; 1633b8f44fcSArd Biesheuvel efi_status_t __noreturn (__efiapi *exit)(efi_handle_t, 1643b8f44fcSArd Biesheuvel efi_status_t, 1653b8f44fcSArd Biesheuvel unsigned long, 1663b8f44fcSArd Biesheuvel efi_char16_t *); 1678166ec09SArd Biesheuvel void *unload_image; 1688166ec09SArd Biesheuvel efi_status_t (__efiapi *exit_boot_services)(efi_handle_t, 1698166ec09SArd Biesheuvel unsigned long); 1708166ec09SArd Biesheuvel void *get_next_monotonic_count; 1718166ec09SArd Biesheuvel void *stall; 1728166ec09SArd Biesheuvel void *set_watchdog_timer; 1738166ec09SArd Biesheuvel void *connect_controller; 1748166ec09SArd Biesheuvel efi_status_t (__efiapi *disconnect_controller)(efi_handle_t, 1758166ec09SArd Biesheuvel efi_handle_t, 1768166ec09SArd Biesheuvel efi_handle_t); 1778166ec09SArd Biesheuvel void *open_protocol; 1788166ec09SArd Biesheuvel void *close_protocol; 1798166ec09SArd Biesheuvel void *open_protocol_information; 1808166ec09SArd Biesheuvel void *protocols_per_handle; 1818166ec09SArd Biesheuvel void *locate_handle_buffer; 1828166ec09SArd Biesheuvel efi_status_t (__efiapi *locate_protocol)(efi_guid_t *, void *, 1838166ec09SArd Biesheuvel void **); 1848166ec09SArd Biesheuvel void *install_multiple_protocol_interfaces; 1858166ec09SArd Biesheuvel void *uninstall_multiple_protocol_interfaces; 1868166ec09SArd Biesheuvel void *calculate_crc32; 1878166ec09SArd Biesheuvel void *copy_mem; 1888166ec09SArd Biesheuvel void *set_mem; 1898166ec09SArd Biesheuvel void *create_event_ex; 1908166ec09SArd Biesheuvel }; 1918166ec09SArd Biesheuvel struct { 1928166ec09SArd Biesheuvel efi_table_hdr_t hdr; 1938166ec09SArd Biesheuvel u32 raise_tpl; 1948166ec09SArd Biesheuvel u32 restore_tpl; 1958166ec09SArd Biesheuvel u32 allocate_pages; 1968166ec09SArd Biesheuvel u32 free_pages; 1978166ec09SArd Biesheuvel u32 get_memory_map; 1988166ec09SArd Biesheuvel u32 allocate_pool; 1998166ec09SArd Biesheuvel u32 free_pool; 2008166ec09SArd Biesheuvel u32 create_event; 2018166ec09SArd Biesheuvel u32 set_timer; 2028166ec09SArd Biesheuvel u32 wait_for_event; 2038166ec09SArd Biesheuvel u32 signal_event; 2048166ec09SArd Biesheuvel u32 close_event; 2058166ec09SArd Biesheuvel u32 check_event; 2068166ec09SArd Biesheuvel u32 install_protocol_interface; 2078166ec09SArd Biesheuvel u32 reinstall_protocol_interface; 2088166ec09SArd Biesheuvel u32 uninstall_protocol_interface; 2098166ec09SArd Biesheuvel u32 handle_protocol; 2108166ec09SArd Biesheuvel u32 __reserved; 2118166ec09SArd Biesheuvel u32 register_protocol_notify; 2128166ec09SArd Biesheuvel u32 locate_handle; 2138166ec09SArd Biesheuvel u32 locate_device_path; 2148166ec09SArd Biesheuvel u32 install_configuration_table; 2158166ec09SArd Biesheuvel u32 load_image; 2168166ec09SArd Biesheuvel u32 start_image; 2178166ec09SArd Biesheuvel u32 exit; 2188166ec09SArd Biesheuvel u32 unload_image; 2198166ec09SArd Biesheuvel u32 exit_boot_services; 2208166ec09SArd Biesheuvel u32 get_next_monotonic_count; 2218166ec09SArd Biesheuvel u32 stall; 2228166ec09SArd Biesheuvel u32 set_watchdog_timer; 2238166ec09SArd Biesheuvel u32 connect_controller; 2248166ec09SArd Biesheuvel u32 disconnect_controller; 2258166ec09SArd Biesheuvel u32 open_protocol; 2268166ec09SArd Biesheuvel u32 close_protocol; 2278166ec09SArd Biesheuvel u32 open_protocol_information; 2288166ec09SArd Biesheuvel u32 protocols_per_handle; 2298166ec09SArd Biesheuvel u32 locate_handle_buffer; 2308166ec09SArd Biesheuvel u32 locate_protocol; 2318166ec09SArd Biesheuvel u32 install_multiple_protocol_interfaces; 2328166ec09SArd Biesheuvel u32 uninstall_multiple_protocol_interfaces; 2338166ec09SArd Biesheuvel u32 calculate_crc32; 2348166ec09SArd Biesheuvel u32 copy_mem; 2358166ec09SArd Biesheuvel u32 set_mem; 2368166ec09SArd Biesheuvel u32 create_event_ex; 2378166ec09SArd Biesheuvel } mixed_mode; 2388166ec09SArd Biesheuvel }; 2398166ec09SArd Biesheuvel 240c2d0b470SArd Biesheuvel typedef union efi_uga_draw_protocol efi_uga_draw_protocol_t; 241c2d0b470SArd Biesheuvel 242c2d0b470SArd Biesheuvel union efi_uga_draw_protocol { 243c2d0b470SArd Biesheuvel struct { 244c2d0b470SArd Biesheuvel efi_status_t (__efiapi *get_mode)(efi_uga_draw_protocol_t *, 245c2d0b470SArd Biesheuvel u32*, u32*, u32*, u32*); 246c2d0b470SArd Biesheuvel void *set_mode; 247c2d0b470SArd Biesheuvel void *blt; 248c2d0b470SArd Biesheuvel }; 249c2d0b470SArd Biesheuvel struct { 250c2d0b470SArd Biesheuvel u32 get_mode; 251c2d0b470SArd Biesheuvel u32 set_mode; 252c2d0b470SArd Biesheuvel u32 blt; 253c2d0b470SArd Biesheuvel } mixed_mode; 254c2d0b470SArd Biesheuvel }; 255c2d0b470SArd Biesheuvel 2568166ec09SArd Biesheuvel union efi_simple_text_output_protocol { 2578166ec09SArd Biesheuvel struct { 2588166ec09SArd Biesheuvel void *reset; 2598166ec09SArd Biesheuvel efi_status_t (__efiapi *output_string)(efi_simple_text_output_protocol_t *, 2608166ec09SArd Biesheuvel efi_char16_t *); 2618166ec09SArd Biesheuvel void *test_string; 2628166ec09SArd Biesheuvel }; 2638166ec09SArd Biesheuvel struct { 2648166ec09SArd Biesheuvel u32 reset; 2658166ec09SArd Biesheuvel u32 output_string; 2668166ec09SArd Biesheuvel u32 test_string; 2678166ec09SArd Biesheuvel } mixed_mode; 2688166ec09SArd Biesheuvel }; 2698166ec09SArd Biesheuvel 2708166ec09SArd Biesheuvel #define PIXEL_RGB_RESERVED_8BIT_PER_COLOR 0 2718166ec09SArd Biesheuvel #define PIXEL_BGR_RESERVED_8BIT_PER_COLOR 1 2728166ec09SArd Biesheuvel #define PIXEL_BIT_MASK 2 2738166ec09SArd Biesheuvel #define PIXEL_BLT_ONLY 3 2748166ec09SArd Biesheuvel #define PIXEL_FORMAT_MAX 4 2758166ec09SArd Biesheuvel 2768166ec09SArd Biesheuvel typedef struct { 2778166ec09SArd Biesheuvel u32 red_mask; 2788166ec09SArd Biesheuvel u32 green_mask; 2798166ec09SArd Biesheuvel u32 blue_mask; 2808166ec09SArd Biesheuvel u32 reserved_mask; 2818166ec09SArd Biesheuvel } efi_pixel_bitmask_t; 2828166ec09SArd Biesheuvel 2838166ec09SArd Biesheuvel typedef struct { 2848166ec09SArd Biesheuvel u32 version; 2858166ec09SArd Biesheuvel u32 horizontal_resolution; 2868166ec09SArd Biesheuvel u32 vertical_resolution; 2878166ec09SArd Biesheuvel int pixel_format; 2888166ec09SArd Biesheuvel efi_pixel_bitmask_t pixel_information; 2898166ec09SArd Biesheuvel u32 pixels_per_scan_line; 2908166ec09SArd Biesheuvel } efi_graphics_output_mode_info_t; 2918166ec09SArd Biesheuvel 2928166ec09SArd Biesheuvel typedef union efi_graphics_output_protocol_mode efi_graphics_output_protocol_mode_t; 2938166ec09SArd Biesheuvel 2948166ec09SArd Biesheuvel union efi_graphics_output_protocol_mode { 2958166ec09SArd Biesheuvel struct { 2968166ec09SArd Biesheuvel u32 max_mode; 2978166ec09SArd Biesheuvel u32 mode; 2988166ec09SArd Biesheuvel efi_graphics_output_mode_info_t *info; 2998166ec09SArd Biesheuvel unsigned long size_of_info; 3008166ec09SArd Biesheuvel efi_physical_addr_t frame_buffer_base; 3018166ec09SArd Biesheuvel unsigned long frame_buffer_size; 3028166ec09SArd Biesheuvel }; 3038166ec09SArd Biesheuvel struct { 3048166ec09SArd Biesheuvel u32 max_mode; 3058166ec09SArd Biesheuvel u32 mode; 3068166ec09SArd Biesheuvel u32 info; 3078166ec09SArd Biesheuvel u32 size_of_info; 3088166ec09SArd Biesheuvel u64 frame_buffer_base; 3098166ec09SArd Biesheuvel u32 frame_buffer_size; 3108166ec09SArd Biesheuvel } mixed_mode; 3118166ec09SArd Biesheuvel }; 3128166ec09SArd Biesheuvel 3138166ec09SArd Biesheuvel typedef union efi_graphics_output_protocol efi_graphics_output_protocol_t; 3148166ec09SArd Biesheuvel 3158166ec09SArd Biesheuvel union efi_graphics_output_protocol { 3168166ec09SArd Biesheuvel struct { 317b4b89a02SArvind Sankar efi_status_t (__efiapi *query_mode)(efi_graphics_output_protocol_t *, 318b4b89a02SArvind Sankar u32, unsigned long *, 319b4b89a02SArvind Sankar efi_graphics_output_mode_info_t **); 320b4b89a02SArvind Sankar efi_status_t (__efiapi *set_mode) (efi_graphics_output_protocol_t *, u32); 3218166ec09SArd Biesheuvel void *blt; 3228166ec09SArd Biesheuvel efi_graphics_output_protocol_mode_t *mode; 3238166ec09SArd Biesheuvel }; 3248166ec09SArd Biesheuvel struct { 3258166ec09SArd Biesheuvel u32 query_mode; 3268166ec09SArd Biesheuvel u32 set_mode; 3278166ec09SArd Biesheuvel u32 blt; 3288166ec09SArd Biesheuvel u32 mode; 3298166ec09SArd Biesheuvel } mixed_mode; 3308166ec09SArd Biesheuvel }; 3318166ec09SArd Biesheuvel 332f7b85b33SArd Biesheuvel typedef union { 333f7b85b33SArd Biesheuvel struct { 334a46a290aSArd Biesheuvel u32 revision; 335a46a290aSArd Biesheuvel efi_handle_t parent_handle; 336a46a290aSArd Biesheuvel efi_system_table_t *system_table; 337a46a290aSArd Biesheuvel efi_handle_t device_handle; 338a46a290aSArd Biesheuvel void *file_path; 339a46a290aSArd Biesheuvel void *reserved; 340a46a290aSArd Biesheuvel u32 load_options_size; 341a46a290aSArd Biesheuvel void *load_options; 342a46a290aSArd Biesheuvel void *image_base; 343a46a290aSArd Biesheuvel __aligned_u64 image_size; 344a46a290aSArd Biesheuvel unsigned int image_code_type; 345a46a290aSArd Biesheuvel unsigned int image_data_type; 346a46a290aSArd Biesheuvel efi_status_t (__efiapi *unload)(efi_handle_t image_handle); 347f7b85b33SArd Biesheuvel }; 348f7b85b33SArd Biesheuvel struct { 349f7b85b33SArd Biesheuvel u32 revision; 350f7b85b33SArd Biesheuvel u32 parent_handle; 351f7b85b33SArd Biesheuvel u32 system_table; 352f7b85b33SArd Biesheuvel u32 device_handle; 353f7b85b33SArd Biesheuvel u32 file_path; 354f7b85b33SArd Biesheuvel u32 reserved; 355f7b85b33SArd Biesheuvel u32 load_options_size; 356f7b85b33SArd Biesheuvel u32 load_options; 357f7b85b33SArd Biesheuvel u32 image_base; 358f7b85b33SArd Biesheuvel __aligned_u64 image_size; 359f7b85b33SArd Biesheuvel u32 image_code_type; 360f7b85b33SArd Biesheuvel u32 image_data_type; 361f7b85b33SArd Biesheuvel u32 unload; 362f7b85b33SArd Biesheuvel } mixed_mode; 363a46a290aSArd Biesheuvel } efi_loaded_image_t; 364a46a290aSArd Biesheuvel 365a46a290aSArd Biesheuvel typedef struct { 366a46a290aSArd Biesheuvel u64 size; 367a46a290aSArd Biesheuvel u64 file_size; 368a46a290aSArd Biesheuvel u64 phys_size; 369a46a290aSArd Biesheuvel efi_time_t create_time; 370a46a290aSArd Biesheuvel efi_time_t last_access_time; 371a46a290aSArd Biesheuvel efi_time_t modification_time; 372a46a290aSArd Biesheuvel __aligned_u64 attribute; 3739302c1bbSArd Biesheuvel efi_char16_t filename[]; 374a46a290aSArd Biesheuvel } efi_file_info_t; 375a46a290aSArd Biesheuvel 376a46a290aSArd Biesheuvel typedef struct efi_file_protocol efi_file_protocol_t; 377a46a290aSArd Biesheuvel 378a46a290aSArd Biesheuvel struct efi_file_protocol { 379a46a290aSArd Biesheuvel u64 revision; 380a46a290aSArd Biesheuvel efi_status_t (__efiapi *open) (efi_file_protocol_t *, 381a46a290aSArd Biesheuvel efi_file_protocol_t **, 382a46a290aSArd Biesheuvel efi_char16_t *, u64, u64); 383a46a290aSArd Biesheuvel efi_status_t (__efiapi *close) (efi_file_protocol_t *); 384a46a290aSArd Biesheuvel efi_status_t (__efiapi *delete) (efi_file_protocol_t *); 385a46a290aSArd Biesheuvel efi_status_t (__efiapi *read) (efi_file_protocol_t *, 386a46a290aSArd Biesheuvel unsigned long *, void *); 387a46a290aSArd Biesheuvel efi_status_t (__efiapi *write) (efi_file_protocol_t *, 388a46a290aSArd Biesheuvel unsigned long, void *); 389a46a290aSArd Biesheuvel efi_status_t (__efiapi *get_position)(efi_file_protocol_t *, u64 *); 390a46a290aSArd Biesheuvel efi_status_t (__efiapi *set_position)(efi_file_protocol_t *, u64); 391a46a290aSArd Biesheuvel efi_status_t (__efiapi *get_info) (efi_file_protocol_t *, 392a46a290aSArd Biesheuvel efi_guid_t *, unsigned long *, 393a46a290aSArd Biesheuvel void *); 394a46a290aSArd Biesheuvel efi_status_t (__efiapi *set_info) (efi_file_protocol_t *, 395a46a290aSArd Biesheuvel efi_guid_t *, unsigned long, 396a46a290aSArd Biesheuvel void *); 397a46a290aSArd Biesheuvel efi_status_t (__efiapi *flush) (efi_file_protocol_t *); 398a46a290aSArd Biesheuvel }; 399a46a290aSArd Biesheuvel 400a46a290aSArd Biesheuvel typedef struct efi_simple_file_system_protocol efi_simple_file_system_protocol_t; 401a46a290aSArd Biesheuvel 402a46a290aSArd Biesheuvel struct efi_simple_file_system_protocol { 403a46a290aSArd Biesheuvel u64 revision; 404a46a290aSArd Biesheuvel int (__efiapi *open_volume)(efi_simple_file_system_protocol_t *, 405a46a290aSArd Biesheuvel efi_file_protocol_t **); 406a46a290aSArd Biesheuvel }; 407a46a290aSArd Biesheuvel 408a46a290aSArd Biesheuvel #define EFI_FILE_MODE_READ 0x0000000000000001 409a46a290aSArd Biesheuvel #define EFI_FILE_MODE_WRITE 0x0000000000000002 410a46a290aSArd Biesheuvel #define EFI_FILE_MODE_CREATE 0x8000000000000000 411a46a290aSArd Biesheuvel 4128166ec09SArd Biesheuvel typedef enum { 4138166ec09SArd Biesheuvel EfiPciIoWidthUint8, 4148166ec09SArd Biesheuvel EfiPciIoWidthUint16, 4158166ec09SArd Biesheuvel EfiPciIoWidthUint32, 4168166ec09SArd Biesheuvel EfiPciIoWidthUint64, 4178166ec09SArd Biesheuvel EfiPciIoWidthFifoUint8, 4188166ec09SArd Biesheuvel EfiPciIoWidthFifoUint16, 4198166ec09SArd Biesheuvel EfiPciIoWidthFifoUint32, 4208166ec09SArd Biesheuvel EfiPciIoWidthFifoUint64, 4218166ec09SArd Biesheuvel EfiPciIoWidthFillUint8, 4228166ec09SArd Biesheuvel EfiPciIoWidthFillUint16, 4238166ec09SArd Biesheuvel EfiPciIoWidthFillUint32, 4248166ec09SArd Biesheuvel EfiPciIoWidthFillUint64, 4258166ec09SArd Biesheuvel EfiPciIoWidthMaximum 4268166ec09SArd Biesheuvel } EFI_PCI_IO_PROTOCOL_WIDTH; 4278166ec09SArd Biesheuvel 4288166ec09SArd Biesheuvel typedef enum { 4298166ec09SArd Biesheuvel EfiPciIoAttributeOperationGet, 4308166ec09SArd Biesheuvel EfiPciIoAttributeOperationSet, 4318166ec09SArd Biesheuvel EfiPciIoAttributeOperationEnable, 4328166ec09SArd Biesheuvel EfiPciIoAttributeOperationDisable, 4338166ec09SArd Biesheuvel EfiPciIoAttributeOperationSupported, 4348166ec09SArd Biesheuvel EfiPciIoAttributeOperationMaximum 4358166ec09SArd Biesheuvel } EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION; 4368166ec09SArd Biesheuvel 4378166ec09SArd Biesheuvel typedef struct { 4388166ec09SArd Biesheuvel u32 read; 4398166ec09SArd Biesheuvel u32 write; 4408166ec09SArd Biesheuvel } efi_pci_io_protocol_access_32_t; 4418166ec09SArd Biesheuvel 4428166ec09SArd Biesheuvel typedef union efi_pci_io_protocol efi_pci_io_protocol_t; 4438166ec09SArd Biesheuvel 4448166ec09SArd Biesheuvel typedef 4458166ec09SArd Biesheuvel efi_status_t (__efiapi *efi_pci_io_protocol_cfg_t)(efi_pci_io_protocol_t *, 4468166ec09SArd Biesheuvel EFI_PCI_IO_PROTOCOL_WIDTH, 4478166ec09SArd Biesheuvel u32 offset, 4488166ec09SArd Biesheuvel unsigned long count, 4498166ec09SArd Biesheuvel void *buffer); 4508166ec09SArd Biesheuvel 4518166ec09SArd Biesheuvel typedef struct { 4528166ec09SArd Biesheuvel void *read; 4538166ec09SArd Biesheuvel void *write; 4548166ec09SArd Biesheuvel } efi_pci_io_protocol_access_t; 4558166ec09SArd Biesheuvel 4568166ec09SArd Biesheuvel typedef struct { 4578166ec09SArd Biesheuvel efi_pci_io_protocol_cfg_t read; 4588166ec09SArd Biesheuvel efi_pci_io_protocol_cfg_t write; 4598166ec09SArd Biesheuvel } efi_pci_io_protocol_config_access_t; 4608166ec09SArd Biesheuvel 4618166ec09SArd Biesheuvel union efi_pci_io_protocol { 4628166ec09SArd Biesheuvel struct { 4638166ec09SArd Biesheuvel void *poll_mem; 4648166ec09SArd Biesheuvel void *poll_io; 4658166ec09SArd Biesheuvel efi_pci_io_protocol_access_t mem; 4668166ec09SArd Biesheuvel efi_pci_io_protocol_access_t io; 4678166ec09SArd Biesheuvel efi_pci_io_protocol_config_access_t pci; 4688166ec09SArd Biesheuvel void *copy_mem; 4698166ec09SArd Biesheuvel void *map; 4708166ec09SArd Biesheuvel void *unmap; 4718166ec09SArd Biesheuvel void *allocate_buffer; 4728166ec09SArd Biesheuvel void *free_buffer; 4738166ec09SArd Biesheuvel void *flush; 4748166ec09SArd Biesheuvel efi_status_t (__efiapi *get_location)(efi_pci_io_protocol_t *, 4758166ec09SArd Biesheuvel unsigned long *segment_nr, 4768166ec09SArd Biesheuvel unsigned long *bus_nr, 4778166ec09SArd Biesheuvel unsigned long *device_nr, 4788166ec09SArd Biesheuvel unsigned long *func_nr); 4798166ec09SArd Biesheuvel void *attributes; 4808166ec09SArd Biesheuvel void *get_bar_attributes; 4818166ec09SArd Biesheuvel void *set_bar_attributes; 4828166ec09SArd Biesheuvel uint64_t romsize; 4838166ec09SArd Biesheuvel void *romimage; 4848166ec09SArd Biesheuvel }; 4858166ec09SArd Biesheuvel struct { 4868166ec09SArd Biesheuvel u32 poll_mem; 4878166ec09SArd Biesheuvel u32 poll_io; 4888166ec09SArd Biesheuvel efi_pci_io_protocol_access_32_t mem; 4898166ec09SArd Biesheuvel efi_pci_io_protocol_access_32_t io; 4908166ec09SArd Biesheuvel efi_pci_io_protocol_access_32_t pci; 4918166ec09SArd Biesheuvel u32 copy_mem; 4928166ec09SArd Biesheuvel u32 map; 4938166ec09SArd Biesheuvel u32 unmap; 4948166ec09SArd Biesheuvel u32 allocate_buffer; 4958166ec09SArd Biesheuvel u32 free_buffer; 4968166ec09SArd Biesheuvel u32 flush; 4978166ec09SArd Biesheuvel u32 get_location; 4988166ec09SArd Biesheuvel u32 attributes; 4998166ec09SArd Biesheuvel u32 get_bar_attributes; 5008166ec09SArd Biesheuvel u32 set_bar_attributes; 5018166ec09SArd Biesheuvel u64 romsize; 5028166ec09SArd Biesheuvel u32 romimage; 5038166ec09SArd Biesheuvel } mixed_mode; 5048166ec09SArd Biesheuvel }; 5058166ec09SArd Biesheuvel 5068166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO 0x0001 5078166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_ISA_IO 0x0002 5088166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO 0x0004 5098166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY 0x0008 5108166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_VGA_IO 0x0010 5118166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO 0x0020 5128166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO 0x0040 5138166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080 5148166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_IO 0x0100 5158166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_MEMORY 0x0200 5168166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_BUS_MASTER 0x0400 5178166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED 0x0800 5188166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000 5198166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE 0x2000 5208166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM 0x4000 5218166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000 5228166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 0x10000 5238166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000 5248166ec09SArd Biesheuvel #define EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 0x40000 5258166ec09SArd Biesheuvel 5268166ec09SArd Biesheuvel struct efi_dev_path; 5278166ec09SArd Biesheuvel 5288166ec09SArd Biesheuvel typedef union apple_properties_protocol apple_properties_protocol_t; 5298166ec09SArd Biesheuvel 5308166ec09SArd Biesheuvel union apple_properties_protocol { 5318166ec09SArd Biesheuvel struct { 5328166ec09SArd Biesheuvel unsigned long version; 5338166ec09SArd Biesheuvel efi_status_t (__efiapi *get)(apple_properties_protocol_t *, 5348166ec09SArd Biesheuvel struct efi_dev_path *, 5358166ec09SArd Biesheuvel efi_char16_t *, void *, u32 *); 5368166ec09SArd Biesheuvel efi_status_t (__efiapi *set)(apple_properties_protocol_t *, 5378166ec09SArd Biesheuvel struct efi_dev_path *, 5388166ec09SArd Biesheuvel efi_char16_t *, void *, u32); 5398166ec09SArd Biesheuvel efi_status_t (__efiapi *del)(apple_properties_protocol_t *, 5408166ec09SArd Biesheuvel struct efi_dev_path *, 5418166ec09SArd Biesheuvel efi_char16_t *); 5428166ec09SArd Biesheuvel efi_status_t (__efiapi *get_all)(apple_properties_protocol_t *, 5438166ec09SArd Biesheuvel void *buffer, u32 *); 5448166ec09SArd Biesheuvel }; 5458166ec09SArd Biesheuvel struct { 5468166ec09SArd Biesheuvel u32 version; 5478166ec09SArd Biesheuvel u32 get; 5488166ec09SArd Biesheuvel u32 set; 5498166ec09SArd Biesheuvel u32 del; 5508166ec09SArd Biesheuvel u32 get_all; 5518166ec09SArd Biesheuvel } mixed_mode; 5528166ec09SArd Biesheuvel }; 5538166ec09SArd Biesheuvel 5548166ec09SArd Biesheuvel typedef u32 efi_tcg2_event_log_format; 5558166ec09SArd Biesheuvel 5568166ec09SArd Biesheuvel typedef union efi_tcg2_protocol efi_tcg2_protocol_t; 5578166ec09SArd Biesheuvel 5588166ec09SArd Biesheuvel union efi_tcg2_protocol { 5598166ec09SArd Biesheuvel struct { 5608166ec09SArd Biesheuvel void *get_capability; 5618166ec09SArd Biesheuvel efi_status_t (__efiapi *get_event_log)(efi_handle_t, 5628166ec09SArd Biesheuvel efi_tcg2_event_log_format, 5638166ec09SArd Biesheuvel efi_physical_addr_t *, 5648166ec09SArd Biesheuvel efi_physical_addr_t *, 5658166ec09SArd Biesheuvel efi_bool_t *); 5668166ec09SArd Biesheuvel void *hash_log_extend_event; 5678166ec09SArd Biesheuvel void *submit_command; 5688166ec09SArd Biesheuvel void *get_active_pcr_banks; 5698166ec09SArd Biesheuvel void *set_active_pcr_banks; 5708166ec09SArd Biesheuvel void *get_result_of_set_active_pcr_banks; 5718166ec09SArd Biesheuvel }; 5728166ec09SArd Biesheuvel struct { 5738166ec09SArd Biesheuvel u32 get_capability; 5748166ec09SArd Biesheuvel u32 get_event_log; 5758166ec09SArd Biesheuvel u32 hash_log_extend_event; 5768166ec09SArd Biesheuvel u32 submit_command; 5778166ec09SArd Biesheuvel u32 get_active_pcr_banks; 5788166ec09SArd Biesheuvel u32 set_active_pcr_banks; 5798166ec09SArd Biesheuvel u32 get_result_of_set_active_pcr_banks; 5808166ec09SArd Biesheuvel } mixed_mode; 5818166ec09SArd Biesheuvel }; 5828166ec09SArd Biesheuvel 5832931d526SArd Biesheuvel typedef union efi_load_file_protocol efi_load_file_protocol_t; 5842931d526SArd Biesheuvel typedef union efi_load_file_protocol efi_load_file2_protocol_t; 5852931d526SArd Biesheuvel 5862931d526SArd Biesheuvel union efi_load_file_protocol { 5872931d526SArd Biesheuvel struct { 5882931d526SArd Biesheuvel efi_status_t (__efiapi *load_file)(efi_load_file_protocol_t *, 5892931d526SArd Biesheuvel efi_device_path_protocol_t *, 5902931d526SArd Biesheuvel bool, unsigned long *, void *); 5912931d526SArd Biesheuvel }; 5922931d526SArd Biesheuvel struct { 5932931d526SArd Biesheuvel u32 load_file; 5942931d526SArd Biesheuvel } mixed_mode; 5952931d526SArd Biesheuvel }; 5962931d526SArd Biesheuvel 5978166ec09SArd Biesheuvel void efi_pci_disable_bridge_busmaster(void); 5988166ec09SArd Biesheuvel 5998166ec09SArd Biesheuvel typedef efi_status_t (*efi_exit_boot_map_processing)( 6008166ec09SArd Biesheuvel struct efi_boot_memmap *map, 6018166ec09SArd Biesheuvel void *priv); 6028166ec09SArd Biesheuvel 6038166ec09SArd Biesheuvel efi_status_t efi_exit_boot_services(void *handle, 6048166ec09SArd Biesheuvel struct efi_boot_memmap *map, 6058166ec09SArd Biesheuvel void *priv, 6068166ec09SArd Biesheuvel efi_exit_boot_map_processing priv_func); 6078166ec09SArd Biesheuvel 6088166ec09SArd Biesheuvel void efi_char16_printk(efi_char16_t *); 6098166ec09SArd Biesheuvel 6108166ec09SArd Biesheuvel efi_status_t allocate_new_fdt_and_exit_boot(void *handle, 6118166ec09SArd Biesheuvel unsigned long *new_fdt_addr, 6128166ec09SArd Biesheuvel unsigned long max_addr, 6138166ec09SArd Biesheuvel u64 initrd_addr, u64 initrd_size, 6148166ec09SArd Biesheuvel char *cmdline_ptr, 6158166ec09SArd Biesheuvel unsigned long fdt_addr, 6168166ec09SArd Biesheuvel unsigned long fdt_size); 6178166ec09SArd Biesheuvel 6188166ec09SArd Biesheuvel void *get_fdt(unsigned long *fdt_size); 6198166ec09SArd Biesheuvel 6208166ec09SArd Biesheuvel void efi_get_virtmap(efi_memory_desc_t *memory_map, unsigned long map_size, 6218166ec09SArd Biesheuvel unsigned long desc_size, efi_memory_desc_t *runtime_map, 6228166ec09SArd Biesheuvel int *count); 6238166ec09SArd Biesheuvel 6248166ec09SArd Biesheuvel efi_status_t efi_get_random_bytes(unsigned long size, u8 *out); 6258166ec09SArd Biesheuvel 6268166ec09SArd Biesheuvel efi_status_t efi_random_alloc(unsigned long size, unsigned long align, 6278166ec09SArd Biesheuvel unsigned long *addr, unsigned long random_seed); 6288166ec09SArd Biesheuvel 6298166ec09SArd Biesheuvel efi_status_t check_platform_features(void); 6308166ec09SArd Biesheuvel 6318166ec09SArd Biesheuvel void *get_efi_config_table(efi_guid_t guid); 6328166ec09SArd Biesheuvel 6338166ec09SArd Biesheuvel void efi_printk(char *str); 6348166ec09SArd Biesheuvel 6358166ec09SArd Biesheuvel void efi_free(unsigned long size, unsigned long addr); 6368166ec09SArd Biesheuvel 6371e45bf73SArd Biesheuvel char *efi_convert_cmdline(efi_loaded_image_t *image, int *cmd_line_len, 6381e45bf73SArd Biesheuvel unsigned long max_addr); 6398166ec09SArd Biesheuvel 6408166ec09SArd Biesheuvel efi_status_t efi_get_memory_map(struct efi_boot_memmap *map); 6418166ec09SArd Biesheuvel 6428166ec09SArd Biesheuvel efi_status_t efi_low_alloc_above(unsigned long size, unsigned long align, 6438166ec09SArd Biesheuvel unsigned long *addr, unsigned long min); 6448166ec09SArd Biesheuvel 6458166ec09SArd Biesheuvel static inline 6468166ec09SArd Biesheuvel efi_status_t efi_low_alloc(unsigned long size, unsigned long align, 6478166ec09SArd Biesheuvel unsigned long *addr) 6488166ec09SArd Biesheuvel { 6498166ec09SArd Biesheuvel /* 6508166ec09SArd Biesheuvel * Don't allocate at 0x0. It will confuse code that 6518166ec09SArd Biesheuvel * checks pointers against NULL. Skip the first 8 6528166ec09SArd Biesheuvel * bytes so we start at a nice even number. 6538166ec09SArd Biesheuvel */ 6548166ec09SArd Biesheuvel return efi_low_alloc_above(size, align, addr, 0x8); 6558166ec09SArd Biesheuvel } 6568166ec09SArd Biesheuvel 6578166ec09SArd Biesheuvel efi_status_t efi_allocate_pages(unsigned long size, unsigned long *addr, 6588166ec09SArd Biesheuvel unsigned long max); 6598166ec09SArd Biesheuvel 6608166ec09SArd Biesheuvel efi_status_t efi_relocate_kernel(unsigned long *image_addr, 6618166ec09SArd Biesheuvel unsigned long image_size, 6628166ec09SArd Biesheuvel unsigned long alloc_size, 6638166ec09SArd Biesheuvel unsigned long preferred_addr, 6648166ec09SArd Biesheuvel unsigned long alignment, 6658166ec09SArd Biesheuvel unsigned long min_addr); 6668166ec09SArd Biesheuvel 6678166ec09SArd Biesheuvel efi_status_t efi_parse_options(char const *cmdline); 6688166ec09SArd Biesheuvel 669fffb6804SArvind Sankar void efi_parse_option_graphics(char *option); 670fffb6804SArvind Sankar 6718166ec09SArd Biesheuvel efi_status_t efi_setup_gop(struct screen_info *si, efi_guid_t *proto, 6728166ec09SArd Biesheuvel unsigned long size); 6738166ec09SArd Biesheuvel 674cf6b8366SArd Biesheuvel efi_status_t handle_cmdline_files(efi_loaded_image_t *image, 675cf6b8366SArd Biesheuvel const efi_char16_t *optstr, 676cf6b8366SArd Biesheuvel int optstr_size, 677cf6b8366SArd Biesheuvel unsigned long soft_limit, 678cf6b8366SArd Biesheuvel unsigned long hard_limit, 6799302c1bbSArd Biesheuvel unsigned long *load_addr, 6809302c1bbSArd Biesheuvel unsigned long *load_size); 6819302c1bbSArd Biesheuvel 682cf6b8366SArd Biesheuvel 683cf6b8366SArd Biesheuvel static inline efi_status_t efi_load_dtb(efi_loaded_image_t *image, 684cf6b8366SArd Biesheuvel unsigned long *load_addr, 685cf6b8366SArd Biesheuvel unsigned long *load_size) 686cf6b8366SArd Biesheuvel { 687cf6b8366SArd Biesheuvel return handle_cmdline_files(image, L"dtb=", sizeof(L"dtb=") - 2, 688cf6b8366SArd Biesheuvel ULONG_MAX, ULONG_MAX, load_addr, load_size); 689cf6b8366SArd Biesheuvel } 690cf6b8366SArd Biesheuvel 691cf6b8366SArd Biesheuvel static inline efi_status_t efi_load_initrd(efi_loaded_image_t *image, 6929302c1bbSArd Biesheuvel unsigned long *load_addr, 6939302c1bbSArd Biesheuvel unsigned long *load_size, 69431f5e546SArd Biesheuvel unsigned long soft_limit, 695cf6b8366SArd Biesheuvel unsigned long hard_limit) 696cf6b8366SArd Biesheuvel { 697cf6b8366SArd Biesheuvel if (!IS_ENABLED(CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER)) 698cf6b8366SArd Biesheuvel return EFI_SUCCESS; 699cf6b8366SArd Biesheuvel 700cf6b8366SArd Biesheuvel return handle_cmdline_files(image, L"initrd=", sizeof(L"initrd=") - 2, 701cf6b8366SArd Biesheuvel soft_limit, hard_limit, load_addr, load_size); 702cf6b8366SArd Biesheuvel } 7039302c1bbSArd Biesheuvel 704ec93fc37SArd Biesheuvel efi_status_t efi_load_initrd_dev_path(unsigned long *load_addr, 705ec93fc37SArd Biesheuvel unsigned long *load_size, 706ec93fc37SArd Biesheuvel unsigned long max); 707ec93fc37SArd Biesheuvel 708f4f75ad5SArd Biesheuvel #endif 709