FDT fixes + driver handling
This commit is contained in:
+21
-2
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user