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