[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


  • To: stefano.stabellini@xxxxxxxxxxxxx
  • From: Blue Swirl <blauwirbel@xxxxxxxxx>
  • Date: Thu, 12 Aug 2010 18:44:42 +0000
  • Cc: Anthony.Perard@xxxxxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxx, qemu-devel@xxxxxxxxxx
  • Delivery-date: Thu, 12 Aug 2010 11:45:42 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; b=CjXbY2By42eVnNHBb6y8AZEs0uXhpEwFZvfHbKe0UuTpMBRIgjXH1PIfdPuA2/cHuh uvVYVCOOlhE5v5QqPcblIGWZm2HD9K2/8i4nAQpwIKAMeQ2xKXdKuOpQ0zI7KXMv4u3Y as+YP30DdyWSR7e9B8IxjhL0s3bec+OLDNBlc=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.