WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [Qemu-devel] [PATCH RFC V3 05/12] piix_pci: Introduces X

To: anthony.perard@xxxxxxxxxx
Subject: [Xen-devel] Re: [Qemu-devel] [PATCH RFC V3 05/12] piix_pci: Introduces Xen specific call for irq.
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
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:in-reply-to :references:from:date:message-id:subject:to:cc:content-type :content-transfer-encoding; bh=n9lAM7WZgaa8RPEKxxmFEsGfshaWLfRDbvCQXeXPFj4=; b=WO2Q/Ver5dwPqONoiUz4TeWG6fImKjTRlVbqOUz7+zqT/lIOqs63AA+ft3k2Yxt1Rs IpC7Ti4fYgJKySrWZmdzSe0oeJvn3+z937Z92Nkau1rZetsRkU0ctGMV7E0jtG53Ck1t LBJD1lkxl6f1sRj1lr9IPvpMklYxIBPP5tff4=
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=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1284722107-28550-6-git-send-email-anthony.perard@xxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1284722107-28550-1-git-send-email-anthony.perard@xxxxxxxxxx> <1284722107-28550-6-git-send-email-anthony.perard@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
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

<Prev in Thread] Current Thread [Next in Thread>