KVM: arm64: vgic-its: Implement basic ITS register handlers
Add emulation for some basic MMIO registers used in the ITS emulation. This includes: - GITS_{CTLR,TYPER,IIDR} - ID registers - GITS_{CBASER,CREADR,CWRITER} (which implement the ITS command buffer handling) - GITS_BASER<n> Most of the handlers are pretty straight forward, only the CWRITER handler is a bit more involved by taking the new its_cmd mutex and then iterating over the command buffer. The registers holding base addresses and attributes are sanitised before storing them. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Marc Zyngier <marc.zyngier@arm.com> Tested-by: Eric Auger <eric.auger@redhat.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
This commit is contained in:

committed by
Marc Zyngier

parent
1085fdc68c
commit
424c33830f
@@ -22,6 +22,7 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/types.h>
|
||||
#include <kvm/iodev.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
#define VGIC_V3_MAX_CPUS 255
|
||||
#define VGIC_V2_MAX_CPUS 8
|
||||
@@ -136,6 +137,21 @@ struct vgic_its {
|
||||
bool enabled;
|
||||
bool initialized;
|
||||
struct vgic_io_device iodev;
|
||||
|
||||
/* These registers correspond to GITS_BASER{0,1} */
|
||||
u64 baser_device_table;
|
||||
u64 baser_coll_table;
|
||||
|
||||
/* Protects the command queue */
|
||||
struct mutex cmd_lock;
|
||||
u64 cbaser;
|
||||
u32 creadr;
|
||||
u32 cwriter;
|
||||
|
||||
/* Protects the device and collection lists */
|
||||
struct mutex its_lock;
|
||||
struct list_head device_list;
|
||||
struct list_head collection_list;
|
||||
};
|
||||
|
||||
struct vgic_dist {
|
||||
|
Reference in New Issue
Block a user