[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 10/35] scsi-disk: support DVD profile in GET CON
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-devel] [PATCH 10/35] scsi-disk: support DVD profile in GET CONFIGURATION |
Date: |
Mon, 17 Oct 2011 17:20:32 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:7.0) Gecko/20110927 Thunderbird/7.0 |
Am 13.10.2011 13:03, schrieb Paolo Bonzini:
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
> hw/scsi-disk.c | 50 ++++++++++++++++++++++++++++++++++++++++++--------
> 1 files changed, 42 insertions(+), 8 deletions(-)
>
> diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
> index 837747f..1786c37 100644
> --- a/hw/scsi-disk.c
> +++ b/hw/scsi-disk.c
> @@ -563,6 +563,19 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req,
> uint8_t *outbuf)
> return buflen;
> }
>
> +static inline bool media_is_dvd(SCSIDiskState *s)
> +{
> + uint64_t nb_sectors;
> + if (s->qdev.type != TYPE_ROM) {
> + return false;
> + }
> + if (!bdrv_is_inserted(s->bs)) {
> + return false;
> + }
> + bdrv_get_geometry(s->bs, &nb_sectors);
> + return nb_sectors > CD_MAX_SECTORS;
> +}
> +
> static int scsi_read_dvd_structure(SCSIDiskState *s, SCSIDiskReq *r,
> uint8_t *outbuf)
> {
> @@ -577,17 +590,38 @@ static int
> scsi_get_event_status_notification(SCSIDiskState *s,
> return -1;
> }
>
> -static int scsi_get_configuration(SCSIDiskState *s, SCSIDiskReq *r,
> - uint8_t *outbuf)
> +static int scsi_get_configuration(SCSIDiskState *s, uint8_t *outbuf)
> {
> + int current;
> +
> if (s->qdev.type != TYPE_ROM) {
> return -1;
> }
> - memset(outbuf, 0, 8);
> - /* ??? This should probably return much more information. For now
> - just return the basic header indicating the CD-ROM profile. */
> - outbuf[7] = 8; // CD-ROM
> - return 8;
> + current = media_is_dvd(s) ? MMC_PROFILE_DVD_ROM : MMC_PROFILE_CD_ROM;
> + memset(outbuf, 0, 40);
Is the memset required at all? I seem to remember that the output buffer
was zeroed in generic code.
> + stl_be_p(&outbuf[0], 36); /* Bytes after the data length field */
> + /* outbuf[4] - outbuf[19]: Feature 0 - Profile list */
Isn't it outbuf[8] - outbuf[19]?
> + stw_be_p(&outbuf[6], current);
> + outbuf[10] = 0x03; /* persistent, current */
> + outbuf[11] = 8; /* two profiles */
> + stw_be_p(&outbuf[12], MMC_PROFILE_DVD_ROM);
> + outbuf[14] = (current == MMC_PROFILE_DVD_ROM);
> + stw_be_p(&outbuf[16], MMC_PROFILE_CD_ROM);
> + outbuf[18] = (current == MMC_PROFILE_CD_ROM);
> + /* outbuf[20] - outbuf[31]: Feature 1 - Core feature */
> + stw_be_p(&outbuf[20], 1);
> + outbuf[22] = 0x08 | 0x03; /* version 2, persistent, current */
> + outbuf[23] = 8;
> + stl_be_p(&outbuf[24], 1); /* SCSI */
> + outbuf[28] = 1; /* DBE = 1, mandatory */
> + /* outbuf[32] - outbuf[39]: Feature 3 - Removable media feature */
> + stw_be_p(&outbuf[32], 3);
> + outbuf[34] = 0x08 | 0x03; /* version 2, persistent, current */
MMC-5 doesn't know version 2, so I can't check this.
> + outbuf[35] = 4;
> + outbuf[36] = 0x39; /* tray, load=1, eject=1, unlocked at powerup, lock=1
> */
> + /* TODO: Random readable, CD read, DVD read, drive serial number,
> + power management */
> + return 40;
> }
And some blank lines wouldn't hurt. :-)
>
> static int scsi_emulate_mechanism_status(SCSIDiskState *s, uint8_t *outbuf)
> @@ -1006,7 +1040,7 @@ static int scsi_disk_emulate_command(SCSIDiskReq *r)
> goto illegal_request;
> break;
> case GET_CONFIGURATION:
> - buflen = scsi_get_configuration(s, r, outbuf);
> + buflen = scsi_get_configuration(s, outbuf);
> if (buflen < 0)
> goto illegal_request;
> break;
Kevin
- [Qemu-devel] [PATCH 05/35] scsi: notify the device when unit attention is reported, (continued)
- [Qemu-devel] [PATCH 10/35] scsi-disk: support DVD profile in GET CONFIGURATION, Paolo Bonzini, 2011/10/13
- Re: [Qemu-devel] [PATCH 10/35] scsi-disk: support DVD profile in GET CONFIGURATION,
Kevin Wolf <=
- [Qemu-devel] [PATCH 14/35] qdev: switch children device list to QTAILQ, Paolo Bonzini, 2011/10/13
- [Qemu-devel] [PATCH 13/35] scsi: move tcq/ndev to SCSIBusOps (now SCSIBusInfo), Paolo Bonzini, 2011/10/13
- [Qemu-devel] [PATCH 11/35] scsi-disk: support READ DVD STRUCTURE, Paolo Bonzini, 2011/10/13