jcs's openbsd hax
openbsd
1/* $OpenBSD: fdt.h,v 1.6 2020/07/18 09:44:59 kettenis Exp $ */
2
3/*
4 * Copyright (c) 2009 Dariusz Swiderski <sfires@sfires.net>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19struct fdt_head {
20 u_int32_t fh_magic;
21 u_int32_t fh_size;
22 u_int32_t fh_struct_off;
23 u_int32_t fh_strings_off;
24 u_int32_t fh_reserve_off;
25 u_int32_t fh_version;
26 u_int32_t fh_comp_ver; /* last compatible version */
27 u_int32_t fh_boot_cpu_id; /* fh_version >=2 */
28 u_int32_t fh_strings_size; /* fh_version >=3 */
29 u_int32_t fh_struct_size; /* fh_version >=17 */
30};
31
32struct fdt {
33 struct fdt_head *header;
34 char *tree;
35 char *strings;
36 char *memory;
37 char *end;
38 int version;
39 int strings_size;
40 int struct_size;
41};
42
43struct fdt_reg {
44 uint64_t addr;
45 uint64_t size;
46};
47
48#define FDT_MAGIC 0xd00dfeed
49#define FDT_NODE_BEGIN 0x01
50#define FDT_NODE_END 0x02
51#define FDT_PROPERTY 0x03
52#define FDT_NOP 0x04
53#define FDT_END 0x09
54
55#define FDT_CODE_VERSION 0x11
56
57int fdt_init(void *);
58void fdt_finalize(void);
59size_t fdt_get_size(void *);
60void *fdt_next_node(void *);
61void *fdt_child_node(void *);
62char *fdt_node_name(void *);
63void *fdt_find_node(char *);
64int fdt_node_property(void *, char *, char **);
65int fdt_node_set_property(void *, char *, void *, int);
66int fdt_node_add_property(void *, char *, void *, int);
67void *fdt_parent_node(void *);
68void *fdt_find_phandle(uint32_t);
69int fdt_get_reg(void *, int, struct fdt_reg *);
70int fdt_is_compatible(void *, const char *);
71#ifdef DEBUG
72void *fdt_print_property(void *, int);
73void fdt_print_node(void *, int);
74void fdt_print_tree(void);
75#endif