Lines Matching defs:vatpic

28 __FBSDID("$FreeBSD: releng/10.2/sys/amd64/vmm/io/vatpic.c 284900 2015-06-28 03:22:26Z neel $");
47 #include "vatpic.h"
51 #define VATPIC_LOCK(vatpic) mtx_lock_spin(&((vatpic)->mtx))
52 #define VATPIC_UNLOCK(vatpic) mtx_unlock_spin(&((vatpic)->mtx))
53 #define VATPIC_LOCKED(vatpic) mtx_owned(&((vatpic)->mtx))
83 struct vatpic {
90 #define VATPIC_CTR0(vatpic, fmt) \
91 VM_CTR0((vatpic)->vm, fmt)
93 #define VATPIC_CTR1(vatpic, fmt, a1) \
94 VM_CTR1((vatpic)->vm, fmt, a1)
96 #define VATPIC_CTR2(vatpic, fmt, a1, a2) \
97 VM_CTR2((vatpic)->vm, fmt, a1, a2)
99 #define VATPIC_CTR3(vatpic, fmt, a1, a2, a3) \
100 VM_CTR3((vatpic)->vm, fmt, a1, a2, a3)
102 #define VATPIC_CTR4(vatpic, fmt, a1, a2, a3, a4) \
103 VM_CTR4((vatpic)->vm, fmt, a1, a2, a3, a4)
113 static void vatpic_set_pinstate(struct vatpic *vatpic, int pin, bool newstate);
116 master_atpic(struct vatpic *vatpic, struct atpic *atpic)
119 if (atpic == &vatpic->atpic[0])
195 vatpic_notify_intr(struct vatpic *vatpic)
200 KASSERT(VATPIC_LOCKED(vatpic), ("vatpic_notify_intr not locked"));
205 atpic = &vatpic->atpic[1];
208 VATPIC_CTR4(vatpic, "atpic slave notify pin = %d "
216 vatpic_set_pinstate(vatpic, 2, true);
217 vatpic_set_pinstate(vatpic, 2, false);
219 VATPIC_CTR3(vatpic, "atpic slave no eligible interrupts "
227 atpic = &vatpic->atpic[0];
230 VATPIC_CTR4(vatpic, "atpic master notify pin = %d "
260 lapic_set_local_intr(vatpic->vm, -1, APIC_LVT_LINT0);
261 vioapic_pulse_irq(vatpic->vm, 0);
263 VATPIC_CTR3(vatpic, "atpic master no eligible interrupts "
270 vatpic_icw1(struct vatpic *vatpic, struct atpic *atpic, uint8_t val)
272 VATPIC_CTR1(vatpic, "atpic icw1 0x%x", val);
285 VATPIC_CTR0(vatpic, "vatpic cascade mode required");
290 VATPIC_CTR0(vatpic, "vatpic icw4 required");
300 vatpic_icw2(struct vatpic *vatpic, struct atpic *atpic, uint8_t val)
302 VATPIC_CTR1(vatpic, "atpic icw2 0x%x", val);
312 vatpic_icw3(struct vatpic *vatpic, struct atpic *atpic, uint8_t val)
314 VATPIC_CTR1(vatpic, "atpic icw3 0x%x", val);
322 vatpic_icw4(struct vatpic *vatpic, struct atpic *atpic, uint8_t val)
324 VATPIC_CTR1(vatpic, "atpic icw4 0x%x", val);
327 VATPIC_CTR0(vatpic, "vatpic microprocessor mode required");
335 if (master_atpic(vatpic, atpic)) {
338 VATPIC_CTR1(vatpic, "Ignoring special fully nested "
350 vatpic_ocw1(struct vatpic *vatpic, struct atpic *atpic, uint8_t val)
352 VATPIC_CTR1(vatpic, "atpic ocw1 0x%x", val);
360 vatpic_ocw2(struct vatpic *vatpic, struct atpic *atpic, uint8_t val)
362 VATPIC_CTR1(vatpic, "atpic ocw2 0x%x", val);
392 vatpic_ocw3(struct vatpic *vatpic, struct atpic *atpic, uint8_t val)
394 VATPIC_CTR1(vatpic, "atpic ocw3 0x%x", val);
398 VATPIC_CTR2(vatpic, "%s atpic special mask mode %s",
399 master_atpic(vatpic, atpic) ? "master" : "slave",
415 vatpic_set_pinstate(struct vatpic *vatpic, int pin, bool newstate)
423 KASSERT(VATPIC_LOCKED(vatpic),
424 ("vatpic_set_pinstate: vatpic is not locked"));
426 atpic = &vatpic->atpic[pin >> 3];
436 VATPIC_CTR2(vatpic, "atpic pin%d: bad acnt %d", pin, newcnt);
439 level = ((vatpic->elc[pin >> 3] & (1 << (pin & 0x7))) != 0);
443 VATPIC_CTR1(vatpic, "atpic pin%d: asserted", pin);
447 VATPIC_CTR1(vatpic, "atpic pin%d: deasserted", pin);
451 VATPIC_CTR3(vatpic, "atpic pin%d: %s, ignored, acnt %d",
455 vatpic_notify_intr(vatpic);
461 struct vatpic *vatpic;
467 vatpic = vm_atpic(vm);
468 atpic = &vatpic->atpic[irq >> 3];
473 VATPIC_LOCK(vatpic);
476 vatpic_set_pinstate(vatpic, irq, true);
479 vatpic_set_pinstate(vatpic, irq, false);
482 vatpic_set_pinstate(vatpic, irq, true);
483 vatpic_set_pinstate(vatpic, irq, false);
488 VATPIC_UNLOCK(vatpic);
514 struct vatpic *vatpic;
534 vatpic = vm_atpic(vm);
536 VATPIC_LOCK(vatpic);
539 vatpic->elc[irq >> 3] |= 1 << (irq & 0x7);
541 vatpic->elc[irq >> 3] &= ~(1 << (irq & 0x7));
543 VATPIC_UNLOCK(vatpic);
551 struct vatpic *vatpic;
555 vatpic = vm_atpic(vm);
557 atpic = &vatpic->atpic[0];
559 VATPIC_LOCK(vatpic);
563 atpic = &vatpic->atpic[1];
577 VATPIC_UNLOCK(vatpic);
599 struct vatpic *vatpic;
602 vatpic = vm_atpic(vm);
604 VATPIC_LOCK(vatpic);
608 if ((vector & ~0x7) == vatpic->atpic[1].irq_base) {
609 vatpic_pin_accepted(&vatpic->atpic[1], pin);
614 vatpic_pin_accepted(&vatpic->atpic[0], 2);
616 vatpic_pin_accepted(&vatpic->atpic[0], pin);
619 vatpic_notify_intr(vatpic);
621 VATPIC_UNLOCK(vatpic);
625 vatpic_read(struct vatpic *vatpic, struct atpic *atpic, bool in, int port,
630 VATPIC_LOCK(vatpic);
656 VATPIC_UNLOCK(vatpic);
663 vatpic_write(struct vatpic *vatpic, struct atpic *atpic, bool in, int port,
672 VATPIC_LOCK(vatpic);
677 error = vatpic_icw2(vatpic, atpic, val);
680 error = vatpic_icw3(vatpic, atpic, val);
683 error = vatpic_icw4(vatpic, atpic, val);
686 error = vatpic_ocw1(vatpic, atpic, val);
691 error = vatpic_icw1(vatpic, atpic, val);
695 error = vatpic_ocw3(vatpic, atpic, val);
697 error = vatpic_ocw2(vatpic, atpic, val);
702 vatpic_notify_intr(vatpic);
704 VATPIC_UNLOCK(vatpic);
713 struct vatpic *vatpic;
716 vatpic = vm_atpic(vm);
717 atpic = &vatpic->atpic[0];
723 return (vatpic_read(vatpic, atpic, in, port, bytes, eax));
726 return (vatpic_write(vatpic, atpic, in, port, bytes, eax));
733 struct vatpic *vatpic;
736 vatpic = vm_atpic(vm);
737 atpic = &vatpic->atpic[1];
743 return (vatpic_read(vatpic, atpic, in, port, bytes, eax));
746 return (vatpic_write(vatpic, atpic, in, port, bytes, eax));
753 struct vatpic *vatpic;
756 vatpic = vm_atpic(vm);
762 VATPIC_LOCK(vatpic);
766 *eax = vatpic->elc[0];
768 *eax = vatpic->elc[1];
781 vatpic->elc[0] = (*eax & 0xf8);
783 vatpic->elc[1] = (*eax & 0xde);
786 VATPIC_UNLOCK(vatpic);
791 struct vatpic *
794 struct vatpic *vatpic;
796 vatpic = malloc(sizeof(struct vatpic), M_VATPIC, M_WAITOK | M_ZERO);
797 vatpic->vm = vm;
799 mtx_init(&vatpic->mtx, "vatpic lock", NULL, MTX_SPIN);
801 return (vatpic);
805 vatpic_cleanup(struct vatpic *vatpic)
807 free(vatpic, M_VATPIC);