* [Qemu-devel] [PATCH] scsi-disk: add some optional scsi commands
@ 2010-09-02 13:11 Bernhard Kohl
2010-09-03 15:41 ` [Qemu-devel] " Kevin Wolf
0 siblings, 1 reply; 9+ messages in thread
From: Bernhard Kohl @ 2010-09-02 13:11 UTC (permalink / raw)
To: qemu-devel; +Cc: kwolf, Bernhard Kohl
I use a legacy OS which depends on some optional SCSI commands.
In fact this implementation does nothing special, but provides minimum
support for the following commands:
REZERO UNIT
WRITE AND VERIFY(10)
WRITE AND VERIFY(12)
WRITE AND VERIFY(16)
MODE SELECT(6)
MODE SELECT(10)
SEEK(6)
SEEK(10)
---
hw/scsi-disk.c | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index b80c9bd..1446ca6 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -892,6 +892,12 @@ static int scsi_disk_emulate_command(SCSIRequest *req, uint8_t *outbuf)
break;
case VERIFY:
break;
+ case REZERO_UNIT:
+ DPRINTF("Rezero Unit\n");
+ if (!bdrv_is_inserted(s->bs)) {
+ goto not_ready;
+ }
+ break;
default:
goto illegal_request;
}
@@ -1011,6 +1017,7 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
case SERVICE_ACTION_IN:
case REPORT_LUNS:
case VERIFY:
+ case REZERO_UNIT:
rc = scsi_disk_emulate_command(&r->req, outbuf);
if (rc > 0) {
r->iov.iov_len = rc;
@@ -1034,13 +1041,40 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
case WRITE_10:
case WRITE_12:
case WRITE_16:
- DPRINTF("Write (sector %" PRId64 ", count %d)\n", lba, len);
+ case WRITE_VERIFY:
+ case WRITE_VERIFY_12:
+ case WRITE_VERIFY_16:
+ DPRINTF("Write %s(sector %" PRId64 ", count %d)\n",
+ (command & 0xe) == 0xe ? "And Verify " : "", lba, len);
if (lba > s->max_lba)
goto illegal_lba;
r->sector = lba * s->cluster_size;
r->sector_count = len * s->cluster_size;
is_write = 1;
break;
+ case MODE_SELECT:
+ DPRINTF("Mode Select(6) (len %d)\n", len);
+ /* We don't support mode parameter changes.
+ Allow the mode parameter header + block descriptors only. */
+ if (len > 12) {
+ goto fail;
+ }
+ break;
+ case MODE_SELECT_10:
+ DPRINTF("Mode Select(10) (len %d)\n", len);
+ /* We don't support mode parameter changes.
+ Allow the mode parameter header + block descriptors only. */
+ if (len > 16) {
+ goto fail;
+ }
+ break;
+ case SEEK_6:
+ case SEEK_10:
+ DPRINTF("Seek(%d) (sector %" PRId64 ")\n", command == SEEK_6 ? 6 : 10, lba);
+ if (lba > s->max_lba) {
+ goto illegal_lba;
+ }
+ break;
default:
DPRINTF("Unknown SCSI command (%2.2x)\n", buf[0]);
fail:
--
1.7.2.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [PATCH] scsi-disk: add some optional scsi commands
2010-09-02 13:11 [Qemu-devel] [PATCH] scsi-disk: add some optional scsi commands Bernhard Kohl
@ 2010-09-03 15:41 ` Kevin Wolf
2010-09-06 9:24 ` Bernhard Kohl
2010-09-06 9:25 ` [Qemu-devel] [PATCH v2] " Bernhard Kohl
0 siblings, 2 replies; 9+ messages in thread
From: Kevin Wolf @ 2010-09-03 15:41 UTC (permalink / raw)
To: Bernhard Kohl; +Cc: qemu-devel
Am 02.09.2010 15:11, schrieb Bernhard Kohl:
> I use a legacy OS which depends on some optional SCSI commands.
> In fact this implementation does nothing special, but provides minimum
> support for the following commands:
>
> REZERO UNIT
> WRITE AND VERIFY(10)
> WRITE AND VERIFY(12)
> WRITE AND VERIFY(16)
> MODE SELECT(6)
> MODE SELECT(10)
> SEEK(6)
> SEEK(10)
You forgot the SoB line on this one. Looks good otherwise.
Kevin
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [PATCH] scsi-disk: add some optional scsi commands
2010-09-03 15:41 ` [Qemu-devel] " Kevin Wolf
@ 2010-09-06 9:24 ` Bernhard Kohl
2010-09-06 9:25 ` [Qemu-devel] [PATCH v2] " Bernhard Kohl
1 sibling, 0 replies; 9+ messages in thread
From: Bernhard Kohl @ 2010-09-06 9:24 UTC (permalink / raw)
To: ext Kevin Wolf; +Cc: qemu-devel
Am 03.09.2010 17:41, schrieb ext Kevin Wolf:
> Am 02.09.2010 15:11, schrieb Bernhard Kohl:
>
>> I use a legacy OS which depends on some optional SCSI commands.
>> In fact this implementation does nothing special, but provides minimum
>> support for the following commands:
>>
>> REZERO UNIT
>> WRITE AND VERIFY(10)
>> WRITE AND VERIFY(12)
>> WRITE AND VERIFY(16)
>> MODE SELECT(6)
>> MODE SELECT(10)
>> SEEK(6)
>> SEEK(10)
>>
> You forgot the SoB line on this one. Looks good otherwise.
>
> Kevin
>
Sorry for that. I'll resend the patch.
Bernhard
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v2] scsi-disk: add some optional scsi commands
2010-09-03 15:41 ` [Qemu-devel] " Kevin Wolf
2010-09-06 9:24 ` Bernhard Kohl
@ 2010-09-06 9:25 ` Bernhard Kohl
2010-09-06 9:33 ` [Qemu-devel] " Kevin Wolf
1 sibling, 1 reply; 9+ messages in thread
From: Bernhard Kohl @ 2010-09-06 9:25 UTC (permalink / raw)
To: ext Kevin Wolf; +Cc: qemu-devel
I use a legacy OS which depends on some optional SCSI commands.
In fact this implementation does nothing special, but provides minimum
support for the following commands:
REZERO UNIT
WRITE AND VERIFY(10)
WRITE AND VERIFY(12)
WRITE AND VERIFY(16)
MODE SELECT(6)
MODE SELECT(10)
SEEK(6)
SEEK(10)
Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
---
hw/scsi-disk.c | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index b80c9bd..1446ca6 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -892,6 +892,12 @@ static int scsi_disk_emulate_command(SCSIRequest
*req, uint8_t *outbuf)
break;
case VERIFY:
break;
+ case REZERO_UNIT:
+ DPRINTF("Rezero Unit\n");
+ if (!bdrv_is_inserted(s->bs)) {
+ goto not_ready;
+ }
+ break;
default:
goto illegal_request;
}
@@ -1011,6 +1017,7 @@ static int32_t scsi_send_command(SCSIDevice *d,
uint32_t tag,
case SERVICE_ACTION_IN:
case REPORT_LUNS:
case VERIFY:
+ case REZERO_UNIT:
rc = scsi_disk_emulate_command(&r->req, outbuf);
if (rc > 0) {
r->iov.iov_len = rc;
@@ -1034,13 +1041,40 @@ static int32_t scsi_send_command(SCSIDevice *d,
uint32_t tag,
case WRITE_10:
case WRITE_12:
case WRITE_16:
- DPRINTF("Write (sector %" PRId64 ", count %d)\n", lba, len);
+ case WRITE_VERIFY:
+ case WRITE_VERIFY_12:
+ case WRITE_VERIFY_16:
+ DPRINTF("Write %s(sector %" PRId64 ", count %d)\n",
+ (command & 0xe) == 0xe ? "And Verify " : "", lba, len);
if (lba > s->max_lba)
goto illegal_lba;
r->sector = lba * s->cluster_size;
r->sector_count = len * s->cluster_size;
is_write = 1;
break;
+ case MODE_SELECT:
+ DPRINTF("Mode Select(6) (len %d)\n", len);
+ /* We don't support mode parameter changes.
+ Allow the mode parameter header + block descriptors only. */
+ if (len > 12) {
+ goto fail;
+ }
+ break;
+ case MODE_SELECT_10:
+ DPRINTF("Mode Select(10) (len %d)\n", len);
+ /* We don't support mode parameter changes.
+ Allow the mode parameter header + block descriptors only. */
+ if (len > 16) {
+ goto fail;
+ }
+ break;
+ case SEEK_6:
+ case SEEK_10:
+ DPRINTF("Seek(%d) (sector %" PRId64 ")\n", command == SEEK_6 ?
6 : 10, lba);
+ if (lba > s->max_lba) {
+ goto illegal_lba;
+ }
+ break;
default:
DPRINTF("Unknown SCSI command (%2.2x)\n", buf[0]);
fail:
--
1.7.2.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [PATCH v2] scsi-disk: add some optional scsi commands
2010-09-06 9:25 ` [Qemu-devel] [PATCH v2] " Bernhard Kohl
@ 2010-09-06 9:33 ` Kevin Wolf
2010-09-06 9:41 ` Bernhard Kohl
2010-09-06 9:50 ` [Qemu-devel] [PATCH v3] " Bernhard Kohl
0 siblings, 2 replies; 9+ messages in thread
From: Kevin Wolf @ 2010-09-06 9:33 UTC (permalink / raw)
To: Bernhard Kohl; +Cc: qemu-devel
Am 06.09.2010 11:25, schrieb Bernhard Kohl:
> I use a legacy OS which depends on some optional SCSI commands.
> In fact this implementation does nothing special, but provides minimum
> support for the following commands:
>
> REZERO UNIT
> WRITE AND VERIFY(10)
> WRITE AND VERIFY(12)
> WRITE AND VERIFY(16)
> MODE SELECT(6)
> MODE SELECT(10)
> SEEK(6)
> SEEK(10)
>
> Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
> ---
> hw/scsi-disk.c | 36 +++++++++++++++++++++++++++++++++++-
> 1 files changed, 35 insertions(+), 1 deletions(-)
>
> diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
> index b80c9bd..1446ca6 100644
> --- a/hw/scsi-disk.c
> +++ b/hw/scsi-disk.c
> @@ -892,6 +892,12 @@ static int scsi_disk_emulate_command(SCSIRequest
> *req, uint8_t *outbuf)
Sorry to request another version, but this patch is corrupted by line
wraps. I think it was right when you sent the first version, did you
change anything?
Kevin
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [PATCH v2] scsi-disk: add some optional scsi commands
2010-09-06 9:33 ` [Qemu-devel] " Kevin Wolf
@ 2010-09-06 9:41 ` Bernhard Kohl
2010-09-06 10:03 ` Kevin Wolf
2010-09-06 9:50 ` [Qemu-devel] [PATCH v3] " Bernhard Kohl
1 sibling, 1 reply; 9+ messages in thread
From: Bernhard Kohl @ 2010-09-06 9:41 UTC (permalink / raw)
To: ext Kevin Wolf; +Cc: qemu-devel
Am 06.09.2010 11:33, schrieb ext Kevin Wolf:
> Sorry to request another version, but this patch is corrupted by line
> wraps. I think it was right when you sent the first version, did you
> change anything?
>
No I didn't change anything. I did 'git commit -s --amend' and
'git format-patch' and then I pasted it into Thunderbird. What
email program are you using?
The first version I sent with 'git send-email'. I'll try that again.
Bernhard
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [PATCH v2] scsi-disk: add some optional scsi commands
2010-09-06 9:41 ` Bernhard Kohl
@ 2010-09-06 10:03 ` Kevin Wolf
0 siblings, 0 replies; 9+ messages in thread
From: Kevin Wolf @ 2010-09-06 10:03 UTC (permalink / raw)
To: Bernhard Kohl; +Cc: qemu-devel
Am 06.09.2010 11:41, schrieb Bernhard Kohl:
> Am 06.09.2010 11:33, schrieb ext Kevin Wolf:
>> Sorry to request another version, but this patch is corrupted by line
>> wraps. I think it was right when you sent the first version, did you
>> change anything?
>>
>
> No I didn't change anything. I did 'git commit -s --amend' and
> 'git format-patch' and then I pasted it into Thunderbird. What
> email program are you using?
>
> The first version I sent with 'git send-email'. I'll try that again.
git send-email is what I use for patches, too. It hasn't broken my
patches so far and it's also quite convenient because it works from the
shell where I just ran git format-patch.
Kevin
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v3] scsi-disk: add some optional scsi commands
2010-09-06 9:33 ` [Qemu-devel] " Kevin Wolf
2010-09-06 9:41 ` Bernhard Kohl
@ 2010-09-06 9:50 ` Bernhard Kohl
2010-09-06 10:06 ` [Qemu-devel] " Kevin Wolf
1 sibling, 1 reply; 9+ messages in thread
From: Bernhard Kohl @ 2010-09-06 9:50 UTC (permalink / raw)
To: qemu-devel; +Cc: kwolf, Bernhard Kohl
I use a legacy OS which depends on some optional SCSI commands.
In fact this implementation does nothing special, but provides minimum
support for the following commands:
REZERO UNIT
WRITE AND VERIFY(10)
WRITE AND VERIFY(12)
WRITE AND VERIFY(16)
MODE SELECT(6)
MODE SELECT(10)
SEEK(6)
SEEK(10)
Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
---
hw/scsi-disk.c | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index b80c9bd..1446ca6 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -892,6 +892,12 @@ static int scsi_disk_emulate_command(SCSIRequest *req, uint8_t *outbuf)
break;
case VERIFY:
break;
+ case REZERO_UNIT:
+ DPRINTF("Rezero Unit\n");
+ if (!bdrv_is_inserted(s->bs)) {
+ goto not_ready;
+ }
+ break;
default:
goto illegal_request;
}
@@ -1011,6 +1017,7 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
case SERVICE_ACTION_IN:
case REPORT_LUNS:
case VERIFY:
+ case REZERO_UNIT:
rc = scsi_disk_emulate_command(&r->req, outbuf);
if (rc > 0) {
r->iov.iov_len = rc;
@@ -1034,13 +1041,40 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
case WRITE_10:
case WRITE_12:
case WRITE_16:
- DPRINTF("Write (sector %" PRId64 ", count %d)\n", lba, len);
+ case WRITE_VERIFY:
+ case WRITE_VERIFY_12:
+ case WRITE_VERIFY_16:
+ DPRINTF("Write %s(sector %" PRId64 ", count %d)\n",
+ (command & 0xe) == 0xe ? "And Verify " : "", lba, len);
if (lba > s->max_lba)
goto illegal_lba;
r->sector = lba * s->cluster_size;
r->sector_count = len * s->cluster_size;
is_write = 1;
break;
+ case MODE_SELECT:
+ DPRINTF("Mode Select(6) (len %d)\n", len);
+ /* We don't support mode parameter changes.
+ Allow the mode parameter header + block descriptors only. */
+ if (len > 12) {
+ goto fail;
+ }
+ break;
+ case MODE_SELECT_10:
+ DPRINTF("Mode Select(10) (len %d)\n", len);
+ /* We don't support mode parameter changes.
+ Allow the mode parameter header + block descriptors only. */
+ if (len > 16) {
+ goto fail;
+ }
+ break;
+ case SEEK_6:
+ case SEEK_10:
+ DPRINTF("Seek(%d) (sector %" PRId64 ")\n", command == SEEK_6 ? 6 : 10, lba);
+ if (lba > s->max_lba) {
+ goto illegal_lba;
+ }
+ break;
default:
DPRINTF("Unknown SCSI command (%2.2x)\n", buf[0]);
fail:
--
1.7.2.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [PATCH v3] scsi-disk: add some optional scsi commands
2010-09-06 9:50 ` [Qemu-devel] [PATCH v3] " Bernhard Kohl
@ 2010-09-06 10:06 ` Kevin Wolf
0 siblings, 0 replies; 9+ messages in thread
From: Kevin Wolf @ 2010-09-06 10:06 UTC (permalink / raw)
To: Bernhard Kohl; +Cc: qemu-devel
Am 06.09.2010 11:50, schrieb Bernhard Kohl:
> I use a legacy OS which depends on some optional SCSI commands.
> In fact this implementation does nothing special, but provides minimum
> support for the following commands:
>
> REZERO UNIT
> WRITE AND VERIFY(10)
> WRITE AND VERIFY(12)
> WRITE AND VERIFY(16)
> MODE SELECT(6)
> MODE SELECT(10)
> SEEK(6)
> SEEK(10)
>
> Signed-off-by: Bernhard Kohl <bernhard.kohl@nsn.com>
Thanks, this one looks good. Applied to the block branch.
Kevin
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2010-09-06 10:06 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-02 13:11 [Qemu-devel] [PATCH] scsi-disk: add some optional scsi commands Bernhard Kohl
2010-09-03 15:41 ` [Qemu-devel] " Kevin Wolf
2010-09-06 9:24 ` Bernhard Kohl
2010-09-06 9:25 ` [Qemu-devel] [PATCH v2] " Bernhard Kohl
2010-09-06 9:33 ` [Qemu-devel] " Kevin Wolf
2010-09-06 9:41 ` Bernhard Kohl
2010-09-06 10:03 ` Kevin Wolf
2010-09-06 9:50 ` [Qemu-devel] [PATCH v3] " Bernhard Kohl
2010-09-06 10:06 ` [Qemu-devel] " Kevin Wolf
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).