1
2
3
4
5
6
7
8
9
10#ifndef HW_SPAPR_IRQ_H
11#define HW_SPAPR_IRQ_H
12
13
14
15
16#define SPAPR_IRQ_EPOW 0x1000
17#define SPAPR_IRQ_HOTPLUG 0x1001
18#define SPAPR_IRQ_VIO 0x1100
19#define SPAPR_IRQ_PCI_LSI 0x1200
20
21#define SPAPR_IRQ_MSI 0x1300
22
23
24typedef struct sPAPRMachineState sPAPRMachineState;
25
26void spapr_irq_msi_init(sPAPRMachineState *spapr, uint32_t nr_msis);
27int spapr_irq_msi_alloc(sPAPRMachineState *spapr, uint32_t num, bool align,
28 Error **errp);
29void spapr_irq_msi_free(sPAPRMachineState *spapr, int irq, uint32_t num);
30void spapr_irq_msi_reset(sPAPRMachineState *spapr);
31
32typedef struct sPAPRIrq {
33 uint32_t nr_irqs;
34 uint32_t nr_msis;
35
36 void (*init)(sPAPRMachineState *spapr, Error **errp);
37 int (*claim)(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp);
38 void (*free)(sPAPRMachineState *spapr, int irq, int num);
39 qemu_irq (*qirq)(sPAPRMachineState *spapr, int irq);
40 void (*print_info)(sPAPRMachineState *spapr, Monitor *mon);
41} sPAPRIrq;
42
43extern sPAPRIrq spapr_irq_xics;
44extern sPAPRIrq spapr_irq_xics_legacy;
45
46int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp);
47void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num);
48qemu_irq spapr_qirq(sPAPRMachineState *spapr, int irq);
49
50
51
52
53int spapr_irq_find(sPAPRMachineState *spapr, int num, bool align, Error **errp);
54#define spapr_irq_findone(spapr, errp) spapr_irq_find(spapr, 1, false, errp)
55
56#endif
57