hw/intc/arm_gicv3: Add new gicv3_intid_is_special() function
The GICv3/v4 pseudocode has a function IsSpecial() which returns true if passed a "special" interrupt ID number (anything between 1020 and 1023 inclusive). We open-code this condition in a couple of places, so abstract it out into a new function gicv3_intid_is_special(). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Marc Zyngier <maz@kernel.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
This commit is contained in:
parent
101f27f3c8
commit
b74d7c0e50
@ -997,7 +997,7 @@ static uint64_t icc_iar0_read(CPUARMState *env, const ARMCPRegInfo *ri)
|
||||
intid = icc_hppir0_value(cs, env);
|
||||
}
|
||||
|
||||
if (!(intid >= INTID_SECURE && intid <= INTID_SPURIOUS)) {
|
||||
if (!gicv3_intid_is_special(intid)) {
|
||||
icc_activate_irq(cs, intid);
|
||||
}
|
||||
|
||||
@ -1020,7 +1020,7 @@ static uint64_t icc_iar1_read(CPUARMState *env, const ARMCPRegInfo *ri)
|
||||
intid = icc_hppir1_value(cs, env);
|
||||
}
|
||||
|
||||
if (!(intid >= INTID_SECURE && intid <= INTID_SPURIOUS)) {
|
||||
if (!gicv3_intid_is_special(intid)) {
|
||||
icc_activate_irq(cs, intid);
|
||||
}
|
||||
|
||||
|
@ -411,6 +411,19 @@ FIELD(MAPC, RDBASE, 16, 32)
|
||||
|
||||
/* Functions internal to the emulated GICv3 */
|
||||
|
||||
/**
|
||||
* gicv3_intid_is_special:
|
||||
* @intid: interrupt ID
|
||||
*
|
||||
* Return true if @intid is a special interrupt ID (1020 to
|
||||
* 1023 inclusive). This corresponds to the GIC spec pseudocode
|
||||
* IsSpecial() function.
|
||||
*/
|
||||
static inline bool gicv3_intid_is_special(int intid)
|
||||
{
|
||||
return intid >= INTID_SECURE && intid <= INTID_SPURIOUS;
|
||||
}
|
||||
|
||||
/**
|
||||
* gicv3_redist_update:
|
||||
* @cs: GICv3CPUState for this redistributor
|
||||
|
Loading…
Reference in New Issue
Block a user