1 /* 2 * Copyright (c) 2006-2022, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2022-08-25 GuEe-GUI first version 9 */ 10 11 #ifndef __OFW_INTERNAL_H__ 12 #define __OFW_INTERNAL_H__ 13 14 #include <rtthread.h> 15 #include <posix/string.h> 16 #include <drivers/ofw.h> 17 18 #define OFW_PHANDLE_MIN 1 19 #define OFW_PHANDLE_MAX FDT_MAX_PHANDLE 20 21 #define OFW_NODE_MAX_DEPTH 64 22 #define OFW_NODE_MIN_HASH 128 23 24 #define OFW_ROOT_NODE_ADDR_CELLS_DEFAULT 1 25 #define OFW_ROOT_NODE_SIZE_CELLS_DEFAULT 1 26 struct fdt_info 27 { 28 /* Always "/", because we save "ofw" information in root node. */ 29 char name[sizeof("/")]; 30 31 /* Information start */ 32 void *fdt; 33 34 /* Only root can use */ 35 struct fdt_reserve_entry *rsvmap; 36 rt_size_t rsvmap_nr; 37 }; 38 39 struct alias_info 40 { 41 rt_list_t list; 42 43 int id; 44 const char *tag; 45 rt_size_t tag_len; 46 47 struct rt_ofw_node *np; 48 }; 49 50 struct bus_ranges 51 { 52 rt_size_t nr; 53 struct rt_ofw_node *np; 54 55 rt_uint64_t *child_addr; 56 rt_uint64_t *parent_addr; 57 rt_uint64_t *child_size; 58 }; 59 60 extern struct rt_ofw_node *ofw_node_root; 61 extern struct rt_ofw_node *ofw_node_cpus; 62 extern struct rt_ofw_node *ofw_node_chosen; 63 extern struct rt_ofw_node *ofw_node_aliases; 64 extern struct rt_ofw_node *ofw_node_reserved_memory; 65 66 extern struct rt_fdt_earlycon fdt_earlycon; 67 68 #define ofw_static_cast(to_type, value) \ 69 (to_type)(((value) >> ((sizeof(value) - sizeof(to_type)) * 8))) 70 71 rt_err_t ofw_alias_scan(void); 72 int ofw_alias_node_id(struct rt_ofw_node *np); 73 rt_err_t ofw_phandle_hash_reset(rt_phandle min, rt_phandle max); 74 75 #endif /* __OFW_INTERNAL_H__ */ 76