Revision 6b1b92d3

b/hw/pci.c
237 237
}
238 238

  
239 239
/* -1 for devfn means auto assign */
240
PCIDevice *pci_register_device(PCIBus *bus, const char *name,
241
                               int instance_size, int devfn,
242
                               PCIConfigReadFunc *config_read,
243
                               PCIConfigWriteFunc *config_write)
240
static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
241
                                         const char *name, int devfn,
242
                                         PCIConfigReadFunc *config_read,
243
                                         PCIConfigWriteFunc *config_write)
244 244
{
245
    PCIDevice *pci_dev;
246

  
247 245
    if (pci_irq_index >= PCI_DEVICES_MAX)
248 246
        return NULL;
249 247

  
......
255 253
        return NULL;
256 254
    found: ;
257 255
    }
258
    pci_dev = qemu_mallocz(instance_size);
259 256
    pci_dev->bus = bus;
260 257
    pci_dev->devfn = devfn;
261 258
    pstrcpy(pci_dev->name, sizeof(pci_dev->name), name);
......
274 271
    return pci_dev;
275 272
}
276 273

  
274
PCIDevice *pci_register_device(PCIBus *bus, const char *name,
275
                               int instance_size, int devfn,
276
                               PCIConfigReadFunc *config_read,
277
                               PCIConfigWriteFunc *config_write)
278
{
279
    PCIDevice *pci_dev;
280

  
281
    pci_dev = qemu_mallocz(instance_size);
282
    pci_dev = do_pci_register_device(pci_dev, bus, name, devfn,
283
                                     config_read, config_write);
284
    return pci_dev;
285
}
277 286
static target_phys_addr_t pci_to_cpu_addr(target_phys_addr_t addr)
278 287
{
279 288
    return addr + pci_mem_base;
......
891 900
    s->bus = pci_register_secondary_bus(&s->dev, map_irq);
892 901
    return s->bus;
893 902
}
903

  
904
static void pci_qdev_init(DeviceState *qdev, void *opaque)
905
{
906
    PCIDevice *pci_dev = (PCIDevice *)qdev;
907
    pci_qdev_initfn init;
908
    PCIBus *bus;
909
    int devfn;
910

  
911
    init = opaque;
912
    bus = qdev_get_bus(qdev);
913
    devfn = qdev_get_prop_int(qdev, "devfn", -1);
914
    pci_dev = do_pci_register_device(pci_dev, bus, "FIXME", devfn,
915
                                     NULL, NULL);//FIXME:config_read, config_write);
916
    assert(pci_dev);
917
    init(pci_dev);
918
}
919

  
920
void pci_qdev_register(const char *name, int size, pci_qdev_initfn init)
921
{
922
    qdev_register(name, size, pci_qdev_init, init);
923
}
924

  
925
PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name)
926
{
927
    DeviceState *dev;
928

  
929
    dev = qdev_create(bus, name);
930
    qdev_set_prop_int(dev, "devfn", devfn);
931
    qdev_init(dev);
932

  
933
    return (PCIDevice *)dev;
934
}
b/hw/pci.h
3 3

  
4 4
#include "qemu-common.h"
5 5

  
6
#include "qdev.h"
7

  
6 8
/* PCI includes legacy ISA access.  */
7 9
#include "isa.h"
8 10

  
......
138 140
#define PCI_COMMAND_RESERVED_MASK_HI (PCI_COMMAND_RESERVED >> 8)
139 141

  
140 142
struct PCIDevice {
143
    DeviceState qdev;
141 144
    /* PCI config space */
142 145
    uint8_t config[256];
143 146

  
......
217 220
    cpu_to_le16wu((uint16_t *)&pci_config[PCI_CLASS_DEVICE], val);
218 221
}
219 222

  
223
typedef void (*pci_qdev_initfn)(PCIDevice *dev);
224
void pci_qdev_register(const char *name, int size, pci_qdev_initfn init);
225

  
226
PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name);
227

  
220 228
/* lsi53c895a.c */
221 229
#define LSI_MAX_DEVS 7
222 230
void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id);

Also available in: Unified diff