On 2014/8/4 21:50, Michael S. Tsirkin wrote:
On Thu, Jul 31, 2014 at 08:09:33PM +0800, Tiejun Chen wrote:
Implement a pci host bridge specific to passthrough. Actually
this just inherits the standard one.
This is based on http://patchwork.ozlabs.org/patch/363810/.
Signed-off-by: Tiejun Chen <tiejun.c...@intel.com>
---
hw/pci-host/piix.c | 41 +++++++++++++++++++++++++++++++++++++++++
include/hw/i386/pc.h | 2 ++
2 files changed, 43 insertions(+)
v3:
* Rebase
v2:
* Just add prefix with XEN_IGD_PASSTHROUGH/xen_igd_passthrough
diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index 0cd82b8..26ba1e5 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -93,6 +93,9 @@ typedef struct PIIX3State {
#define I440FX_PCI_DEVICE(obj) \
OBJECT_CHECK(PCII440FXState, (obj), TYPE_I440FX_PCI_DEVICE)
+#define XEN_IGD_PASSTHROUGH_I440FX_PCI_DEVICE(obj) \
+ OBJECT_CHECK(PCII440FXState, (obj),
TYPE_XEN_IGD_PASSTHROUGH_I440FX_PCI_DEVICE)
+
struct PCII440FXState {
/*< private >*/
PCIDevice parent_obj;
@@ -303,6 +306,16 @@ static int i440fx_initfn(PCIDevice *dev)
return 0;
}
+static int xen_igd_passthrough_i440fx_initfn(PCIDevice *dev)
+{
+ PCII440FXState *d = XEN_IGD_PASSTHROUGH_I440FX_PCI_DEVICE(dev);
+
+ dev->config[I440FX_SMRAM] = 0x02;
+
+ cpu_smm_register(&i440fx_set_smm, d);
+ return 0;
+}
+
This is exactly i440fx_initfn.
Don't copy and paste code like this, reuse existing functions.
We can't reuse i440fx_initfn() simply after we introduce
XEN_IGD_PASSTHROUGH_I440FX_PCI_DEVICE(). But with a further concern I
think we also pass type into I440FX_PCI_DEVIC() to index different
objects here. Please see next version.
Thanks
Tiejun