mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 09:43:56 -06:00
hw/intc/arm_gicv3_its: Implement MOVALL
Implement the ITS MOVALL command, which takes all the pending interrupts on a source redistributor and makes the not-pending on that source redistributor and pending on a destination redistributor. This is a GICv3 ITS command which we forgot to implement. (It is not used by Linux guests.) Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20220122182444.724087-14-peter.maydell@linaro.org
This commit is contained in:
parent
8b8bb0146b
commit
f6d1d9b407
3 changed files with 125 additions and 0 deletions
|
@ -324,6 +324,7 @@ FIELD(GITS_TYPER, CIL, 36, 1)
|
|||
#define GITS_CMD_MAPI 0x0B
|
||||
#define GITS_CMD_INV 0x0C
|
||||
#define GITS_CMD_INVALL 0x0D
|
||||
#define GITS_CMD_MOVALL 0x0E
|
||||
#define GITS_CMD_DISCARD 0x0F
|
||||
|
||||
/* MAPC command fields */
|
||||
|
@ -355,6 +356,10 @@ FIELD(MAPC, RDBASE, 16, 32)
|
|||
#define L2_TABLE_VALID_MASK CMD_FIELD_VALID_MASK
|
||||
#define TABLE_ENTRY_VALID_MASK (1ULL << 0)
|
||||
|
||||
/* MOVALL command fields */
|
||||
FIELD(MOVALL_2, RDBASE1, 16, 36)
|
||||
FIELD(MOVALL_3, RDBASE2, 16, 36)
|
||||
|
||||
/*
|
||||
* 12 bytes Interrupt translation Table Entry size
|
||||
* as per Table 5.3 in GICv3 spec
|
||||
|
@ -497,6 +502,17 @@ void gicv3_redist_update_lpi(GICv3CPUState *cs);
|
|||
* an incoming migration has loaded new state.
|
||||
*/
|
||||
void gicv3_redist_update_lpi_only(GICv3CPUState *cs);
|
||||
/**
|
||||
* gicv3_redist_movall_lpis:
|
||||
* @src: source redistributor
|
||||
* @dest: destination redistributor
|
||||
*
|
||||
* Scan the LPI pending table for @src, and for each pending LPI there
|
||||
* mark it as not-pending for @src and pending for @dest, as required
|
||||
* by the ITS MOVALL command.
|
||||
*/
|
||||
void gicv3_redist_movall_lpis(GICv3CPUState *src, GICv3CPUState *dest);
|
||||
|
||||
void gicv3_redist_send_sgi(GICv3CPUState *cs, int grp, int irq, bool ns);
|
||||
void gicv3_init_cpuif(GICv3State *s);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue