All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Vivier <laurent@vivier.eu>
To: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>,
	pbonzini@redhat.com, fam@euphon.net, qemu-devel@nongnu.org,
	qemu-block@nongnu.org
Subject: Re: [PATCH v2 03/11] scsi-disk: add MODE_PAGE_APPLE_VENDOR quirk for Macintosh
Date: Thu, 26 May 2022 14:50:05 +0200	[thread overview]
Message-ID: <6770e5da-0025-b0ba-f5bd-b0940f6b0f51@vivier.eu> (raw)
In-Reply-To: <20220424164935.7339-4-mark.cave-ayland@ilande.co.uk>

Le 24/04/2022 à 18:49, Mark Cave-Ayland a écrit :
> One of the mechanisms MacOS uses to identify drives compatible with MacOS is to
> send a custom MODE SELECT command for page 0x30 to the drive. The response to
> this is a hard-coded manufacturer string which must match in order for the
> drive to be usable within MacOS.
> 
> Add an implementation of the MODE SELECT page 0x30 response guarded by a newly
> defined SCSI_DISK_QUIRK_MODE_PAGE_APPLE_VENDOR quirk bit so that drives attached
> to non-Apple machines function exactly as before.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>   hw/scsi/scsi-disk.c      | 17 +++++++++++++++++
>   include/hw/scsi/scsi.h   |  3 +++
>   include/scsi/constants.h |  1 +
>   3 files changed, 21 insertions(+)
> 
> diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
> index d89cdd4e4a..5de4506b97 100644
> --- a/hw/scsi/scsi-disk.c
> +++ b/hw/scsi/scsi-disk.c
> @@ -1085,6 +1085,7 @@ static int mode_sense_page(SCSIDiskState *s, int page, uint8_t **p_outbuf,
>           [MODE_PAGE_R_W_ERROR]              = (1 << TYPE_DISK) | (1 << TYPE_ROM),
>           [MODE_PAGE_AUDIO_CTL]              = (1 << TYPE_ROM),
>           [MODE_PAGE_CAPABILITIES]           = (1 << TYPE_ROM),
> +        [MODE_PAGE_APPLE_VENDOR]           = (1 << TYPE_ROM),
>       };
>   
>       uint8_t *p = *p_outbuf + 2;
> @@ -1229,6 +1230,20 @@ static int mode_sense_page(SCSIDiskState *s, int page, uint8_t **p_outbuf,
>           p[19] = (16 * 176) & 0xff;
>           break;
>   
> +     case MODE_PAGE_APPLE_VENDOR:
> +        if (s->quirks & (1 << SCSI_DISK_QUIRK_MODE_PAGE_APPLE_VENDOR)) {
> +            length = 0x24;
> +            if (page_control == 1) { /* Changeable Values */
> +                break;
> +            }
> +
> +            memset(p, 0, length);
> +            strcpy((char *)p + 8, "APPLE COMPUTER, INC   ");
> +            break;
> +        } else {
> +            return -1;
> +        }
> +
>       default:
>           return -1;
>       }
> @@ -3042,6 +3057,8 @@ static Property scsi_hd_properties[] = {
>       DEFINE_PROP_UINT16("rotation_rate", SCSIDiskState, rotation_rate, 0),
>       DEFINE_PROP_INT32("scsi_version", SCSIDiskState, qdev.default_scsi_version,
>                         5),
> +    DEFINE_PROP_BIT("quirk_mode_page_apple_vendor", SCSIDiskState, quirks,
> +                    SCSI_DISK_QUIRK_MODE_PAGE_APPLE_VENDOR, 0),
>       DEFINE_BLOCK_CHS_PROPERTIES(SCSIDiskState, qdev.conf),
>       DEFINE_PROP_END_OF_LIST(),
>   };
> diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h
> index 1ffb367f94..975d462347 100644
> --- a/include/hw/scsi/scsi.h
> +++ b/include/hw/scsi/scsi.h
> @@ -226,4 +226,7 @@ SCSIDevice *scsi_device_get(SCSIBus *bus, int channel, int target, int lun);
>   /* scsi-generic.c. */
>   extern const SCSIReqOps scsi_generic_req_ops;
>   
> +/* scsi-disk.c */
> +#define SCSI_DISK_QUIRK_MODE_PAGE_APPLE_VENDOR     0
> +
>   #endif
> diff --git a/include/scsi/constants.h b/include/scsi/constants.h
> index 2a32c08b5e..891aa0f45c 100644
> --- a/include/scsi/constants.h
> +++ b/include/scsi/constants.h
> @@ -234,6 +234,7 @@
>   #define MODE_PAGE_FAULT_FAIL                  0x1c
>   #define MODE_PAGE_TO_PROTECT                  0x1d
>   #define MODE_PAGE_CAPABILITIES                0x2a
> +#define MODE_PAGE_APPLE_VENDOR                0x30
>   #define MODE_PAGE_ALLS                        0x3f
>   /* Not in Mt. Fuji, but in ATAPI 2.6 -- deprecated now in favor
>    * of MODE_PAGE_SENSE_POWER */

Reviewed-by: Laurent Vivier <laurent@vivier.eu>


  reply	other threads:[~2022-05-26 12:52 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-24 16:49 [PATCH v2 00/11] scsi: add quirks and features to support m68k Macs Mark Cave-Ayland
2022-04-24 16:49 ` [PATCH v2 01/11] scsi-disk: add FORMAT UNIT command Mark Cave-Ayland
2022-05-25 22:01   ` Laurent Vivier
2022-04-24 16:49 ` [PATCH v2 02/11] scsi-disk: add new quirks bitmap to SCSIDiskState Mark Cave-Ayland
2022-05-26 12:26   ` Laurent Vivier
2022-04-24 16:49 ` [PATCH v2 03/11] scsi-disk: add MODE_PAGE_APPLE_VENDOR quirk for Macintosh Mark Cave-Ayland
2022-05-26 12:50   ` Laurent Vivier [this message]
2022-04-24 16:49 ` [PATCH v2 04/11] q800: implement compat_props to enable quirk_mode_page_apple_vendor for scsi-hd devices Mark Cave-Ayland
2022-05-26 12:25   ` Laurent Vivier
2022-04-24 16:49 ` [PATCH v2 05/11] scsi-disk: add SCSI_DISK_QUIRK_MODE_SENSE_ROM_FORCE_DBD quirk for Macintosh Mark Cave-Ayland
2022-04-24 16:49 ` [PATCH v2 06/11] q800: implement compat_props to enable quirk_mode_sense_rom_force_dbd for scsi-cd devices Mark Cave-Ayland
2022-05-26 12:25   ` Laurent Vivier
2022-04-24 16:49 ` [PATCH v2 07/11] scsi-disk: allow truncated MODE SELECT requests Mark Cave-Ayland
2022-05-26 12:06   ` Paolo Bonzini
2022-05-30 21:00     ` Mark Cave-Ayland
2022-04-24 16:49 ` [PATCH v2 08/11] scsi-disk: allow the MODE_PAGE_R_W_ERROR AWRE bit to be changeable for CDROM drives Mark Cave-Ayland
2022-04-24 16:49 ` [PATCH v2 09/11] scsi-disk: allow MODE SELECT block descriptor to set the ROM device block size Mark Cave-Ayland
2022-05-26 12:08   ` Paolo Bonzini
2022-05-30 21:03     ` Mark Cave-Ayland
2022-04-24 16:49 ` [PATCH v2 10/11] q800: add default vendor and product information for scsi-hd devices Mark Cave-Ayland
2022-05-26 12:22   ` Laurent Vivier
2022-04-24 16:49 ` [PATCH v2 11/11] q800: add default vendor and product information for scsi-cd devices Mark Cave-Ayland
2022-05-26 12:22   ` Laurent Vivier
2022-05-18 14:16 ` [PATCH v2 00/11] scsi: add quirks and features to support m68k Macs Mark Cave-Ayland
2022-05-26 12:09   ` 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=6770e5da-0025-b0ba-f5bd-b0940f6b0f51@vivier.eu \
    --to=laurent@vivier.eu \
    --cc=fam@euphon.net \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.