limine: Use arrays of pointers over arrays of structs
This commit is contained in:
parent
414fb38492
commit
80ba39503d
|
@ -83,14 +83,13 @@ struct limine_framebuffer {
|
|||
uint8_t unused;
|
||||
uint64_t edid_size;
|
||||
LIMINE_PTR(void *) edid;
|
||||
uint8_t reserved[256];
|
||||
};
|
||||
|
||||
struct limine_framebuffer_response {
|
||||
uint64_t revision;
|
||||
|
||||
uint64_t fbs_count;
|
||||
LIMINE_PTR(struct limine_framebuffer *) fbs;
|
||||
LIMINE_PTR(LIMINE_PTR(struct limine_framebuffer *) *) fbs;
|
||||
};
|
||||
|
||||
struct limine_framebuffer_request {
|
||||
|
@ -133,7 +132,7 @@ struct limine_smp_response {
|
|||
uint32_t flags;
|
||||
uint32_t bsp_lapic_id;
|
||||
uint64_t cpus_count;
|
||||
LIMINE_PTR(struct limine_smp_info *) cpus;
|
||||
LIMINE_PTR(LIMINE_PTR(struct limine_smp_info *) *) cpus;
|
||||
};
|
||||
|
||||
struct limine_smp_request {
|
||||
|
@ -160,14 +159,13 @@ struct limine_memmap_entry {
|
|||
uint64_t base;
|
||||
uint64_t length;
|
||||
uint64_t type;
|
||||
uint8_t reserved[256];
|
||||
};
|
||||
|
||||
struct limine_memmap_response {
|
||||
uint64_t revision;
|
||||
|
||||
uint64_t entries_count;
|
||||
LIMINE_PTR(struct limine_memmap_entry *) entries;
|
||||
LIMINE_PTR(LIMINE_PTR(struct limine_memmap_entry *) *) entries;
|
||||
};
|
||||
|
||||
struct limine_memmap_request {
|
||||
|
@ -202,14 +200,13 @@ struct limine_module {
|
|||
LIMINE_PTR(char *) path;
|
||||
LIMINE_PTR(char *) cmdline;
|
||||
LIMINE_PTR(struct limine_file_location *) file_location;
|
||||
uint8_t reserved[256];
|
||||
};
|
||||
|
||||
struct limine_module_response {
|
||||
uint64_t revision;
|
||||
|
||||
uint64_t modules_count;
|
||||
LIMINE_PTR(struct limine_module *) modules;
|
||||
LIMINE_PTR(LIMINE_PTR(struct limine_module *) *) modules;
|
||||
};
|
||||
|
||||
struct limine_module_request {
|
||||
|
|
|
@ -398,8 +398,13 @@ FEAT_START
|
|||
fclose(f);
|
||||
}
|
||||
|
||||
uint64_t *modules_list = ext_mem_alloc(module_count * sizeof(uint64_t));
|
||||
for (size_t i = 0; i < module_count; i++) {
|
||||
modules_list[i] = reported_addr(&modules[i]);
|
||||
}
|
||||
|
||||
module_response->modules_count = module_count;
|
||||
module_response->modules = reported_addr(modules);
|
||||
module_response->modules = reported_addr(modules_list);
|
||||
|
||||
module_request->response = reported_addr(module_response);
|
||||
FEAT_END
|
||||
|
@ -435,8 +440,6 @@ FEAT_START
|
|||
|
||||
// For now we only support 1 framebuffer
|
||||
struct limine_framebuffer *fbp = ext_mem_alloc(sizeof(struct limine_framebuffer));
|
||||
framebuffer_response->fbs = reported_addr(fbp);
|
||||
framebuffer_response->fbs_count = 1;
|
||||
|
||||
struct edid_info_struct *edid_info = get_edid_info();
|
||||
if (edid_info != NULL) {
|
||||
|
@ -457,6 +460,12 @@ FEAT_START
|
|||
fbp->blue_mask_size = fb.blue_mask_size;
|
||||
fbp->blue_mask_shift = fb.blue_mask_shift;
|
||||
|
||||
uint64_t *fb_list = ext_mem_alloc(1 * sizeof(uint64_t));
|
||||
fb_list[0] = reported_addr(fbp);
|
||||
|
||||
framebuffer_response->fbs_count = 1;
|
||||
framebuffer_response->fbs = reported_addr(fb_list);
|
||||
|
||||
framebuffer_request->response = reported_addr(framebuffer_response);
|
||||
FEAT_END
|
||||
|
||||
|
@ -526,8 +535,14 @@ FEAT_START
|
|||
|
||||
smp_response->flags |= (smp_request->flags & LIMINE_SMP_X2APIC) && x2apic_check();
|
||||
smp_response->bsp_lapic_id = bsp_lapic_id;
|
||||
|
||||
uint64_t *smp_list = ext_mem_alloc(cpu_count * sizeof(uint64_t));
|
||||
for (size_t i = 0; i < cpu_count; i++) {
|
||||
smp_list[i] = reported_addr(&smp_array[i]);
|
||||
}
|
||||
|
||||
smp_response->cpus_count = cpu_count;
|
||||
smp_response->cpus = reported_addr(smp_array);
|
||||
smp_response->cpus = reported_addr(smp_list);
|
||||
|
||||
smp_request->response = reported_addr(smp_response);
|
||||
FEAT_END
|
||||
|
@ -537,10 +552,12 @@ FEAT_START
|
|||
struct limine_memmap_request *memmap_request = get_request(LIMINE_MEMMAP_REQUEST);
|
||||
struct limine_memmap_response *memmap_response;
|
||||
struct limine_memmap_entry *_memmap;
|
||||
uint64_t *memmap_list;
|
||||
|
||||
if (memmap_request != NULL) {
|
||||
memmap_response = ext_mem_alloc(sizeof(struct limine_memmap_response));
|
||||
_memmap = ext_mem_alloc(sizeof(struct limine_memmap_entry) * MAX_MEMMAP);
|
||||
memmap_list = ext_mem_alloc(MAX_MEMMAP * sizeof(uint64_t));
|
||||
}
|
||||
|
||||
size_t mmap_entries;
|
||||
|
@ -587,8 +604,12 @@ FEAT_START
|
|||
}
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < mmap_entries; i++) {
|
||||
memmap_list[i] = reported_addr(&_memmap[i]);
|
||||
}
|
||||
|
||||
memmap_response->entries_count = mmap_entries;
|
||||
memmap_response->entries = reported_addr(_memmap);
|
||||
memmap_response->entries = reported_addr(memmap_list);
|
||||
|
||||
memmap_request->response = reported_addr(memmap_response);
|
||||
FEAT_END
|
||||
|
|
|
@ -169,7 +169,7 @@ FEAT_START
|
|||
struct limine_memmap_response *memmap_response = memmap_request.response;
|
||||
e9_printf("%d memory map entries", memmap_response->entries_count);
|
||||
for (size_t i = 0; i < memmap_response->entries_count; i++) {
|
||||
struct limine_memmap_entry *e = &memmap_response->entries[i];
|
||||
struct limine_memmap_entry *e = memmap_response->entries[i];
|
||||
e9_printf("%x->%x %s", e->base, e->base + e->length, get_memmap_type(e->type));
|
||||
}
|
||||
FEAT_END
|
||||
|
@ -183,7 +183,7 @@ FEAT_START
|
|||
struct limine_framebuffer_response *fb_response = framebuffer_request.response;
|
||||
e9_printf("%d framebuffer(s)", fb_response->fbs_count);
|
||||
for (size_t i = 0; i < fb_response->fbs_count; i++) {
|
||||
struct limine_framebuffer *fb = &fb_response->fbs[i];
|
||||
struct limine_framebuffer *fb = fb_response->fbs[i];
|
||||
e9_printf("Address: %x", fb->address);
|
||||
e9_printf("Width: %d", fb->width);
|
||||
e9_printf("Height: %d", fb->height);
|
||||
|
@ -210,7 +210,7 @@ FEAT_START
|
|||
struct limine_module_response *module_response = module_request.response;
|
||||
e9_printf("%d module(s)", module_response->modules_count);
|
||||
for (size_t i = 0; i < module_response->modules_count; i++) {
|
||||
struct limine_module *m = &module_response->modules[i];
|
||||
struct limine_module *m = module_response->modules[i];
|
||||
|
||||
e9_printf("Base: %x", m->base);
|
||||
e9_printf("Length: %x", m->length);
|
||||
|
@ -273,7 +273,7 @@ FEAT_START
|
|||
e9_printf("BSP LAPIC ID: %x", smp_response->bsp_lapic_id);
|
||||
e9_printf("CPUs count: %d", smp_response->cpus_count);
|
||||
for (size_t i = 0; i < smp_response->cpus_count; i++) {
|
||||
struct limine_smp_info *cpu = &smp_response->cpus[i];
|
||||
struct limine_smp_info *cpu = smp_response->cpus[i];
|
||||
e9_printf("Processor ID: %x", cpu->processor_id);
|
||||
e9_printf("LAPIC ID: %x", cpu->lapic_id);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue