Message ID | 1505296004-6798-2-git-send-email-eric.auger@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Sep 13, 2017 at 11:46:42AM +0200, Eric Auger wrote: > From: Pranavkumar Sawargaonkar <pranavkumar@linaro.org> > > To implement INTx to gsi routing we need to pass the gpex host > bridge the gsi associated to each INTx index. Let's introduce > irq_num array and gpex_set_irq_num setter function. > > Signed-off-by: Pranavkumar Sawargaonkar <pranavkumar@linaro.org> > Signed-off-by: Tushar Jagad <tushar.jagad@linaro.org> > Signed-off-by: Eric Auger <eric.auger@redhat.com> > Tested-by: Feng Kan <fkan@apm.com> > > --- > > v3 -> v4: > - use int for gsi > --- > hw/pci-host/gpex.c | 10 ++++++++++ > include/hw/pci-host/gpex.h | 3 +++ > 2 files changed, 13 insertions(+) > > diff --git a/hw/pci-host/gpex.c b/hw/pci-host/gpex.c > index 83084b9..41a884d 100644 > --- a/hw/pci-host/gpex.c > +++ b/hw/pci-host/gpex.c > @@ -43,6 +43,16 @@ static void gpex_set_irq(void *opaque, int irq_num, int level) > qemu_set_irq(s->irq[irq_num], level); > } > > +int gpex_set_irq_num(GPEXHost *s, int index, int gsi) > +{ > + if (index >= GPEX_NUM_IRQS) { > + return -EINVAL; > + } > + > + s->irq_num[index] = gsi; > + return 0; > +} > + > static void gpex_host_realize(DeviceState *dev, Error **errp) > { > PCIHostState *pci = PCI_HOST_BRIDGE(dev); > diff --git a/include/hw/pci-host/gpex.h b/include/hw/pci-host/gpex.h > index 68c9348..aef38b8 100644 > --- a/include/hw/pci-host/gpex.h > +++ b/include/hw/pci-host/gpex.h > @@ -51,6 +51,9 @@ typedef struct GPEXHost { > MemoryRegion io_ioport; > MemoryRegion io_mmio; > qemu_irq irq[GPEX_NUM_IRQS]; > + int irq_num[GPEX_NUM_IRQS]; > } GPEXHost; > > +int gpex_set_irq_num(GPEXHost *s, int index, int gsi); > + > #endif /* HW_GPEX_H */ > -- > 2.5.5 > Reviewed-by: Andrew Jones <drjones@redhat.com>
diff --git a/hw/pci-host/gpex.c b/hw/pci-host/gpex.c index 83084b9..41a884d 100644 --- a/hw/pci-host/gpex.c +++ b/hw/pci-host/gpex.c @@ -43,6 +43,16 @@ static void gpex_set_irq(void *opaque, int irq_num, int level) qemu_set_irq(s->irq[irq_num], level); } +int gpex_set_irq_num(GPEXHost *s, int index, int gsi) +{ + if (index >= GPEX_NUM_IRQS) { + return -EINVAL; + } + + s->irq_num[index] = gsi; + return 0; +} + static void gpex_host_realize(DeviceState *dev, Error **errp) { PCIHostState *pci = PCI_HOST_BRIDGE(dev); diff --git a/include/hw/pci-host/gpex.h b/include/hw/pci-host/gpex.h index 68c9348..aef38b8 100644 --- a/include/hw/pci-host/gpex.h +++ b/include/hw/pci-host/gpex.h @@ -51,6 +51,9 @@ typedef struct GPEXHost { MemoryRegion io_ioport; MemoryRegion io_mmio; qemu_irq irq[GPEX_NUM_IRQS]; + int irq_num[GPEX_NUM_IRQS]; } GPEXHost; +int gpex_set_irq_num(GPEXHost *s, int index, int gsi); + #endif /* HW_GPEX_H */