1
2
3
4
5
6#ifndef FDT_GENERIC_H
7#define FDT_GENERIC_H
8
9#include "qemu-common.h"
10#include "hw/irq.h"
11#include "sysemu/device_tree.h"
12#include "qemu/coroutine.h"
13
14
15extern int fdt_serial_ports;
16
17typedef struct FDTDevOpaque {
18 char *node_path;
19 void *opaque;
20} FDTDevOpaque;
21
22typedef struct FDTCPUCluster {
23 char *cpu_type;
24 void *cpu_cluster;
25 void *next;
26} FDTCPUCluster;
27
28typedef struct FDTIRQConnection {
29 DeviceState *dev;
30 const char *name;
31 int i;
32 bool (*merge_fn)(bool *, int);
33 qemu_irq irq;
34 char *sink_info;
35 void *next;
36} FDTIRQConnection;
37
38typedef struct FDTMachineInfo {
39
40 void *fdt;
41
42 qemu_irq *irq_base;
43
44 FDTDevOpaque *dev_opaques;
45
46 CoQueue *cq;
47
48 FDTIRQConnection *irqs;
49
50 FDTCPUCluster *clusters;
51} FDTMachineInfo;
52
53
54
55
56
57
58FDTMachineInfo *fdt_init_new_fdti(void *fdt);
59void fdt_init_destroy_fdti(FDTMachineInfo *fdti);
60
61typedef int (*FDTInitFn)(char *, FDTMachineInfo *, void *);
62
63
64
65void add_to_compat_table(FDTInitFn, const char *, void *);
66
67
68
69
70
71
72int fdt_init_compat(char *, FDTMachineInfo *, const char *);
73
74
75
76void add_to_inst_bind_table(FDTInitFn, const char *, void *);
77int fdt_init_inst_bind(char *, FDTMachineInfo *, const char *);
78
79void dump_compat_table(void);
80void dump_inst_bind_table(void);
81
82
83
84
85
86
87
88void fdt_init_yield(FDTMachineInfo *);
89
90
91
92void fdt_init_set_opaque(FDTMachineInfo *fdti, char *node_path, void *opaque);
93int fdt_init_has_opaque(FDTMachineInfo *fdti, char *node_path);
94void *fdt_init_get_opaque(FDTMachineInfo *fdti, char *node_path);
95
96void *fdt_init_get_cpu_cluster(FDTMachineInfo *fdti, char *compat);
97
98
99
100#define fdt_register_compatibility_opaque(function, compat, n, opaque) \
101static void __attribute__((constructor)) \
102function ## n ## _register_imp(void) { \
103 add_to_compat_table(function, compat, opaque); \
104}
105
106#define fdt_register_compatibility_n(function, compat, n) \
107fdt_register_compatibility_opaque(function, compat, n, NULL)
108
109#define fdt_register_compatibility(function, compat) \
110fdt_register_compatibility_n(function, compat, 0)
111
112#define fdt_register_instance_opaque(function, inst, n, opaque) \
113static void __attribute__((constructor)) \
114function ## n ## _register_imp(void) { \
115 add_to_inst_bind_table(function, inst, opaque); \
116}
117
118#define fdt_register_instance_n(function, inst, n) \
119fdt_register_instance_opaque(function, inst, n, NULL)
120
121#define fdt_register_instance(function, inst) \
122fdt_register_instance_n(function, inst, 0)
123
124#endif
125