70 struct stivale2_struct* fixed = (
struct stivale2_struct*)handoff;
71 struct stivale2_tag* tag = (
struct stivale2_tag*)(fixed->tags);
73 switch (tag->identifier) {
74 case STIVALE2_STRUCT_TAG_MEMMAP_ID: {
75 auto memmap = (
struct stivale2_struct_tag_memmap*)tag;
76 Logger::Debug(__func__,
"Found %Lu Stivale2 memmap entries.", memmap->entries);
77 if (memmap->entries > that->m_memoryMap.Count()) {
78 panic(
"Not enough space to add all memory map entries!");
81 for (
size_t i = 0; i < memmap->entries; i++) {
82 auto entry = memmap->memmap[i];
83 uint64_t end = entry.base + entry.length - 1;
85 Logger::Debug(__func__,
"[%zu] 0x%08LX-0x%08LX 0x%08LX", i, entry.base, end, entry.length);
88 case STIVALE2_MMAP_USABLE:
92 case STIVALE2_MMAP_RESERVED:
96 case STIVALE2_MMAP_ACPI_RECLAIMABLE:
100 case STIVALE2_MMAP_ACPI_NVS:
104 case STIVALE2_MMAP_BAD_MEMORY:
108 case STIVALE2_MMAP_BOOTLOADER_RECLAIMABLE:
112 case STIVALE2_MMAP_KERNEL_AND_MODULES:
123 case STIVALE2_STRUCT_TAG_CMDLINE_ID: {
124 auto cmdline = (
struct stivale2_struct_tag_cmdline*)tag;
125 that->m_cmdline = (
char*)(cmdline->cmdline);
126 Logger::Debug(__func__,
"Stivale2 cmdline: '%s'", that->m_cmdline);
130 case STIVALE2_STRUCT_TAG_FRAMEBUFFER_ID: {
131 auto framebuffer = (
struct stivale2_struct_tag_framebuffer*)tag;
134 "Stivale2 framebuffer:\n"
135 "\tAddress: 0x%08LX\n"
136 "\tResolution: %ux%ux%u\n"
139 "\t\tRed shift: %u\n"
140 "\t\tGreen size: %u\n"
141 "\t\tGreen shift: %u\n"
142 "\t\tBlue size: %u\n"
143 "\t\tBlue shift: %u",
144 framebuffer->framebuffer_addr,
145 framebuffer->framebuffer_width,
146 framebuffer->framebuffer_height,
147 framebuffer->framebuffer_bpp,
148 framebuffer->red_mask_size,
149 framebuffer->red_mask_shift,
150 framebuffer->green_mask_size,
151 framebuffer->green_mask_shift,
152 framebuffer->blue_mask_size,
153 framebuffer->blue_mask_shift);
156 framebuffer->framebuffer_width,
157 framebuffer->framebuffer_height,
158 framebuffer->framebuffer_bpp,
159 framebuffer->framebuffer_pitch,
160 reinterpret_cast<void*
>(framebuffer->framebuffer_addr),
162 framebuffer->red_mask_size,
163 framebuffer->red_mask_shift,
164 framebuffer->green_mask_size,
165 framebuffer->green_mask_shift,
166 framebuffer->blue_mask_size,
167 framebuffer->blue_mask_shift);
171 Logger::Debug(__func__,
"Unknown Stivale2 tag: 0x%016LX", tag->identifier);
176 tag = (
struct stivale2_tag*)tag->next;