HV: remove IRQSTATE_ASSERT/IRQSTATE_DEASSERT/IRQSTATE_PULSE

- replace vpic/vioapic_xassert_irq() APIs
      with vpic/vioapic_set_irq()

   - unify the description of IRQ/PIN state in vpic. & vioapic.c

Tracked-On: #861
Signed-off-by: Yonghua Huang <yonghua.huang@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Yonghua Huang
2018-09-28 00:22:18 +08:00
committed by Wang, Minxia
parent 9df8790ffc
commit 9a05fbea78
7 changed files with 51 additions and 138 deletions

View File

@@ -120,21 +120,16 @@ vioapic_set_pinstate(struct acrn_vioapic *vioapic, uint32_t pin, bool newstate)
}
}
enum irqstate {
IRQSTATE_ASSERT,
IRQSTATE_DEASSERT,
IRQSTATE_PULSE
};
/**
* @pre irq < vioapic_pincount(vm)
* @pre irqstate value shall be one of the folllowing values:
* IRQSTATE_ASSERT
* IRQSTATE_DEASSERT
* IRQSTATE_PULSE
* @pre operation value shall be one of the folllowing values:
* GSI_SET_HIGH
* GSI_SET_LOW
* GSI_RAISING_PULSE
* GSI_FALLING_PULSE
*/
static void
vioapic_set_irqstate(struct vm *vm, uint32_t irq, enum irqstate irqstate)
void
vioapic_set_irq(struct vm *vm, uint32_t irq, uint32_t operation)
{
struct acrn_vioapic *vioapic;
uint32_t pin = irq;
@@ -142,44 +137,30 @@ vioapic_set_irqstate(struct vm *vm, uint32_t irq, enum irqstate irqstate)
vioapic = vm_ioapic(vm);
spinlock_obtain(&(vioapic->mtx));
switch (irqstate) {
case IRQSTATE_ASSERT:
switch (operation) {
case GSI_SET_HIGH:
vioapic_set_pinstate(vioapic, pin, true);
break;
case IRQSTATE_DEASSERT:
case GSI_SET_LOW:
vioapic_set_pinstate(vioapic, pin, false);
break;
case IRQSTATE_PULSE:
case GSI_RAISING_PULSE:
vioapic_set_pinstate(vioapic, pin, true);
vioapic_set_pinstate(vioapic, pin, false);
break;
case GSI_FALLING_PULSE:
vioapic_set_pinstate(vioapic, pin, false);
vioapic_set_pinstate(vioapic, pin, true);
break;
default:
/*
* The function caller could guarantee the pre condition.
* All the possible 'irqstate' has been handled in prior cases.
*/
break;
}
spinlock_release(&(vioapic->mtx));
}
void
vioapic_assert_irq(struct vm *vm, uint32_t irq)
{
vioapic_set_irqstate(vm, irq, IRQSTATE_ASSERT);
}
void vioapic_deassert_irq(struct vm *vm, uint32_t irq)
{
vioapic_set_irqstate(vm, irq, IRQSTATE_DEASSERT);
}
void
vioapic_pulse_irq(struct vm *vm, uint32_t irq)
{
vioapic_set_irqstate(vm, irq, IRQSTATE_PULSE);
}
/*
* Reset the vlapic's trigger-mode register to reflect the ioapic pin
* configuration.