Merge tag 'v9.0.0-rc3'
[qemu/ar7.git] / include / hw / ppc / pnv_xive.h
blob9c48430ee4181f2b9bbbfbb4c18946e030f34b91
1 /*
2 * QEMU PowerPC XIVE interrupt controller model
4 * Copyright (c) 2017-2019, IBM Corporation.
6 * This code is licensed under the GPL version 2 or later. See the
7 * COPYING file in the top-level directory.
8 */
10 #ifndef PPC_PNV_XIVE_H
11 #define PPC_PNV_XIVE_H
13 #include "hw/ppc/pnv.h"
14 #include "hw/ppc/xive.h"
15 #include "qom/object.h"
16 #include "hw/ppc/xive2.h"
18 #define TYPE_PNV_XIVE "pnv-xive"
19 OBJECT_DECLARE_TYPE(PnvXive, PnvXiveClass,
20 PNV_XIVE)
22 #define XIVE_BLOCK_MAX 16
24 #define XIVE_TABLE_BLK_MAX 16 /* Block Scope Table (0-15) */
25 #define XIVE_TABLE_MIG_MAX 16 /* Migration Register Table (1-15) */
26 #define XIVE_TABLE_VDT_MAX 16 /* VDT Domain Table (0-15) */
27 #define XIVE_TABLE_EDT_MAX 64 /* EDT Domain Table (0-63) */
29 struct PnvXive {
30 XiveRouter parent_obj;
32 /* Owning chip */
33 PnvChip *chip;
35 /* XSCOM addresses giving access to the controller registers */
36 MemoryRegion xscom_regs;
38 /* Main MMIO regions that can be configured by FW */
39 MemoryRegion ic_mmio;
40 MemoryRegion ic_reg_mmio;
41 MemoryRegion ic_notify_mmio;
42 MemoryRegion ic_lsi_mmio;
43 MemoryRegion tm_indirect_mmio;
44 MemoryRegion vc_mmio;
45 MemoryRegion pc_mmio;
46 MemoryRegion tm_mmio;
49 * IPI and END address spaces modeling the EDT segmentation in the
50 * VC region
52 AddressSpace ipi_as;
53 MemoryRegion ipi_mmio;
54 MemoryRegion ipi_edt_mmio;
56 AddressSpace end_as;
57 MemoryRegion end_mmio;
58 MemoryRegion end_edt_mmio;
60 /* Shortcut values for the Main MMIO regions */
61 hwaddr ic_base;
62 uint32_t ic_shift;
63 hwaddr vc_base;
64 uint32_t vc_shift;
65 hwaddr pc_base;
66 uint32_t pc_shift;
67 hwaddr tm_base;
68 uint32_t tm_shift;
70 /* Our XIVE source objects for IPIs and ENDs */
71 XiveSource ipi_source;
72 XiveENDSource end_source;
74 /* Interrupt controller registers */
75 uint64_t regs[0x300];
78 * Virtual Structure Descriptor tables : EAT, SBE, ENDT, NVTT, IRQ
79 * These are in a SRAM protected by ECC.
81 uint64_t vsds[5][XIVE_BLOCK_MAX];
83 /* Translation tables */
84 uint64_t blk[XIVE_TABLE_BLK_MAX];
85 uint64_t mig[XIVE_TABLE_MIG_MAX];
86 uint64_t vdt[XIVE_TABLE_VDT_MAX];
87 uint64_t edt[XIVE_TABLE_EDT_MAX];
90 struct PnvXiveClass {
91 XiveRouterClass parent_class;
93 DeviceRealize parent_realize;
96 void pnv_xive_pic_print_info(PnvXive *xive, Monitor *mon);
99 * XIVE2 interrupt controller (POWER10)
101 #define TYPE_PNV_XIVE2 "pnv-xive2"
102 OBJECT_DECLARE_TYPE(PnvXive2, PnvXive2Class, PNV_XIVE2);
104 typedef struct PnvXive2 {
105 Xive2Router parent_obj;
107 /* Owning chip */
108 PnvChip *chip;
110 /* XSCOM addresses giving access to the controller registers */
111 MemoryRegion xscom_regs;
113 MemoryRegion ic_mmio;
114 MemoryRegion ic_mmios[8];
115 MemoryRegion esb_mmio;
116 MemoryRegion end_mmio;
117 MemoryRegion nvc_mmio;
118 MemoryRegion nvpg_mmio;
119 MemoryRegion tm_mmio;
121 /* Shortcut values for the Main MMIO regions */
122 hwaddr ic_base;
123 uint32_t ic_shift;
124 hwaddr esb_base;
125 uint32_t esb_shift;
126 hwaddr end_base;
127 uint32_t end_shift;
128 hwaddr nvc_base;
129 uint32_t nvc_shift;
130 hwaddr nvpg_base;
131 uint32_t nvpg_shift;
132 hwaddr tm_base;
133 uint32_t tm_shift;
135 /* Interrupt controller registers */
136 uint64_t cq_regs[0x40];
137 uint64_t vc_regs[0x100];
138 uint64_t pc_regs[0x100];
139 uint64_t tctxt_regs[0x30];
141 /* To change default behavior */
142 uint64_t capabilities;
143 uint64_t config;
145 /* Our XIVE source objects for IPIs and ENDs */
146 XiveSource ipi_source;
147 Xive2EndSource end_source;
150 * Virtual Structure Descriptor tables
151 * These are in a SRAM protected by ECC.
153 uint64_t vsds[9][XIVE_BLOCK_MAX];
155 /* Translation tables */
156 uint64_t tables[8][XIVE_BLOCK_MAX];
158 } PnvXive2;
160 typedef struct PnvXive2Class {
161 Xive2RouterClass parent_class;
163 DeviceRealize parent_realize;
164 } PnvXive2Class;
166 void pnv_xive2_pic_print_info(PnvXive2 *xive, Monitor *mon);
168 #endif /* PPC_PNV_XIVE_H */