mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-13 04:50:07 +00:00
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:
committed by
Wang, Minxia
parent
9df8790ffc
commit
9a05fbea78
@@ -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.
|
||||
|
Reference in New Issue
Block a user