From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com
Subject: [Qemu-devel] [PATCH v2 29/33] scsi-disk: small clean up to INQUIRY
Date: Tue, 25 Oct 2011 12:40:37 +0200 [thread overview]
Message-ID: <1319539241-26436-30-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1319539241-26436-1-git-send-email-pbonzini@redhat.com>
Set s->removable, s->qdev.blocksize and s->qdev.type in the callers
of scsi_initfn.
With this in place, s->qdev.type is allowed, and we can just reuse it
as the first byte in VPD data (just like we do in standard INQUIRY data).
Also set s->removable is set consistently and we can use it.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/scsi-disk.c | 46 +++++++++++++++++++++-------------------------
1 files changed, 21 insertions(+), 25 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 1c74a00..723fffe 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -381,11 +381,7 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf)
return -1;
}
- if (s->qdev.type == TYPE_ROM) {
- outbuf[buflen++] = 5;
- } else {
- outbuf[buflen++] = 0;
- }
+ outbuf[buflen++] = s->qdev.type & 0x1f;
outbuf[buflen++] = page_code ; // this page
outbuf[buflen++] = 0x00;
@@ -529,11 +525,10 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf)
memset(outbuf, 0, buflen);
outbuf[0] = s->qdev.type & 0x1f;
+ outbuf[1] = s->removable ? 0x80 : 0;
if (s->qdev.type == TYPE_ROM) {
- outbuf[1] = 0x80;
memcpy(&outbuf[16], "QEMU CD-ROM ", 16);
} else {
- outbuf[1] = s->removable ? 0x80 : 0;
memcpy(&outbuf[16], "QEMU HARDDISK ", 16);
}
memcpy(&outbuf[8], "QEMU ", 8);
@@ -1518,7 +1513,7 @@ static void scsi_disk_unit_attention_reported(SCSIDevice *dev)
}
}
-static int scsi_initfn(SCSIDevice *dev, uint8_t scsi_type)
+static int scsi_initfn(SCSIDevice *dev)
{
SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
DriveInfo *dinfo;
@@ -1528,7 +1523,7 @@ static int scsi_initfn(SCSIDevice *dev, uint8_t scsi_type)
return -1;
}
- if (scsi_type == TYPE_DISK && !bdrv_is_inserted(s->qdev.conf.bs)) {
+ if (!s->removable && !bdrv_is_inserted(s->qdev.conf.bs)) {
error_report("Device needs media, but drive is empty");
return -1;
}
@@ -1550,18 +1545,11 @@ static int scsi_initfn(SCSIDevice *dev, uint8_t scsi_type)
return -1;
}
- if (scsi_type == TYPE_ROM) {
+ if (s->removable) {
bdrv_set_dev_ops(s->qdev.conf.bs, &scsi_cd_block_ops, s);
- s->qdev.blocksize = 2048;
- } else if (scsi_type == TYPE_DISK) {
- s->qdev.blocksize = s->qdev.conf.logical_block_size;
- } else {
- error_report("scsi-disk: Unhandled SCSI type %02x", scsi_type);
- return -1;
}
bdrv_set_buffer_alignment(s->qdev.conf.bs, s->qdev.blocksize);
- s->qdev.type = scsi_type;
qemu_add_vm_change_state_handler(scsi_dma_restart_cb, s);
bdrv_iostatus_enable(s->qdev.conf.bs);
add_boot_device_path(s->qdev.conf.bootindex, &dev->qdev, ",0");
@@ -1570,27 +1558,35 @@ static int scsi_initfn(SCSIDevice *dev, uint8_t scsi_type)
static int scsi_hd_initfn(SCSIDevice *dev)
{
- return scsi_initfn(dev, TYPE_DISK);
+ SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
+ s->qdev.blocksize = s->qdev.conf.logical_block_size;
+ s->qdev.type = TYPE_DISK;
+ return scsi_initfn(&s->qdev);
}
static int scsi_cd_initfn(SCSIDevice *dev)
{
- return scsi_initfn(dev, TYPE_ROM);
+ SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, dev);
+ s->qdev.blocksize = 2048;
+ s->qdev.type = TYPE_ROM;
+ s->removable = true;
+ return scsi_initfn(&s->qdev);
}
static int scsi_disk_initfn(SCSIDevice *dev)
{
DriveInfo *dinfo;
- uint8_t scsi_type;
if (!dev->conf.bs) {
- scsi_type = TYPE_DISK; /* will die in scsi_initfn() */
- } else {
- dinfo = drive_get_by_blockdev(dev->conf.bs);
- scsi_type = dinfo->media_cd ? TYPE_ROM : TYPE_DISK;
+ return scsi_initfn(dev); /* ... and die there */
}
- return scsi_initfn(dev, scsi_type);
+ dinfo = drive_get_by_blockdev(dev->conf.bs);
+ if (dinfo->media_cd) {
+ return scsi_cd_initfn(dev);
+ } else {
+ return scsi_hd_initfn(dev);
+ }
}
static SCSIReqOps scsi_disk_reqops = {
--
1.7.6
next prev parent reply other threads:[~2011-10-25 10:41 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-25 10:40 [Qemu-devel] [PULL v2 00/33] SCSI changes for 1.0, part 1 of 2 Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 01/33] scsi: pass correct sense code for ENOMEDIUM Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 02/33] atapi/scsi: unify definitions for MMC Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 03/33] atapi: move GESN definitions to scsi-defs.h Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 04/33] atapi: cleanup/fix mode sense results Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 05/33] scsi: notify the device when unit attention is reported Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 06/33] scsi-disk: report media changed via unit attention sense codes Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 07/33] scsi-disk: fix coding style issues (braces) Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 08/33] scsi-disk: add stubs for more MMC commands Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 09/33] scsi-disk: store valid mode pages in a table Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 10/33] atapi/scsi-disk: make mode page values coherent between the two Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 11/33] scsi-disk: support DVD profile in GET CONFIGURATION Paolo Bonzini
2012-01-25 16:34 ` Artyom Tarasenko
2012-01-25 17:03 ` Paolo Bonzini
2012-01-25 20:13 ` Artyom Tarasenko
2012-01-26 8:09 ` Paolo Bonzini
2012-01-26 8:23 ` ronnie sahlberg
2012-01-26 8:51 ` Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 12/33] scsi-disk: support READ DVD STRUCTURE Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 13/33] scsi-disk: report media changed via GET EVENT STATUS NOTIFICATION Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 14/33] scsi: move tcq/ndev to SCSIBusOps (now SCSIBusInfo) Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 15/33] qdev: switch children device list to QTAILQ Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 16/33] scsi: remove devs array from SCSIBus Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 17/33] scsi: implement REPORT LUNS for arbitrary LUNs Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 18/33] scsi: allow " Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 19/33] scsi: add channel to addressing Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 20/33] scsi-disk: fail READ CAPACITY if LBA != 0 but PMI == 0 Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 21/33] scsi-disk: fix retrying a flush Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 22/33] scsi-generic: drop SCSIGenericState Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 23/33] scsi-generic: remove scsi_req_fixup Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 24/33] scsi-generic: check ioctl statuses when SG_IO succeeds Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 25/33] scsi-generic: look at host status Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 26/33] scsi-generic: snoop READ CAPACITY commands to get block size Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 27/33] scsi-disk: do not duplicate BlockDriverState member Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 28/33] scsi-disk: remove cluster_size Paolo Bonzini
2011-10-25 10:40 ` Paolo Bonzini [this message]
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 30/33] scsi: move max_lba to SCSIDevice Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 31/33] scsi: make reqops const Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 32/33] scsi: export scsi_generic_reqops Paolo Bonzini
2011-10-25 10:40 ` [Qemu-devel] [PATCH v2 33/33] scsi: pass cdb to alloc_req Paolo Bonzini
2011-10-27 11:45 ` [Qemu-devel] ping Re: [PULL v2 00/33] SCSI changes for 1.0, part 1 of 2 Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1319539241-26436-30-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).