[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [Qemu-devel] [PATCH 11/15] piix3: introduce register_set_irq and register_map_irq
On Thu, Aug 12, 2010 at 2:09 PM, <stefano.stabellini@xxxxxxxxxxxxx> wrote: > From: Anthony PERARD <anthony.perard@xxxxxxxxxx> > > This patch introduces a generic function registration mechanism for > set_irq and map_irq in piix3, so that the two calls can be > overridden with platform specific functions whenever needed. > The patch also implements and registers the Xen specific version of the > functions. I'd avoid the registration, see my comments for the other registration patch. > > Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > --- > Âhw/pc.h       |  Â3 +++ > Âhw/piix_pci.c    |  17 ++++++++++++++++- > Âhw/xen_machine_fv.c |  14 ++++++++++++++ > Â3 files changed, 33 insertions(+), 1 deletions(-) > > diff --git a/hw/pc.h b/hw/pc.h > index 63b0249..ee562cd 100644 > --- a/hw/pc.h > +++ b/hw/pc.h > @@ -5,6 +5,7 @@ > Â#include "ioport.h" > Â#include "isa.h" > Â#include "fdc.h" > +#include "pci.h" > > Â/* PC-style peripherals (also used by other machines). Â*/ > > @@ -138,6 +139,8 @@ int pcspk_audio_init(qemu_irq *pic); > Âstruct PCII440FXState; > Âtypedef struct PCII440FXState PCII440FXState; > > +void piix3_register_set_irq(pci_set_irq_fn set_irq); > +void piix3_register_map_irq(pci_map_irq_fn map_irq); > ÂPCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn, > qemu_irq *pic, ram_addr_t ram_size); > Âvoid i440fx_init_memory_mappings(PCII440FXState *d); > > diff --git a/hw/piix_pci.c b/hw/piix_pci.c > index f152a0f..56e3f61 100644 > --- a/hw/piix_pci.c > +++ b/hw/piix_pci.c > @@ -55,6 +55,21 @@ struct PCII440FXState { > Â#define I440FX_SMRAM  Â0x72 > > Âstatic void piix3_set_irq(void *opaque, int irq_num, int level); > +static int pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num); > + > +static pci_set_irq_fn piix3_set_irq_handler = piix3_set_irq; > +static pci_map_irq_fn piix3_map_irq_handler = pci_slot_get_pirq; > + > +/* Must be called before call i440fx_init() */ > +void piix3_register_set_irq(pci_set_irq_fn set_irq) > +{ > +  Âpiix3_set_irq_handler = set_irq; > +} > + > +void piix3_register_map_irq(pci_map_irq_fn map_irq) > +{ > +  Âpiix3_map_irq_handler = map_irq; > +} > > Â/* return the global irq number corresponding to a given device irq >  Âpin. We could also use the bus number to have a more precise > @@ -235,7 +250,7 @@ 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); > +  Âpci_bus_irqs(b, piix3_set_irq_handler, piix3_map_irq_handler, piix3, 4); >   (*pi440fx_state)->piix3 = piix3; > >   *piix3_devfn = piix3->dev.devfn; > diff --git a/hw/xen_machine_fv.c b/hw/xen_machine_fv.c > index 58237d6..5d553b6 100644 > --- a/hw/xen_machine_fv.c > +++ b/hw/xen_machine_fv.c > @@ -50,6 +50,18 @@ static void xen_vm_change_state_handler(void *opaque, int > running, int reason) >     xen_main_loop_prepare(); > Â} > > +static int xen_piix3_map_irq(PCIDevice *pci_dev, int irq_num) > +{ > +  Âreturn irq_num + ((pci_dev->devfn >> 3) << 2); > +} > + > +static 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); > +} > + > + > Âstatic void xen_init_fv(ram_addr_t ram_size, >             const char *boot_device, >             const char *kernel_filename, > @@ -126,6 +138,8 @@ static void xen_init_fv(ram_addr_t ram_size, > >   isa_irq = qemu_allocate_irqs(isa_irq_handler, isa_irq_state, 24); > > +  Âpiix3_register_set_irq(xen_piix3_set_irq); > +  Âpiix3_register_map_irq(xen_piix3_map_irq); >   pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, isa_irq, ram_size); >   isa_bus_irqs(isa_irq); > > -- > 1.7.0.4 > > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |