#ifndef _FDT_COMMON_H_
#define _FDT_COMMON_H_
#include <sys/sysctl.h>
#include <sys/slicer.h>
#include <contrib/libfdt/libfdt_env.h>
#include <dev/ofw/ofw_bus.h>
#define FDT_MEM_REGIONS 64
#define DI_MAX_INTR_NUM 32
struct fdt_sense_level {
enum intr_trigger trig;
enum intr_polarity pol;
};
#if defined(__arm__) && !defined(INTRNG)
typedef int (*fdt_pic_decode_t)(phandle_t, pcell_t *, int *, int *, int *);
extern fdt_pic_decode_t fdt_pic_table[];
#endif
#if defined(__arm__) || defined(__powerpc__)
typedef void (*fdt_fixup_t)(phandle_t);
struct fdt_fixup_entry {
char *model;
fdt_fixup_t handler;
};
extern struct fdt_fixup_entry fdt_fixup_table[];
#endif
#if defined(FDT_DTB_STATIC)
extern u_char fdt_static_dtb;
#endif
SYSCTL_DECL(_hw_fdt);
typedef void (*fdt_mem_region_cb)(const struct mem_region *, void *);
int fdt_addrsize_cells(phandle_t, int *, int *);
u_long fdt_data_get(const void *, int);
int fdt_data_to_res(const pcell_t *, int, int, u_long *, u_long *);
phandle_t fdt_find_compatible(phandle_t, const char *, int);
phandle_t fdt_depth_search_compatible(phandle_t, const char *, int);
int fdt_foreach_mem_region(fdt_mem_region_cb, void *);
int fdt_foreach_reserved_mem(fdt_mem_region_cb, void *);
int fdt_foreach_reserved_region(fdt_mem_region_cb, void *);
int fdt_get_phyaddr(phandle_t, device_t, int *, void **);
int fdt_get_range(phandle_t, int, u_long *, u_long *);
int fdt_immr_addr(vm_offset_t);
int fdt_regsize(phandle_t, u_long *, u_long *);
int fdt_is_compatible_strict(phandle_t, const char *);
int fdt_parent_addr_cells(phandle_t);
int fdt_get_chosen_bootargs(char *bootargs, size_t max_size);
#endif