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