~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to include/hw/ppc/xics.h

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
 
31
31
#include "hw/sysbus.h"
32
32
 
33
 
#define TYPE_XICS_COMMON "xics-common"
34
 
#define XICS_COMMON(obj) OBJECT_CHECK(XICSState, (obj), TYPE_XICS_COMMON)
35
 
 
36
 
/*
37
 
 * Retain xics as the type name to be compatible for migration. Rest all the
38
 
 * functions, class and variables are renamed as xics_spapr.
39
 
 */
40
 
#define TYPE_XICS_SPAPR "xics"
41
 
#define XICS_SPAPR(obj) OBJECT_CHECK(XICSState, (obj), TYPE_XICS_SPAPR)
42
 
 
43
 
#define TYPE_XICS_SPAPR_KVM "xics-spapr-kvm"
44
 
#define XICS_SPAPR_KVM(obj) \
45
 
     OBJECT_CHECK(KVMXICSState, (obj), TYPE_XICS_SPAPR_KVM)
46
 
 
47
 
#define XICS_COMMON_CLASS(klass) \
48
 
     OBJECT_CLASS_CHECK(XICSStateClass, (klass), TYPE_XICS_COMMON)
49
 
#define XICS_SPAPR_CLASS(klass) \
50
 
     OBJECT_CLASS_CHECK(XICSStateClass, (klass), TYPE_XICS_SPAPR)
51
 
#define XICS_COMMON_GET_CLASS(obj) \
52
 
     OBJECT_GET_CLASS(XICSStateClass, (obj), TYPE_XICS_COMMON)
53
 
#define XICS_SPAPR_GET_CLASS(obj) \
54
 
     OBJECT_GET_CLASS(XICSStateClass, (obj), TYPE_XICS_SPAPR)
55
 
 
56
33
#define XICS_IPI        0x2
57
34
#define XICS_BUID       0x1
58
35
#define XICS_IRQ_BASE   (XICS_BUID << 12)
62
39
 * (the kernel implementation supports more but we don't exploit
63
40
 *  that yet)
64
41
 */
65
 
typedef struct XICSStateClass XICSStateClass;
66
 
typedef struct XICSState XICSState;
67
42
typedef struct ICPStateClass ICPStateClass;
68
43
typedef struct ICPState ICPState;
69
44
typedef struct ICSStateClass ICSStateClass;
70
45
typedef struct ICSState ICSState;
71
46
typedef struct ICSIRQState ICSIRQState;
72
 
 
73
 
struct XICSStateClass {
74
 
    DeviceClass parent_class;
75
 
 
76
 
    void (*cpu_setup)(XICSState *icp, PowerPCCPU *cpu);
77
 
    void (*set_nr_irqs)(XICSState *icp, uint32_t nr_irqs, Error **errp);
78
 
    void (*set_nr_servers)(XICSState *icp, uint32_t nr_servers, Error **errp);
79
 
};
80
 
 
81
 
struct XICSState {
82
 
    /*< private >*/
83
 
    SysBusDevice parent_obj;
84
 
    /*< public >*/
85
 
    uint32_t nr_servers;
86
 
    uint32_t nr_irqs;
87
 
    ICPState *ss;
88
 
    QLIST_HEAD(, ICSState) ics;
89
 
};
 
47
typedef struct XICSFabric XICSFabric;
90
48
 
91
49
#define TYPE_ICP "icp"
92
50
#define ICP(obj) OBJECT_CHECK(ICPState, (obj), TYPE_ICP)
104
62
 
105
63
    void (*pre_save)(ICPState *s);
106
64
    int (*post_load)(ICPState *s, int version_id);
 
65
    void (*cpu_setup)(ICPState *icp, PowerPCCPU *cpu);
107
66
};
108
67
 
109
68
struct ICPState {
118
77
    qemu_irq output;
119
78
    bool cap_irq_xics_enabled;
120
79
 
121
 
    XICSState *xics;
 
80
    XICSFabric *xics;
122
81
};
123
82
 
124
83
#define TYPE_ICS_BASE "ics-base"
139
98
struct ICSStateClass {
140
99
    DeviceClass parent_class;
141
100
 
 
101
    void (*realize)(DeviceState *dev, Error **errp);
142
102
    void (*pre_save)(ICSState *s);
143
103
    int (*post_load)(ICSState *s, int version_id);
144
104
    void (*reject)(ICSState *s, uint32_t irq);
154
114
    uint32_t offset;
155
115
    qemu_irq *qirqs;
156
116
    ICSIRQState *irqs;
157
 
