FDT fixes + driver handling

This commit is contained in:
2026-10-18 21:22:33 +02:00
parent 692d67e3cf
commit 7aaf953a1c
6 changed files with 192 additions and 21 deletions
+21 -2
View File
@@ -1,5 +1,8 @@
#pragma once
#include <zinnia/errno.h>
#include <zinnia/initgraph.h>
#include <zinnia/types.h>
#include <stddef.h>
#include <stdint.h>
@@ -28,8 +31,6 @@ struct fdt_match {
uintptr_t data;
};
#define FDT_MATCH_COMPATIBLE(compat) .compatible = (compat)
struct fdt {
const uint8_t* blob;
size_t total_size;
@@ -65,3 +66,21 @@ bool fdt_property_u64(struct fdt_node node, const char* name, uint64_t* value);
// Root of the device tree.
struct fdt_node fdt_root(struct fdt* tree);
struct fdt_node fdt_next_node(struct fdt_node node);
bool fdt_node_is_compatible(struct fdt_node node, const char* compatible);
bool fdt_node_reg(struct fdt_node node, size_t index, phys_t* addr, size_t* size);
struct fdt_driver {
const char* name;
const struct fdt_match* match;
const size_t num_matches;
errno_t (*probe)(struct fdt_node node, const struct fdt_match* match);
};
struct fdt* fdt_get();
errno_t fdt_driver_register(struct fdt_driver* driver);
INIT_EXTERN(fdt_stage);
+1 -1
View File
@@ -39,7 +39,7 @@ struct boot_info {
size_t num_files;
struct boot_framebuffer fb;
struct boot_file kernel_file;
void* dtb;
phys_t dtb;
size_t dtb_size;
#if CONFIG_ACPI
phys_t rsdp;