From: Anthony Liguori <anthony@codemonkey.ws>
To: anthony.perard@citrix.com
Cc: Xen Devel <xen-devel@lists.xensource.com>,
QEMU-devel <qemu-devel@nongnu.org>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [Qemu-devel] [PATCH V10 07/15] piix_pci: Introduces Xen specific call for irq.
Date: Thu, 24 Feb 2011 11:34:59 -0600 [thread overview]
Message-ID: <4D6696C3.6000101@codemonkey.ws> (raw)
In-Reply-To: <1296658172-16609-8-git-send-email-anthony.perard@citrix.com>
On 02/02/2011 08:49 AM, anthony.perard@citrix.com wrote:
> From: Anthony PERARD<anthony.perard@citrix.com>
>
> 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@citrix.com>
> Signed-off-by: Stefano Stabellini<stefano.stabellini@eu.citrix.com>
> Acked-by: Alexander Graf<agraf@suse.de>
> ---
> hw/piix_pci.c | 28 ++++++++++++++++++++++++++--
> hw/xen.h | 6 ++++++
> xen-all.c | 31 +++++++++++++++++++++++++++++++
> xen-stub.c | 13 +++++++++++++
> 4 files changed, 76 insertions(+), 2 deletions(-)
>
> diff --git a/hw/piix_pci.c b/hw/piix_pci.c
> index 358da58..152fcc0 100644
> --- a/hw/piix_pci.c
> +++ b/hw/piix_pci.c
> @@ -29,6 +29,7 @@
> #include "isa.h"
> #include "sysbus.h"
> #include "range.h"
> +#include "xen.h"
>
> /*
> * I440FX chipset data sheet.
> @@ -151,6 +152,13 @@ static void i440fx_write_config(PCIDevice *dev,
> }
> }
>
> +static void i440fx_write_config_xen(PCIDevice *dev,
> + uint32_t address, uint32_t val, int len)
> +{
> + xen_piix_pci_write_config_client(address, val, len);
> + i440fx_write_config(dev, address, val, len);
> +}
> +
> static int i440fx_load_old(QEMUFile* f, void *opaque, int version_id)
> {
> PCII440FXState *d = opaque;
> @@ -230,13 +238,21 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix3_devfn, qemu_irq *
> s->bus = b;
> qdev_init_nofail(dev);
>
> - d = pci_create_simple(b, 0, "i440FX");
> + if (xen_enabled()) {
> + d = pci_create_simple(b, 0, "i440FX-xen");
> + } else {
> + d = pci_create_simple(b, 0, "i440FX");
>
We don't really want to have a device that magically becomes another
device if Xen is enabled.
You should introduce an i440fx_xen_init() and make enough of the code
common here to simply it. We don't want to have if (xen_enabled())'s
sprinkled through the device model.
Regards,
Anthony Liguori
> + }
> *pi440fx_state = DO_UPCAST(PCII440FXState, dev, d);
>
> 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;
> @@ -352,6 +368,14 @@ static PCIDeviceInfo i440fx_info[] = {
> .init = i440fx_initfn,
> .config_write = i440fx_write_config,
> },{
> + .qdev.name = "i440FX-xen",
> + .qdev.desc = "Host bridge",
> + .qdev.size = sizeof(PCII440FXState),
> + .qdev.vmsd =&vmstate_i440fx,
> + .qdev.no_user = 1,
> + .init = i440fx_initfn,
> + .config_write = i440fx_write_config_xen,
> + },{
> .qdev.name = "PIIX3",
> .qdev.desc = "ISA bridge",
> .qdev.size = sizeof(PIIX3State),
> diff --git a/hw/xen.h b/hw/xen.h
> index 53a2ca4..2a53f8b 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)
> @@ -29,6 +31,10 @@ static inline int xen_enabled(void)
> #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);
> +
> void pci_xen_platform_init(PCIBus *bus);
>
> int xen_init(int smp_cpus);
> diff --git a/xen-all.c b/xen-all.c
> index 8d77d42..123decb 100644
> --- a/xen-all.c
> +++ b/xen-all.c
> @@ -8,9 +8,40 @@
>
> #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)
> +{
> + int i;
> +
> + /* Scan for updates to PCI link routes (0x60-0x63). */
> + for (i = 0; i< len; i++) {
> + uint8_t v = (val>> (8 * i))& 0xff;
> + if (v& 0x80) {
> + v = 0;
> + }
> + v&= 0xf;
> + if (((address + i)>= 0x60)&& ((address + i)<= 0x63)) {
> + 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 a6d5850..ba95537 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)
> +{
> +}
> +
> void pci_xen_platform_init(PCIBus *bus)
> {
> }
>
next prev parent reply other threads:[~2011-02-24 17:37 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-02 14:49 [Qemu-devel] [PATCH V10 00/15] Xen device model support anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 01/15] xen: Replace some tab-indents with spaces (clean-up) anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-24 16:06 ` [Qemu-devel] " Anthony Liguori
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 02/15] xen: Make xen build only on x86 target anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-24 16:11 ` [Qemu-devel] " Anthony Liguori
2011-02-24 16:25 ` [Xen-devel] " Anthony PERARD
2011-02-24 16:25 ` Anthony PERARD
2011-02-24 17:27 ` [Xen-devel] " Anthony Liguori
2011-02-24 17:27 ` Anthony Liguori
2011-02-24 17:46 ` [Xen-devel] " Jan Kiszka
2011-02-24 17:46 ` Jan Kiszka
2011-02-24 17:59 ` [Xen-devel] " Anthony Liguori
2011-02-24 17:59 ` Anthony Liguori
2011-03-11 6:20 ` [Xen-devel] " Alexander Graf
2011-03-11 6:20 ` Alexander Graf
2011-03-11 11:15 ` [Xen-devel] " Stefano Stabellini
2011-03-11 11:15 ` Stefano Stabellini
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 03/15] xen: Support new libxc calls from xen unstable anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-24 17:29 ` [Qemu-devel] " Anthony Liguori
2011-02-25 14:06 ` [Xen-devel] " Anthony PERARD
2011-02-25 14:06 ` Anthony PERARD
2011-02-25 14:11 ` [Xen-devel] " Anthony Liguori
2011-02-25 14:11 ` Anthony Liguori
2011-02-25 16:01 ` [Xen-devel] " Anthony PERARD
2011-02-25 16:01 ` Anthony PERARD
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 04/15] xen: Add initialisation of Xen anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 05/15] xen: Add xenfv machine anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-24 17:31 ` [Qemu-devel] " Anthony Liguori
2011-02-25 13:55 ` Anthony PERARD
2011-02-25 14:09 ` Anthony Liguori
2011-02-25 14:28 ` [Xen-devel] " Anthony PERARD
2011-02-25 14:28 ` Anthony PERARD
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 06/15] xen: Add the Xen platform pci device anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-24 17:33 ` [Qemu-devel] " Anthony Liguori
2011-02-24 17:36 ` Paolo Bonzini
2011-02-25 9:58 ` [Xen-devel] " Ian Campbell
2011-02-25 9:58 ` Ian Campbell
2011-02-25 10:54 ` Paolo Bonzini
2011-02-25 10:54 ` Paolo Bonzini
2011-02-25 14:18 ` [Xen-devel] " Anthony PERARD
2011-02-25 14:18 ` Anthony PERARD
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 07/15] piix_pci: Introduces Xen specific call for irq anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-24 17:34 ` Anthony Liguori [this message]
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 08/15] xen: Introduce Xen Interrupt Controller anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 09/15] xen: Introduce the Xen mapcache anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 10/15] configure: Always use 64bits target physical addresses with xen enabled anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 11/15] Introduce qemu_put_ram_ptr anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 12/15] vl.c: Introduce getter for shutdown_requested and reset_requested anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 13/15] xen: Initialize event channels and io rings anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 14/15] xen: Set running state in xenstore anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-02 14:49 ` [Qemu-devel] [PATCH V10 15/15] xen: Add Xen hypercall for sleep state in the cmos_s3 callback anthony.perard
2011-02-02 14:49 ` anthony.perard
2011-02-24 17:38 ` [Qemu-devel] [PATCH V10 00/15] Xen device model support Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D6696C3.6000101@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=anthony.perard@citrix.com \
--cc=qemu-devel@nongnu.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.