From: "Durrant, Paul" <pdurrant@amazon.com> To: "Philippe Mathieu-Daudé" <philmd@redhat.com>, "qemu-devel@nongnu.org" <qemu-devel@nongnu.org> Cc: Thomas Huth <thuth@redhat.com>, Stefano Stabellini <sstabellini@kernel.org>, "Michael S. Tsirkin" <mst@redhat.com>, Paul Durrant <paul@xen.org>, Markus Armbruster <armbru@redhat.com>, Alex Williamson <alex.williamson@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Paolo Bonzini <pbonzini@redhat.com>, Anthony Perard <anthony.perard@citrix.com>, "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org> Subject: RE: [Xen-devel] [PATCH-for-5.0 v3 5/6] hw/pci-host/i440fx: Extract the IGD passthrough host bridge device Date: Mon, 9 Dec 2019 10:08:04 +0000 [thread overview] Message-ID: <1a3aea880e2640e88038e77f5bf14a13@EX13D32EUC003.ant.amazon.com> (raw) In-Reply-To: <20191209095002.32194-6-philmd@redhat.com> > -----Original Message----- > From: Xen-devel <xen-devel-bounces@lists.xenproject.org> On Behalf Of > Philippe Mathieu-Daudé > Sent: 09 December 2019 09:50 > To: qemu-devel@nongnu.org > Cc: Thomas Huth <thuth@redhat.com>; Stefano Stabellini > <sstabellini@kernel.org>; Michael S. Tsirkin <mst@redhat.com>; Paul > Durrant <paul@xen.org>; Markus Armbruster <armbru@redhat.com>; Alex > Williamson <alex.williamson@redhat.com>; Marcel Apfelbaum > <marcel.apfelbaum@gmail.com>; Paolo Bonzini <pbonzini@redhat.com>; Anthony > Perard <anthony.perard@citrix.com>; xen-devel@lists.xenproject.org; > Philippe Mathieu-Daudé <philmd@redhat.com> > Subject: [Xen-devel] [PATCH-for-5.0 v3 5/6] hw/pci-host/i440fx: Extract > the IGD passthrough host bridge device > > We can use a i440FX without the IGD passthrough host bridge. > Extract it into a new file, 'hw/pci-host/igd_pt.c'. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Acked-by: Paul Durrant <paul@xen.org> > --- > v3: > - Rename as 'xen_igd_pt.c' (Alex Williamson) > - Add an entry in MAINTAINERS::Xen > --- > hw/pci-host/i440fx.c | 84 -------------------------- > hw/pci-host/xen_igd_pt.c | 120 ++++++++++++++++++++++++++++++++++++++ > MAINTAINERS | 1 + > hw/pci-host/Makefile.objs | 1 + > 4 files changed, 122 insertions(+), 84 deletions(-) > create mode 100644 hw/pci-host/xen_igd_pt.c > > diff --git a/hw/pci-host/i440fx.c b/hw/pci-host/i440fx.c > index 414138595b..bae7b42327 100644 > --- a/hw/pci-host/i440fx.c > +++ b/hw/pci-host/i440fx.c > @@ -368,89 +368,6 @@ static const TypeInfo i440fx_info = { > }, > }; > > -/* IGD Passthrough Host Bridge. */ > -typedef struct { > - uint8_t offset; > - uint8_t len; > -} IGDHostInfo; > - > -/* Here we just expose minimal host bridge offset subset. */ > -static const IGDHostInfo igd_host_bridge_infos[] = { > - {PCI_REVISION_ID, 2}, > - {PCI_SUBSYSTEM_VENDOR_ID, 2}, > - {PCI_SUBSYSTEM_ID, 2}, > - {0x50, 2}, /* SNB: processor graphics control > register */ > - {0x52, 2}, /* processor graphics control register > */ > - {0xa4, 4}, /* SNB: graphics base of stolen memory > */ > - {0xa8, 4}, /* SNB: base of GTT stolen memory */ > -}; > - > -static void host_pci_config_read(int pos, int len, uint32_t *val, Error > **errp) > -{ > - int rc, config_fd; > - /* Access real host bridge. */ > - char *path = > g_strdup_printf("/sys/bus/pci/devices/%04x:%02x:%02x.%d/%s", > - 0, 0, 0, 0, "config"); > - > - config_fd = open(path, O_RDWR); > - if (config_fd < 0) { > - error_setg_errno(errp, errno, "Failed to open: %s", path); > - goto out; > - } > - > - if (lseek(config_fd, pos, SEEK_SET) != pos) { > - error_setg_errno(errp, errno, "Failed to seek: %s", path); > - goto out_close_fd; > - } > - > - do { > - rc = read(config_fd, (uint8_t *)val, len); > - } while (rc < 0 && (errno == EINTR || errno == EAGAIN)); > - if (rc != len) { > - error_setg_errno(errp, errno, "Failed to read: %s", path); > - } > - > -out_close_fd: > - close(config_fd); > -out: > - g_free(path); > -} > - > -static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp) > -{ > - uint32_t val = 0; > - size_t i; > - int pos, len; > - Error *local_err = NULL; > - > - for (i = 0; i < ARRAY_SIZE(igd_host_bridge_infos); i++) { > - pos = igd_host_bridge_infos[i].offset; > - len = igd_host_bridge_infos[i].len; > - host_pci_config_read(pos, len, &val, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > - return; > - } > - pci_default_write_config(pci_dev, pos, val, len); > - } > -} > - > -static void igd_passthrough_i440fx_class_init(ObjectClass *klass, void > *data) > -{ > - DeviceClass *dc = DEVICE_CLASS(klass); > - PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > - > - k->realize = igd_pt_i440fx_realize; > - dc->desc = "IGD Passthrough Host bridge"; > -} > - > -static const TypeInfo igd_passthrough_i440fx_info = { > - .name = TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE, > - .parent = TYPE_I440FX_PCI_DEVICE, > - .instance_size = sizeof(PCII440FXState), > - .class_init = igd_passthrough_i440fx_class_init, > -}; > - > static const char *i440fx_pcihost_root_bus_path(PCIHostState > *host_bridge, > PCIBus *rootbus) > { > @@ -495,7 +412,6 @@ static const TypeInfo i440fx_pcihost_info = { > static void i440fx_register_types(void) > { > type_register_static(&i440fx_info); > - type_register_static(&igd_passthrough_i440fx_info); > type_register_static(&i440fx_pcihost_info); > } > > diff --git a/hw/pci-host/xen_igd_pt.c b/hw/pci-host/xen_igd_pt.c > new file mode 100644 > index 0000000000..efcc9347ff > --- /dev/null > +++ b/hw/pci-host/xen_igd_pt.c > @@ -0,0 +1,120 @@ > +/* > + * QEMU Intel IGD Passthrough Host Bridge Emulation > + * > + * Copyright (c) 2006 Fabrice Bellard > + * > + * SPDX-License-Identifier: MIT > + * > + * Permission is hereby granted, free of charge, to any person obtaining > a copy > + * of this software and associated documentation files (the "Software"), > to deal > + * in the Software without restriction, including without limitation the > rights > + * to use, copy, modify, merge, publish, distribute, sublicense, and/or > sell > + * copies of the Software, and to permit persons to whom the Software is > + * furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be > included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT > SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR > OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > ARISING FROM, > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > IN > + * THE SOFTWARE. > + */ > + > +#include "qemu/osdep.h" > +#include "hw/pci/pci.h" > +#include "hw/pci/pci_host.h" > +#include "hw/pci-host/i440fx.h" > +#include "qapi/error.h" > + > +typedef struct { > + uint8_t offset; > + uint8_t len; > +} IGDHostInfo; > + > +/* Here we just expose minimal host bridge offset subset. */ > +static const IGDHostInfo igd_host_bridge_infos[] = { > + {PCI_REVISION_ID, 2}, > + {PCI_SUBSYSTEM_VENDOR_ID, 2}, > + {PCI_SUBSYSTEM_ID, 2}, > + {0x50, 2}, /* SNB: processor graphics control > register */ > + {0x52, 2}, /* processor graphics control register > */ > + {0xa4, 4}, /* SNB: graphics base of stolen memory > */ > + {0xa8, 4}, /* SNB: base of GTT stolen memory */ > +}; > + > +static void host_pci_config_read(int pos, int len, uint32_t *val, Error > **errp) > +{ > + int rc, config_fd; > + /* Access real host bridge. */ > + char *path = > g_strdup_printf("/sys/bus/pci/devices/%04x:%02x:%02x.%d/%s", > + 0, 0, 0, 0, "config"); > + > + config_fd = open(path, O_RDWR); > + if (config_fd < 0) { > + error_setg_errno(errp, errno, "Failed to open: %s", path); > + goto out; > + } > + > + if (lseek(config_fd, pos, SEEK_SET) != pos) { > + error_setg_errno(errp, errno, "Failed to seek: %s", path); > + goto out_close_fd; > + } > + > + do { > + rc = read(config_fd, (uint8_t *)val, len); > + } while (rc < 0 && (errno == EINTR || errno == EAGAIN)); > + if (rc != len) { > + error_setg_errno(errp, errno, "Failed to read: %s", path); > + } > + > + out_close_fd: > + close(config_fd); > + out: > + g_free(path); > +} > + > +static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp) > +{ > + uint32_t val = 0; > + size_t i; > + int pos, len; > + Error *local_err = NULL; > + > + for (i = 0; i < ARRAY_SIZE(igd_host_bridge_infos); i++) { > + pos = igd_host_bridge_infos[i].offset; > + len = igd_host_bridge_infos[i].len; > + host_pci_config_read(pos, len, &val, &local_err); > + if (local_err) { > + error_propagate(errp, local_err); > + return; > + } > + pci_default_write_config(pci_dev, pos, val, len); > + } > +} > + > +static void igd_passthrough_i440fx_class_init(ObjectClass *klass, void > *data) > +{ > + DeviceClass *dc = DEVICE_CLASS(klass); > + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > + > + k->realize = igd_pt_i440fx_realize; > + dc->desc = "IGD Passthrough Host bridge"; > +} > + > +static const TypeInfo igd_passthrough_i440fx_info = { > + .name = TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE, > + .parent = TYPE_I440FX_PCI_DEVICE, > + .instance_size = sizeof(PCII440FXState), > + .class_init = igd_passthrough_i440fx_class_init, > +}; > + > +static void igd_pt_i440fx_register_types(void) > +{ > + type_register_static(&igd_passthrough_i440fx_info); > +} > + > +type_init(igd_pt_i440fx_register_types) > diff --git a/MAINTAINERS b/MAINTAINERS > index 5e5e3e52d6..62bcf5e94e 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -419,6 +419,7 @@ F: hw/block/dataplane/xen* > F: hw/xen/ > F: hw/xenpv/ > F: hw/i386/xen/ > +F: hw/pci-host/xen_igd_pt.c > F: include/hw/block/dataplane/xen* > F: include/hw/xen/ > F: include/sysemu/xen-mapcache.h > diff --git a/hw/pci-host/Makefile.objs b/hw/pci-host/Makefile.objs > index efd752b766..fa6d1556c0 100644 > --- a/hw/pci-host/Makefile.objs > +++ b/hw/pci-host/Makefile.objs > @@ -14,6 +14,7 @@ common-obj-$(CONFIG_VERSATILE_PCI) += versatile.o > common-obj-$(CONFIG_PCI_SABRE) += sabre.o > common-obj-$(CONFIG_FULONG) += bonito.o > common-obj-$(CONFIG_PCI_I440FX) += i440fx.o > +common-obj-$(CONFIG_PCI_I440FX) += xen_igd_pt.o > common-obj-$(CONFIG_PCI_EXPRESS_Q35) += q35.o > common-obj-$(CONFIG_PCI_EXPRESS_GENERIC_BRIDGE) += gpex.o > common-obj-$(CONFIG_PCI_EXPRESS_XILINX) += xilinx-pcie.o > -- > 2.21.0 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xenproject.org > https://lists.xenproject.org/mailman/listinfo/xen-devel
WARNING: multiple messages have this Message-ID (diff)
From: "Durrant, Paul" <pdurrant@amazon.com> To: "Philippe Mathieu-Daudé" <philmd@redhat.com>, "qemu-devel@nongnu.org" <qemu-devel@nongnu.org> Cc: Thomas Huth <thuth@redhat.com>, Stefano Stabellini <sstabellini@kernel.org>, Paul Durrant <paul@xen.org>, "Michael S. Tsirkin" <mst@redhat.com>, Markus Armbruster <armbru@redhat.com>, Alex Williamson <alex.williamson@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>, Anthony Perard <anthony.perard@citrix.com>, Paolo Bonzini <pbonzini@redhat.com> Subject: Re: [Xen-devel] [PATCH-for-5.0 v3 5/6] hw/pci-host/i440fx: Extract the IGD passthrough host bridge device Date: Mon, 9 Dec 2019 10:08:04 +0000 [thread overview] Message-ID: <1a3aea880e2640e88038e77f5bf14a13@EX13D32EUC003.ant.amazon.com> (raw) In-Reply-To: <20191209095002.32194-6-philmd@redhat.com> > -----Original Message----- > From: Xen-devel <xen-devel-bounces@lists.xenproject.org> On Behalf Of > Philippe Mathieu-Daudé > Sent: 09 December 2019 09:50 > To: qemu-devel@nongnu.org > Cc: Thomas Huth <thuth@redhat.com>; Stefano Stabellini > <sstabellini@kernel.org>; Michael S. Tsirkin <mst@redhat.com>; Paul > Durrant <paul@xen.org>; Markus Armbruster <armbru@redhat.com>; Alex > Williamson <alex.williamson@redhat.com>; Marcel Apfelbaum > <marcel.apfelbaum@gmail.com>; Paolo Bonzini <pbonzini@redhat.com>; Anthony > Perard <anthony.perard@citrix.com>; xen-devel@lists.xenproject.org; > Philippe Mathieu-Daudé <philmd@redhat.com> > Subject: [Xen-devel] [PATCH-for-5.0 v3 5/6] hw/pci-host/i440fx: Extract > the IGD passthrough host bridge device > > We can use a i440FX without the IGD passthrough host bridge. > Extract it into a new file, 'hw/pci-host/igd_pt.c'. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Acked-by: Paul Durrant <paul@xen.org> > --- > v3: > - Rename as 'xen_igd_pt.c' (Alex Williamson) > - Add an entry in MAINTAINERS::Xen > --- > hw/pci-host/i440fx.c | 84 -------------------------- > hw/pci-host/xen_igd_pt.c | 120 ++++++++++++++++++++++++++++++++++++++ > MAINTAINERS | 1 + > hw/pci-host/Makefile.objs | 1 + > 4 files changed, 122 insertions(+), 84 deletions(-) > create mode 100644 hw/pci-host/xen_igd_pt.c > > diff --git a/hw/pci-host/i440fx.c b/hw/pci-host/i440fx.c > index 414138595b..bae7b42327 100644 > --- a/hw/pci-host/i440fx.c > +++ b/hw/pci-host/i440fx.c > @@ -368,89 +368,6 @@ static const TypeInfo i440fx_info = { > }, > }; > > -/* IGD Passthrough Host Bridge. */ > -typedef struct { > - uint8_t offset; > - uint8_t len; > -} IGDHostInfo; > - > -/* Here we just expose minimal host bridge offset subset. */ > -static const IGDHostInfo igd_host_bridge_infos[] = { > - {PCI_REVISION_ID, 2}, > - {PCI_SUBSYSTEM_VENDOR_ID, 2}, > - {PCI_SUBSYSTEM_ID, 2}, > - {0x50, 2}, /* SNB: processor graphics control > register */ > - {0x52, 2}, /* processor graphics control register > */ > - {0xa4, 4}, /* SNB: graphics base of stolen memory > */ > - {0xa8, 4}, /* SNB: base of GTT stolen memory */ > -}; > - > -static void host_pci_config_read(int pos, int len, uint32_t *val, Error > **errp) > -{ > - int rc, config_fd; > - /* Access real host bridge. */ > - char *path = > g_strdup_printf("/sys/bus/pci/devices/%04x:%02x:%02x.%d/%s", > - 0, 0, 0, 0, "config"); > - > - config_fd = open(path, O_RDWR); > - if (config_fd < 0) { > - error_setg_errno(errp, errno, "Failed to open: %s", path); > - goto out; > - } > - > - if (lseek(config_fd, pos, SEEK_SET) != pos) { > - error_setg_errno(errp, errno, "Failed to seek: %s", path); > - goto out_close_fd; > - } > - > - do { > - rc = read(config_fd, (uint8_t *)val, len); > - } while (rc < 0 && (errno == EINTR || errno == EAGAIN)); > - if (rc != len) { > - error_setg_errno(errp, errno, "Failed to read: %s", path); > - } > - > -out_close_fd: > - close(config_fd); > -out: > - g_free(path); > -} > - > -static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp) > -{ > - uint32_t val = 0; > - size_t i; > - int pos, len; > - Error *local_err = NULL; > - > - for (i = 0; i < ARRAY_SIZE(igd_host_bridge_infos); i++) { > - pos = igd_host_bridge_infos[i].offset; > - len = igd_host_bridge_infos[i].len; > - host_pci_config_read(pos, len, &val, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > - return; > - } > - pci_default_write_config(pci_dev, pos, val, len); > - } > -} > - > -static void igd_passthrough_i440fx_class_init(ObjectClass *klass, void > *data) > -{ > - DeviceClass *dc = DEVICE_CLASS(klass); > - PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > - > - k->realize = igd_pt_i440fx_realize; > - dc->desc = "IGD Passthrough Host bridge"; > -} > - > -static const TypeInfo igd_passthrough_i440fx_info = { > - .name = TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE, > - .parent = TYPE_I440FX_PCI_DEVICE, > - .instance_size = sizeof(PCII440FXState), > - .class_init = igd_passthrough_i440fx_class_init, > -}; > - > static const char *i440fx_pcihost_root_bus_path(PCIHostState > *host_bridge, > PCIBus *rootbus) > { > @@ -495,7 +412,6 @@ static const TypeInfo i440fx_pcihost_info = { > static void i440fx_register_types(void) > { > type_register_static(&i440fx_info); > - type_register_static(&igd_passthrough_i440fx_info); > type_register_static(&i440fx_pcihost_info); > } > > diff --git a/hw/pci-host/xen_igd_pt.c b/hw/pci-host/xen_igd_pt.c > new file mode 100644 > index 0000000000..efcc9347ff > --- /dev/null > +++ b/hw/pci-host/xen_igd_pt.c > @@ -0,0 +1,120 @@ > +/* > + * QEMU Intel IGD Passthrough Host Bridge Emulation > + * > + * Copyright (c) 2006 Fabrice Bellard > + * > + * SPDX-License-Identifier: MIT > + * > + * Permission is hereby granted, free of charge, to any person obtaining > a copy > + * of this software and associated documentation files (the "Software"), > to deal > + * in the Software without restriction, including without limitation the > rights > + * to use, copy, modify, merge, publish, distribute, sublicense, and/or > sell > + * copies of the Software, and to permit persons to whom the Software is > + * furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be > included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT > SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR > OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > ARISING FROM, > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > IN > + * THE SOFTWARE. > + */ > + > +#include "qemu/osdep.h" > +#include "hw/pci/pci.h" > +#include "hw/pci/pci_host.h" > +#include "hw/pci-host/i440fx.h" > +#include "qapi/error.h" > + > +typedef struct { > + uint8_t offset; > + uint8_t len; > +} IGDHostInfo; > + > +/* Here we just expose minimal host bridge offset subset. */ > +static const IGDHostInfo igd_host_bridge_infos[] = { > + {PCI_REVISION_ID, 2}, > + {PCI_SUBSYSTEM_VENDOR_ID, 2}, > + {PCI_SUBSYSTEM_ID, 2}, > + {0x50, 2}, /* SNB: processor graphics control > register */ > + {0x52, 2}, /* processor graphics control register > */ > + {0xa4, 4}, /* SNB: graphics base of stolen memory > */ > + {0xa8, 4}, /* SNB: base of GTT stolen memory */ > +}; > + > +static void host_pci_config_read(int pos, int len, uint32_t *val, Error > **errp) > +{ > + int rc, config_fd; > + /* Access real host bridge. */ > + char *path = > g_strdup_printf("/sys/bus/pci/devices/%04x:%02x:%02x.%d/%s", > + 0, 0, 0, 0, "config"); > + > + config_fd = open(path, O_RDWR); > + if (config_fd < 0) { > + error_setg_errno(errp, errno, "Failed to open: %s", path); > + goto out; > + } > + > + if (lseek(config_fd, pos, SEEK_SET) != pos) { > + error_setg_errno(errp, errno, "Failed to seek: %s", path); > + goto out_close_fd; > + } > + > + do { > + rc = read(config_fd, (uint8_t *)val, len); > + } while (rc < 0 && (errno == EINTR || errno == EAGAIN)); > + if (rc != len) { > + error_setg_errno(errp, errno, "Failed to read: %s", path); > + } > + > + out_close_fd: > + close(config_fd); > + out: > + g_free(path); > +} > + > +static void igd_pt_i440fx_realize(PCIDevice *pci_dev, Error **errp) > +{ > + uint32_t val = 0; > + size_t i; > + int pos, len; > + Error *local_err = NULL; > + > + for (i = 0; i < ARRAY_SIZE(igd_host_bridge_infos); i++) { > + pos = igd_host_bridge_infos[i].offset; > + len = igd_host_bridge_infos[i].len; > + host_pci_config_read(pos, len, &val, &local_err); > + if (local_err) { > + error_propagate(errp, local_err); > + return; > + } > + pci_default_write_config(pci_dev, pos, val, len); > + } > +} > + > +static void igd_passthrough_i440fx_class_init(ObjectClass *klass, void > *data) > +{ > + DeviceClass *dc = DEVICE_CLASS(klass); > + PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > + > + k->realize = igd_pt_i440fx_realize; > + dc->desc = "IGD Passthrough Host bridge"; > +} > + > +static const TypeInfo igd_passthrough_i440fx_info = { > + .name = TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE, > + .parent = TYPE_I440FX_PCI_DEVICE, > + .instance_size = sizeof(PCII440FXState), > + .class_init = igd_passthrough_i440fx_class_init, > +}; > + > +static void igd_pt_i440fx_register_types(void) > +{ > + type_register_static(&igd_passthrough_i440fx_info); > +} > + > +type_init(igd_pt_i440fx_register_types) > diff --git a/MAINTAINERS b/MAINTAINERS > index 5e5e3e52d6..62bcf5e94e 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -419,6 +419,7 @@ F: hw/block/dataplane/xen* > F: hw/xen/ > F: hw/xenpv/ > F: hw/i386/xen/ > +F: hw/pci-host/xen_igd_pt.c > F: include/hw/block/dataplane/xen* > F: include/hw/xen/ > F: include/sysemu/xen-mapcache.h > diff --git a/hw/pci-host/Makefile.objs b/hw/pci-host/Makefile.objs > index efd752b766..fa6d1556c0 100644 > --- a/hw/pci-host/Makefile.objs > +++ b/hw/pci-host/Makefile.objs > @@ -14,6 +14,7 @@ common-obj-$(CONFIG_VERSATILE_PCI) += versatile.o > common-obj-$(CONFIG_PCI_SABRE) += sabre.o > common-obj-$(CONFIG_FULONG) += bonito.o > common-obj-$(CONFIG_PCI_I440FX) += i440fx.o > +common-obj-$(CONFIG_PCI_I440FX) += xen_igd_pt.o > common-obj-$(CONFIG_PCI_EXPRESS_Q35) += q35.o > common-obj-$(CONFIG_PCI_EXPRESS_GENERIC_BRIDGE) += gpex.o > common-obj-$(CONFIG_PCI_EXPRESS_XILINX) += xilinx-pcie.o > -- > 2.21.0 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xenproject.org > https://lists.xenproject.org/mailman/listinfo/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2019-12-09 13:40 UTC|newest] Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-09 9:49 [PATCH-for-5.0 v3 0/6] hw/pci-host: Add Kconfig selector for IGD PCIe pass-through Philippe Mathieu-Daudé 2019-12-09 9:49 ` [Xen-devel] " Philippe Mathieu-Daudé 2019-12-09 9:49 ` [PATCH-for-5.0 v3 1/6] hw/pci-host/i440fx: Correct the header description Philippe Mathieu-Daudé 2019-12-09 9:49 ` [Xen-devel] " Philippe Mathieu-Daudé 2019-12-09 10:02 ` Thomas Huth 2019-12-09 10:02 ` [Xen-devel] " Thomas Huth 2019-12-18 11:57 ` Laurent Vivier 2019-12-18 11:57 ` [Xen-devel] " Laurent Vivier 2019-12-09 9:49 ` [PATCH-for-5.0 v3 2/6] hw/pci-host/i440fx: Extract PCII440FXState to "hw/pci-host/i440fx.h" Philippe Mathieu-Daudé 2019-12-09 9:49 ` [Xen-devel] " Philippe Mathieu-Daudé 2019-12-09 10:03 ` Thomas Huth 2019-12-09 10:03 ` [Xen-devel] " Thomas Huth 2019-12-09 9:49 ` [PATCH-for-5.0 v3 3/6] hw/pci-host/i440fx: Use size_t to iterate over ARRAY_SIZE() Philippe Mathieu-Daudé 2019-12-09 9:49 ` [Xen-devel] " Philippe Mathieu-Daudé 2019-12-09 10:05 ` Thomas Huth 2019-12-09 10:05 ` [Xen-devel] " Thomas Huth 2019-12-18 11:57 ` Laurent Vivier 2019-12-18 11:57 ` [Xen-devel] " Laurent Vivier 2019-12-18 12:01 ` Paolo Bonzini 2019-12-18 12:01 ` [Xen-devel] " Paolo Bonzini 2019-12-18 12:31 ` Laurent Vivier 2019-12-18 12:31 ` [Xen-devel] " Laurent Vivier 2019-12-09 9:50 ` [PATCH-for-5.0 v3 4/6] hw/pci-host/i440fx: Use definitions instead of magic values Philippe Mathieu-Daudé 2019-12-09 9:50 ` [Xen-devel] " Philippe Mathieu-Daudé 2019-12-09 10:08 ` Thomas Huth 2019-12-09 10:08 ` [Xen-devel] " Thomas Huth 2019-12-09 9:50 ` [PATCH-for-5.0 v3 5/6] hw/pci-host/i440fx: Extract the IGD passthrough host bridge device Philippe Mathieu-Daudé 2019-12-09 9:50 ` [Xen-devel] " Philippe Mathieu-Daudé 2019-12-09 10:08 ` Durrant, Paul [this message] 2019-12-09 10:08 ` Durrant, Paul 2019-12-09 9:50 ` [PATCH-for-5.0 v3 6/6] hw/pci-host: Add Kconfig entry to select the IGD Passthrough Host Bridge Philippe Mathieu-Daudé 2019-12-09 9:50 ` [Xen-devel] " Philippe Mathieu-Daudé 2019-12-09 10:10 ` Durrant, Paul 2019-12-09 10:10 ` Durrant, Paul 2019-12-09 10:42 ` Paolo Bonzini 2019-12-09 10:42 ` Paolo Bonzini 2019-12-09 10:56 ` Philippe Mathieu-Daudé 2019-12-09 10:56 ` Philippe Mathieu-Daudé 2019-12-09 11:12 ` Paolo Bonzini 2019-12-09 11:12 ` Paolo Bonzini 2019-12-09 10:39 ` Paolo Bonzini 2019-12-09 10:39 ` [Xen-devel] " Paolo Bonzini 2019-12-09 18:39 ` [PATCH-for-5.0 v3 0/6] hw/pci-host: Add Kconfig selector for IGD PCIe pass-through no-reply 2019-12-09 18:39 ` [Xen-devel] " no-reply 2019-12-09 18:49 ` no-reply 2019-12-09 18:49 ` [Xen-devel] " no-reply
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=1a3aea880e2640e88038e77f5bf14a13@EX13D32EUC003.ant.amazon.com \ --to=pdurrant@amazon.com \ --cc=alex.williamson@redhat.com \ --cc=anthony.perard@citrix.com \ --cc=armbru@redhat.com \ --cc=marcel.apfelbaum@gmail.com \ --cc=mst@redhat.com \ --cc=paul@xen.org \ --cc=pbonzini@redhat.com \ --cc=philmd@redhat.com \ --cc=qemu-devel@nongnu.org \ --cc=sstabellini@kernel.org \ --cc=thuth@redhat.com \ --cc=xen-devel@lists.xenproject.org \ /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: linkBe 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.