1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef __ASM_ARM_KVM_VGIC_H
20#define __ASM_ARM_KVM_VGIC_H
21
22#include <linux/kernel.h>
23#include <linux/kvm.h>
24#include <linux/irqreturn.h>
25#include <linux/spinlock.h>
26#include <linux/types.h>
27#include <kvm/iodev.h>
28
29#define VGIC_NR_IRQS_LEGACY 256
30#define VGIC_NR_SGIS 16
31#define VGIC_NR_PPIS 16
32#define VGIC_NR_PRIVATE_IRQS (VGIC_NR_SGIS + VGIC_NR_PPIS)
33
34#define VGIC_V2_MAX_LRS (1 << 6)
35#define VGIC_V3_MAX_LRS 16
36#define VGIC_MAX_IRQS 1024
37#define VGIC_V2_MAX_CPUS 8
38
39
40#if (KVM_MAX_VCPUS > 255)
41#error Too many KVM VCPUs, the VGIC only supports up to 255 VCPUs for now
42#endif
43
44#if (VGIC_NR_IRQS_LEGACY & 31)
45#error "VGIC_NR_IRQS must be a multiple of 32"
46#endif
47
48#if (VGIC_NR_IRQS_LEGACY > VGIC_MAX_IRQS)
49#error "VGIC_NR_IRQS must be <= 1024"
50#endif
51
52
53
54
55
56
57struct vgic_bitmap {
58
59
60
61
62
63
64
65
66
67
68 unsigned long *private;
69 unsigned long *shared;
70};
71
72struct vgic_bytemap {
73
74
75
76
77
78
79
80
81
82
83 u32 *private;
84 u32 *shared;
85};
86
87struct kvm_vcpu;
88
89enum vgic_type {
90 VGIC_V2,
91 VGIC_V3,
92};
93
94#define LR_STATE_PENDING (1 << 0)
95#define LR_STATE_ACTIVE (1 << 1)
96#define LR_STATE_MASK (3 << 0)
97#define LR_EOI_INT (1 << 2)
98
99struct vgic_lr {
100 u16 irq;
101 u8 source;
102 u8 state;
103};
104
105struct vgic_vmcr {
106 u32 ctlr;
107 u32 abpr;
108 u32 bpr;
109 u32 pmr;
110};
111
112struct vgic_ops {
113 struct vgic_lr (*get_lr)(const struct kvm_vcpu *, int);
114 void (*set_lr)(struct kvm_vcpu *, int, struct vgic_lr);
115 void (*sync_lr_elrsr)(struct kvm_vcpu *, int, struct vgic_lr);
116 u64 (*get_elrsr)(const struct kvm_vcpu *vcpu);
117 u64 (*get_eisr)(const struct kvm_vcpu *vcpu);
118 void (*clear_eisr)(struct kvm_vcpu *vcpu);
119 u32 (*get_interrupt_status)(const struct kvm_vcpu *vcpu);
120 void (*enable_underflow)(struct kvm_vcpu *vcpu);
121 void (*disable_underflow)(struct kvm_vcpu *vcpu);
122 void (*get_vmcr)(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr);
123 void (*set_vmcr)(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr);
124 void (*enable)(struct kvm_vcpu *vcpu);
125};
126
127struct vgic_params {
128
129 enum vgic_type type;
130
131 phys_addr_t vcpu_base;
132
133 u32 nr_lr;
134
135 unsigned int maint_irq;
136
137 void __iomem *vctrl_base;
138 int max_gic_vcpus;
139
140 bool can_emulate_gicv2;
141};
142
143struct vgic_vm_ops {
144 bool (*queue_sgi)(struct kvm_vcpu *, int irq);
145 void (*add_sgi_source)(struct kvm_vcpu *, int irq, int source);
146 int (*init_model)(struct kvm *);
147 int (*map_resources)(struct kvm *, const struct vgic_params *);
148};
149
150struct vgic_io_device {
151 gpa_t addr;
152 int len;
153 const struct vgic_io_range *reg_ranges;
154 struct kvm_vcpu *redist_vcpu;
155 struct kvm_io_device dev;
156};
157
158struct vgic_dist {
159 spinlock_t lock;
160 bool in_kernel;
161 bool ready;
162
163
164 u32 vgic_model;
165
166 int nr_cpus;
167 int nr_irqs;
168
169
170 void __iomem *vctrl_base;
171
172
173 phys_addr_t vgic_dist_base;
174
175 union {
176 phys_addr_t vgic_cpu_base;
177 phys_addr_t vgic_redist_base;
178 };
179
180
181 u32 enabled;
182
183
184 struct vgic_bitmap irq_enabled;
185
186
187 struct vgic_bitmap irq_level;
188
189
190
191
192 struct vgic_bitmap irq_pending;
193
194
195
196
197
198
199
200
201 struct vgic_bitmap irq_soft_pend;
202
203
204 struct vgic_bitmap irq_queued;
205
206
207 struct vgic_bitmap irq_active;
208
209
210 struct vgic_bytemap irq_priority;
211
212
213 struct vgic_bitmap irq_cfg;
214
215
216
217
218
219
220
221
222
223
224
225 u8 *irq_sgi_sources;
226
227
228
229
230
231
232
233 u8 *irq_spi_cpu;
234
235
236
237
238
239
240
241 struct vgic_bitmap *irq_spi_target;
242
243
244 u32 *irq_spi_mpidr;
245
246
247 unsigned long *irq_pending_on_cpu;
248
249
250 unsigned long *irq_active_on_cpu;
251
252 struct vgic_vm_ops vm_ops;
253 struct vgic_io_device dist_iodev;
254 struct vgic_io_device *redist_iodevs;
255};
256
257struct vgic_v2_cpu_if {
258 u32 vgic_hcr;
259 u32 vgic_vmcr;
260 u32 vgic_misr;
261 u64 vgic_eisr;
262 u64 vgic_elrsr;
263 u32 vgic_apr;
264 u32 vgic_lr[VGIC_V2_MAX_LRS];
265};
266
267struct vgic_v3_cpu_if {
268#ifdef CONFIG_ARM_GIC_V3
269 u32 vgic_hcr;
270 u32 vgic_vmcr;
271 u32 vgic_sre;
272 u32 vgic_misr;
273 u32 vgic_eisr;
274 u32 vgic_elrsr;
275 u32 vgic_ap0r[4];
276 u32 vgic_ap1r[4];
277 u64 vgic_lr[VGIC_V3_MAX_LRS];
278#endif
279};
280
281struct vgic_cpu {
282
283 u8 *vgic_irq_lr_map;
284
285
286 DECLARE_BITMAP( pending_percpu, VGIC_NR_PRIVATE_IRQS);
287 DECLARE_BITMAP( active_percpu, VGIC_NR_PRIVATE_IRQS);
288 DECLARE_BITMAP( pend_act_percpu, VGIC_NR_PRIVATE_IRQS);
289
290
291 unsigned long *pending_shared;
292 unsigned long *active_shared;
293 unsigned long *pend_act_shared;
294
295
296 DECLARE_BITMAP( lr_used, VGIC_V2_MAX_LRS);
297
298
299 int nr_lr;
300
301
302 union {
303 struct vgic_v2_cpu_if vgic_v2;
304 struct vgic_v3_cpu_if vgic_v3;
305 };
306};
307
308#define LR_EMPTY 0xff
309
310#define INT_STATUS_EOI (1 << 0)
311#define INT_STATUS_UNDERFLOW (1 << 1)
312
313struct kvm;
314struct kvm_vcpu;
315
316int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write);
317int kvm_vgic_hyp_init(void);
318int kvm_vgic_map_resources(struct kvm *kvm);
319int kvm_vgic_get_max_vcpus(void);
320int kvm_vgic_create(struct kvm *kvm, u32 type);
321void kvm_vgic_destroy(struct kvm *kvm);
322void kvm_vgic_vcpu_destroy(struct kvm_vcpu *vcpu);
323void kvm_vgic_flush_hwstate(struct kvm_vcpu *vcpu);
324void kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu);
325int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int irq_num,
326 bool level);
327void vgic_v3_dispatch_sgi(struct kvm_vcpu *vcpu, u64 reg);
328int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu);
329int kvm_vgic_vcpu_active_irq(struct kvm_vcpu *vcpu);
330
331#define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel))
332#define vgic_initialized(k) (!!((k)->arch.vgic.nr_cpus))
333#define vgic_ready(k) ((k)->arch.vgic.ready)
334
335int vgic_v2_probe(struct device_node *vgic_node,
336 const struct vgic_ops **ops,
337 const struct vgic_params **params);
338#ifdef CONFIG_ARM_GIC_V3
339int vgic_v3_probe(struct device_node *vgic_node,
340 const struct vgic_ops **ops,
341 const struct vgic_params **params);
342#else
343static inline int vgic_v3_probe(struct device_node *vgic_node,
344 const struct vgic_ops **ops,
345 const struct vgic_params **params)
346{
347 return -ENODEV;
348}
349#endif
350
351#endif
352