Symbol: vioapic
sys/amd64/include/vmm.h
146
struct vioapic *vioapic; /* (i) virtual ioapic */ \
sys/amd64/include/vmm.h
160
struct vioapic;
sys/amd64/include/vmm.h
250
struct vioapic *vm_ioapic(struct vm *vm);
sys/amd64/vmm/io/vioapic.c
100
vioapic_send_intr(struct vioapic *vioapic, int pin)
sys/amd64/vmm/io/vioapic.c
109
KASSERT(VIOAPIC_LOCKED(vioapic),
sys/amd64/vmm/io/vioapic.c
112
low = vioapic->rtbl[pin].reg;
sys/amd64/vmm/io/vioapic.c
113
high = vioapic->rtbl[pin].reg >> 32;
sys/amd64/vmm/io/vioapic.c
116
VIOAPIC_CTR1(vioapic, "ioapic pin%d: masked", pin);
sys/amd64/vmm/io/vioapic.c
125
VIOAPIC_CTR1(vioapic, "ioapic pin%d: irr pending",
sys/amd64/vmm/io/vioapic.c
129
vioapic->rtbl[pin].reg |= IOART_REM_IRR;
sys/amd64/vmm/io/vioapic.c
143
vlapic_deliver_intr(vioapic->vm, level, dest, phys, delmode, vector);
sys/amd64/vmm/io/vioapic.c
147
vioapic_set_pinstate(struct vioapic *vioapic, int pin, bool newstate)
sys/amd64/vmm/io/vioapic.c
155
KASSERT(VIOAPIC_LOCKED(vioapic),
sys/amd64/vmm/io/vioapic.c
158
oldcnt = vioapic->rtbl[pin].acnt;
sys/amd64/vmm/io/vioapic.c
160
vioapic->rtbl[pin].acnt++;
sys/amd64/vmm/io/vioapic.c
162
vioapic->rtbl[pin].acnt--;
sys/amd64/vmm/io/vioapic.c
163
newcnt = vioapic->rtbl[pin].acnt;
sys/amd64/vmm/io/vioapic.c
166
VIOAPIC_CTR2(vioapic, "ioapic pin%d: bad acnt %d",
sys/amd64/vmm/io/vioapic.c
173
VIOAPIC_CTR1(vioapic, "ioapic pin%d: asserted", pin);
sys/amd64/vmm/io/vioapic.c
175
VIOAPIC_CTR1(vioapic, "ioapic pin%d: deasserted", pin);
sys/amd64/vmm/io/vioapic.c
177
VIOAPIC_CTR3(vioapic, "ioapic pin%d: %s, ignored, acnt %d",
sys/amd64/vmm/io/vioapic.c
182
vioapic_send_intr(vioapic, pin);
sys/amd64/vmm/io/vioapic.c
194
struct vioapic *vioapic;
sys/amd64/vmm/io/vioapic.c
199
vioapic = vm_ioapic(vm);
sys/amd64/vmm/io/vioapic.c
201
VIOAPIC_LOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
204
vioapic_set_pinstate(vioapic, irq, true);
sys/amd64/vmm/io/vioapic.c
207
vioapic_set_pinstate(vioapic, irq, false);
sys/amd64/vmm/io/vioapic.c
210
vioapic_set_pinstate(vioapic, irq, true);
sys/amd64/vmm/io/vioapic.c
211
vioapic_set_pinstate(vioapic, irq, false);
sys/amd64/vmm/io/vioapic.c
216
VIOAPIC_UNLOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
249
struct vioapic *vioapic;
sys/amd64/vmm/io/vioapic.c
256
vioapic = vm_ioapic(vcpu_vm(vcpu));
sys/amd64/vmm/io/vioapic.c
258
VIOAPIC_LOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
264
low = vioapic->rtbl[pin].reg;
sys/amd64/vmm/io/vioapic.c
265
high = vioapic->rtbl[pin].reg >> 32;
sys/amd64/vmm/io/vioapic.c
283
VIOAPIC_UNLOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
287
vioapic_read(struct vioapic *vioapic, struct vcpu *vcpu, uint32_t addr)
sys/amd64/vmm/io/vioapic.c
294
return (vioapic->id);
sys/amd64/vmm/io/vioapic.c
300
return (vioapic->id);
sys/amd64/vmm/io/vioapic.c
315
return (vioapic->rtbl[pin].reg >> rshift);
sys/amd64/vmm/io/vioapic.c
322
vioapic_write(struct vioapic *vioapic, struct vcpu *vcpu, uint32_t addr,
sys/amd64/vmm/io/vioapic.c
333
vioapic->id = data & APIC_ID_MASK;
sys/amd64/vmm/io/vioapic.c
352
last = vioapic->rtbl[pin].reg;
sys/amd64/vmm/io/vioapic.c
356
vioapic->rtbl[pin].reg &= ~mask64 | RTBL_RO_BITS;
sys/amd64/vmm/io/vioapic.c
357
vioapic->rtbl[pin].reg |= data64 & ~RTBL_RO_BITS;
sys/amd64/vmm/io/vioapic.c
365
if ((vioapic->rtbl[pin].reg & IOART_TRGRMOD) == IOART_TRGREDG &&
sys/amd64/vmm/io/vioapic.c
366
(vioapic->rtbl[pin].reg & IOART_REM_IRR) != 0)
sys/amd64/vmm/io/vioapic.c
367
vioapic->rtbl[pin].reg &= ~IOART_REM_IRR;
sys/amd64/vmm/io/vioapic.c
369
VIOAPIC_CTR2(vioapic, "ioapic pin%d: redir table entry %#lx",
sys/amd64/vmm/io/vioapic.c
370
pin, vioapic->rtbl[pin].reg);
sys/amd64/vmm/io/vioapic.c
377
changed = last ^ vioapic->rtbl[pin].reg;
sys/amd64/vmm/io/vioapic.c
379
VIOAPIC_CTR1(vioapic, "ioapic pin%d: recalculate "
sys/amd64/vmm/io/vioapic.c
381
VIOAPIC_UNLOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
382
allvcpus = vm_active_cpus(vioapic->vm);
sys/amd64/vmm/io/vioapic.c
385
VIOAPIC_LOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
393
if ((vioapic->rtbl[pin].reg & IOART_TRGRMOD) == IOART_TRGRLVL &&
sys/amd64/vmm/io/vioapic.c
394
(vioapic->rtbl[pin].acnt > 0)) {
sys/amd64/vmm/io/vioapic.c
395
VIOAPIC_CTR2(vioapic, "ioapic pin%d: asserted at rtbl "
sys/amd64/vmm/io/vioapic.c
396
"write, acnt %d", pin, vioapic->rtbl[pin].acnt);
sys/amd64/vmm/io/vioapic.c
397
vioapic_send_intr(vioapic, pin);
sys/amd64/vmm/io/vioapic.c
403
vioapic_mmio_rw(struct vioapic *vioapic, struct vcpu *vcpu, uint64_t gpa,
sys/amd64/vmm/io/vioapic.c
420
VIOAPIC_LOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
423
*data = vioapic->ioregsel;
sys/amd64/vmm/io/vioapic.c
425
vioapic->ioregsel = *data;
sys/amd64/vmm/io/vioapic.c
428
*data = vioapic_read(vioapic, vcpu,
sys/amd64/vmm/io/vioapic.c
429
vioapic->ioregsel);
sys/amd64/vmm/io/vioapic.c
431
vioapic_write(vioapic, vcpu, vioapic->ioregsel,
sys/amd64/vmm/io/vioapic.c
435
VIOAPIC_UNLOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
445
struct vioapic *vioapic;
sys/amd64/vmm/io/vioapic.c
447
vioapic = vm_ioapic(vcpu_vm(vcpu));
sys/amd64/vmm/io/vioapic.c
448
error = vioapic_mmio_rw(vioapic, vcpu, gpa, rval, size, true);
sys/amd64/vmm/io/vioapic.c
457
struct vioapic *vioapic;
sys/amd64/vmm/io/vioapic.c
459
vioapic = vm_ioapic(vcpu_vm(vcpu));
sys/amd64/vmm/io/vioapic.c
460
error = vioapic_mmio_rw(vioapic, vcpu, gpa, &wval, size, false);
sys/amd64/vmm/io/vioapic.c
467
struct vioapic *vioapic;
sys/amd64/vmm/io/vioapic.c
473
vioapic = vm_ioapic(vm);
sys/amd64/vmm/io/vioapic.c
474
VIOAPIC_CTR1(vioapic, "ioapic processing eoi for vector %d", vector);
sys/amd64/vmm/io/vioapic.c
480
VIOAPIC_LOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
482
if ((vioapic->rtbl[pin].reg & IOART_REM_IRR) == 0)
sys/amd64/vmm/io/vioapic.c
484
if ((vioapic->rtbl[pin].reg & IOART_INTVEC) != vector)
sys/amd64/vmm/io/vioapic.c
486
vioapic->rtbl[pin].reg &= ~IOART_REM_IRR;
sys/amd64/vmm/io/vioapic.c
487
if (vioapic->rtbl[pin].acnt > 0) {
sys/amd64/vmm/io/vioapic.c
488
VIOAPIC_CTR2(vioapic, "ioapic pin%d: asserted at eoi, "
sys/amd64/vmm/io/vioapic.c
489
"acnt %d", pin, vioapic->rtbl[pin].acnt);
sys/amd64/vmm/io/vioapic.c
490
vioapic_send_intr(vioapic, pin);
sys/amd64/vmm/io/vioapic.c
493
VIOAPIC_UNLOCK(vioapic);
sys/amd64/vmm/io/vioapic.c
496
struct vioapic *
sys/amd64/vmm/io/vioapic.c
500
struct vioapic *vioapic;
sys/amd64/vmm/io/vioapic.c
502
vioapic = malloc(sizeof(struct vioapic), M_VIOAPIC, M_WAITOK | M_ZERO);
sys/amd64/vmm/io/vioapic.c
504
vioapic->vm = vm;
sys/amd64/vmm/io/vioapic.c
505
mtx_init(&vioapic->mtx, "vioapic lock", NULL, MTX_SPIN);
sys/amd64/vmm/io/vioapic.c
509
vioapic->rtbl[i].reg = 0x0001000000010000UL;
sys/amd64/vmm/io/vioapic.c
511
return (vioapic);
sys/amd64/vmm/io/vioapic.c
515
vioapic_cleanup(struct vioapic *vioapic)
sys/amd64/vmm/io/vioapic.c
518
mtx_destroy(&vioapic->mtx);
sys/amd64/vmm/io/vioapic.c
519
free(vioapic, M_VIOAPIC);
sys/amd64/vmm/io/vioapic.c
531
vioapic_snapshot(struct vioapic *vioapic, struct vm_snapshot_meta *meta)
sys/amd64/vmm/io/vioapic.c
536
SNAPSHOT_VAR_OR_LEAVE(vioapic->ioregsel, meta, ret, done);
sys/amd64/vmm/io/vioapic.c
538
for (i = 0; i < nitems(vioapic->rtbl); i++) {
sys/amd64/vmm/io/vioapic.c
539
SNAPSHOT_VAR_OR_LEAVE(vioapic->rtbl[i].reg, meta, ret, done);
sys/amd64/vmm/io/vioapic.c
540
SNAPSHOT_VAR_OR_LEAVE(vioapic->rtbl[i].acnt, meta, ret, done);
sys/amd64/vmm/io/vioapic.c
69
#define VIOAPIC_LOCK(vioapic) mtx_lock_spin(&((vioapic)->mtx))
sys/amd64/vmm/io/vioapic.c
70
#define VIOAPIC_UNLOCK(vioapic) mtx_unlock_spin(&((vioapic)->mtx))
sys/amd64/vmm/io/vioapic.c
71
#define VIOAPIC_LOCKED(vioapic) mtx_owned(&((vioapic)->mtx))
sys/amd64/vmm/io/vioapic.c
75
#define VIOAPIC_CTR1(vioapic, fmt, a1) \
sys/amd64/vmm/io/vioapic.c
76
VM_CTR1((vioapic)->vm, fmt, a1)
sys/amd64/vmm/io/vioapic.c
78
#define VIOAPIC_CTR2(vioapic, fmt, a1, a2) \
sys/amd64/vmm/io/vioapic.c
79
VM_CTR2((vioapic)->vm, fmt, a1, a2)
sys/amd64/vmm/io/vioapic.c
81
#define VIOAPIC_CTR3(vioapic, fmt, a1, a2, a3) \
sys/amd64/vmm/io/vioapic.c
82
VM_CTR3((vioapic)->vm, fmt, a1, a2, a3)
sys/amd64/vmm/io/vioapic.c
84
#define VIOAPIC_CTR4(vioapic, fmt, a1, a2, a3, a4) \
sys/amd64/vmm/io/vioapic.c
85
VM_CTR4((vioapic)->vm, fmt, a1, a2, a3, a4)
sys/amd64/vmm/io/vioapic.h
39
struct vioapic *vioapic_init(struct vm *vm);
sys/amd64/vmm/io/vioapic.h
40
void vioapic_cleanup(struct vioapic *vioapic);
sys/amd64/vmm/io/vioapic.h
54
int vioapic_snapshot(struct vioapic *vioapic,
sys/amd64/vmm/vmm.c
1604
struct vioapic *
sys/amd64/vmm/vmm.c
1608
return (vm->vioapic);
sys/amd64/vmm/vmm.c
316
vm->vioapic = vioapic_init(vm);
sys/amd64/vmm/vmm.c
419
vioapic_cleanup(vm->vioapic);