1 /** 2 * @file lv_uefi.h 3 * 4 */ 5 6 #ifndef LV_UEFI_H 7 #define LV_UEFI_H 8 9 #if LV_USE_UEFI 10 11 #include LV_USE_UEFI_INCLUDE 12 13 #if defined(__clang__) || defined(__GNUC__) 14 #if defined(__x86_64__) 15 #define __LV_UEFI_ARCH_X64__ 16 #define __LV_UEFI_64BIT__ 17 #elif defined(__i386__) 18 #define __LV_UEFI_ARCH_X86__ 19 #define __LV_UEFI_32BIT__ 20 #elif defined(__aarch64__) 21 #define __LV_UEFI_ARCH_AARCH64__ 22 #define __LV_UEFI_64BIT__ 23 #else 24 #error Architecture is not supported 25 #endif 26 #define LV_UEFI_STATIC_ASSERT _Static_assert 27 #elif defined(_MSC_VER) 28 #if defined(_M_AMD64) && !defined(_M_ARM64) 29 #define __LV_UEFI_ARCH_X64__ 30 #define __LV_UEFI_64BIT__ 31 #elif defined(_M_IX86) 32 #define __LV_UEFI_ARCH_X86__ 33 #define __LV_UEFI_32BIT__ 34 #elif defined(_M_ARM64) 35 #define __LV_UEFI_ARCH_AARCH64__ 36 #define __LV_UEFI_64BIT__ 37 #else 38 #error Architecture is not supported 39 #endif 40 #define LV_UEFI_STATIC_ASSERT static_assert 41 #else 42 #error Your compiler is not supported 43 #endif 44 45 #ifdef LV_USE_UEFI_INCLUDE 46 #include LV_USE_UEFI_INCLUDE 47 #else 48 #error No UEFI headers available 49 #endif 50 51 // Verify that all required protocols are known 52 #if !defined(EFI_LOADED_IMAGE_PROTOCOL_GUID) 53 #error Missing support for EFI_LOADED_IMAGE_PROTOCOL 54 #endif 55 #if !defined(EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID) 56 #error Missing support for EFI_SIMPLE_FILE_SYSTEM_PROTOCOL 57 #endif 58 #if !defined(EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID) 59 #error Missing support for EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL 60 #endif 61 #if !defined(EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID) 62 #error Missing support for EFI_SIMPLE_TEXT_INPUT_PROTOCOL 63 #endif 64 #if !defined(EFI_SIMPLE_POINTER_PROTOCOL_GUID) 65 #error Missing support for EFI_SIMPLE_POINTER_PROTOCOL 66 #endif 67 #if !defined(EFI_ABSOLUTE_POINTER_PROTOCOL_GUID) 68 #error Missing support for EFI_ABSOLUTE_POINTER_PROTOCOL 69 #endif 70 #if !defined(EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID) 71 #error Missing support for EFI_GRAPHICS_OUTPUT_PROTOCOL 72 #endif 73 #if !defined(EFI_EDID_ACTIVE_PROTOCOL_GUID) 74 #error Missing support for EFI_EDID_ACTIVE_PROTOCOL 75 #endif 76 #if !defined(EFI_FILE_INFO_ID) 77 #error Missing support for EFI_FILE_INFO 78 #endif 79 #if !defined(EFI_TIMESTAMP_PROTOCOL_GUID) 80 #error Missing support for EFI_TIMESTAMP_PROTOCOL_GUID 81 #endif 82 83 // Verify that all types have the correct size 84 LV_UEFI_STATIC_ASSERT(sizeof(BOOLEAN) == 1, "Size check for 'BOOLEAN' failed."); 85 LV_UEFI_STATIC_ASSERT(sizeof(INT8) == 1, "Size check for 'INT8' failed."); 86 LV_UEFI_STATIC_ASSERT(sizeof(UINT8) == 1, "Size check for 'UINT8' failed."); 87 LV_UEFI_STATIC_ASSERT(sizeof(INT16) == 2, "Size check for 'INT16' failed."); 88 LV_UEFI_STATIC_ASSERT(sizeof(UINT16) == 2, "Size check for 'UINT16' failed."); 89 LV_UEFI_STATIC_ASSERT(sizeof(INT32) == 4, "Size check for 'INT32' failed."); 90 LV_UEFI_STATIC_ASSERT(sizeof(UINT32) == 4, "Size check for 'UINT32' failed."); 91 LV_UEFI_STATIC_ASSERT(sizeof(INT64) == 8, "Size check for 'INT64' failed."); 92 LV_UEFI_STATIC_ASSERT(sizeof(UINT64) == 8, "Size check for 'UINT64' failed."); 93 LV_UEFI_STATIC_ASSERT(sizeof(CHAR8) == 1, "Size check for 'CHAR8' failed."); 94 LV_UEFI_STATIC_ASSERT(sizeof(CHAR16) == 2, "Size check for 'CHAR16' failed."); 95 96 #ifdef __LV_UEFI_32BIT__ 97 LV_UEFI_STATIC_ASSERT(sizeof(INTN) == 4, "Size check for 'INTN' failed."); 98 LV_UEFI_STATIC_ASSERT(sizeof(UINTN) == 4, "Size check for 'UINTN' failed."); 99 #else 100 LV_UEFI_STATIC_ASSERT(sizeof(INTN) == 8, "Size check for 'INTN' failed."); 101 LV_UEFI_STATIC_ASSERT(sizeof(UINTN) == 8, "Size check for 'UINTN' failed."); 102 #endif 103 104 #endif 105 106 #endif