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