Commit 6f68ecb2c11d90212d6f7d06c857843d30abcfdc
1 parent
6b1b92d3
qdev scsi bus infrastructure
Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing
2 changed files
with
23 additions
and
0 deletions
hw/qdev.c
| ... | ... | @@ -265,3 +265,22 @@ void qdev_attach_child_bus(DeviceState *dev, const char *name, void *bus) |
| 265 | 265 | p->next = dev->child_bus; |
| 266 | 266 | dev->child_bus = p; |
| 267 | 267 | } |
| 268 | + | |
| 269 | +static int next_scsi_bus; | |
| 270 | + | |
| 271 | +/* Create a scsi bus, and attach devices to it. */ | |
| 272 | +/* TODO: Actually create a scsi bus for hotplug to use. */ | |
| 273 | +void scsi_bus_new(DeviceState *host, SCSIAttachFn attach) | |
| 274 | +{ | |
| 275 | + int bus = next_scsi_bus++; | |
| 276 | + int unit; | |
| 277 | + int index; | |
| 278 | + | |
| 279 | + for (unit = 0; unit < MAX_SCSI_DEVS; unit++) { | |
| 280 | + index = drive_get_index(IF_SCSI, bus, unit); | |
| 281 | + if (index == -1) { | |
| 282 | + continue; | |
| 283 | + } | |
| 284 | + attach(host, drives_table[index].bdrv, unit); | |
| 285 | + } | |
| 286 | +} | ... | ... |
hw/qdev.h
| ... | ... | @@ -44,6 +44,8 @@ void *qdev_get_child_bus(DeviceState *dev, const char *name); |
| 44 | 44 | /*** Device API. ***/ |
| 45 | 45 | |
| 46 | 46 | typedef void (*qdev_initfn)(DeviceState *dev, void *opaque); |
| 47 | +typedef void (*SCSIAttachFn)(DeviceState *host, BlockDriverState *bdrv, | |
| 48 | + int unit); | |
| 47 | 49 | |
| 48 | 50 | DeviceType *qdev_register(const char *name, int size, qdev_initfn init, |
| 49 | 51 | void *opaque); |
| ... | ... | @@ -54,6 +56,8 @@ void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n); |
| 54 | 56 | void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n); |
| 55 | 57 | void qdev_attach_child_bus(DeviceState *dev, const char *name, void *bus); |
| 56 | 58 | |
| 59 | +void scsi_bus_new(DeviceState *host, SCSIAttachFn attach); | |
| 60 | + | |
| 57 | 61 | CharDriverState *qdev_init_chardev(DeviceState *dev); |
| 58 | 62 | |
| 59 | 63 | void *qdev_get_bus(DeviceState *dev); | ... | ... |