mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
KVM: arm/arm64: vgic-new: Add MMIO handling framework
Add an MMIO handling framework to the VGIC emulation: Each register is described by its offset, size (or number of bits per IRQ, if applicable) and the read/write handler functions. We provide initialization macros to describe each GIC register later easily. Separate dispatch functions for read and write accesses are connected to the kvm_io_bus framework and binary-search for the responsible register handler based on the offset address within the region. We convert the incoming data (referenced by a pointer) to the host's endianess and use pass-by-value to hand the data over to the actual handler functions. The register handler prototype and the endianess conversion are courtesy of Christoffer Dall. Signed-off-by: Marc Zyngier <[email protected]> Signed-off-by: Christoffer Dall <[email protected]> Signed-off-by: Andre Przywara <[email protected]> Reviewed-by: Christoffer Dall <[email protected]>
This commit is contained in:
parent
90eee56c5f
commit
4493b1c486
3 changed files with 296 additions and 0 deletions
|
|
@ -106,6 +106,16 @@ struct vgic_irq {
|
|||
enum vgic_irq_config config; /* Level or edge */
|
||||
};
|
||||
|
||||
struct vgic_register_region;
|
||||
|
||||
struct vgic_io_device {
|
||||
gpa_t base_addr;
|
||||
struct kvm_vcpu *redist_vcpu;
|
||||
const struct vgic_register_region *regions;
|
||||
int nr_regions;
|
||||
struct kvm_io_device dev;
|
||||
};
|
||||
|
||||
struct vgic_dist {
|
||||
bool in_kernel;
|
||||
bool ready;
|
||||
|
|
@ -132,6 +142,9 @@ struct vgic_dist {
|
|||
bool enabled;
|
||||
|
||||
struct vgic_irq *spis;
|
||||
|
||||
struct vgic_io_device dist_iodev;
|
||||
struct vgic_io_device *redist_iodevs;
|
||||
};
|
||||
|
||||
struct vgic_v2_cpu_if {
|
||||
|
|
|
|||
Loading…
Reference in a new issue