[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.


  • To: anthony.perard@xxxxxxxxxx
  • From: Blue Swirl <blauwirbel@xxxxxxxxx>
  • Date: Fri, 17 Sep 2010 18:10:03 +0000
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxx, qemu-devel@xxxxxxxxxx, Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
  • Delivery-date: Fri, 17 Sep 2010 11:10:56 -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=RoOonqDmdbCbGstvYZ7U+qycKbIZDOQ4a/LZWFfjXhJAHRDT9bw5CnV/3zwrxLgA1g kN8e3UvEmDk1+xywZOsFr8d9ZJfvo+4ILYmZkf68nyU17y+vEXu2MDEad0nMLtRWklGx k/y8M4ILjRuxZVvE/uarx9c6CKqr2Y/N+sxOg=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

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


 


Rackspace

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