1 #ifndef _SYSLINUX_EFI_H 2 #define _SYSLINUX_EFI_H 3 4 #include <syslinux/config.h> 5 #include <core.h> 6 #include <sys/types.h> /* needed for off_t */ 7 //#include <syslinux/version.h> /* avoid redefinition of __STDC_VERSION__ */ 8 9 /* 10 * gnu-efi >= 3.0s enables GNU_EFI_USE_MS_ABI by default, which means 11 * that we must also enable it if supported by the compiler. Note that 12 * failing to enable GNU_EFI_USE_MS_ABI if gnu-efi was compiled with 13 * it on will result in undefined references to uefi_call_wrapper(). 14 * 15 * The reason we don't attempt to check the version of gnu-efi we're 16 * building against is because there's no harm in turning it on for 17 * older versions - it will just be ignored. 18 */ 19 #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)) 20 #define GNU_EFI_USE_MS_ABI 1 21 #endif 22 23 #include <efi.h> 24 #include <efilib.h> 25 #include <efistdarg.h> 26 27 /* Delay for 100 ms */ 28 #define EFI_NOMAP_PRINT_DELAY 100 29 /* We should keep EFI_NOMAP_PRINT_COUNT at 10 to limit flooding the console */ 30 #define EFI_NOMAP_PRINT_COUNT 10 31 32 struct efi_disk_private { 33 EFI_HANDLE dev_handle; 34 EFI_BLOCK_IO *bio; 35 EFI_DISK_IO *dio; 36 }; 37 38 struct efi_binding { 39 EFI_SERVICE_BINDING *binding; 40 EFI_HANDLE parent; 41 EFI_HANDLE child; 42 EFI_HANDLE this; 43 }; 44 45 extern EFI_HANDLE image_handle; 46 47 struct screen_info; 48 extern void setup_screen(struct screen_info *); 49 50 extern void efi_write_char(uint8_t, uint8_t); 51 52 enum heap; 53 extern void *efi_malloc(size_t, enum heap, size_t); 54 extern void *efi_realloc(void *, size_t); 55 extern void efi_free(void *); 56 57 extern struct efi_binding *efi_create_binding(EFI_GUID *, EFI_GUID *); 58 extern void efi_destroy_binding(struct efi_binding *, EFI_GUID *); 59 60 static inline EFI_STATUS 61 efi_setup_event(EFI_EVENT *ev, EFI_EVENT_NOTIFY func, void *ctx) 62 { 63 EFI_STATUS status; 64 65 status = uefi_call_wrapper(BS->CreateEvent, 5, EVT_NOTIFY_SIGNAL, 66 TPL_CALLBACK, func, ctx, ev); 67 return status; 68 } 69 70 extern void efi_derivative(enum syslinux_filesystem fs); 71 72 struct boot_params; 73 typedef void (handover_func_t)(void *, EFI_SYSTEM_TABLE *, 74 struct boot_params *, unsigned long); 75 76 handover_func_t efi_handover_32; 77 handover_func_t efi_handover_64; 78 handover_func_t efi_handover; 79 80 extern void efi_console_save(void); 81 extern void efi_console_restore(void); 82 83 #endif /* _SYSLINUX_EFI_H */ 84