From: Anthony Liguori <aliguori@us.ibm.com>
To: qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
Peter Maydell <peter.maydell@linaro.org>,
Anthony Liguori <aliguori@us.ibm.com>,
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>,
Jan Kiszka <jan.kiszka@siemens.com>,
Markus Armbruster <armbru@redhat.com>,
Luiz Capitulino <lcapitulino@redhat.com>
Subject: [Qemu-devel] [PATCH v3 023/197] pc: fill out most of the composition tree
Date: Mon, 12 Dec 2011 14:18:19 -0600 [thread overview]
Message-ID: <1323721273-32404-24-git-send-email-aliguori@us.ibm.com> (raw)
In-Reply-To: <1323721273-32404-1-git-send-email-aliguori@us.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
---
hw/acpi_piix4.c | 7 +++--
hw/ide/pci.c | 11 +++++++-
hw/kvmclock.c | 5 ++-
hw/kvmclock.h | 5 ++-
hw/pc.c | 49 ++++++++++++++++++++++++++++++++-------
hw/pc.h | 37 ++++++++++++++++-------------
hw/pc_piix.c | 68 ++++++++++++++++++++++++++++++++++--------------------
hw/piix_pci.c | 12 +++++++--
hw/usb-uhci.c | 4 +-
hw/usb-uhci.h | 2 +-
10 files changed, 134 insertions(+), 66 deletions(-)
diff --git a/hw/acpi_piix4.c b/hw/acpi_piix4.c
index d9075e6..401baaa 100644
--- a/hw/acpi_piix4.c
+++ b/hw/acpi_piix4.c
@@ -372,14 +372,15 @@ static int piix4_pm_initfn(PCIDevice *dev)
return 0;
}
-i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
- qemu_irq sci_irq, qemu_irq cmos_s3, qemu_irq smi_irq,
- int kvm_enabled)
+i2c_bus *piix4_pm_init(PCIBus *bus, DeviceState **pdev, int devfn,
+ uint32_t smb_io_base, qemu_irq sci_irq,
+ qemu_irq cmos_s3, qemu_irq smi_irq, int kvm_enabled)
{
PCIDevice *dev;
PIIX4PMState *s;
dev = pci_create(bus, devfn, "PIIX4_PM");
+ *pdev = &dev->qdev;
qdev_prop_set_uint32(&dev->qdev, "smb_io_base", smb_io_base);
s = DO_UPCAST(PIIX4PMState, dev, dev);
diff --git a/hw/ide/pci.c b/hw/ide/pci.c
index 49b823d..897bca2 100644
--- a/hw/ide/pci.c
+++ b/hw/ide/pci.c
@@ -498,9 +498,16 @@ void pci_ide_create_devs(PCIDevice *dev, DriveInfo **hd_table)
int i;
for (i = 0; i < 4; i++) {
- if (hd_table[i] == NULL)
+ char name[32];
+ IDEDevice *c;
+
+ if (hd_table[i] == NULL) {
continue;
- ide_create_drive(d->bus+bus[i], unit[i], hd_table[i]);
+ }
+
+ c = ide_create_drive(d->bus+bus[i], unit[i], hd_table[i]);
+ snprintf(name, sizeof(name), "drive[%d]", i);
+ qdev_property_add_child(&dev->qdev, name, &c->qdev, NULL);
}
}
diff --git a/hw/kvmclock.c b/hw/kvmclock.c
index 5388bc4..ddfaf3c 100644
--- a/hw/kvmclock.c
+++ b/hw/kvmclock.c
@@ -99,13 +99,14 @@ static SysBusDeviceInfo kvmclock_info = {
};
/* Note: Must be called after VCPU initialization. */
-void kvmclock_create(void)
+DeviceState *kvmclock_create(void)
{
if (kvm_enabled() &&
first_cpu->cpuid_kvm_features & ((1ULL << KVM_FEATURE_CLOCKSOURCE) |
(1ULL << KVM_FEATURE_CLOCKSOURCE2))) {
- sysbus_create_simple("kvmclock", -1, NULL);
+ return sysbus_create_simple("kvmclock", -1, NULL);
}
+ return NULL;
}
static void kvmclock_register_device(void)
diff --git a/hw/kvmclock.h b/hw/kvmclock.h
index 252ea13..40dda86 100644
--- a/hw/kvmclock.h
+++ b/hw/kvmclock.h
@@ -13,12 +13,13 @@
#ifdef CONFIG_KVM
-void kvmclock_create(void);
+DeviceState *kvmclock_create(void);
#else /* CONFIG_KVM */
-static inline void kvmclock_create(void)
+static inline DeviceState *kvmclock_create(void)
{
+ return NULL;
}
#endif /* !CONFIG_KVM */
diff --git a/hw/pc.c b/hw/pc.c
index 2fd124a..47e6fb9 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -849,15 +849,17 @@ static const int ne2000_irq[NE2000_NB_MAX] = { 9, 10, 11, 3, 4, 5 };
static const int parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc };
static const int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 };
-void pc_init_ne2k_isa(NICInfo *nd)
+DeviceState *pc_init_ne2k_isa(NICInfo *nd)
{
static int nb_ne2k = 0;
+ DeviceState *dev;
if (nb_ne2k == NE2000_NB_MAX)
- return;
- isa_ne2000_init(ne2000_io[nb_ne2k],
- ne2000_irq[nb_ne2k], nd);
+ return NULL;
+ dev = isa_ne2000_init(ne2000_io[nb_ne2k],
+ ne2000_irq[nb_ne2k], nd);
nb_ne2k++;
+ return dev;
}
int cpu_is_bsp(CPUState *env)
@@ -1118,7 +1120,9 @@ static void cpu_request_exit(void *opaque, int irq, int level)
}
}
-void pc_basic_device_init(qemu_irq *gsi,
+void pc_basic_device_init(DeviceState *board,
+ DeviceState *superio,
+ qemu_irq *gsi,
ISADevice **rtc_state,
ISADevice **floppy,
bool no_vmport)
@@ -1142,33 +1146,51 @@ void pc_basic_device_init(qemu_irq *gsi,
sysbus_connect_irq(sysbus_from_qdev(hpet), i, gsi[i]);
}
rtc_irq = qdev_get_gpio_in(hpet, 0);
+
+ qdev_property_add_child(board, "hpet", hpet, NULL);
}
}
*rtc_state = rtc_init(2000, rtc_irq);
+ qdev_property_add_child(superio, "rtc", &(*rtc_state)->qdev, NULL);
qemu_register_boot_set(pc_boot_set, *rtc_state);
pit = pit_init(0x40, 0);
+ qdev_property_add_child(superio, "pit", &pit->qdev, NULL);
+
+ /* FIXME not qdev */
pcspk_init(pit);
for(i = 0; i < MAX_SERIAL_PORTS; i++) {
if (serial_hds[i]) {
- serial_isa_init(i, serial_hds[i]);
+ DeviceState *dev;
+ char name[1024];
+
+ dev = serial_isa_init(i, serial_hds[i]);
+ snprintf(name, sizeof(name), "serial[%d]", i);
+ qdev_property_add_child(board, name, dev, NULL);
}
}
for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
if (parallel_hds[i]) {
- parallel_init(i, parallel_hds[i]);
+ DeviceState *dev;
+ char name[1024];
+
+ dev = parallel_init(i, parallel_hds[i]);
+ snprintf(name, sizeof(name), "parallel[%d]", i);
+ qdev_property_add_child(board, name, dev, NULL);
}
}
a20_line = qemu_allocate_irqs(handle_a20_line_change, first_cpu, 2);
i8042 = isa_create_simple("i8042");
+ qdev_property_add_child(superio, "pckbd", &i8042->qdev, NULL);
i8042_setup_a20_line(i8042, &a20_line[0]);
if (!no_vmport) {
vmport_init();
vmmouse = isa_try_create("vmmouse");
+ qdev_property_add_child(superio, "vmmouse", &vmmouse->qdev, NULL);
} else {
vmmouse = NULL;
}
@@ -1178,23 +1200,32 @@ void pc_basic_device_init(qemu_irq *gsi,
}
port92 = isa_create_simple("port92");
port92_init(port92, &a20_line[1]);
+ qdev_property_add_child(superio, "port92", &port92->qdev, NULL);
cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
+
+ /* FIXME not qdev */
DMA_init(0, cpu_exit_irq);
for(i = 0; i < MAX_FD; i++) {
fd[i] = drive_get(IF_FLOPPY, 0, i);
}
*floppy = fdctrl_init_isa(fd);
+ qdev_property_add_child(superio, "floppy", &(*floppy)->qdev, NULL);
}
-void pc_pci_device_init(PCIBus *pci_bus)
+void pc_pci_device_init(PCIBus *pci_bus, DeviceState *board)
{
int max_bus;
int bus;
max_bus = drive_get_max_bus(IF_SCSI);
for (bus = 0; bus <= max_bus; bus++) {
- pci_create_simple(pci_bus, -1, "lsi53c895a");
+ DeviceState *dev;
+ char name[32];
+
+ snprintf(name, sizeof(name), "scsi[%d]", bus);
+ dev = &pci_create_simple(pci_bus, -1, "lsi53c895a")->qdev;
+ qdev_property_add_child(board, name, dev, NULL);
}
}
diff --git a/hw/pc.h b/hw/pc.h
index 8d2e553..cd64755 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -20,39 +20,39 @@ SerialState *serial_mm_init(MemoryRegion *address_space,
target_phys_addr_t base, int it_shift,
qemu_irq irq, int baudbase,
CharDriverState *chr, enum device_endian);
-static inline bool serial_isa_init(int index, CharDriverState *chr)
+static inline DeviceState *serial_isa_init(int index, CharDriverState *chr)
{
ISADevice *dev;
dev = isa_try_create("isa-serial");
if (!dev) {
- return false;
+ return NULL;
}
qdev_prop_set_uint32(&dev->qdev, "index", index);
qdev_prop_set_chr(&dev->qdev, "chardev", chr);
if (qdev_init(&dev->qdev) < 0) {
- return false;
+ return NULL;
}
- return true;
+ return &dev->qdev;
}
void serial_set_frequency(SerialState *s, uint32_t frequency);
/* parallel.c */
-static inline bool parallel_init(int index, CharDriverState *chr)
+static inline DeviceState *parallel_init(int index, CharDriverState *chr)
{
ISADevice *dev;
dev = isa_try_create("isa-parallel");
if (!dev) {
- return false;
+ return NULL;
}
qdev_prop_set_uint32(&dev->qdev, "index", index);
qdev_prop_set_chr(&dev->qdev, "chardev", chr);
if (qdev_init(&dev->qdev) < 0) {
- return false;
+ return NULL;
}
- return true;
+ return &dev->qdev;
}
bool parallel_mm_init(target_phys_addr_t base, int it_shift, qemu_irq irq,
@@ -140,16 +140,18 @@ void pc_memory_init(MemoryRegion *system_memory,
MemoryRegion **ram_memory);
qemu_irq *pc_allocate_cpu_irq(void);
DeviceState *pc_vga_init(PCIBus *pci_bus);
-void pc_basic_device_init(qemu_irq *gsi,
+void pc_basic_device_init(DeviceState *board,
+ DeviceState *superio,
+ qemu_irq *gsi,
ISADevice **rtc_state,
ISADevice **floppy,
bool no_vmport);
-void pc_init_ne2k_isa(NICInfo *nd);
+DeviceState *pc_init_ne2k_isa(NICInfo *nd);
void pc_cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size,
const char *boot_device,
ISADevice *floppy, BusState *ide0, BusState *ide1,
ISADevice *s);
-void pc_pci_device_init(PCIBus *pci_bus);
+void pc_pci_device_init(PCIBus *pci_bus, DeviceState *board);
typedef void (*cpu_set_smm_t)(int smm, void *arg);
void cpu_smm_register(cpu_set_smm_t callback, void *arg);
@@ -164,9 +166,9 @@ int acpi_table_add(const char *table_desc);
/* acpi_piix.c */
-i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
- qemu_irq sci_irq, qemu_irq cmos_s3, qemu_irq smi_irq,
- int kvm_enabled);
+i2c_bus *piix4_pm_init(PCIBus *bus, DeviceState **pdev, int devfn,
+ uint32_t smb_io_base, qemu_irq sci_irq,
+ qemu_irq cmos_s3, qemu_irq smi_irq, int kvm_enabled);
void piix4_smbus_register_device(SMBusDevice *dev, uint8_t addr);
/* hpet.c */
@@ -181,6 +183,7 @@ struct PCII440FXState;
typedef struct PCII440FXState PCII440FXState;
PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn,
+ DeviceState **i440fx, DeviceState **piix3,
qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
@@ -227,7 +230,7 @@ DeviceState *pci_cirrus_vga_init(PCIBus *bus);
DeviceState *isa_cirrus_vga_init(MemoryRegion *address_space);
/* ne2000.c */
-static inline bool isa_ne2000_init(int base, int irq, NICInfo *nd)
+static inline DeviceState *isa_ne2000_init(int base, int irq, NICInfo *nd)
{
ISADevice *dev;
@@ -235,13 +238,13 @@ static inline bool isa_ne2000_init(int base, int irq, NICInfo *nd)
dev = isa_try_create("ne2k_isa");
if (!dev) {
- return false;
+ return NULL;
}
qdev_prop_set_uint32(&dev->qdev, "iobase", base);
qdev_prop_set_uint32(&dev->qdev, "irq", irq);
qdev_set_nic_properties(&dev->qdev, nd);
qdev_init_nofail(&dev->qdev);
- return true;
+ return &dev->qdev;
}
/* e820 types */
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 166c2fc..e4e2c26 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -53,7 +53,7 @@ static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 };
static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 };
static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
-static void ioapic_init(GSIState *gsi_state)
+static DeviceState *ioapic_init(GSIState *gsi_state)
{
DeviceState *dev;
SysBusDevice *d;
@@ -67,6 +67,8 @@ static void ioapic_init(GSIState *gsi_state)
for (i = 0; i < IOAPIC_NUM_PINS; i++) {
gsi_state->ioapic_irq[i] = qdev_get_gpio_in(dev, i);
}
+
+ return dev;
}
/* PC hardware initialisation */
@@ -99,12 +101,18 @@ static void pc_init1(MemoryRegion *system_memory,
MemoryRegion *ram_memory;
MemoryRegion *pci_memory;
MemoryRegion *rom_memory;
+ DeviceState *superio = NULL;
+ DeviceState *board;
DeviceState *dev;
+ board = qdev_create(NULL, "container");
+ qdev_property_add_child(qdev_get_root(), "pc", board, NULL);
+
pc_cpus_init(cpu_model);
if (kvmclock_enabled) {
- kvmclock_create();
+ dev = kvmclock_create();
+ qdev_property_add_child(board, "kvmclock", dev, NULL);
}
if (ram_size >= 0xe0000000 ) {
@@ -136,7 +144,10 @@ static void pc_init1(MemoryRegion *system_memory,
gsi = qemu_allocate_irqs(gsi_handler, gsi_state, GSI_NUM_PINS);
if (pci_enabled) {
- pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, gsi,
+ DeviceState *i440fx, *piix3;
+
+ pci_bus = i440fx_init(&i440fx_state, &piix3_devfn,
+ &i440fx, &piix3, gsi,
system_memory, system_io, ram_size,
below_4g_mem_size,
0x100000000ULL - below_4g_mem_size,
@@ -145,6 +156,9 @@ static void pc_init1(MemoryRegion *system_memory,
? 0
: ((uint64_t)1 << 62)),
pci_memory, ram_memory);
+
+ qdev_property_add_child(board, "host-controller", i440fx, NULL);
+ superio = piix3;
} else {
pci_bus = NULL;
i440fx_state = NULL;
@@ -164,30 +178,39 @@ static void pc_init1(MemoryRegion *system_memory,
gsi_state->i8259_irq[i] = i8259[i];
}
if (pci_enabled) {
- ioapic_init(gsi_state);
+ dev = ioapic_init(gsi_state);
+ qdev_property_add_child(board, "ioapic", dev, NULL);
}
pc_register_ferr_irq(gsi[13]);
dev = pc_vga_init(pci_enabled? pci_bus: NULL);
if (dev) {
- qdev_property_add_child(qdev_get_root(), "vga", dev, NULL);
+ qdev_property_add_child(board, "vga", dev, NULL);
}
if (xen_enabled()) {
- pci_create_simple(pci_bus, -1, "xen-platform");
+ dev = &pci_create_simple(pci_bus, -1, "xen-platform")->qdev;
+ qdev_property_add_child(board, "xen", dev, NULL);
}
/* init basic PC hardware */
- pc_basic_device_init(gsi, &rtc_state, &floppy, xen_enabled());
+ pc_basic_device_init(board, superio, gsi, &rtc_state,
+ &floppy, xen_enabled());
for(i = 0; i < nb_nics; i++) {
NICInfo *nd = &nd_table[i];
+ DeviceState *dev;
+ char buffer[32];
- if (!pci_enabled || (nd->model && strcmp(nd->model, "ne2k_isa") == 0))
- pc_init_ne2k_isa(nd);
- else
- pci_nic_init_nofail(nd, "e1000", NULL);
+ if (!pci_enabled || (nd->model && strcmp(nd->model, "ne2k_isa") == 0)) {
+ dev = pc_init_ne2k_isa(nd);
+ } else {
+ dev = &pci_nic_init_nofail(nd, "e1000", NULL)->qdev;
+ }
+
+ snprintf(buffer, sizeof(buffer), "nic[%d]", i);
+ qdev_property_add_child(board, buffer, dev, NULL);
}
ide_drive_get(hd, MAX_IDE_BUS);
@@ -200,33 +223,27 @@ static void pc_init1(MemoryRegion *system_memory,
}
idebus[0] = qdev_get_child_bus(&dev->qdev, "ide.0");
idebus[1] = qdev_get_child_bus(&dev->qdev, "ide.1");
+ qdev_property_add_child(board, "ide", &dev->qdev, NULL);
} else {
for(i = 0; i < MAX_IDE_BUS; i++) {
ISADevice *dev;
+ char buffer[32];
dev = isa_ide_init(ide_iobase[i], ide_iobase2[i], ide_irq[i],
hd[MAX_IDE_DEVS * i], hd[MAX_IDE_DEVS * i + 1]);
idebus[i] = qdev_get_child_bus(&dev->qdev, "ide.0");
+ snprintf(buffer, sizeof(buffer), "ide[%d]", i);
+ qdev_property_add_child(board, buffer, &dev->qdev, NULL);
}
}
- /* FIXME there's some major spaghetti here. Somehow we create the devices
- * on the PIIX before we actually create it. We create the PIIX3 deep in
- * the recess of the i440fx creation too and then lose the DeviceState.
- *
- * For now, let's "fix" this by making judicious use of paths. This is not
- * generally the right way to do this.
- */
-
- qdev_property_add_child(qdev_resolve_path("/i440fx/piix3", NULL),
- "rtc", (DeviceState *)rtc_state, NULL);
-
audio_init(gsi, pci_enabled ? pci_bus : NULL);
pc_cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device,
floppy, idebus[0], idebus[1], rtc_state);
if (pci_enabled && usb_enabled) {
- usb_uhci_piix3_init(pci_bus, piix3_devfn + 2);
+ dev = usb_uhci_piix3_init(pci_bus, piix3_devfn + 2);
+ qdev_property_add_child(board, "usb-host", dev, NULL);
}
if (pci_enabled && acpi_enabled) {
@@ -239,14 +256,15 @@ static void pc_init1(MemoryRegion *system_memory,
}
smi_irq = qemu_allocate_irqs(pc_acpi_smi_interrupt, first_cpu, 1);
/* TODO: Populate SPD eeprom data. */
- smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100,
+ smbus = piix4_pm_init(pci_bus, &dev, piix3_devfn + 3, 0xb100,
gsi[9], *cmos_s3, *smi_irq,
kvm_enabled());
+ qdev_property_add_child(superio, "pm", dev, NULL);
smbus_eeprom_init(smbus, 8, NULL, 0);
}
if (pci_enabled) {
- pc_pci_device_init(pci_bus);
+ pc_pci_device_init(pci_bus, board);
}
}
diff --git a/hw/piix_pci.c b/hw/piix_pci.c
index d785d4b..e690ee1 100644
--- a/hw/piix_pci.c
+++ b/hw/piix_pci.c
@@ -262,6 +262,7 @@ static int i440fx_initfn(PCIDevice *dev)
static PCIBus *i440fx_common_init(const char *device_name,
PCII440FXState **pi440fx_state,
+ DeviceState **i440fx,
int *piix3_devfn,
qemu_irq *pic,
MemoryRegion *address_space_mem,
@@ -288,7 +289,7 @@ static PCIBus *i440fx_common_init(const char *device_name,
address_space_io, 0);
s->bus = b;
qdev_init_nofail(dev);
- qdev_property_add_child(qdev_get_root(), "i440fx", dev, NULL);
+ *i440fx = dev;
d = pci_create_simple(b, 0, device_name);
*pi440fx_state = DO_UPCAST(PCII440FXState, dev, d);
@@ -296,6 +297,9 @@ static PCIBus *i440fx_common_init(const char *device_name,
f->system_memory = address_space_mem;
f->pci_address_space = pci_address_space;
f->ram_memory = ram_memory;
+
+ qdev_property_add_child(dev, "i440fx", &d->qdev, NULL);
+
memory_region_init_alias(&f->pci_hole, "pci-hole", f->pci_address_space,
pci_hole_start, pci_hole_size);
memory_region_add_subregion(f->system_memory, pci_hole_start, &f->pci_hole);
@@ -325,7 +329,7 @@ static PCIBus *i440fx_common_init(const char *device_name,
pci_bus_irqs(b, piix3_set_irq, pci_slot_get_pirq, piix3,
PIIX_NUM_PIRQS);
- qdev_property_add_child(dev, "piix3", &piix3->dev.qdev, NULL);
+ qdev_property_add_child(&d->qdev, "piix3", &piix3->dev.qdev, NULL);
}
piix3->pic = pic;
@@ -344,6 +348,7 @@ static PCIBus *i440fx_common_init(const char *device_name,
}
PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix3_devfn,
+ DeviceState **i440fx, DeviceState **piix3,
qemu_irq *pic,
MemoryRegion *address_space_mem,
MemoryRegion *address_space_io,
@@ -357,11 +362,12 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix3_devfn,
{
PCIBus *b;
- b = i440fx_common_init("i440FX", pi440fx_state, piix3_devfn, pic,
+ b = i440fx_common_init("i440FX", pi440fx_state, i440fx, piix3_devfn, pic,
address_space_mem, address_space_io, ram_size,
pci_hole_start, pci_hole_size,
pci_hole64_size, pci_hole64_size,
pci_memory, ram_memory);
+ *piix3 = &(*pi440fx_state)->piix3->dev.qdev;
return b;
}
diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index f9e3ea5..3e4456a 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -1269,9 +1269,9 @@ static void uhci_register(void)
}
device_init(uhci_register);
-void usb_uhci_piix3_init(PCIBus *bus, int devfn)
+DeviceState *usb_uhci_piix3_init(PCIBus *bus, int devfn)
{
- pci_create_simple(bus, devfn, "piix3-usb-uhci");
+ return &pci_create_simple(bus, devfn, "piix3-usb-uhci")->qdev;
}
void usb_uhci_piix4_init(PCIBus *bus, int devfn)
diff --git a/hw/usb-uhci.h b/hw/usb-uhci.h
index 3e4d377..1fef610 100644
--- a/hw/usb-uhci.h
+++ b/hw/usb-uhci.h
@@ -3,7 +3,7 @@
#include "qemu-common.h"
-void usb_uhci_piix3_init(PCIBus *bus, int devfn);
+DeviceState *usb_uhci_piix3_init(PCIBus *bus, int devfn);
void usb_uhci_piix4_init(PCIBus *bus, int devfn);
void usb_uhci_vt82c686b_init(PCIBus *bus, int devfn);
--
1.7.4.1
next prev parent reply other threads:[~2011-12-12 20:23 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-12 20:17 [Qemu-devel] [PATCH v3 000/197] qom: dynamic properties and composition tree (v2) Anthony Liguori
2011-12-12 20:17 ` [Qemu-devel] [PATCH v3 001/197] qom: add a reference count to qdev objects Anthony Liguori
2011-12-12 20:28 ` Anthony Liguori
2011-12-12 20:17 ` [Qemu-devel] [PATCH v3 002/197] qom: add new dynamic property infrastructure based on Visitors (v2) Anthony Liguori
2011-12-12 20:17 ` [Qemu-devel] [PATCH v3 003/197] qom: register legacy properties as new style properties (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 004/197] qom: introduce root device Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 005/197] qdev: provide an interface to return canonical path from root (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 006/197] qdev: provide a path resolution (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 007/197] qom: add child properties (composition) (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 008/197] qom: add link properties (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 009/197] qapi: allow a 'gen' key to suppress code generation Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 010/197] qmp: add qom-list command Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 011/197] qom: qom_{get, set} monitor commands (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 012/197] qdev: add explicitly named devices to the root complex Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 013/197] dev: add an anonymous peripheral container Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 014/197] rtc: make piix3 set the rtc as a child (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 015/197] rtc: add a dynamic property for retrieving the date Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 016/197] qom: optimize qdev_get_canonical_path using a parent link Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 017/197] qmp: make qmp.py easier to use Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 018/197] qom: add test tools (v2) Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 019/197] bug fix spotted by paolo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 020/197] qom: add vga node to the pc composition tree Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 021/197] qom: add string property type Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 022/197] qdev: add a qdev_get_type() function and expose as a 'type' property Anthony Liguori
2011-12-12 20:18 ` Anthony Liguori [this message]
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 024/197] i440fx: split out piix3 device Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 025/197] i440fx: rename piix_pci -> i440fx Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 026/197] qom: add qobject Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 027/197] rename qobject -> object Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 028/197] more renames Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 029/197] Start integration of qom w/qdev Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 030/197] qdev: move qdev->info to class Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 031/197] qdev: don't access name through info Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 032/197] qdev: user a wrapper to access reset and promote reset to a class method Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 033/197] a little better approach to this Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 034/197] qdev: add isa-device as a subclass of device Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 035/197] isa: more isa stuff Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 036/197] qom: make pcidevice part of the hierarchy Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 039/197] virtio-serial-port Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 040/197] get rid of more DO_UPCAST Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 041/197] add class_init to deviceinfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 042/197] isa: move methods from isadeviceinfo to isadeviceclass Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 043/197] kill off ISADeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 044/197] usb: don't access dev->info directly Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 045/197] usb: get rid of info pointer Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 046/197] usb: promote all of the methods for USBDevice to class methods Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 047/197] usb: use a factory instead of doing silly things for legacy Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 048/197] usb: kill USBDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 049/197] usb-hid: simply class initialization a bit Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 050/197] accessors for scsideviceinfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 051/197] drop info link in SCSIDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 052/197] move methods out of SCSIDeviceInfo into SCSIDeviceClass Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 053/197] kill off SCSIDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 054/197] get rid of CCIDCardInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 055/197] rename i2c_slave -> I2CSlave Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 056/197] add I2CSlave to the type hierarchy Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 057/197] add SMBusDevice to the type hiearchy Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 058/197] fixup type registration Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 059/197] kill off SMBusDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 060/197] add guards Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 061/197] killall I2CSlaveInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 062/197] killall HDACodecDeviceInfo Anthony Liguori
2011-12-12 20:18 ` [Qemu-devel] [PATCH v3 063/197] make spapr a bit more patch monkey friendly Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 064/197] killall VIOsPAPRDeviceInfo Anthony Liguori
2011-12-13 2:04 ` Michael Ellerman
2011-12-13 2:10 ` Anthony Liguori
2011-12-13 2:22 ` Michael Ellerman
2011-12-13 2:25 ` Anthony Liguori
2011-12-13 3:26 ` David Gibson
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 065/197] qxl: be more patch monkey friendly Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 066/197] make es1370 more script " Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 067/197] remove arrays of PCIDeviceInfo Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 068/197] Patch monkey PCIDeviceInfo conversion Anthony Liguori
2011-12-12 20:19 ` [Qemu-devel] [PATCH v3 069/197] patch monkey, that funky monkey 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=1323721273-32404-24-git-send-email-aliguori@us.ibm.com \
--to=aliguori@us.ibm.com \
--cc=armbru@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.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 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).