[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [Qemu-devel] [PATCH RFC V3 05/12] piix_pci: Introduces Xen specific call for irq.
On Fri, Sep 17, 2010 at 11:15 AM, <anthony.perard@xxxxxxxxxx> wrote: > From: Anthony PERARD <anthony.perard@xxxxxxxxxx> > > This patch introduces Xen specific call in piix_pci. > > The specific part for Xen is in write_config, set_irq and get_pirq. > > Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > --- > Âhw/piix_pci.c |  10 +++++++++- > Âhw/xen.h   Â|  Â6 ++++++ > Âxen-all.c   |  29 +++++++++++++++++++++++++++++ > Âxen-stub.c  Â|  13 +++++++++++++ > Â4 files changed, 57 insertions(+), 1 deletions(-) > > diff --git a/hw/piix_pci.c b/hw/piix_pci.c > index f152a0f..41a342f 100644 > --- a/hw/piix_pci.c > +++ b/hw/piix_pci.c > @@ -28,6 +28,7 @@ > Â#include "pci_host.h" > Â#include "isa.h" > Â#include "sysbus.h" > +#include "xen.h" > > Â/* > Â* I440FX chipset data sheet. > @@ -142,6 +143,9 @@ static void i440fx_write_config(PCIDevice *dev, > Â{ >   PCII440FXState *d = DO_UPCAST(PCII440FXState, dev, dev); > > +  Âif (xen_enabled()) braces > +    Âxen_piix_pci_write_config_client(address, val, len); > + >   /* XXX: implement SMRAM.D_LOCK */ >   pci_default_write_config(dev, address, val, len); >   if (ranges_overlap(address, len, I440FX_PAM, I440FX_PAM_SIZE) || > @@ -235,7 +239,11 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int > *piix3_devfn, qemu_irq * >   piix3 = DO_UPCAST(PIIX3State, dev, >            pci_create_simple_multifunction(b, -1, true, "PIIX3")); >   piix3->pic = pic; > -  Âpci_bus_irqs(b, piix3_set_irq, pci_slot_get_pirq, piix3, 4); > +  Âif (xen_enabled()) { > +    Âpci_bus_irqs(b, xen_piix3_set_irq, xen_pci_slot_get_pirq, piix3, 4); > +  Â} else { > +    Âpci_bus_irqs(b, piix3_set_irq, pci_slot_get_pirq, piix3, 4); > +  Â} >   (*pi440fx_state)->piix3 = piix3; > >   *piix3_devfn = piix3->dev.devfn; > diff --git a/hw/xen.h b/hw/xen.h > index 14bbb6e..c5189b1 100644 > --- a/hw/xen.h > +++ b/hw/xen.h > @@ -8,6 +8,8 @@ > Â*/ > Â#include <inttypes.h> > > +#include "qemu-common.h" > + > Â/* xen-machine.c */ > Âenum xen_mode { >   XEN_EMULATE = 0, Â// xen emulation, using xenner (default) > @@ -26,6 +28,10 @@ extern int xen_allowed; > Â#define xen_enabled() (0) > Â#endif > > +int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num); > +void xen_piix3_set_irq(void *opaque, int irq_num, int level); > +void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int > len); > + > Âint xen_init(int smp_cpus); > > Â#endif /* QEMU_HW_XEN_H */ > diff --git a/xen-all.c b/xen-all.c > index f505563..948e439 100644 > --- a/xen-all.c > +++ b/xen-all.c > @@ -8,9 +8,38 @@ > > Â#include "config.h" > > +#include "hw/pci.h" > Â#include "hw/xen_common.h" > Â#include "hw/xen_backend.h" > > +/* Xen specific function for piix pci */ > + > +int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num) > +{ > +  Âreturn irq_num + ((pci_dev->devfn >> 3) << 2); > +} > + > +void xen_piix3_set_irq(void *opaque, int irq_num, int level) > +{ > +  Âxc_hvm_set_pci_intx_level(xen_xc, xen_domid, 0, 0, irq_num >> 2, > +               Âirq_num & 3, level); > +} > + > +void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int > len) address should be target_phys_addr_t. > +{ > +  Âint i; > + > +  Â/* Scan for updates to PCI link routes (0x60-0x63). */ > +  Âfor (i = 0; i < len; i++) { > +    Âuint8_t v = (val >> (8*i)) & 0xff; Please add spaces around '*'. > +    Âif (v & 0x80) braces > +      Âv = 0; > +    Âv &= 0xf; > +    Âif (((address+i) >= 0x60) && ((address+i) <= 0x63)) Braces and spaces around '+'. > +      Âxc_hvm_set_pci_link_route(xen_xc, xen_domid, address + i - 0x60, > v); > +  Â} > +} > + > Â/* Initialise Xen */ > > Âint xen_init(int smp_cpus) > diff --git a/xen-stub.c b/xen-stub.c > index 0fa9c51..07e64bc 100644 > --- a/xen-stub.c > +++ b/xen-stub.c > @@ -11,6 +11,19 @@ > Â#include "qemu-common.h" > Â#include "hw/xen.h" > > +int xen_pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num) > +{ > +  Âreturn -1; > +} > + > +void xen_piix3_set_irq(void *opaque, int irq_num, int level) > +{ > +} > + > +void xen_piix_pci_write_config_client(uint32_t address, uint32_t val, int > len) Also here the address should be target_phys_addr_t. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |