mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
QOM device refactorings
* Fix QOM and ISA documentation errors * Extend object_initialize() et al. to check the instance size -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQIcBAABAgAGBQJSIPBUAAoJEPou0S0+fgE/Wo0QAISAHVdHBvG7YzrgnpX89hCC MCqk5ny0FDZtlJXI5mqitgtBC0aqdhwgRxxfxjZ0/g7e8NysPUkWU9Zn7b/6WWKu A4ckRqxAVR6ZR0TNX9XvcoMoaebN0v5cfXDGjjqizs8HXdfs1bbAK5husMTka5df qDgRoFPEd1NmA/qpTu7EK74dIRkiB0o5c7Iyc8tNdkFK6it3fn8FW4fL0mk/61dc 5VwZaIb1UMg8RAh/LMbdnIanWHYM8Yg7DMljdA4frZ53x5R82HxedfGB36L7YRwF GlgjxUn+/M1ZFdnzlX+cc330q82K0Tg3C94su1tR/3FuY+Da/9f97/e5WAYIN3v1 peneh6szGemqRJD1TxBxvoq2GDHVIgx7xcsHjyOWfy08XDcO0UUF7WU1dNddhEl8 9DX1tihSZJNugKoB2QNBZWcn1FPVAnxpbUfsAt/m1kdbxGPnOM2McEIOwabcQhNl odht/aEKB5A8TeRxFKBwozMXxFjh7AX2m8/YsQlApBWKefIV3411/WmO2tEg5kts 1vO5ZyBM8lOoO5QK/Uvqne0hi/8hALyoO3v9e2IIAd3yE9hYUhk/sQ5our/bfW+M auiaoTcVvpFac1nBTsvY4Be1e+B2xqMMxLpsvsmENHcEUCOcAsbCXG/t1NkJR66+ ZQLaX5ioxgd37zKIY8dT =LiUs -----END PGP SIGNATURE----- Merge remote-tracking branch 'afaerber/tags/qom-devices-for-anthony' into staging QOM device refactorings * Fix QOM and ISA documentation errors * Extend object_initialize() et al. to check the instance size # gpg: Signature made Fri 30 Aug 2013 02:19:48 PM CDT using RSA key ID 3E7E013F # gpg: Can't check signature: public key not found # By Andreas Färber (14) and others # Via Andreas Färber * afaerber/tags/qom-devices-for-anthony: isa: Fix documentation of isa_register_portio_list() qom: Assert instance size in object_initialize_with_type() qom: Pass available size to object_initialize() qdev: Pass size to qbus_create_inplace() virtio-mmio: Pass size to virtio_mmio_bus_new() virtio-ccw: Pass size to virtio_ccw_bus_new() s390-virtio-bus: Pass size to virtio_s390_bus_new() virtio-pci: Pass size to virtio_pci_bus_new() usb: Pass size to usb_bus_new() scsi: Pass size to scsi_bus_new() pci: Pass size to pci_bus_new_inplace() ide: Pass size to ide_bus_new() ipack: Pass size to ipack_bus_new_inplace() intel-hda: Pass size to hda_codec_bus_init() qom: Fix object_initialize_with_type() argument name in documentation virtio: Remove unnecessary OBJECT() casts object: Fix typo in qom/object.h
This commit is contained in:
commit
5cff81f098
57 changed files with 154 additions and 122 deletions
|
@ -40,11 +40,11 @@ static const TypeInfo hda_codec_bus_info = {
|
|||
.instance_size = sizeof(HDACodecBus),
|
||||
};
|
||||
|
||||
void hda_codec_bus_init(DeviceState *dev, HDACodecBus *bus,
|
||||
void hda_codec_bus_init(DeviceState *dev, HDACodecBus *bus, size_t bus_size,
|
||||
hda_codec_response_func response,
|
||||
hda_codec_xfer_func xfer)
|
||||
{
|
||||
qbus_create_inplace(&bus->qbus, TYPE_HDA_BUS, dev, NULL);
|
||||
qbus_create_inplace(bus, bus_size, TYPE_HDA_BUS, dev, NULL);
|
||||
bus->response = response;
|
||||
bus->xfer = xfer;
|
||||
}
|
||||
|
@ -1142,7 +1142,7 @@ static int intel_hda_init(PCIDevice *pci)
|
|||
msi_init(&d->pci, 0x50, 1, true, false);
|
||||
}
|
||||
|
||||
hda_codec_bus_init(DEVICE(pci), &d->codecs,
|
||||
hda_codec_bus_init(DEVICE(pci), &d->codecs, sizeof(d->codecs),
|
||||
intel_hda_response, intel_hda_xfer);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -48,7 +48,7 @@ struct HDACodecDevice {
|
|||
uint32_t cad; /* codec address */
|
||||
};
|
||||
|
||||
void hda_codec_bus_init(DeviceState *dev, HDACodecBus *bus,
|
||||
void hda_codec_bus_init(DeviceState *dev, HDACodecBus *bus, size_t bus_size,
|
||||
hda_codec_response_func response,
|
||||
hda_codec_xfer_func xfer);
|
||||
HDACodecDevice *hda_codec_find(HDACodecBus *bus, uint32_t cad);
|
||||
|
|
|
@ -24,11 +24,12 @@ IPackDevice *ipack_device_find(IPackBus *bus, int32_t slot)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void ipack_bus_new_inplace(IPackBus *bus, DeviceState *parent,
|
||||
void ipack_bus_new_inplace(IPackBus *bus, size_t bus_size,
|
||||
DeviceState *parent,
|
||||
const char *name, uint8_t n_slots,
|
||||
qemu_irq_handler handler)
|
||||
{
|
||||
qbus_create_inplace(&bus->qbus, TYPE_IPACK_BUS, parent, name);
|
||||
qbus_create_inplace(bus, bus_size, TYPE_IPACK_BUS, parent, name);
|
||||
bus->n_slots = n_slots;
|
||||
bus->set_irq = handler;
|
||||
}
|
||||
|
|
|
@ -72,7 +72,8 @@ extern const VMStateDescription vmstate_ipack_device;
|
|||
VMSTATE_STRUCT(_field, _state, 1, vmstate_ipack_device, IPackDevice)
|
||||
|
||||
IPackDevice *ipack_device_find(IPackBus *bus, int32_t slot);
|
||||
void ipack_bus_new_inplace(IPackBus *bus, DeviceState *parent,
|
||||
void ipack_bus_new_inplace(IPackBus *bus, size_t bus_size,
|
||||
DeviceState *parent,
|
||||
const char *name, uint8_t n_slots,
|
||||
qemu_irq_handler handler);
|
||||
|
||||
|
|
|
@ -607,7 +607,7 @@ static int tpci200_initfn(PCIDevice *pci_dev)
|
|||
pci_register_bar(&s->dev, 4, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->las2);
|
||||
pci_register_bar(&s->dev, 5, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->las3);
|
||||
|
||||
ipack_bus_new_inplace(&s->bus, DEVICE(&s->dev), NULL,
|
||||
ipack_bus_new_inplace(&s->bus, sizeof(s->bus), DEVICE(pci_dev), NULL,
|
||||
N_MODULES, tpci200_set_irq);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -911,8 +911,8 @@ static int virtio_serial_device_init(VirtIODevice *vdev)
|
|||
sizeof(struct virtio_console_config));
|
||||
|
||||
/* Spawn a new virtio-serial bus on which the ports will ride as devices */
|
||||
qbus_create_inplace(&vser->bus.qbus, TYPE_VIRTIO_SERIAL_BUS, qdev,
|
||||
vdev->bus_name);
|
||||
qbus_create_inplace(&vser->bus, sizeof(vser->bus), TYPE_VIRTIO_SERIAL_BUS,
|
||||
qdev, vdev->bus_name);
|
||||
vser->bus.qbus.allow_hotplug = 1;
|
||||
vser->bus.vser = vser;
|
||||
QTAILQ_INIT(&vser->ports);
|
||||
|
|
|
@ -470,10 +470,10 @@ static void bus_unparent(Object *obj)
|
|||
}
|
||||
}
|
||||
|
||||
void qbus_create_inplace(void *bus, const char *typename,
|
||||
void qbus_create_inplace(void *bus, size_t size, const char *typename,
|
||||
DeviceState *parent, const char *name)
|
||||
{
|
||||
object_initialize(bus, typename);
|
||||
object_initialize(bus, size, typename);
|
||||
qbus_realize(bus, parent, name);
|
||||
}
|
||||
|
||||
|
|
|
@ -276,8 +276,8 @@ static void main_system_bus_create(void)
|
|||
/* assign main_system_bus before qbus_create_inplace()
|
||||
* in order to make "if (bus != sysbus_get_default())" work */
|
||||
main_system_bus = g_malloc0(system_bus_info.instance_size);
|
||||
qbus_create_inplace(main_system_bus, TYPE_SYSTEM_BUS, NULL,
|
||||
"main-system-bus");
|
||||
qbus_create_inplace(main_system_bus, system_bus_info.instance_size,
|
||||
TYPE_SYSTEM_BUS, NULL, "main-system-bus");
|
||||
OBJECT(main_system_bus)->free = g_free;
|
||||
object_property_add_child(container_get(qdev_get_machine(),
|
||||
"/unattached"),
|
||||
|
|
|
@ -90,7 +90,8 @@ static void icc_bridge_init(Object *obj)
|
|||
ICCBridgeState *s = ICC_BRIGDE(obj);
|
||||
SysBusDevice *sb = SYS_BUS_DEVICE(obj);
|
||||
|
||||
qbus_create_inplace(&s->icc_bus, TYPE_ICC_BUS, DEVICE(s), "icc");
|
||||
qbus_create_inplace(&s->icc_bus, sizeof(s->icc_bus), TYPE_ICC_BUS,
|
||||
DEVICE(s), "icc");
|
||||
|
||||
/* Do not change order of registering regions,
|
||||
* APIC must be first registered region, board maps it by 0 index
|
||||
|
|
|
@ -579,8 +579,10 @@ static void xilinx_axidma_init(Object *obj)
|
|||
(Object **) &s->tx_control_dev, &errp);
|
||||
assert_no_error(errp);
|
||||
|
||||
object_initialize(&s->rx_data_dev, TYPE_XILINX_AXI_DMA_DATA_STREAM);
|
||||
object_initialize(&s->rx_control_dev, TYPE_XILINX_AXI_DMA_CONTROL_STREAM);
|
||||
object_initialize(&s->rx_data_dev, sizeof(s->rx_data_dev),
|
||||
TYPE_XILINX_AXI_DMA_DATA_STREAM);
|
||||
object_initialize(&s->rx_control_dev, sizeof(s->rx_control_dev),
|
||||
TYPE_XILINX_AXI_DMA_CONTROL_STREAM);
|
||||
object_property_add_child(OBJECT(s), "axistream-connected-target",
|
||||
(Object *)&s->rx_data_dev, &errp);
|
||||
assert_no_error(errp);
|
||||
|
|
|
@ -1175,7 +1175,7 @@ void ahci_init(AHCIState *s, DeviceState *qdev, AddressSpace *as, int ports)
|
|||
for (i = 0; i < s->ports; i++) {
|
||||
AHCIDevice *ad = &s->dev[i];
|
||||
|
||||
ide_bus_new(&ad->port, qdev, i, 1);
|
||||
ide_bus_new(&ad->port, sizeof(ad->port), qdev, i, 1);
|
||||
ide_init2(&ad->port, irqs[i]);
|
||||
|
||||
ad->hba = s;
|
||||
|
|
|
@ -289,7 +289,7 @@ static int pci_cmd646_ide_initfn(PCIDevice *dev)
|
|||
|
||||
irq = qemu_allocate_irqs(cmd646_set_irq, d, 2);
|
||||
for (i = 0; i < 2; i++) {
|
||||
ide_bus_new(&d->bus[i], DEVICE(dev), i, 2);
|
||||
ide_bus_new(&d->bus[i], sizeof(d->bus[i]), DEVICE(dev), i, 2);
|
||||
ide_init2(&d->bus[i], irq[i]);
|
||||
|
||||
bmdma_init(&d->bus[i], &d->bmdma[i], d);
|
||||
|
|
|
@ -576,7 +576,8 @@ void ide_atapi_cmd(IDEState *s);
|
|||
void ide_atapi_cmd_reply_end(IDEState *s);
|
||||
|
||||
/* hw/ide/qdev.c */
|
||||
void ide_bus_new(IDEBus *idebus, DeviceState *dev, int bus_id, int max_units);
|
||||
void ide_bus_new(IDEBus *idebus, size_t idebus_size, DeviceState *dev,
|
||||
int bus_id, int max_units);
|
||||
IDEDevice *ide_create_drive(IDEBus *bus, int unit, DriveInfo *drive);
|
||||
|
||||
#endif /* HW_IDE_INTERNAL_H */
|
||||
|
|
|
@ -70,7 +70,7 @@ static void isa_ide_realizefn(DeviceState *dev, Error **errp)
|
|||
ISADevice *isadev = ISA_DEVICE(dev);
|
||||
ISAIDEState *s = ISA_IDE(dev);
|
||||
|
||||
ide_bus_new(&s->bus, dev, 0, 2);
|
||||
ide_bus_new(&s->bus, sizeof(s->bus), dev, 0, 2);
|
||||
ide_init_ioport(&s->bus, isadev, s->iobase, s->iobase2);
|
||||
isa_init_irq(isadev, &s->irq, s->isairq);
|
||||
ide_init2(&s->bus, s->irq);
|
||||
|
|
|
@ -547,7 +547,7 @@ static void macio_ide_initfn(Object *obj)
|
|||
SysBusDevice *d = SYS_BUS_DEVICE(obj);
|
||||
MACIOIDEState *s = MACIO_IDE(obj);
|
||||
|
||||
ide_bus_new(&s->bus, DEVICE(obj), 0, 2);
|
||||
ide_bus_new(&s->bus, sizeof(s->bus), DEVICE(obj), 0, 2);
|
||||
memory_region_init_io(&s->mem, obj, &pmac_ide_ops, s, "pmac-ide", 0x1000);
|
||||
sysbus_init_mmio(d, &s->mem);
|
||||
sysbus_init_irq(d, &s->irq);
|
||||
|
|
|
@ -137,7 +137,7 @@ static void mmio_ide_initfn(Object *obj)
|
|||
SysBusDevice *d = SYS_BUS_DEVICE(obj);
|
||||
MMIOState *s = MMIO_IDE(obj);
|
||||
|
||||
ide_bus_new(&s->bus, DEVICE(obj), 0, 2);
|
||||
ide_bus_new(&s->bus, sizeof(s->bus), DEVICE(obj), 0, 2);
|
||||
sysbus_init_irq(d, &s->irq);
|
||||
}
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ static void pci_piix_init_ports(PCIIDEState *d) {
|
|||
int i;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
ide_bus_new(&d->bus[i], DEVICE(d), i, 2);
|
||||
ide_bus_new(&d->bus[i], sizeof(d->bus[i]), DEVICE(d), i, 2);
|
||||
ide_init_ioport(&d->bus[i], NULL, port_info[i].iobase,
|
||||
port_info[i].iobase2);
|
||||
ide_init2(&d->bus[i], isa_get_irq(NULL, port_info[i].isairq));
|
||||
|
|
|
@ -47,9 +47,10 @@ static const TypeInfo ide_bus_info = {
|
|||
.class_init = ide_bus_class_init,
|
||||
};
|
||||
|
||||
void ide_bus_new(IDEBus *idebus, DeviceState *dev, int bus_id, int max_units)
|
||||
void ide_bus_new(IDEBus *idebus, size_t idebus_size, DeviceState *dev,
|
||||
int bus_id, int max_units)
|
||||
{
|
||||
qbus_create_inplace(&idebus->qbus, TYPE_IDE_BUS, dev, NULL);
|
||||
qbus_create_inplace(idebus, idebus_size, TYPE_IDE_BUS, dev, NULL);
|
||||
idebus->bus_id = bus_id;
|
||||
idebus->max_units = max_units;
|
||||
}
|
||||
|
|
|
@ -159,7 +159,7 @@ static void vt82c686b_init_ports(PCIIDEState *d) {
|
|||
int i;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
ide_bus_new(&d->bus[i], DEVICE(d), i, 2);
|
||||
ide_bus_new(&d->bus[i], sizeof(d->bus[i]), DEVICE(d), i, 2);
|
||||
ide_init_ioport(&d->bus[i], NULL, port_info[i].iobase,
|
||||
port_info[i].iobase2);
|
||||
ide_init2(&d->bus[i], isa_get_irq(NULL, port_info[i].isairq));
|
||||
|
|
|
@ -661,7 +661,7 @@ static void xics_realize(DeviceState *dev, Error **errp)
|
|||
icp->ss = g_malloc0(icp->nr_servers*sizeof(ICPState));
|
||||
for (i = 0; i < icp->nr_servers; i++) {
|
||||
char buffer[32];
|
||||
object_initialize(&icp->ss[i], TYPE_ICP);
|
||||
object_initialize(&icp->ss[i], sizeof(icp->ss[i]), TYPE_ICP);
|
||||
snprintf(buffer, sizeof(buffer), "icp[%d]", i);
|
||||
object_property_add_child(OBJECT(icp), buffer, OBJECT(&icp->ss[i]), NULL);
|
||||
qdev_init_nofail(DEVICE(&icp->ss[i]));
|
||||
|
|
|
@ -711,8 +711,8 @@ static void cuda_initfn(Object *obj)
|
|||
s->timers[i].index = i;
|
||||
}
|
||||
|
||||
qbus_create_inplace((BusState *)&s->adb_bus, TYPE_ADB_BUS, DEVICE(obj),
|
||||
"adb.0");
|
||||
qbus_create_inplace(&s->adb_bus, sizeof(s->adb_bus), TYPE_ADB_BUS,
|
||||
DEVICE(obj), "adb.0");
|
||||
}
|
||||
|
||||
static void cuda_class_init(ObjectClass *oc, void *data)
|
||||
|
|
|
@ -202,11 +202,12 @@ static int macio_oldworld_initfn(PCIDevice *d)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void macio_init_ide(MacIOState *s, MACIOIDEState *ide, int index)
|
||||
static void macio_init_ide(MacIOState *s, MACIOIDEState *ide, size_t ide_size,
|
||||
int index)
|
||||
{
|
||||
gchar *name;
|
||||
|
||||
object_initialize(ide, TYPE_MACIO_IDE);
|
||||
object_initialize(ide, ide_size, TYPE_MACIO_IDE);
|
||||
qdev_set_parent_bus(DEVICE(ide), sysbus_get_default());
|
||||
memory_region_add_subregion(&s->bar, 0x1f000 + ((index + 1) * 0x1000),
|
||||
&ide->mem);
|
||||
|
@ -224,13 +225,13 @@ static void macio_oldworld_init(Object *obj)
|
|||
|
||||
qdev_init_gpio_out(DEVICE(obj), os->irqs, ARRAY_SIZE(os->irqs));
|
||||
|
||||
object_initialize(&os->nvram, TYPE_MACIO_NVRAM);
|
||||
object_initialize(&os->nvram, sizeof(os->nvram), TYPE_MACIO_NVRAM);
|
||||
dev = DEVICE(&os->nvram);
|
||||
qdev_prop_set_uint32(dev, "size", 0x2000);
|
||||
qdev_prop_set_uint32(dev, "it_shift", 4);
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
macio_init_ide(s, &os->ide[i], i);
|
||||
macio_init_ide(s, &os->ide[i], sizeof(os->ide[i]), i);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -310,7 +311,7 @@ static void macio_newworld_init(Object *obj)
|
|||
qdev_init_gpio_out(DEVICE(obj), ns->irqs, ARRAY_SIZE(ns->irqs));
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
macio_init_ide(s, &ns->ide[i], i);
|
||||
macio_init_ide(s, &ns->ide[i], sizeof(ns->ide[i]), i);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -321,7 +322,7 @@ static void macio_instance_init(Object *obj)
|
|||
|
||||
memory_region_init(&s->bar, NULL, "macio", 0x80000);
|
||||
|
||||
object_initialize(&s->cuda, TYPE_CUDA);
|
||||
object_initialize(&s->cuda, sizeof(s->cuda), TYPE_CUDA);
|
||||
qdev_set_parent_bus(DEVICE(&s->cuda), sysbus_get_default());
|
||||
object_property_add_child(obj, "cuda", OBJECT(&s->cuda), NULL);
|
||||
|
||||
|
|
|
@ -990,8 +990,10 @@ static void xilinx_enet_init(Object *obj)
|
|||
(Object **) &s->tx_control_dev, &errp);
|
||||
assert_no_error(errp);
|
||||
|
||||
object_initialize(&s->rx_data_dev, TYPE_XILINX_AXI_ENET_DATA_STREAM);
|
||||
object_initialize(&s->rx_control_dev, TYPE_XILINX_AXI_ENET_CONTROL_STREAM);
|
||||
object_initialize(&s->rx_data_dev, sizeof(s->rx_data_dev),
|
||||
TYPE_XILINX_AXI_ENET_DATA_STREAM);
|
||||
object_initialize(&s->rx_control_dev, sizeof(s->rx_control_dev),
|
||||
TYPE_XILINX_AXI_ENET_CONTROL_STREAM);
|
||||
object_property_add_child(OBJECT(s), "axistream-connected-target",
|
||||
(Object *)&s->rx_data_dev, &errp);
|
||||
assert_no_error(errp);
|
||||
|
|
|
@ -155,11 +155,11 @@ static void raven_pcihost_initfn(Object *obj)
|
|||
MemoryRegion *address_space_io = get_system_io();
|
||||
DeviceState *pci_dev;
|
||||
|
||||
pci_bus_new_inplace(&s->pci_bus, DEVICE(obj), NULL,
|
||||
pci_bus_new_inplace(&s->pci_bus, sizeof(s->pci_bus), DEVICE(obj), NULL,
|
||||
address_space_mem, address_space_io, 0, TYPE_PCI_BUS);
|
||||
h->bus = &s->pci_bus;
|
||||
|
||||
object_initialize(&s->pci_dev, TYPE_RAVEN_PCI_DEVICE);
|
||||
object_initialize(&s->pci_dev, sizeof(s->pci_dev), TYPE_RAVEN_PCI_DEVICE);
|
||||
pci_dev = DEVICE(&s->pci_dev);
|
||||
qdev_set_parent_bus(pci_dev, BUS(&s->pci_bus));
|
||||
object_property_set_int(OBJECT(&s->pci_dev), PCI_DEVFN(0, 0), "addr",
|
||||
|
|
|
@ -133,7 +133,7 @@ static void q35_host_initfn(Object *obj)
|
|||
memory_region_init_io(&phb->data_mem, obj, &pci_host_data_le_ops, phb,
|
||||
"pci-conf-data", 4);
|
||||
|
||||
object_initialize(&s->mch, TYPE_MCH_PCI_DEVICE);
|
||||
object_initialize(&s->mch, sizeof(s->mch), TYPE_MCH_PCI_DEVICE);
|
||||
object_property_add_child(OBJECT(s), "mch", OBJECT(&s->mch), NULL);
|
||||
qdev_prop_set_uint32(DEVICE(&s->mch), "addr", PCI_DEVFN(0, 0));
|
||||
qdev_prop_set_bit(DEVICE(&s->mch), "multifunction", false);
|
||||
|
|
|
@ -384,12 +384,12 @@ static void pci_vpb_init(Object *obj)
|
|||
memory_region_init(&s->pci_io_space, OBJECT(s), "pci_io", 1ULL << 32);
|
||||
memory_region_init(&s->pci_mem_space, OBJECT(s), "pci_mem", 1ULL << 32);
|
||||
|
||||
pci_bus_new_inplace(&s->pci_bus, DEVICE(obj), "pci",
|
||||
pci_bus_new_inplace(&s->pci_bus, sizeof(s->pci_bus), DEVICE(obj), "pci",
|
||||
&s->pci_mem_space, &s->pci_io_space,
|
||||
PCI_DEVFN(11, 0), TYPE_PCI_BUS);
|
||||
h->bus = &s->pci_bus;
|
||||
|
||||
object_initialize(&s->pci_dev, TYPE_VERSATILE_PCI_HOST);
|
||||
object_initialize(&s->pci_dev, sizeof(s->pci_dev), TYPE_VERSATILE_PCI_HOST);
|
||||
qdev_set_parent_bus(DEVICE(&s->pci_dev), BUS(&s->pci_bus));
|
||||
|
||||
/* Window sizes for VersatilePB; realview_pci's init will override */
|
||||
|
|
|
@ -312,13 +312,13 @@ bool pci_bus_is_root(PCIBus *bus)
|
|||
return !bus->parent_dev;
|
||||
}
|
||||
|
||||
void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent,
|
||||
void pci_bus_new_inplace(PCIBus *bus, size_t bus_size, DeviceState *parent,
|
||||
const char *name,
|
||||
MemoryRegion *address_space_mem,
|
||||
MemoryRegion *address_space_io,
|
||||
uint8_t devfn_min, const char *typename)
|
||||
{
|
||||
qbus_create_inplace(bus, typename, parent, name);
|
||||
qbus_create_inplace(bus, bus_size, typename, parent, name);
|
||||
pci_bus_init(bus, parent, name, address_space_mem,
|
||||
address_space_io, devfn_min);
|
||||
}
|
||||
|
|
|
@ -367,7 +367,8 @@ int pci_bridge_initfn(PCIDevice *dev, const char *typename)
|
|||
br->bus_name = dev->qdev.id;
|
||||
}
|
||||
|
||||
qbus_create_inplace(&sec_bus->qbus, typename, &dev->qdev, br->bus_name);
|
||||
qbus_create_inplace(sec_bus, sizeof(br->sec_bus), typename, DEVICE(dev),
|
||||
br->bus_name);
|
||||
sec_bus->parent_dev = dev;
|
||||
sec_bus->map_irq = br->map_irq ? br->map_irq : pci_swizzle_map_irq_fn;
|
||||
sec_bus->address_space_mem = &br->address_space_mem;
|
||||
|
|
|
@ -324,8 +324,8 @@ static int init_event_facility(S390SCLPDevice *sdev)
|
|||
sdev->event_pending = event_pending;
|
||||
|
||||
/* Spawn a new sclp-events facility */
|
||||
qbus_create_inplace(&event_facility->sbus.qbus,
|
||||
TYPE_SCLP_EVENTS_BUS, (DeviceState *)sdev, NULL);
|
||||
qbus_create_inplace(&event_facility->sbus, sizeof(event_facility->sbus),
|
||||
TYPE_SCLP_EVENTS_BUS, DEVICE(sdev), NULL);
|
||||
event_facility->sbus.qbus.allow_hotplug = 0;
|
||||
event_facility->qdev = (DeviceState *) sdev;
|
||||
|
||||
|
|
|
@ -47,7 +47,8 @@
|
|||
|
||||
#define VIRTIO_EXT_CODE 0x2603
|
||||
|
||||
static void virtio_s390_bus_new(VirtioBusState *bus, VirtIOS390Device *dev);
|
||||
static void virtio_s390_bus_new(VirtioBusState *bus, size_t bus_size,
|
||||
VirtIOS390Device *dev);
|
||||
|
||||
static const TypeInfo s390_virtio_bus_info = {
|
||||
.name = TYPE_S390_VIRTIO_BUS,
|
||||
|
@ -170,7 +171,7 @@ static int s390_virtio_net_init(VirtIOS390Device *s390_dev)
|
|||
static void s390_virtio_net_instance_init(Object *obj)
|
||||
{
|
||||
VirtIONetS390 *dev = VIRTIO_NET_S390(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_NET);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -189,7 +190,7 @@ static int s390_virtio_blk_init(VirtIOS390Device *s390_dev)
|
|||
static void s390_virtio_blk_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOBlkS390 *dev = VIRTIO_BLK_S390(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_BLK);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BLK);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -230,7 +231,7 @@ static int s390_virtio_serial_init(VirtIOS390Device *s390_dev)
|
|||
static void s390_virtio_serial_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOSerialS390 *dev = VIRTIO_SERIAL_S390(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SERIAL);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SERIAL);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -262,7 +263,7 @@ static int s390_virtio_scsi_init(VirtIOS390Device *s390_dev)
|
|||
static void s390_virtio_scsi_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOSCSIS390 *dev = VIRTIO_SCSI_S390(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SCSI);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SCSI);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -283,7 +284,7 @@ static int s390_vhost_scsi_init(VirtIOS390Device *s390_dev)
|
|||
static void s390_vhost_scsi_instance_init(Object *obj)
|
||||
{
|
||||
VHostSCSIS390 *dev = VHOST_SCSI_S390(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VHOST_SCSI);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VHOST_SCSI);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
#endif
|
||||
|
@ -309,7 +310,7 @@ static int s390_virtio_rng_init(VirtIOS390Device *s390_dev)
|
|||
static void s390_virtio_rng_instance_init(Object *obj)
|
||||
{
|
||||
VirtIORNGS390 *dev = VIRTIO_RNG_S390(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_RNG);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
|
||||
(Object **)&dev->vdev.conf.rng, NULL);
|
||||
|
@ -585,7 +586,7 @@ static int s390_virtio_busdev_init(DeviceState *dev)
|
|||
VirtIOS390Device *_dev = (VirtIOS390Device *)dev;
|
||||
VirtIOS390DeviceClass *_info = VIRTIO_S390_DEVICE_GET_CLASS(dev);
|
||||
|
||||
virtio_s390_bus_new(&_dev->bus, _dev);
|
||||
virtio_s390_bus_new(&_dev->bus, sizeof(_dev->bus), _dev);
|
||||
|
||||
return _info->init(_dev);
|
||||
}
|
||||
|
@ -691,14 +692,15 @@ static const TypeInfo s390_virtio_bridge_info = {
|
|||
|
||||
/* virtio-s390-bus */
|
||||
|
||||
static void virtio_s390_bus_new(VirtioBusState *bus, VirtIOS390Device *dev)
|
||||
static void virtio_s390_bus_new(VirtioBusState *bus, size_t bus_size,
|
||||
VirtIOS390Device *dev)
|
||||
{
|
||||
DeviceState *qdev = DEVICE(dev);
|
||||
BusState *qbus;
|
||||
char virtio_bus_name[] = "virtio-bus";
|
||||
|
||||
qbus_create_inplace((BusState *)bus, TYPE_VIRTIO_S390_BUS, qdev,
|
||||
virtio_bus_name);
|
||||
qbus_create_inplace(bus, bus_size, TYPE_VIRTIO_S390_BUS,
|
||||
qdev, virtio_bus_name);
|
||||
qbus = BUS(bus);
|
||||
qbus->allow_hotplug = 1;
|
||||
}
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
#include "virtio-ccw.h"
|
||||
#include "trace.h"
|
||||
|
||||
static void virtio_ccw_bus_new(VirtioBusState *bus, VirtioCcwDevice *dev);
|
||||
static void virtio_ccw_bus_new(VirtioBusState *bus, size_t bus_size,
|
||||
VirtioCcwDevice *dev);
|
||||
|
||||
static int virtual_css_bus_reset(BusState *qbus)
|
||||
{
|
||||
|
@ -659,7 +660,7 @@ static int virtio_ccw_net_init(VirtioCcwDevice *ccw_dev)
|
|||
static void virtio_ccw_net_instance_init(Object *obj)
|
||||
{
|
||||
VirtIONetCcw *dev = VIRTIO_NET_CCW(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_NET);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -679,7 +680,7 @@ static int virtio_ccw_blk_init(VirtioCcwDevice *ccw_dev)
|
|||
static void virtio_ccw_blk_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOBlkCcw *dev = VIRTIO_BLK_CCW(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_BLK);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BLK);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -712,7 +713,7 @@ static int virtio_ccw_serial_init(VirtioCcwDevice *ccw_dev)
|
|||
static void virtio_ccw_serial_instance_init(Object *obj)
|
||||
{
|
||||
VirtioSerialCcw *dev = VIRTIO_SERIAL_CCW(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SERIAL);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SERIAL);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -758,7 +759,7 @@ static void balloon_ccw_stats_set_poll_interval(Object *obj, struct Visitor *v,
|
|||
static void virtio_ccw_balloon_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOBalloonCcw *dev = VIRTIO_BALLOON_CCW(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_BALLOON);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BALLOON);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
|
||||
object_property_add(obj, "guest-stats", "guest statistics",
|
||||
|
@ -798,7 +799,7 @@ static int virtio_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
|
|||
static void virtio_ccw_scsi_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOSCSICcw *dev = VIRTIO_SCSI_CCW(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SCSI);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SCSI);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -819,7 +820,7 @@ static int vhost_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
|
|||
static void vhost_ccw_scsi_instance_init(Object *obj)
|
||||
{
|
||||
VHostSCSICcw *dev = VHOST_SCSI_CCW(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VHOST_SCSI);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VHOST_SCSI);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
#endif
|
||||
|
@ -1170,7 +1171,7 @@ static const TypeInfo vhost_ccw_scsi = {
|
|||
static void virtio_ccw_rng_instance_init(Object *obj)
|
||||
{
|
||||
VirtIORNGCcw *dev = VIRTIO_RNG_CCW(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_RNG);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
|
||||
(Object **)&dev->vdev.conf.rng, NULL);
|
||||
|
@ -1209,7 +1210,7 @@ static int virtio_ccw_busdev_init(DeviceState *dev)
|
|||
VirtioCcwDevice *_dev = (VirtioCcwDevice *)dev;
|
||||
VirtIOCCWDeviceClass *_info = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
|
||||
|
||||
virtio_ccw_bus_new(&_dev->bus, _dev);
|
||||
virtio_ccw_bus_new(&_dev->bus, sizeof(_dev->bus), _dev);
|
||||
|
||||
return _info->init(_dev);
|
||||
}
|
||||
|
@ -1289,14 +1290,15 @@ static const TypeInfo virtual_css_bridge_info = {
|
|||
|
||||
/* virtio-ccw-bus */
|
||||
|
||||
static void virtio_ccw_bus_new(VirtioBusState *bus, VirtioCcwDevice *dev)
|
||||
static void virtio_ccw_bus_new(VirtioBusState *bus, size_t bus_size,
|
||||
VirtioCcwDevice *dev)
|
||||
{
|
||||
DeviceState *qdev = DEVICE(dev);
|
||||
BusState *qbus;
|
||||
char virtio_bus_name[] = "virtio-bus";
|
||||
|
||||
qbus_create_inplace((BusState *)bus, TYPE_VIRTIO_CCW_BUS, qdev,
|
||||
virtio_bus_name);
|
||||
qbus_create_inplace(bus, bus_size, TYPE_VIRTIO_CCW_BUS,
|
||||
qdev, virtio_bus_name);
|
||||
qbus = BUS(bus);
|
||||
qbus->allow_hotplug = 1;
|
||||
}
|
||||
|
|
|
@ -363,7 +363,7 @@ static int esp_pci_scsi_init(PCIDevice *dev)
|
|||
pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_IO, &pci->io);
|
||||
s->irq = dev->irq[0];
|
||||
|
||||
scsi_bus_new(&s->bus, d, &esp_pci_scsi_info, NULL);
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), d, &esp_pci_scsi_info, NULL);
|
||||
if (!d->hotplugged) {
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
||||
if (err != NULL) {
|
||||
|
|
|
@ -688,7 +688,7 @@ static void sysbus_esp_realize(DeviceState *dev, Error **errp)
|
|||
|
||||
qdev_init_gpio_in(dev, sysbus_esp_gpio_demux, 2);
|
||||
|
||||
scsi_bus_new(&s->bus, dev, &esp_scsi_info, NULL);
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), dev, &esp_scsi_info, NULL);
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
||||
if (err != NULL) {
|
||||
error_propagate(errp, err);
|
||||
|
|
|
@ -2117,7 +2117,7 @@ static int lsi_scsi_init(PCIDevice *dev)
|
|||
pci_register_bar(dev, 2, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->ram_io);
|
||||
QTAILQ_INIT(&s->queue);
|
||||
|
||||
scsi_bus_new(&s->bus, d, &lsi_scsi_info, NULL);
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), d, &lsi_scsi_info, NULL);
|
||||
if (!d->hotplugged) {
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
||||
if (err != NULL) {
|
||||
|
|
|
@ -2171,7 +2171,8 @@ static int megasas_scsi_init(PCIDevice *dev)
|
|||
s->frames[i].state = s;
|
||||
}
|
||||
|
||||
scsi_bus_new(&s->bus, DEVICE(dev), &megasas_scsi_info, NULL);
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
|
||||
&megasas_scsi_info, NULL);
|
||||
if (!d->hotplugged) {
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
||||
if (err != NULL) {
|
||||
|
|
|
@ -72,10 +72,10 @@ static void scsi_device_unit_attention_reported(SCSIDevice *s)
|
|||
}
|
||||
|
||||
/* Create a scsi bus, and attach devices to it. */
|
||||
void scsi_bus_new(SCSIBus *bus, DeviceState *host, const SCSIBusInfo *info,
|
||||
const char *bus_name)
|
||||
void scsi_bus_new(SCSIBus *bus, size_t bus_size, DeviceState *host,
|
||||
const SCSIBusInfo *info, const char *bus_name)
|
||||
{
|
||||
qbus_create_inplace(&bus->qbus, TYPE_SCSI_BUS, host, bus_name);
|
||||
qbus_create_inplace(bus, bus_size, TYPE_SCSI_BUS, host, bus_name);
|
||||
bus->busnr = next_scsi_bus++;
|
||||
bus->info = info;
|
||||
bus->qbus.allow_hotplug = 1;
|
||||
|
|
|
@ -1020,7 +1020,8 @@ static int spapr_vscsi_init(VIOsPAPRDevice *dev)
|
|||
|
||||
dev->crq.SendFunc = vscsi_do_crq;
|
||||
|
||||
scsi_bus_new(&s->bus, &dev->qdev, &vscsi_scsi_info, NULL);
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
|
||||
&vscsi_scsi_info, NULL);
|
||||
if (!dev->qdev.hotplugged) {
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
||||
if (err != NULL) {
|
||||
|
|
|
@ -627,7 +627,8 @@ static int virtio_scsi_device_init(VirtIODevice *vdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
scsi_bus_new(&s->bus, qdev, &virtio_scsi_scsi_info, vdev->bus_name);
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), qdev,
|
||||
&virtio_scsi_scsi_info, vdev->bus_name);
|
||||
|
||||
if (!qdev->hotplugged) {
|
||||
scsi_bus_legacy_handle_cmdline(&s->bus, &err);
|
||||
|
|
|
@ -1088,7 +1088,8 @@ pvscsi_init(PCIDevice *pci_dev)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
scsi_bus_new(&s->bus, &pci_dev->qdev, &pvscsi_scsi_info, NULL);
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(pci_dev),
|
||||
&pvscsi_scsi_info, NULL);
|
||||
pvscsi_reset_state(s);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -67,9 +67,10 @@ const VMStateDescription vmstate_usb_device = {
|
|||
}
|
||||
};
|
||||
|
||||
void usb_bus_new(USBBus *bus, USBBusOps *ops, DeviceState *host)
|
||||
void usb_bus_new(USBBus *bus, size_t bus_size,
|
||||
USBBusOps *ops, DeviceState *host)
|
||||
{
|
||||
qbus_create_inplace(&bus->qbus, TYPE_USB_BUS, host, NULL);
|
||||
qbus_create_inplace(bus, bus_size, TYPE_USB_BUS, host, NULL);
|
||||
bus->ops = ops;
|
||||
bus->busnr = next_usb_bus++;
|
||||
bus->qbus.allow_hotplug = 1; /* Yes, we can */
|
||||
|
|
|
@ -1309,7 +1309,8 @@ static int ccid_initfn(USBDevice *dev)
|
|||
|
||||
usb_desc_create_serial(dev);
|
||||
usb_desc_init(dev);
|
||||
qbus_create_inplace(&s->bus.qbus, TYPE_CCID_BUS, &dev->qdev, NULL);
|
||||
qbus_create_inplace(&s->bus, sizeof(s->bus), TYPE_CCID_BUS, DEVICE(dev),
|
||||
NULL);
|
||||
s->intr = usb_ep_get(dev, USB_TOKEN_IN, CCID_INT_IN_EP);
|
||||
s->bus.qbus.allow_hotplug = 1;
|
||||
s->card = NULL;
|
||||
|
|
|
@ -618,7 +618,8 @@ static int usb_msd_initfn_storage(USBDevice *dev)
|
|||
|
||||
usb_desc_create_serial(dev);
|
||||
usb_desc_init(dev);
|
||||
scsi_bus_new(&s->bus, &s->dev.qdev, &usb_msd_scsi_info_storage, NULL);
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
|
||||
&usb_msd_scsi_info_storage, NULL);
|
||||
scsi_dev = scsi_bus_legacy_add_drive(&s->bus, bs, 0, !!s->removable,
|
||||
s->conf.bootindex, dev->serial,
|
||||
&err);
|
||||
|
@ -646,7 +647,8 @@ static int usb_msd_initfn_bot(USBDevice *dev)
|
|||
|
||||
usb_desc_create_serial(dev);
|
||||
usb_desc_init(dev);
|
||||
scsi_bus_new(&s->bus, &s->dev.qdev, &usb_msd_scsi_info_bot, NULL);
|
||||
scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
|
||||
&usb_msd_scsi_info_bot, NULL);
|
||||
s->bus.qbus.allow_hotplug = 0;
|
||||
usb_msd_handle_reset(dev);
|
||||
|
||||
|
|
|
@ -888,7 +888,8 @@ static int usb_uas_init(USBDevice *dev)
|
|||
QTAILQ_INIT(&uas->requests);
|
||||
uas->status_bh = qemu_bh_new(usb_uas_send_status_bh, uas);
|
||||
|
||||
scsi_bus_new(&uas->bus, &uas->dev.qdev, &usb_uas_scsi_info, NULL);
|
||||
scsi_bus_new(&uas->bus, sizeof(uas->bus), DEVICE(dev),
|
||||
&usb_uas_scsi_info, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -2520,7 +2520,7 @@ void usb_ehci_realize(EHCIState *s, DeviceState *dev, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
usb_bus_new(&s->bus, &ehci_bus_ops, dev);
|
||||
usb_bus_new(&s->bus, sizeof(s->bus), &ehci_bus_ops, dev);
|
||||
for (i = 0; i < s->portnr; i++) {
|
||||
usb_register_port(&s->bus, &s->ports[i], s, i, &ehci_port_ops,
|
||||
USB_SPEED_MASK_HIGH);
|
||||
|
|
|
@ -383,7 +383,7 @@ struct MUSBState *musb_init(DeviceState *parent_device, int gpio_base)
|
|||
|
||||
musb_reset(s);
|
||||
|
||||
usb_bus_new(&s->bus, &musb_bus_ops, parent_device);
|
||||
usb_bus_new(&s->bus, sizeof(s->bus), &musb_bus_ops, parent_device);
|
||||
usb_register_port(&s->bus, &s->port, s, 0, &musb_port_ops,
|
||||
USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
|
||||
|
||||
|
|
|
@ -1881,7 +1881,7 @@ static int usb_ohci_init(OHCIState *ohci, DeviceState *dev,
|
|||
return -1;
|
||||
}
|
||||
} else {
|
||||
usb_bus_new(&ohci->bus, &ohci_bus_ops, dev);
|
||||
usb_bus_new(&ohci->bus, sizeof(ohci->bus), &ohci_bus_ops, dev);
|
||||
for (i = 0; i < num_ports; i++) {
|
||||
usb_register_port(&ohci->bus, &ohci->rhport[i].port,
|
||||
ohci, i, &ohci_port_ops,
|
||||
|
|
|
@ -1254,7 +1254,7 @@ static int usb_uhci_common_initfn(PCIDevice *dev)
|
|||
return -1;
|
||||
}
|
||||
} else {
|
||||
usb_bus_new(&s->bus, &uhci_bus_ops, &s->dev.qdev);
|
||||
usb_bus_new(&s->bus, sizeof(s->bus), &uhci_bus_ops, DEVICE(dev));
|
||||
for (i = 0; i < NB_PORTS; i++) {
|
||||
usb_register_port(&s->bus, &s->ports[i].port, s, i, &uhci_port_ops,
|
||||
USB_SPEED_MASK_LOW | USB_SPEED_MASK_FULL);
|
||||
|
|
|
@ -3309,7 +3309,7 @@ static void usb_xhci_init(XHCIState *xhci)
|
|||
usbports = MAX(xhci->numports_2, xhci->numports_3);
|
||||
xhci->numports = xhci->numports_2 + xhci->numports_3;
|
||||
|
||||
usb_bus_new(&xhci->bus, &xhci_bus_ops, dev);
|
||||
usb_bus_new(&xhci->bus, sizeof(xhci->bus), &xhci_bus_ops, dev);
|
||||
|
||||
for (i = 0; i < usbports; i++) {
|
||||
speedmask = 0;
|
||||
|
|
|
@ -89,7 +89,8 @@ typedef struct {
|
|||
VirtioBusState bus;
|
||||
} VirtIOMMIOProxy;
|
||||
|
||||
static void virtio_mmio_bus_new(VirtioBusState *bus, VirtIOMMIOProxy *dev);
|
||||
static void virtio_mmio_bus_new(VirtioBusState *bus, size_t bus_size,
|
||||
VirtIOMMIOProxy *dev);
|
||||
|
||||
static uint64_t virtio_mmio_read(void *opaque, hwaddr offset, unsigned size)
|
||||
{
|
||||
|
@ -360,7 +361,7 @@ static void virtio_mmio_realizefn(DeviceState *d, Error **errp)
|
|||
VirtIOMMIOProxy *proxy = VIRTIO_MMIO(d);
|
||||
SysBusDevice *sbd = SYS_BUS_DEVICE(d);
|
||||
|
||||
virtio_mmio_bus_new(&proxy->bus, proxy);
|
||||
virtio_mmio_bus_new(&proxy->bus, sizeof(proxy->bus), proxy);
|
||||
sysbus_init_irq(sbd, &proxy->irq);
|
||||
memory_region_init_io(&proxy->iomem, OBJECT(d), &virtio_mem_ops, proxy,
|
||||
TYPE_VIRTIO_MMIO, 0x200);
|
||||
|
@ -385,12 +386,13 @@ static const TypeInfo virtio_mmio_info = {
|
|||
|
||||
/* virtio-mmio-bus. */
|
||||
|
||||
static void virtio_mmio_bus_new(VirtioBusState *bus, VirtIOMMIOProxy *dev)
|
||||
static void virtio_mmio_bus_new(VirtioBusState *bus, size_t bus_size,
|
||||
VirtIOMMIOProxy *dev)
|
||||
{
|
||||
DeviceState *qdev = DEVICE(dev);
|
||||
BusState *qbus;
|
||||
|
||||
qbus_create_inplace((BusState *)bus, TYPE_VIRTIO_MMIO_BUS, qdev, NULL);
|
||||
qbus_create_inplace(bus, bus_size, TYPE_VIRTIO_MMIO_BUS, qdev, NULL);
|
||||
qbus = BUS(bus);
|
||||
qbus->allow_hotplug = 0;
|
||||
}
|
||||
|
|
|
@ -92,7 +92,8 @@
|
|||
/* HACK for virtio to determine if it's running a big endian guest */
|
||||
bool virtio_is_big_endian(void);
|
||||
|
||||
static void virtio_pci_bus_new(VirtioBusState *bus, VirtIOPCIProxy *dev);
|
||||
static void virtio_pci_bus_new(VirtioBusState *bus, size_t bus_size,
|
||||
VirtIOPCIProxy *dev);
|
||||
|
||||
/* virtio device */
|
||||
/* DeviceState to VirtIOPCIProxy. For use off data-path. TODO: use QOM. */
|
||||
|
@ -918,7 +919,7 @@ static void virtio_9p_pci_class_init(ObjectClass *klass, void *data)
|
|||
static void virtio_9p_pci_instance_init(Object *obj)
|
||||
{
|
||||
V9fsPCIState *dev = VIRTIO_9P_PCI(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_9P);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_9P);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -986,7 +987,7 @@ static int virtio_pci_init(PCIDevice *pci_dev)
|
|||
{
|
||||
VirtIOPCIProxy *dev = VIRTIO_PCI(pci_dev);
|
||||
VirtioPCIClass *k = VIRTIO_PCI_GET_CLASS(pci_dev);
|
||||
virtio_pci_bus_new(&dev->bus, dev);
|
||||
virtio_pci_bus_new(&dev->bus, sizeof(dev->bus), dev);
|
||||
if (k->init != NULL) {
|
||||
return k->init(dev);
|
||||
}
|
||||
|
@ -1078,7 +1079,7 @@ static void virtio_blk_pci_class_init(ObjectClass *klass, void *data)
|
|||
static void virtio_blk_pci_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOBlkPCI *dev = VIRTIO_BLK_PCI(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_BLK);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BLK);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -1148,7 +1149,7 @@ static void virtio_scsi_pci_class_init(ObjectClass *klass, void *data)
|
|||
static void virtio_scsi_pci_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOSCSIPCI *dev = VIRTIO_SCSI_PCI(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SCSI);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SCSI);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -1205,7 +1206,7 @@ static void vhost_scsi_pci_class_init(ObjectClass *klass, void *data)
|
|||
static void vhost_scsi_pci_instance_init(Object *obj)
|
||||
{
|
||||
VHostSCSIPCI *dev = VHOST_SCSI_PCI(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VHOST_SCSI);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VHOST_SCSI);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -1286,7 +1287,7 @@ static void virtio_balloon_pci_class_init(ObjectClass *klass, void *data)
|
|||
static void virtio_balloon_pci_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOBalloonPCI *dev = VIRTIO_BALLOON_PCI(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_BALLOON);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_BALLOON);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
|
||||
object_property_add(obj, "guest-stats", "guest statistics",
|
||||
|
@ -1372,7 +1373,7 @@ static void virtio_serial_pci_class_init(ObjectClass *klass, void *data)
|
|||
static void virtio_serial_pci_instance_init(Object *obj)
|
||||
{
|
||||
VirtIOSerialPCI *dev = VIRTIO_SERIAL_PCI(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SERIAL);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_SERIAL);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -1431,7 +1432,7 @@ static void virtio_net_pci_class_init(ObjectClass *klass, void *data)
|
|||
static void virtio_net_pci_instance_init(Object *obj)
|
||||
{
|
||||
VirtIONetPCI *dev = VIRTIO_NET_PCI(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_NET);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_NET);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
}
|
||||
|
||||
|
@ -1487,7 +1488,7 @@ static void virtio_rng_pci_class_init(ObjectClass *klass, void *data)
|
|||
static void virtio_rng_initfn(Object *obj)
|
||||
{
|
||||
VirtIORngPCI *dev = VIRTIO_RNG_PCI(obj);
|
||||
object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_RNG);
|
||||
object_initialize(&dev->vdev, sizeof(dev->vdev), TYPE_VIRTIO_RNG);
|
||||
object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
|
||||
object_property_add_link(obj, "rng", TYPE_RNG_BACKEND,
|
||||
(Object **)&dev->vdev.conf.rng, NULL);
|
||||
|
@ -1504,13 +1505,14 @@ static const TypeInfo virtio_rng_pci_info = {
|
|||
|
||||
/* virtio-pci-bus */
|
||||
|
||||
static void virtio_pci_bus_new(VirtioBusState *bus, VirtIOPCIProxy *dev)
|
||||
static void virtio_pci_bus_new(VirtioBusState *bus, size_t bus_size,
|
||||
VirtIOPCIProxy *dev)
|
||||
{
|
||||
DeviceState *qdev = DEVICE(dev);
|
||||
BusState *qbus;
|
||||
char virtio_bus_name[] = "virtio-bus";
|
||||
|
||||
qbus_create_inplace((BusState *)bus, TYPE_VIRTIO_PCI_BUS, qdev,
|
||||
qbus_create_inplace(bus, bus_size, TYPE_VIRTIO_PCI_BUS, qdev,
|
||||
virtio_bus_name);
|
||||
qbus = BUS(bus);
|
||||
qbus->allow_hotplug = 1;
|
||||
|
|
|
@ -78,7 +78,7 @@ void isa_register_ioport(ISADevice *dev, MemoryRegion *io, uint16_t start);
|
|||
* @dev: the ISADevice against which these are registered; may be NULL.
|
||||
* @start: the base I/O port against which the portio->offset is applied.
|
||||
* @portio: the ports, sorted by offset.
|
||||
* @opaque: passed into the old_portio callbacks.
|
||||
* @opaque: passed into the portio callbacks.
|
||||
* @name: passed into memory_region_init_io.
|
||||
*/
|
||||
void isa_register_portio_list(ISADevice *dev, uint16_t start,
|
||||
|
|
|
@ -348,7 +348,7 @@ typedef int (*pci_hotplug_fn)(DeviceState *qdev, PCIDevice *pci_dev,
|
|||
|
||||
bool pci_bus_is_express(PCIBus *bus);
|
||||
bool pci_bus_is_root(PCIBus *bus);
|
||||
void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent,
|
||||
void pci_bus_new_inplace(PCIBus *bus, size_t bus_size, DeviceState *parent,
|
||||
const char *name,
|
||||
MemoryRegion *address_space_mem,
|
||||
MemoryRegion *address_space_io,
|
||||
|
|
|
@ -264,7 +264,7 @@ DeviceState *qdev_find_recursive(BusState *bus, const char *id);
|
|||
typedef int (qbus_walkerfn)(BusState *bus, void *opaque);
|
||||
typedef int (qdev_walkerfn)(DeviceState *dev, void *opaque);
|
||||
|
||||
void qbus_create_inplace(void *bus, const char *typename,
|
||||
void qbus_create_inplace(void *bus, size_t size, const char *typename,
|
||||
DeviceState *parent, const char *name);
|
||||
BusState *qbus_create(const char *typename, DeviceState *parent, const char *name);
|
||||
/* Returns > 0 if either devfn or busfn skip walk somewhere in cursion,
|
||||
|
|
|
@ -152,8 +152,8 @@ struct SCSIBus {
|
|||
const SCSIBusInfo *info;
|
||||
};
|
||||
|
||||
void scsi_bus_new(SCSIBus *bus, DeviceState *host, const SCSIBusInfo *info,
|
||||
const char *bus_name);
|
||||
void scsi_bus_new(SCSIBus *bus, size_t bus_size, DeviceState *host,
|
||||
const SCSIBusInfo *info, const char *bus_name);
|
||||
|
||||
static inline SCSIBus *scsi_bus_from_device(SCSIDevice *d)
|
||||
{
|
||||
|
|
|
@ -496,7 +496,8 @@ struct USBBusOps {
|
|||
void (*wakeup_endpoint)(USBBus *bus, USBEndpoint *ep, unsigned int stream);
|
||||
};
|
||||
|
||||
void usb_bus_new(USBBus *bus, USBBusOps *ops, DeviceState *host);
|
||||
void usb_bus_new(USBBus *bus, size_t bus_size,
|
||||
USBBusOps *ops, DeviceState *host);
|
||||
USBBus *usb_bus_find(int busnr);
|
||||
void usb_legacy_register(const char *typename, const char *usbdevice_name,
|
||||
USBDevice *(*usbdevice_init)(USBBus *bus,
|
||||
|
|
|
@ -249,7 +249,7 @@ typedef struct InterfaceInfo InterfaceInfo;
|
|||
* MyClass parent_class;
|
||||
*
|
||||
* MyDoSomething parent_do_something;
|
||||
* } MyClass;
|
||||
* } DerivedClass;
|
||||
*
|
||||
* static void derived_do_something(MyState *obj)
|
||||
* {
|
||||
|
@ -585,25 +585,27 @@ Object *object_new_with_type(Type type);
|
|||
|
||||
/**
|
||||
* object_initialize_with_type:
|
||||
* @obj: A pointer to the memory to be used for the object.
|
||||
* @data: A pointer to the memory to be used for the object.
|
||||
* @size: The maximum size available at @data for the object.
|
||||
* @type: The type of the object to instantiate.
|
||||
*
|
||||
* This function will initialize an object. The memory for the object should
|
||||
* have already been allocated. The returned object has a reference count of 1,
|
||||
* and will be finalized when the last reference is dropped.
|
||||
*/
|
||||
void object_initialize_with_type(void *data, Type type);
|
||||
void object_initialize_with_type(void *data, size_t size, Type type);
|
||||
|
||||
/**
|
||||
* object_initialize:
|
||||
* @obj: A pointer to the memory to be used for the object.
|
||||
* @size: The maximum size available at @obj for the object.
|
||||
* @typename: The name of the type of the object to instantiate.
|
||||
*
|
||||
* This function will initialize an object. The memory for the object should
|
||||
* have already been allocated. The returned object has a reference count of 1,
|
||||
* and will be finalized when the last reference is dropped.
|
||||
*/
|
||||
void object_initialize(void *obj, const char *typename);
|
||||
void object_initialize(void *obj, size_t size, const char *typename);
|
||||
|
||||
/**
|
||||
* object_dynamic_cast:
|
||||
|
|
|
@ -311,7 +311,7 @@ static void object_post_init_with_type(Object *obj, TypeImpl *ti)
|
|||
}
|
||||
}
|
||||
|
||||
void object_initialize_with_type(void *data, TypeImpl *type)
|
||||
void object_initialize_with_type(void *data, size_t size, TypeImpl *type)
|
||||
{
|
||||
Object *obj = data;
|
||||
|
||||
|
@ -320,6 +320,7 @@ void object_initialize_with_type(void *data, TypeImpl *type)
|
|||
|
||||
g_assert(type->instance_size >= sizeof(Object));
|
||||
g_assert(type->abstract == false);
|
||||
g_assert(size >= type->instance_size);
|
||||
|
||||
memset(obj, 0, type->instance_size);
|
||||
obj->class = type->class;
|
||||
|
@ -329,11 +330,11 @@ void object_initialize_with_type(void *data, TypeImpl *type)
|
|||
object_post_init_with_type(obj, type);
|
||||
}
|
||||
|
||||
void object_initialize(void *data, const char *typename)
|
||||
void object_initialize(void *data, size_t size, const char *typename)
|
||||
{
|
||||
TypeImpl *type = type_get_by_name(typename);
|
||||
|
||||
object_initialize_with_type(data, type);
|
||||
object_initialize_with_type(data, size, type);
|
||||
}
|
||||
|
||||
static inline bool object_property_is_child(ObjectProperty *prop)
|
||||
|
@ -424,7 +425,7 @@ Object *object_new_with_type(Type type)
|
|||
type_initialize(type);
|
||||
|
||||
obj = g_malloc(type->instance_size);
|
||||
object_initialize_with_type(obj, type);
|
||||
object_initialize_with_type(obj, type->instance_size, type);
|
||||
obj->free = g_free;
|
||||
|
||||
return obj;
|
||||
|
|
Loading…
Reference in a new issue