277
278
qemu_opts_loc_restore(dinfo->opts);
280
/* Handling -drive not claimed by machine initialization */
281
if (blk_get_attached_dev(blk_by_legacy_dinfo(dinfo))) {
282
continue; /* claimed */
284
if (!dinfo->is_default) {
285
error_report("warning: bus=%d,unit=%d is deprecated with this"
278
290
scsi_bus_legacy_add_drive(bus, blk_by_legacy_dinfo(dinfo),
279
unit, false, -1, NULL, &err);
281
error_propagate(errp, err);
291
unit, false, -1, NULL, &error_fatal);
296
static bool is_scsi_hba_with_legacy_magic(Object *obj)
298
static const char *magic[] = {
299
"am53c974", "dc390", "esp", "lsi53c810", "lsi53c895a",
300
"megasas", "megasas-gen2", "mptsas1068", "spapr-vscsi",
301
"virtio-scsi-device",
304
const char *typename = object_get_typename(obj);
307
for (i = 0; magic[i]; i++)
308
if (!strcmp(typename, magic[i])) {
315
static int scsi_legacy_handle_cmdline_cb(Object *obj, void *opaque)
317
SCSIBus *bus = (SCSIBus *)object_dynamic_cast(obj, TYPE_SCSI_BUS);
319
if (bus && is_scsi_hba_with_legacy_magic(OBJECT(bus->qbus.parent))) {
320
scsi_bus_legacy_handle_cmdline(bus, true);
326
void scsi_legacy_handle_cmdline(void)
328
object_child_foreach_recursive(object_get_root(),
329
scsi_legacy_handle_cmdline_cb, NULL);
288
332
static int32_t scsi_invalid_field(SCSIRequest *req, uint8_t *buf)
290
334
scsi_req_build_sense(req, SENSE_CODE(INVALID_FIELD));
1946
1990
/* SCSI request list. For simplicity, pv points to the whole device */
1948
static void put_scsi_requests(QEMUFile *f, void *pv, size_t size)
1992
static int put_scsi_requests(QEMUFile *f, void *pv, size_t size,
1993
VMStateField *field, QJSON *vmdesc)
1950
1995
SCSIDevice *s = pv;
1951
1996
SCSIBus *bus = DO_UPCAST(SCSIBus, qbus, s->qdev.parent_bus);
1970
2015
qemu_put_sbyte(f, 0);
1973
static int get_scsi_requests(QEMUFile *f, void *pv, size_t size)
2020
static int get_scsi_requests(QEMUFile *f, void *pv, size_t size,
2021
VMStateField *field)
1975
2023
SCSIDevice *s = pv;
1976
2024
SCSIBus *bus = DO_UPCAST(SCSIBus, qbus, s->qdev.parent_bus);