From 87dcd1b2c27e88a47be5036e9cf4c2767054eb31 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 3 Aug 2011 10:49:12 +0200 Subject: [PATCH] scsi: push lun field to SCSIDevice This will let SCSIBus detect requests sent to an invalid LUN, and handle them itself. However, there will be still support for only one LUN per target Signed-off-by: Paolo Bonzini Signed-off-by: Anthony Liguori --- hw/scsi-bus.c | 1 + hw/scsi-generic.c | 5 +---- hw/scsi.h | 1 + 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index b52b9d2189..3ae67623c6 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -16,6 +16,7 @@ static struct BusInfo scsi_bus_info = { .get_fw_dev_path = scsibus_get_fw_dev_path, .props = (Property[]) { DEFINE_PROP_UINT32("scsi-id", SCSIDevice, id, -1), + DEFINE_PROP_UINT32("lun", SCSIDevice, lun, 0), DEFINE_PROP_END_OF_LIST(), }, }; diff --git a/hw/scsi-generic.c b/hw/scsi-generic.c index c2bd399956..8046ea61ee 100644 --- a/hw/scsi-generic.c +++ b/hw/scsi-generic.c @@ -60,7 +60,6 @@ struct SCSIGenericState { SCSIDevice qdev; BlockDriverState *bs; - int lun; }; static void scsi_free_request(SCSIRequest *req) @@ -292,7 +291,7 @@ static int32_t scsi_send_command(SCSIRequest *req, uint8_t *cmd) SCSIGenericReq *r = DO_UPCAST(SCSIGenericReq, req, req); int ret; - if (cmd[0] != REQUEST_SENSE && req->lun != s->lun) { + if (cmd[0] != REQUEST_SENSE && req->lun != s->qdev.lun) { DPRINTF("Unimplemented LUN %d\n", req->lun); scsi_req_build_sense(&r->req, SENSE_CODE(LUN_NOT_SUPPORTED)); scsi_req_complete(&r->req, CHECK_CONDITION); @@ -466,8 +465,6 @@ static int scsi_generic_initfn(SCSIDevice *dev) } /* define device state */ - s->lun = scsiid.lun; - DPRINTF("LUN %d\n", s->lun); s->qdev.type = scsiid.scsi_type; DPRINTF("device type %d\n", s->qdev.type); if (s->qdev.type == TYPE_TAPE) { diff --git a/hw/scsi.h b/hw/scsi.h index f29d65fd56..5a1bbe20cf 100644 --- a/hw/scsi.h +++ b/hw/scsi.h @@ -65,6 +65,7 @@ struct SCSIDevice uint8_t sense[SCSI_SENSE_BUF_SIZE]; uint32_t sense_len; QTAILQ_HEAD(, SCSIRequest) requests; + uint32_t lun; int blocksize; int type; };