28#ifdef LIMINE_NO_POINTERS
29# define LIMINE_PTR(TYPE) uint64_t
31# define LIMINE_PTR(TYPE) TYPE
35# define LIMINE_DEPRECATED __attribute__((__deprecated__))
36# define LIMINE_DEPRECATED_IGNORE_START \
37 _Pragma("GCC diagnostic push") \
38 _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
39# define LIMINE_DEPRECATED_IGNORE_END \
40 _Pragma("GCC diagnostic pop")
42# define LIMINE_DEPRECATED
43# define LIMINE_DEPRECATED_IGNORE_START
44# define LIMINE_DEPRECATED_IGNORE_END
47#define LIMINE_BASE_REVISION(N) \
48 uint64_t limine_base_revision[3] = { 0xf9562b2d5c95a6c8, 0x6a7b384944536bdc, (N) };
50#define LIMINE_BASE_REVISION_SUPPORTED (limine_base_revision[2] == 0)
52#define LIMINE_COMMON_MAGIC 0xc7b1dd30df4c8b88, 0x0a82e883a194f07b
61#define LIMINE_MEDIA_TYPE_GENERIC 0
62#define LIMINE_MEDIA_TYPE_OPTICAL 1
63#define LIMINE_MEDIA_TYPE_TFTP 2
67 LIMINE_PTR(
void *) address;
69 LIMINE_PTR(
char *) path;
70 LIMINE_PTR(
char *) cmdline;
75 uint32_t partition_index;
84#define LIMINE_BOOTLOADER_INFO_REQUEST { LIMINE_COMMON_MAGIC, 0xf55038d8e2a1202f, 0x279426fcf5f59740 }
88 LIMINE_PTR(
char *) name;
89 LIMINE_PTR(
char *) version;
100#define LIMINE_STACK_SIZE_REQUEST { LIMINE_COMMON_MAGIC, 0x224ef0460a8e8926, 0xe1cb0fc25f46ea3d }
115#define LIMINE_HHDM_REQUEST { LIMINE_COMMON_MAGIC, 0x48dcf1cb8ad2b852, 0x63984e959a98244b }
130#define LIMINE_FRAMEBUFFER_REQUEST { LIMINE_COMMON_MAGIC, 0x9d5827dcd881dd75, 0xa3148604f6fab11b }
132#define LIMINE_FRAMEBUFFER_RGB 1
139 uint8_t memory_model;
140 uint8_t red_mask_size;
141 uint8_t red_mask_shift;
142 uint8_t green_mask_size;
143 uint8_t green_mask_shift;
144 uint8_t blue_mask_size;
145 uint8_t blue_mask_shift;
149 LIMINE_PTR(
void *) address;
154 uint8_t memory_model;
155 uint8_t red_mask_size;
156 uint8_t red_mask_shift;
157 uint8_t green_mask_size;
158 uint8_t green_mask_shift;
159 uint8_t blue_mask_size;
160 uint8_t blue_mask_shift;
163 LIMINE_PTR(
void *) edid;
171 uint64_t framebuffer_count;
183#define LIMINE_TERMINAL_REQUEST { LIMINE_COMMON_MAGIC, 0xc8ac59310c2b0844, 0xa68d0c7265d38878 }
185#define LIMINE_TERMINAL_CB_DEC 10
186#define LIMINE_TERMINAL_CB_BELL 20
187#define LIMINE_TERMINAL_CB_PRIVATE_ID 30
188#define LIMINE_TERMINAL_CB_STATUS_REPORT 40
189#define LIMINE_TERMINAL_CB_POS_REPORT 50
190#define LIMINE_TERMINAL_CB_KBD_LEDS 60
191#define LIMINE_TERMINAL_CB_MODE 70
192#define LIMINE_TERMINAL_CB_LINUX 80
194#define LIMINE_TERMINAL_CTX_SIZE ((uint64_t)(-1))
195#define LIMINE_TERMINAL_CTX_SAVE ((uint64_t)(-2))
196#define LIMINE_TERMINAL_CTX_RESTORE ((uint64_t)(-3))
197#define LIMINE_TERMINAL_FULL_REFRESH ((uint64_t)(-4))
200#define LIMINE_TERMINAL_OOB_OUTPUT_GET ((uint64_t)(-10))
201#define LIMINE_TERMINAL_OOB_OUTPUT_SET ((uint64_t)(-11))
203#define LIMINE_TERMINAL_OOB_OUTPUT_OCRNL (1 << 0)
204#define LIMINE_TERMINAL_OOB_OUTPUT_OFDEL (1 << 1)
205#define LIMINE_TERMINAL_OOB_OUTPUT_OFILL (1 << 2)
206#define LIMINE_TERMINAL_OOB_OUTPUT_OLCUC (1 << 3)
207#define LIMINE_TERMINAL_OOB_OUTPUT_ONLCR (1 << 4)
208#define LIMINE_TERMINAL_OOB_OUTPUT_ONLRET (1 << 5)
209#define LIMINE_TERMINAL_OOB_OUTPUT_ONOCR (1 << 6)
210#define LIMINE_TERMINAL_OOB_OUTPUT_OPOST (1 << 7)
212LIMINE_DEPRECATED_IGNORE_START
216typedef void (*limine_terminal_write)(
struct limine_terminal *,
const char *, uint64_t);
217typedef void (*limine_terminal_callback)(
struct limine_terminal *, uint64_t, uint64_t, uint64_t, uint64_t);
227 uint64_t terminal_count;
229 LIMINE_PTR(limine_terminal_write) write;
236 LIMINE_PTR(limine_terminal_callback) callback;
239LIMINE_DEPRECATED_IGNORE_END
243#define LIMINE_PAGING_MODE_REQUEST { LIMINE_COMMON_MAGIC, 0x95c1a0edab0944cb, 0xa4e5cb3842f7488a }
245#if defined (__x86_64__) || defined (__i386__)
246#define LIMINE_PAGING_MODE_X86_64_4LVL 0
247#define LIMINE_PAGING_MODE_X86_64_5LVL 1
248#define LIMINE_PAGING_MODE_MAX LIMINE_PAGING_MODE_X86_64_5LVL
249#define LIMINE_PAGING_MODE_DEFAULT LIMINE_PAGING_MODE_X86_64_4LVL
250#elif defined (__aarch64__)
251#define LIMINE_PAGING_MODE_AARCH64_4LVL 0
252#define LIMINE_PAGING_MODE_AARCH64_5LVL 1
253#define LIMINE_PAGING_MODE_MAX LIMINE_PAGING_MODE_AARCH64_5LVL
254#define LIMINE_PAGING_MODE_DEFAULT LIMINE_PAGING_MODE_AARCH64_4LVL
255#elif defined (__riscv) && (__riscv_xlen == 64)
256#define LIMINE_PAGING_MODE_RISCV_SV39 0
257#define LIMINE_PAGING_MODE_RISCV_SV48 1
258#define LIMINE_PAGING_MODE_RISCV_SV57 2
259#define LIMINE_PAGING_MODE_MAX LIMINE_PAGING_MODE_RISCV_SV57
260#define LIMINE_PAGING_MODE_DEFAULT LIMINE_PAGING_MODE_RISCV_SV48
262#error Unknown architecture
281#define LIMINE_5_LEVEL_PAGING_REQUEST { LIMINE_COMMON_MAGIC, 0x94469551da9b3192, 0xebe5e86db7382888 }
283LIMINE_DEPRECATED_IGNORE_START
295LIMINE_DEPRECATED_IGNORE_END
299#define LIMINE_SMP_REQUEST { LIMINE_COMMON_MAGIC, 0x95a67b819a1b857e, 0xa0b61b723b6a73e0 }
301struct limine_smp_info;
303typedef void (*limine_goto_address)(
struct limine_smp_info *);
305#if defined (__x86_64__) || defined (__i386__)
307#define LIMINE_SMP_X2APIC (1 << 0)
309struct limine_smp_info {
310 uint32_t processor_id;
313 LIMINE_PTR(limine_goto_address) goto_address;
314 uint64_t extra_argument;
317struct limine_smp_response {
320 uint32_t bsp_lapic_id;
322 LIMINE_PTR(
struct limine_smp_info **) cpus;
325#elif defined (__aarch64__)
327struct limine_smp_info {
328 uint32_t processor_id;
329 uint32_t gic_iface_no;
332 LIMINE_PTR(limine_goto_address) goto_address;
333 uint64_t extra_argument;
336struct limine_smp_response {
341 LIMINE_PTR(
struct limine_smp_info **) cpus;
344#elif defined (__riscv) && (__riscv_xlen == 64)
346struct limine_smp_info {
347 uint64_t processor_id;
350 LIMINE_PTR(limine_goto_address) goto_address;
351 uint64_t extra_argument;
354struct limine_smp_response {
359 LIMINE_PTR(
struct limine_smp_info **) cpus;
363#error Unknown architecture
369 LIMINE_PTR(
struct limine_smp_response *) response;
375#define LIMINE_MEMMAP_REQUEST { LIMINE_COMMON_MAGIC, 0x67cf3d9d378a806f, 0xe304acdfc50c3c62 }
377#define LIMINE_MEMMAP_USABLE 0
378#define LIMINE_MEMMAP_RESERVED 1
379#define LIMINE_MEMMAP_ACPI_RECLAIMABLE 2
380#define LIMINE_MEMMAP_ACPI_NVS 3
381#define LIMINE_MEMMAP_BAD_MEMORY 4
382#define LIMINE_MEMMAP_BOOTLOADER_RECLAIMABLE 5
383#define LIMINE_MEMMAP_KERNEL_AND_MODULES 6
384#define LIMINE_MEMMAP_FRAMEBUFFER 7
394 uint64_t entry_count;
406#define LIMINE_ENTRY_POINT_REQUEST { LIMINE_COMMON_MAGIC, 0x13d86c035a1cd3e1, 0x2b0caa89d8f3026a }
408typedef void (*limine_entry_point)(void);
418 LIMINE_PTR(limine_entry_point) entry;
423#define LIMINE_KERNEL_FILE_REQUEST { LIMINE_COMMON_MAGIC, 0xad97e90e83f1ed67, 0x31eb5d1c5ff23b69 }
438#define LIMINE_MODULE_REQUEST { LIMINE_COMMON_MAGIC, 0x3e7e279702be32af, 0xca1c4f3bd1280cee }
440#define LIMINE_INTERNAL_MODULE_REQUIRED (1 << 0)
443 LIMINE_PTR(
const char *) path;
444 LIMINE_PTR(
const char *) cmdline;
450 uint64_t module_count;
460 uint64_t internal_module_count;
466#define LIMINE_RSDP_REQUEST { LIMINE_COMMON_MAGIC, 0xc5e77b6b397e7b43, 0x27637845accdcf3c }
470 LIMINE_PTR(
void *) address;
481#define LIMINE_SMBIOS_REQUEST { LIMINE_COMMON_MAGIC, 0x9e9046f11e095391, 0xaa4a520fefbde5ee }
485 LIMINE_PTR(
void *) entry_32;
486 LIMINE_PTR(
void *) entry_64;
497#define LIMINE_EFI_SYSTEM_TABLE_REQUEST { LIMINE_COMMON_MAGIC, 0x5ceba5163eaaf6d6, 0x0a6981610cf65fcc }
501 LIMINE_PTR(
void *) address;
512#define LIMINE_EFI_MEMMAP_REQUEST { LIMINE_COMMON_MAGIC, 0x7df62a431d6872d5, 0xa4fcdfb3e57306c8 }
516 LIMINE_PTR(
void *) memmap;
517 uint64_t memmap_size;
519 uint64_t desc_version;
530#define LIMINE_BOOT_TIME_REQUEST { LIMINE_COMMON_MAGIC, 0x502746e184c088aa, 0xfbc5ec83e6327893 }
545#define LIMINE_KERNEL_ADDRESS_REQUEST { LIMINE_COMMON_MAGIC, 0x71ba76863cc55f63, 0xb2644a48c516a487 }
549 uint64_t physical_base;
550 uint64_t virtual_base;
561#define LIMINE_DTB_REQUEST { LIMINE_COMMON_MAGIC, 0xb40ddb48fb54bac7, 0x545081493f81ffb7 }
565 LIMINE_PTR(
void *) dtb_ptr;