    XICSState *xics;
158
 
    QLIST_ENTRY(ICSState) list;
 
117
    XICSFabric *xics;
159
118
};
160
119
 
161
120
static inline bool ics_valid_irq(ICSState *ics, uint32_t nr)
180
139
    uint8_t flags;
181
140
};
182
141
 
 
142
struct XICSFabric {
 
143
    Object parent;
 
144
};
 
145
 
 
146
#define TYPE_XICS_FABRIC "xics-fabric"
 
147
#define XICS_FABRIC(obj)                                     \
 
148
    OBJECT_CHECK(XICSFabric, (obj), TYPE_XICS_FABRIC)
 
149
#define XICS_FABRIC_CLASS(klass)                                     \
 
150
    OBJECT_CLASS_CHECK(XICSFabricClass, (klass), TYPE_XICS_FABRIC)
 
151
#define XICS_FABRIC_GET_CLASS(obj)                                   \
 
152
    OBJECT_GET_CLASS(XICSFabricClass, (obj), TYPE_XICS_FABRIC)
 
153
 
 
154
typedef struct XICSFabricClass {
 
155
    InterfaceClass parent;
 
156
    ICSState *(*ics_get)(XICSFabric *xi, int irq);
 
157
    void (*ics_resend)(XICSFabric *xi);
 
158
    ICPState *(*icp_get)(XICSFabric *xi, int server);
 
159
} XICSFabricClass;
 
160
 
183
161
#define XICS_IRQS_SPAPR               1024
184
162
 
185
 
qemu_irq xics_get_qirq(XICSState *icp, int irq);
186
 
int xics_spapr_alloc(XICSState *icp, int irq_hint, bool lsi, Error **errp);
187
 
int xics_spapr_alloc_block(XICSState *icp, int num, bool lsi, bool align,
 
163
int spapr_ics_alloc(ICSState *ics, int irq_hint, bool lsi, Error **errp);
 
164
int spapr_ics_alloc_block(ICSState *ics, int num, bool lsi, bool align,
188
165
                           Error **errp);
189
 
void xics_spapr_free(XICSState *icp, int irq, int num);
190
 
void spapr_dt_xics(XICSState *xics, void *fdt, uint32_t phandle);
 
166
void spapr_ics_free(ICSState *ics, int irq, int num);
 
167
void spapr_dt_xics(int nr_servers, void *fdt, uint32_t phandle);
191
168
 
192
 
void xics_cpu_setup(XICSState *icp, PowerPCCPU *cpu);
193
 
void xics_cpu_destroy(XICSState *icp, PowerPCCPU *cpu);
194
 
void xics_set_nr_servers(XICSState *xics, uint32_t nr_servers,
195
 
                         const char *typename, Error **errp);
 
169
qemu_irq xics_get_qirq(XICSFabric *xi, int irq);
 
170
ICPState *xics_icp_get(XICSFabric *xi, int server);
 
171
void xics_cpu_setup(XICSFabric *xi, PowerPCCPU *cpu);
 
172
void xics_cpu_destroy(XICSFabric *xi, PowerPCCPU *cpu);
196
173
 
197
174
/* Internal XICS interfaces */
198
175
int xics_get_cpu_index_by_dt_id(int cpu_dt_id);
207
184
                           uint8_t priority, uint8_t saved_priority);
208
185
 
209
186
void ics_set_irq_type(ICSState *ics, int srcno, bool lsi);
210
 
 
211
 
ICSState *xics_find_source(XICSState *icp, int irq);
 
187
void icp_pic_print_info(ICPState *icp, Monitor *mon);
 
188
void ics_pic_print_info(ICSState *ics, Monitor *mon);
 
189
 
 
190
void ics_resend(ICSState *ics);
 
191
void icp_resend(ICPState *ss);
 
192
 
 
193
typedef struct sPAPRMachineState sPAPRMachineState;
 
194
 
 
195
int xics_kvm_init(sPAPRMachineState *spapr, Error **errp);
 
196
int xics_spapr_init(sPAPRMachineState *spapr, Error **errp);
212
197
 
213
198
#endif /* XICS_H */