Home | History | Annotate | Download | only in efi
      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