:: limine / common / lib / fdt.c 1.1 KB raw

1
#if !defined(__i386__) && !defined(__x86_64__)
2
3
#include <stdint.h>
4
#include <stddef.h>
5
#include <libfdt.h>
6
7
static int fdt_get_or_add_chosen_node(void *fdt) {
8
    int offset = fdt_subnode_offset(fdt, 0, "chosen");
9
10
    if (offset == -FDT_ERR_NOTFOUND) {
11
        offset = fdt_add_subnode(fdt, 0, "chosen");
12
    }
13
14
    return offset;
15
}
16
17
int fdt_set_chosen_string(void *fdt, const char *name, const char *value) {
18
    int chosen_offset = fdt_get_or_add_chosen_node(fdt);
19
    if (chosen_offset < 0) {
20
        return chosen_offset;
21
    }
22
23
    return fdt_setprop_string(fdt, chosen_offset, name, value);
24
}
25
26
int fdt_set_chosen_uint64(void *fdt, const char *name, uint64_t value) {
27
    int chosen_offset = fdt_get_or_add_chosen_node(fdt);
28
    if (chosen_offset < 0) {
29
        return chosen_offset;
30
    }
31
32
    return fdt_setprop_u64(fdt, chosen_offset, name, value);
33
}
34
35
int fdt_set_chosen_uint32(void *fdt, const char *name, uint32_t value) {
36
    int chosen_offset = fdt_get_or_add_chosen_node(fdt);
37
    if (chosen_offset < 0) {
38
        return chosen_offset;
39
    }
40
41
    return fdt_setprop_u32(fdt, chosen_offset, name, value);
42
}
43
44
#endif
tab: 248 wrap: offon