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