From: "Andreas Färber" <afaerber@suse.de>
To: qemu-devel@nongnu.org
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
"open list:New World" <qemu-ppc@nongnu.org>,
"Andreas Färber" <afaerber@suse.de>,
"Alexander Graf" <agraf@suse.de>
Subject: [Qemu-devel] [PULL 009/173] pci-bridge: Turn PCIBridge into abstract QOM type
Date: Mon, 29 Jul 2013 21:17:46 +0200 [thread overview]
Message-ID: <1375125630-24869-10-git-send-email-afaerber@suse.de> (raw)
In-Reply-To: <1375125630-24869-1-git-send-email-afaerber@suse.de>
Introduce TYPE_PCI_BRIDGE as base type and use PCI_BRIDGE() casts.
Reviewed-by: Don Koch <dkoch@verizon.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
[AF: Updated pbm-bridge parent to TYPE_PCI_BRIDGE]
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/pci-bridge/dec.c | 4 ++--
hw/pci-bridge/i82801b11.c | 6 +++---
hw/pci-bridge/ioh3420.c | 18 ++++++++---------
hw/pci-bridge/pci_bridge_dev.c | 10 +++++-----
hw/pci-bridge/xio3130_downstream.c | 18 ++++++++---------
hw/pci-bridge/xio3130_upstream.c | 19 +++++++++---------
hw/pci-host/apb.c | 7 +++----
hw/pci/pci.c | 2 +-
hw/pci/pci_bridge.c | 40 +++++++++++++++++++++++++++-----------
hw/pci/pcie.c | 2 +-
include/hw/pci/pci_bus.h | 7 ++++++-
11 files changed, 78 insertions(+), 55 deletions(-)
diff --git a/hw/pci-bridge/dec.c b/hw/pci-bridge/dec.c
index efc07c4..e5e3be8 100644
--- a/hw/pci-bridge/dec.c
+++ b/hw/pci-bridge/dec.c
@@ -74,7 +74,7 @@ static void dec_21154_pci_bridge_class_init(ObjectClass *klass, void *data)
static const TypeInfo dec_21154_pci_bridge_info = {
.name = "dec-21154-p2p-bridge",
- .parent = TYPE_PCI_DEVICE,
+ .parent = TYPE_PCI_BRIDGE,
.instance_size = sizeof(PCIBridge),
.class_init = dec_21154_pci_bridge_class_init,
};
@@ -86,7 +86,7 @@ PCIBus *pci_dec_21154_init(PCIBus *parent_bus, int devfn)
dev = pci_create_multifunction(parent_bus, devfn, false,
"dec-21154-p2p-bridge");
- br = DO_UPCAST(PCIBridge, dev, dev);
+ br = PCI_BRIDGE(dev);
pci_bridge_map_irq(br, "DEC 21154 PCI-PCI bridge", dec_map_irq);
qdev_init_nofail(&dev->qdev);
return pci_bridge_get_sec_bus(br);
diff --git a/hw/pci-bridge/i82801b11.c b/hw/pci-bridge/i82801b11.c
index 0e521a8..82e92d8 100644
--- a/hw/pci-bridge/i82801b11.c
+++ b/hw/pci-bridge/i82801b11.c
@@ -93,7 +93,7 @@ static void i82801b11_bridge_class_init(ObjectClass *klass, void *data)
static const TypeInfo i82801b11_bridge_info = {
.name = "i82801b11-bridge",
- .parent = TYPE_PCI_DEVICE,
+ .parent = TYPE_PCI_BRIDGE,
.instance_size = sizeof(I82801b11Bridge),
.class_init = i82801b11_bridge_class_init,
};
@@ -109,8 +109,8 @@ PCIBus *ich9_d2pbr_init(PCIBus *bus, int devfn, int sec_bus)
if (!d) {
return NULL;
}
- br = DO_UPCAST(PCIBridge, dev, d);
- qdev = &br->dev.qdev;
+ br = PCI_BRIDGE(d);
+ qdev = DEVICE(d);
snprintf(buf, sizeof(buf), "pci.%d", sec_bus);
pci_bridge_map_irq(br, buf, pci_swizzle_map_irq_fn);
diff --git a/hw/pci-bridge/ioh3420.c b/hw/pci-bridge/ioh3420.c
index 47122c5..815bed4 100644
--- a/hw/pci-bridge/ioh3420.c
+++ b/hw/pci-bridge/ioh3420.c
@@ -92,7 +92,7 @@ static void ioh3420_reset(DeviceState *qdev)
static int ioh3420_initfn(PCIDevice *d)
{
- PCIBridge* br = DO_UPCAST(PCIBridge, dev, d);
+ PCIBridge *br = PCI_BRIDGE(d);
PCIEPort *p = DO_UPCAST(PCIEPort, br, br);
PCIESlot *s = DO_UPCAST(PCIESlot, port, p);
int rc;
@@ -148,7 +148,7 @@ err_bridge:
static void ioh3420_exitfn(PCIDevice *d)
{
- PCIBridge* br = DO_UPCAST(PCIBridge, dev, d);
+ PCIBridge *br = PCI_BRIDGE(d);
PCIEPort *p = DO_UPCAST(PCIEPort, br, br);
PCIESlot *s = DO_UPCAST(PCIESlot, port, p);
@@ -171,9 +171,9 @@ PCIESlot *ioh3420_init(PCIBus *bus, int devfn, bool multifunction,
if (!d) {
return NULL;
}
- br = DO_UPCAST(PCIBridge, dev, d);
+ br = PCI_BRIDGE(d);
- qdev = &br->dev.qdev;
+ qdev = DEVICE(d);
pci_bridge_map_irq(br, bus_name, map_irq);
qdev_prop_set_uint8(qdev, "port", port);
qdev_prop_set_uint8(qdev, "chassis", chassis);
@@ -190,8 +190,8 @@ static const VMStateDescription vmstate_ioh3420 = {
.minimum_version_id_old = 1,
.post_load = pcie_cap_slot_post_load,
.fields = (VMStateField[]) {
- VMSTATE_PCIE_DEVICE(port.br.dev, PCIESlot),
- VMSTATE_STRUCT(port.br.dev.exp.aer_log, PCIESlot, 0,
+ VMSTATE_PCIE_DEVICE(port.br.parent_obj, PCIESlot),
+ VMSTATE_STRUCT(port.br.parent_obj.exp.aer_log, PCIESlot, 0,
vmstate_pcie_aer_log, PCIEAERLog),
VMSTATE_END_OF_LIST()
}
@@ -202,8 +202,8 @@ static Property ioh3420_properties[] = {
DEFINE_PROP_UINT8("chassis", PCIESlot, chassis, 0),
DEFINE_PROP_UINT16("slot", PCIESlot, slot, 0),
DEFINE_PROP_UINT16("aer_log_max", PCIESlot,
- port.br.dev.exp.aer_log.log_max,
- PCIE_AER_LOG_MAX_DEFAULT),
+ port.br.parent_obj.exp.aer_log.log_max,
+ PCIE_AER_LOG_MAX_DEFAULT),
DEFINE_PROP_END_OF_LIST(),
};
@@ -229,7 +229,7 @@ static void ioh3420_class_init(ObjectClass *klass, void *data)
static const TypeInfo ioh3420_info = {
.name = "ioh3420",
- .parent = TYPE_PCI_DEVICE,
+ .parent = TYPE_PCI_BRIDGE,
.instance_size = sizeof(PCIESlot),
.class_init = ioh3420_class_init,
};
diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c
index a00642c..af750c2 100644
--- a/hw/pci-bridge/pci_bridge_dev.c
+++ b/hw/pci-bridge/pci_bridge_dev.c
@@ -38,7 +38,7 @@ typedef struct PCIBridgeDev PCIBridgeDev;
static int pci_bridge_dev_initfn(PCIDevice *dev)
{
- PCIBridge *br = DO_UPCAST(PCIBridge, dev, dev);
+ PCIBridge *br = PCI_BRIDGE(dev);
PCIBridgeDev *bridge_dev = DO_UPCAST(PCIBridgeDev, bridge, br);
int err;
@@ -81,7 +81,7 @@ bridge_error:
static void pci_bridge_dev_exitfn(PCIDevice *dev)
{
- PCIBridge *br = DO_UPCAST(PCIBridge, dev, dev);
+ PCIBridge *br = PCI_BRIDGE(dev);
PCIBridgeDev *bridge_dev = DO_UPCAST(PCIBridgeDev, bridge, br);
if (msi_present(dev)) {
msi_uninit(dev);
@@ -120,8 +120,8 @@ static Property pci_bridge_dev_properties[] = {
static const VMStateDescription pci_bridge_dev_vmstate = {
.name = "pci_bridge",
.fields = (VMStateField[]) {
- VMSTATE_PCI_DEVICE(bridge.dev, PCIBridgeDev),
- SHPC_VMSTATE(bridge.dev.shpc, PCIBridgeDev),
+ VMSTATE_PCI_DEVICE(bridge.parent_obj, PCIBridgeDev),
+ SHPC_VMSTATE(bridge.parent_obj.shpc, PCIBridgeDev),
VMSTATE_END_OF_LIST()
}
};
@@ -146,7 +146,7 @@ static void pci_bridge_dev_class_init(ObjectClass *klass, void *data)
static const TypeInfo pci_bridge_dev_info = {
.name = "pci-bridge",
- .parent = TYPE_PCI_DEVICE,
+ .parent = TYPE_PCI_BRIDGE,
.instance_size = sizeof(PCIBridgeDev),
.class_init = pci_bridge_dev_class_init,
};
diff --git a/hw/pci-bridge/xio3130_downstream.c b/hw/pci-bridge/xio3130_downstream.c
index 33eff37..227a335 100644
--- a/hw/pci-bridge/xio3130_downstream.c
+++ b/hw/pci-bridge/xio3130_downstream.c
@@ -56,7 +56,7 @@ static void xio3130_downstream_reset(DeviceState *qdev)
static int xio3130_downstream_initfn(PCIDevice *d)
{
- PCIBridge* br = DO_UPCAST(PCIBridge, dev, d);
+ PCIBridge *br = PCI_BRIDGE(d);
PCIEPort *p = DO_UPCAST(PCIEPort, br, br);
PCIESlot *s = DO_UPCAST(PCIESlot, port, p);
int rc;
@@ -113,7 +113,7 @@ err_bridge:
static void xio3130_downstream_exitfn(PCIDevice *d)
{
- PCIBridge* br = DO_UPCAST(PCIBridge, dev, d);
+ PCIBridge *br = PCI_BRIDGE(d);
PCIEPort *p = DO_UPCAST(PCIEPort, br, br);
PCIESlot *s = DO_UPCAST(PCIESlot, port, p);
@@ -138,9 +138,9 @@ PCIESlot *xio3130_downstream_init(PCIBus *bus, int devfn, bool multifunction,
if (!d) {
return NULL;
}
- br = DO_UPCAST(PCIBridge, dev, d);
+ br = PCI_BRIDGE(d);
- qdev = &br->dev.qdev;
+ qdev = DEVICE(d);
pci_bridge_map_irq(br, bus_name, map_irq);
qdev_prop_set_uint8(qdev, "port", port);
qdev_prop_set_uint8(qdev, "chassis", chassis);
@@ -157,8 +157,8 @@ static const VMStateDescription vmstate_xio3130_downstream = {
.minimum_version_id_old = 1,
.post_load = pcie_cap_slot_post_load,
.fields = (VMStateField[]) {
- VMSTATE_PCIE_DEVICE(port.br.dev, PCIESlot),
- VMSTATE_STRUCT(port.br.dev.exp.aer_log, PCIESlot, 0,
+ VMSTATE_PCIE_DEVICE(port.br.parent_obj, PCIESlot),
+ VMSTATE_STRUCT(port.br.parent_obj.exp.aer_log, PCIESlot, 0,
vmstate_pcie_aer_log, PCIEAERLog),
VMSTATE_END_OF_LIST()
}
@@ -169,8 +169,8 @@ static Property xio3130_downstream_properties[] = {
DEFINE_PROP_UINT8("chassis", PCIESlot, chassis, 0),
DEFINE_PROP_UINT16("slot", PCIESlot, slot, 0),
DEFINE_PROP_UINT16("aer_log_max", PCIESlot,
- port.br.dev.exp.aer_log.log_max,
- PCIE_AER_LOG_MAX_DEFAULT),
+ port.br.parent_obj.exp.aer_log.log_max,
+ PCIE_AER_LOG_MAX_DEFAULT),
DEFINE_PROP_END_OF_LIST(),
};
@@ -196,7 +196,7 @@ static void xio3130_downstream_class_init(ObjectClass *klass, void *data)
static const TypeInfo xio3130_downstream_info = {
.name = "xio3130-downstream",
- .parent = TYPE_PCI_DEVICE,
+ .parent = TYPE_PCI_BRIDGE,
.instance_size = sizeof(PCIESlot),
.class_init = xio3130_downstream_class_init,
};
diff --git a/hw/pci-bridge/xio3130_upstream.c b/hw/pci-bridge/xio3130_upstream.c
index e9969a9..b146253 100644
--- a/hw/pci-bridge/xio3130_upstream.c
+++ b/hw/pci-bridge/xio3130_upstream.c
@@ -53,7 +53,7 @@ static void xio3130_upstream_reset(DeviceState *qdev)
static int xio3130_upstream_initfn(PCIDevice *d)
{
- PCIBridge* br = DO_UPCAST(PCIBridge, dev, d);
+ PCIBridge *br = PCI_BRIDGE(d);
PCIEPort *p = DO_UPCAST(PCIEPort, br, br);
int rc;
@@ -118,9 +118,9 @@ PCIEPort *xio3130_upstream_init(PCIBus *bus, int devfn, bool multifunction,
if (!d) {
return NULL;
}
- br = DO_UPCAST(PCIBridge, dev, d);
+ br = PCI_BRIDGE(d);
- qdev = &br->dev.qdev;
+ qdev = DEVICE(d);
pci_bridge_map_irq(br, bus_name, map_irq);
qdev_prop_set_uint8(qdev, "port", port);
qdev_init_nofail(qdev);
@@ -134,17 +134,18 @@ static const VMStateDescription vmstate_xio3130_upstream = {
.minimum_version_id = 1,
.minimum_version_id_old = 1,
.fields = (VMStateField[]) {
- VMSTATE_PCIE_DEVICE(br.dev, PCIEPort),
- VMSTATE_STRUCT(br.dev.exp.aer_log, PCIEPort, 0, vmstate_pcie_aer_log,
- PCIEAERLog),
+ VMSTATE_PCIE_DEVICE(br.parent_obj, PCIEPort),
+ VMSTATE_STRUCT(br.parent_obj.exp.aer_log, PCIEPort, 0,
+ vmstate_pcie_aer_log, PCIEAERLog),
VMSTATE_END_OF_LIST()
}
};
static Property xio3130_upstream_properties[] = {
DEFINE_PROP_UINT8("port", PCIEPort, port, 0),
- DEFINE_PROP_UINT16("aer_log_max", PCIEPort, br.dev.exp.aer_log.log_max,
- PCIE_AER_LOG_MAX_DEFAULT),
+ DEFINE_PROP_UINT16("aer_log_max", PCIEPort,
+ br.parent_obj.exp.aer_log.log_max,
+ PCIE_AER_LOG_MAX_DEFAULT),
DEFINE_PROP_END_OF_LIST(),
};
@@ -170,7 +171,7 @@ static void xio3130_upstream_class_init(ObjectClass *klass, void *data)
static const TypeInfo xio3130_upstream_info = {
.name = "x3130-upstream",
- .parent = TYPE_PCI_DEVICE,
+ .parent = TYPE_PCI_BRIDGE,
.instance_size = sizeof(PCIEPort),
.class_init = xio3130_upstream_class_init,
};
diff --git a/hw/pci-host/apb.c b/hw/pci-host/apb.c
index bef7be1..92f289f 100644
--- a/hw/pci-host/apb.c
+++ b/hw/pci-host/apb.c
@@ -423,7 +423,7 @@ PCIBus *pci_apb_init(hwaddr special_base,
/* APB secondary busses */
pci_dev = pci_create_multifunction(phb->bus, PCI_DEVFN(1, 0), true,
"pbm-bridge");
- br = DO_UPCAST(PCIBridge, dev, pci_dev);
+ br = PCI_BRIDGE(pci_dev);
pci_bridge_map_irq(br, "Advanced PCI Bus secondary bridge 1",
pci_apb_map_irq);
qdev_init_nofail(&pci_dev->qdev);
@@ -431,7 +431,7 @@ PCIBus *pci_apb_init(hwaddr special_base,
pci_dev = pci_create_multifunction(phb->bus, PCI_DEVFN(1, 1), true,
"pbm-bridge");
- br = DO_UPCAST(PCIBridge, dev, pci_dev);
+ br = PCI_BRIDGE(pci_dev);
pci_bridge_map_irq(br, "Advanced PCI Bus secondary bridge 2",
pci_apb_map_irq);
qdev_init_nofail(&pci_dev->qdev);
@@ -566,8 +566,7 @@ static void pbm_pci_bridge_class_init(ObjectClass *klass, void *data)
static const TypeInfo pbm_pci_bridge_info = {
.name = "pbm-bridge",
- .parent = TYPE_PCI_DEVICE,
- .instance_size = sizeof(PCIBridge),
+ .parent = TYPE_PCI_BRIDGE,
.class_init = pbm_pci_bridge_class_init,
};
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 81cf5a9..4c004f5 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -397,7 +397,7 @@ static int get_pci_config_device(QEMUFile *f, void *pv, size_t size)
pci_update_mappings(s);
if (pc->is_bridge) {
- PCIBridge *b = container_of(s, PCIBridge, dev);
+ PCIBridge *b = PCI_BRIDGE(s);
pci_bridge_update_mappings(b);
}
diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c
index 02a396b..a90671d 100644
--- a/hw/pci/pci_bridge.c
+++ b/hw/pci/pci_bridge.c
@@ -141,8 +141,9 @@ static void pci_bridge_init_alias(PCIBridge *bridge, MemoryRegion *alias,
MemoryRegion *parent_space,
bool enabled)
{
- pcibus_t base = pci_bridge_get_base(&bridge->dev, type);
- pcibus_t limit = pci_bridge_get_limit(&bridge->dev, type);
+ PCIDevice *bridge_dev = PCI_DEVICE(bridge);
+ pcibus_t base = pci_bridge_get_base(bridge_dev, type);
+ pcibus_t limit = pci_bridge_get_limit(bridge_dev, type);
/* TODO: this doesn't handle base = 0 limit = 2^64 - 1 correctly.
* Apparently no way to do this with existing memory APIs. */
pcibus_t size = enabled && limit >= base ? limit + 1 - base : 0;
@@ -154,7 +155,8 @@ static void pci_bridge_init_alias(PCIBridge *bridge, MemoryRegion *alias,
static void pci_bridge_init_vga_aliases(PCIBridge *br, PCIBus *parent,
MemoryRegion *alias_vga)
{
- uint16_t brctl = pci_get_word(br->dev.config + PCI_BRIDGE_CONTROL);
+ PCIDevice *pd = PCI_DEVICE(br);
+ uint16_t brctl = pci_get_word(pd->config + PCI_BRIDGE_CONTROL);
memory_region_init_alias(&alias_vga[QEMU_PCI_VGA_IO_LO], OBJECT(br),
"pci_bridge_vga_io_lo", &br->address_space_io,
@@ -167,7 +169,7 @@ static void pci_bridge_init_vga_aliases(PCIBridge *br, PCIBus *parent,
QEMU_PCI_VGA_MEM_BASE, QEMU_PCI_VGA_MEM_SIZE);
if (brctl & PCI_BRIDGE_CTL_VGA) {
- pci_register_vga(&br->dev, &alias_vga[QEMU_PCI_VGA_MEM],
+ pci_register_vga(pd, &alias_vga[QEMU_PCI_VGA_MEM],
&alias_vga[QEMU_PCI_VGA_IO_LO],
&alias_vga[QEMU_PCI_VGA_IO_HI]);
}
@@ -175,9 +177,10 @@ static void pci_bridge_init_vga_aliases(PCIBridge *br, PCIBus *parent,
static PCIBridgeWindows *pci_bridge_region_init(PCIBridge *br)
{
- PCIBus *parent = br->dev.bus;
+ PCIDevice *pd = PCI_DEVICE(br);
+ PCIBus *parent = pd->bus;
PCIBridgeWindows *w = g_new(PCIBridgeWindows, 1);
- uint16_t cmd = pci_get_word(br->dev.config + PCI_COMMAND);
+ uint16_t cmd = pci_get_word(pd->config + PCI_COMMAND);
pci_bridge_init_alias(br, &w->alias_pref_mem,
PCI_BASE_ADDRESS_MEM_PREFETCH,
@@ -205,12 +208,13 @@ static PCIBridgeWindows *pci_bridge_region_init(PCIBridge *br)
static void pci_bridge_region_del(PCIBridge *br, PCIBridgeWindows *w)
{
- PCIBus *parent = br->dev.bus;
+ PCIDevice *pd = PCI_DEVICE(br);
+ PCIBus *parent = pd->bus;
memory_region_del_subregion(parent->address_space_io, &w->alias_io);
memory_region_del_subregion(parent->address_space_mem, &w->alias_mem);
memory_region_del_subregion(parent->address_space_mem, &w->alias_pref_mem);
- pci_unregister_vga(&br->dev);
+ pci_unregister_vga(pd);
}
static void pci_bridge_region_cleanup(PCIBridge *br, PCIBridgeWindows *w)
@@ -241,7 +245,7 @@ void pci_bridge_update_mappings(PCIBridge *br)
void pci_bridge_write_config(PCIDevice *d,
uint32_t address, uint32_t val, int len)
{
- PCIBridge *s = container_of(d, PCIBridge, dev);
+ PCIBridge *s = PCI_BRIDGE(d);
uint16_t oldctl = pci_get_word(d->config + PCI_BRIDGE_CONTROL);
uint16_t newctl;
@@ -331,7 +335,7 @@ void pci_bridge_reset(DeviceState *qdev)
int pci_bridge_initfn(PCIDevice *dev, const char *typename)
{
PCIBus *parent = dev->bus;
- PCIBridge *br = DO_UPCAST(PCIBridge, dev, dev);
+ PCIBridge *br = PCI_BRIDGE(dev);
PCIBus *sec_bus = &br->sec_bus;
pci_word_test_and_set_mask(dev->config + PCI_STATUS,
@@ -379,7 +383,7 @@ int pci_bridge_initfn(PCIDevice *dev, const char *typename)
/* default qdev clean up function for PCI-to-PCI bridge */
void pci_bridge_exitfn(PCIDevice *pci_dev)
{
- PCIBridge *s = DO_UPCAST(PCIBridge, dev, pci_dev);
+ PCIBridge *s = PCI_BRIDGE(pci_dev);
assert(QLIST_EMPTY(&s->sec_bus.child));
QLIST_REMOVE(&s->sec_bus, sibling);
pci_bridge_region_del(s, s->windows);
@@ -400,3 +404,17 @@ void pci_bridge_map_irq(PCIBridge *br, const char* bus_name,
br->map_irq = map_irq;
br->bus_name = bus_name;
}
+
+static const TypeInfo pci_bridge_type_info = {
+ .name = TYPE_PCI_BRIDGE,
+ .parent = TYPE_PCI_DEVICE,
+ .instance_size = sizeof(PCIBridge),
+ .abstract = true,
+};
+
+static void pci_bridge_register_types(void)
+{
+ type_register_static(&pci_bridge_type_info);
+}
+
+type_init(pci_bridge_register_types)
diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
index 62bd0b8..50af3c1 100644
--- a/hw/pci/pcie.c
+++ b/hw/pci/pcie.c
@@ -305,7 +305,7 @@ void pcie_cap_slot_init(PCIDevice *dev, uint16_t slot)
dev->exp.hpev_notified = false;
- pci_bus_hotplug(pci_bridge_get_sec_bus(DO_UPCAST(PCIBridge, dev, dev)),
+ pci_bus_hotplug(pci_bridge_get_sec_bus(PCI_BRIDGE(dev)),
pcie_cap_slot_hotplug, &dev->qdev);
}
diff --git a/include/hw/pci/pci_bus.h b/include/hw/pci/pci_bus.h
index 66762f6..9df1788 100644
--- a/include/hw/pci/pci_bus.h
+++ b/include/hw/pci/pci_bus.h
@@ -53,8 +53,13 @@ struct PCIBridgeWindows {
MemoryRegion alias_vga[QEMU_PCI_VGA_NUM_REGIONS];
};
+#define TYPE_PCI_BRIDGE "base-pci-bridge"
+#define PCI_BRIDGE(obj) OBJECT_CHECK(PCIBridge, (obj), TYPE_PCI_BRIDGE)
+
struct PCIBridge {
- PCIDevice dev;
+ /*< private >*/
+ PCIDevice parent_obj;
+ /*< public >*/
/* private member */
PCIBus sec_bus;
--
1.8.1.4
next prev parent reply other threads:[~2013-07-29 19:20 UTC|newest]
Thread overview: 174+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-29 19:17 [Qemu-devel] [PULL for-1.6 000/173] QOM devices patch queue 2013-07-29 Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 001/173] fdc: Fix inheritence for SUNW,fdtwo Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 002/173] ide/piix: QOM casting sweep Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 003/173] ide: Introduce abstract QOM type for PCIIDEState Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 004/173] cpu/a9mpcore: QOM casting cleanup Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 005/173] timer/arm_mptimer: QOM cast cleanup Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 006/173] cpu/a15mpcore: " Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 007/173] arm11mpcore: QOM cast cleanups for ARM11MPCorePriveState Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 008/173] arm11mpcore: QOM cast cleanups for mpcore_rirq_state Andreas Färber
2013-07-29 19:17 ` Andreas Färber [this message]
2013-07-29 19:17 ` [Qemu-devel] [PULL 010/173] pci-bridge-dev: QOM parent field cleanup Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 011/173] pci-bridge/i82801b11: Rename parent field Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 012/173] pcie_port: Turn PCIEPort and PCIESlot into abstract QOM types Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 013/173] etraxfs_ser: QOM cast cleanups Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 014/173] xilinx_uartlite: Rename xlx_uartlite to XilinxUARTLite Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 015/173] xilinx_uartlite: QOM cast cleanups Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 016/173] cs4231: QOM cast cleanup Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 017/173] audio/marvell_88w8618: " Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 018/173] milkymist-ac97: " Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 019/173] pl041: Rename pl041_state to PL041State Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 020/173] pl041: QOM cast cleanup Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 021/173] onenand: " Andreas Färber
2013-07-29 19:17 ` [Qemu-devel] [PULL 022/173] exynos4210_fimd: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 023/173] g364fb: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 024/173] jazz_led: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 025/173] milkymist-tmu2: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 026/173] milkymist-vgafb: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 027/173] pl110: Rename pl110_state to PL110State Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 028/173] pl110: QOM'ify pl110, pl110_versatile and pl111 Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 029/173] tcx: QOM cast cleanup Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 030/173] imx_avic: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 031/173] imx_ccm: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 032/173] armv7m: QOM cast cleanup for BitBandState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 033/173] highbank: QOM cast cleanup for HighbankRegsState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 034/173] integratorcp: QOM cast cleanup for integratorcm_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 035/173] integratorcp: QOM cast cleanup for icp_pic_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 036/173] musicpal: Fix typo in name of local function Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 037/173] musicpal: QOM cast cleanup for mv88w8618_eth_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 038/173] musicpal: QOM cast cleanup for musicpal_lcd_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 039/173] musicpal: QOM cast cleanup mv88w8618_pic_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 040/173] musicpal: QOM cast cleanup for mv88w8618_pit_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 041/173] musicpal: QOM cast cleanup for mv88w8618_flashcfg Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 042/173] musicpal: QOM cast cleanup for musicpal_gpio_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 043/173] musicpal: QOM cast cleanup for musicpal_key_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 044/173] pxa2xx: QOM cast cleanup for PXA2xxSSPState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 045/173] pxa2xx: QOM cast cleanup for PXA2xxRTCState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 046/173] pxa2xx: QOM cast cleanup for PXA2xxI2CState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 047/173] pxa2xx_gpio: QOM cast cleanup for PXA2xxGPIOInfo Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 048/173] pxa2xx_pic: QOM cast cleanup for PXA2xxPICState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 049/173] spitz: QOM cast cleanup for SLNANDState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 050/173] spitz: QOM cast cleanup for SpitzKeyboardState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 051/173] stellaris: QOM cast cleanup for gptm_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 052/173] stellaris: QOM cast cleanup for stellaris_i2c_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 053/173] stellaris: QOM cast cleanup for stellaris_adc_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 054/173] strongarm: QOM cast cleanup for StrongARMPICState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 055/173] strongarm: QOM cast cleanup for StrongARMRTCState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 056/173] strongarm: QOM cast cleanup for StrongARMGPIOInfo Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 057/173] strongarm: QOM cast cleanup for StrongARMPPCInfo Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 058/173] strongarm: QOM cast cleanup for StrongARMUARTState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 059/173] strongarm: QOM cast cleanup for StrongARMSSPState Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 060/173] versatilepb: QOM cast cleanup for vpb_sic_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 061/173] cadence_uart: QOM cast cleanup Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 062/173] escc: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 063/173] exynos4210_uart: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 064/173] grlib_apbuart: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 065/173] imx_serial: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 066/173] lm32_juart: Relocate and tidy header Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 067/173] lm32_juart: QOM cast cleanup Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 068/173] lm32_uart: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 069/173] milkymist-uart: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 070/173] pl011: Rename pl011_state Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 071/173] pl011: QOM'ify pl011 and pl011_luminary Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 072/173] empty_slot: QOM cast cleanup Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 073/173] pl080: Rename pl080_state to PL080State Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 074/173] pl080: QOM'ify pl080 and pl081 Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 075/173] puv3_dma: QOM cast cleanup Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 076/173] pxa2xx_dma: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 077/173] sparc32_dma: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 078/173] sun4m_iommu: " Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 079/173] omap_gpio: QOM cast cleanup for omap_gpif_s Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 080/173] omap_gpio: QOM cast cleanup for omap2_gpif_s Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 081/173] pl061: Rename pl061_state to PL061State Andreas Färber
2013-07-29 19:18 ` [Qemu-devel] [PULL 082/173] pl061: QOM'ify pl061 and pl061_luminary Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 083/173] puv3_gpio: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 084/173] gpio/zaurus: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 085/173] bitbang_i2c: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 086/173] omap_i2c: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 087/173] versatile_i2c: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 088/173] milkymist-softusb: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 089/173] pl050: Rename pl050_state to PL050State Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 090/173] pl050: QOM'ify pl050_keyboard and pl050_mouse Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 091/173] arm_gic: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 092/173] etraxfs_pic: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 093/173] exynos4210_combiner: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 094/173] exynos4210_gic: QOM cast cleanup for exynos4210.gic Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 095/173] exynos4210_gic: QOM cast cleanup for exynos4210.irq_gate Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 096/173] grlib_irqmp: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 097/173] lm32_pic: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 098/173] omap_intc: QOM'ify omap-intc and omap2-intc Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 099/173] pl190: Rename pl190_state to PL190State Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 100/173] pl190: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 101/173] puv3_intc: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 102/173] realview_gic: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 103/173] slavio_intctl: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 104/173] xilinx_intc: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 105/173] arm_l2x0: Rename l2x0_state to L2x0State Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 106/173] arm_l2x0: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 107/173] arm_sysctl: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 108/173] eccmemctl: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 109/173] exynos4210_pmu: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 110/173] lm32_sys: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 111/173] milkymist-hpdmc: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 112/173] milkymist-pfpu: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 113/173] mst_fpga: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 114/173] puv3_pm: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 115/173] slavio_misc: QOM cast cleanup for MiscState Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 116/173] slavio_misc: QOM cast cleanup for APCState Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 117/173] zynq_slcr: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 118/173] cadence_gem: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 119/173] etraxfs_eth: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 120/173] etraxfs_eth: Rename fs_eth to ETRAXFSEthState Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 121/173] lan9118: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 122/173] lance: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 123/173] milkymist-minimac2: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 124/173] smc91c111: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 125/173] stellaris_enet: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 126/173] stellaris_enet: Fix NetClientInfo::cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 127/173] xgmac: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 128/173] xilinx_ethlite: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 129/173] ds1225y: Drop bogus qdev field from NvRamState Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 130/173] ds1225y: QOM cast cleanup for SysBusNvRamState Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 131/173] ppce500_spin: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 132/173] milkymist-memcard: " Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 133/173] pl181: Rename pl181_state to PL181State Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 134/173] pl181: QOM cast cleanup Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 135/173] sun4m: QOM cast cleanup for IDRegState Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 136/173] sun4m: QOM cast cleanup for AFXState Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 137/173] sun4m: QOM cast cleanup for PROMState Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 138/173] sun4m: QOM cast cleanup for RamDevice Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 139/173] sun4u: QOM cast cleanup for PROMState Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 140/173] sun4u: QOM cast cleanup for RamDevice Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 141/173] pl022: Rename pl022_state to PL022State Andreas Färber
2013-07-29 19:19 ` [Qemu-devel] [PULL 142/173] pl022: QOM cast cleanup Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 143/173] xilinx_spi: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 144/173] arm_timer: Rename sp804_state to SP804State Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 145/173] arm_timer: QOM cast cleanup for SP804State Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 146/173] arm_timer: QOM cast cleanup for icp_pit_state Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 147/173] cadence_ttc: QOM cast cleanup Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 148/173] etraxfs_timer: Rename etrax_timer to ETRAXTimerState Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 149/173] etraxfs_timer: QOM cast cleanup Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 150/173] exynos4210_mct: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 151/173] exynos4210_pwm: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 152/173] exynos4210_rtc: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 153/173] grlib_gptimer: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 154/173] lm32_timer: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 155/173] m48t59: QOM cast cleanup for M48t59SysBusState Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 156/173] milkymist-sysctl: QOM cast cleanup Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 157/173] pl031: Rename pl031_state to PL031State Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 158/173] pl031: QOM cast cleanup Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 159/173] puv3_ost: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 160/173] pxa2xx_timer: QOM'ify pxa25x-timer and pxa27x-timer Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 161/173] slavio_timer: QOM cast cleanup Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 162/173] tusb6010: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 163/173] xilinx_timer: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 164/173] sysbus: Drop FROM_SYSBUS() Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 165/173] sysbus: Remove unused sysbus_new() prototype Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 166/173] exynos4210_i2c: QOM cast cleanup Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 167/173] opencores_eth: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 168/173] mipsnet: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 169/173] kvmvapic: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 170/173] kvm/ioapic: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 171/173] ioapic: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 172/173] spapr_pci: " Andreas Färber
2013-07-29 19:20 ` [Qemu-devel] [PULL 173/173] sysbus: QOM parent field cleanup for SysBusDevice Andreas Färber
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=1375125630-24869-10-git-send-email-afaerber@suse.de \
--to=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).