xref: /optee_os/core/lib/libfdt/libfdt_internal.h (revision 17f326eba66aab9ea16549754a95252dd5551a13)
1*17f326ebSJerome Forissier /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */
201d6a9daSBryan O'Donoghue #ifndef LIBFDT_INTERNAL_H
301d6a9daSBryan O'Donoghue #define LIBFDT_INTERNAL_H
4b908c675SJens Wiklander /*
5b908c675SJens Wiklander  * libfdt - Flat Device Tree manipulation
6b908c675SJens Wiklander  * Copyright (C) 2006 David Gibson, IBM Corporation.
7b908c675SJens Wiklander  */
8b908c675SJens Wiklander #include <fdt.h>
9b908c675SJens Wiklander 
10b908c675SJens Wiklander #define FDT_ALIGN(x, a)		(((x) + (a) - 1) & ~((a) - 1))
11b908c675SJens Wiklander #define FDT_TAGALIGN(x)		(FDT_ALIGN((x), FDT_TAGSIZE))
12b908c675SJens Wiklander 
13*17f326ebSJerome Forissier int fdt_ro_probe_(const void *fdt);
14*17f326ebSJerome Forissier #define FDT_RO_PROBE(fdt)					\
15b908c675SJens Wiklander 	{							\
16*17f326ebSJerome Forissier 		int totalsize_;					\
17*17f326ebSJerome Forissier 		if ((totalsize_ = fdt_ro_probe_(fdt)) < 0)	\
18*17f326ebSJerome Forissier 			return totalsize_;			\
19b908c675SJens Wiklander 	}
20b908c675SJens Wiklander 
2101d6a9daSBryan O'Donoghue int fdt_check_node_offset_(const void *fdt, int offset);
2201d6a9daSBryan O'Donoghue int fdt_check_prop_offset_(const void *fdt, int offset);
2301d6a9daSBryan O'Donoghue const char *fdt_find_string_(const char *strtab, int tabsize, const char *s);
2401d6a9daSBryan O'Donoghue int fdt_node_end_offset_(void *fdt, int nodeoffset);
25b908c675SJens Wiklander 
fdt_offset_ptr_(const void * fdt,int offset)2601d6a9daSBryan O'Donoghue static inline const void *fdt_offset_ptr_(const void *fdt, int offset)
27b908c675SJens Wiklander {
28b908c675SJens Wiklander 	return (const char *)fdt + fdt_off_dt_struct(fdt) + offset;
29b908c675SJens Wiklander }
30b908c675SJens Wiklander 
fdt_offset_ptr_w_(void * fdt,int offset)3101d6a9daSBryan O'Donoghue static inline void *fdt_offset_ptr_w_(void *fdt, int offset)
32b908c675SJens Wiklander {
3301d6a9daSBryan O'Donoghue 	return (void *)(uintptr_t)fdt_offset_ptr_(fdt, offset);
34b908c675SJens Wiklander }
35b908c675SJens Wiklander 
fdt_mem_rsv_(const void * fdt,int n)3601d6a9daSBryan O'Donoghue static inline const struct fdt_reserve_entry *fdt_mem_rsv_(const void *fdt, int n)
37b908c675SJens Wiklander {
38b908c675SJens Wiklander 	const struct fdt_reserve_entry *rsv_table =
39b908c675SJens Wiklander 		(const struct fdt_reserve_entry *)
40b908c675SJens Wiklander 		((const char *)fdt + fdt_off_mem_rsvmap(fdt));
41b908c675SJens Wiklander 
42b908c675SJens Wiklander 	return rsv_table + n;
43b908c675SJens Wiklander }
fdt_mem_rsv_w_(void * fdt,int n)4401d6a9daSBryan O'Donoghue static inline struct fdt_reserve_entry *fdt_mem_rsv_w_(void *fdt, int n)
45b908c675SJens Wiklander {
4601d6a9daSBryan O'Donoghue 	return (void *)(uintptr_t)fdt_mem_rsv_(fdt, n);
47b908c675SJens Wiklander }
48b908c675SJens Wiklander 
49b908c675SJens Wiklander #define FDT_SW_MAGIC		(~FDT_MAGIC)
50b908c675SJens Wiklander 
5101d6a9daSBryan O'Donoghue #endif /* LIBFDT_INTERNAL_H */
52