From 5cba435a663005f6a8883cb57442dedd8cd3377c Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 22 Feb 2012 14:11:57 +0100 Subject: [PATCH 041/109] scsi-disk: add missing definitions for MMC RH-Author: Paolo Bonzini Message-id: <1329919979-20948-41-git-send-email-pbonzini@redhat.com> Patchwork-id: 37521 O-Subject: [RHEL 6.3 qemu-kvm PATCH v2 040/102] scsi-disk: add missing definitions for MMC Bugzilla: 782029 RH-Acked-by: Laszlo Ersek RH-Acked-by: Orit Wasserman RH-Acked-by: Gerd Hoffmann The definitions in ide/internal.h are more complete than the one in scsi-defs.h. Add the missing pieces. Unlike upstream, do not touch ATAPI code though. Signed-off-by: Paolo Bonzini Signed-off-by: Kevin Wolf (cherry picked from 67cc61e43077eeffc7c95a1bb25d05a12d051c67) Conflicts: hw/ide/internal.h (but that part wasn't merged anyway) --- hw/scsi-bus.c | 2 +- hw/scsi-defs.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ hw/scsi-disk.c | 8 +++--- 3 files changed, 71 insertions(+), 5 deletions(-) Signed-off-by: Michal Novotny --- hw/scsi-bus.c | 2 +- hw/scsi-defs.h | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ hw/scsi-disk.c | 8 +++--- 3 files changed, 71 insertions(+), 5 deletions(-) diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index 1d374ba..a177542 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -859,7 +859,7 @@ const struct SCSISense sense_code_SAVING_PARAMS_NOT_SUPPORTED = { }; /* Illegal request, Incompatible medium installed */ -const struct SCSISense sense_code_INCOMPATIBLE_MEDIUM = { +const struct SCSISense sense_code_INCOMPATIBLE_FORMAT = { .key = ILLEGAL_REQUEST, .asc = 0x30, .ascq = 0x00 }; diff --git a/hw/scsi-defs.h b/hw/scsi-defs.h index bfe9392..6bb4df7 100644 --- a/hw/scsi-defs.h +++ b/hw/scsi-defs.h @@ -188,3 +188,69 @@ #define TYPE_INACTIVE 0x20 #define TYPE_NO_LUN 0x7f +/* Mode page codes for mode sense/set */ +#define MODE_PAGE_R_W_ERROR 0x01 +#define MODE_PAGE_HD_GEOMETRY 0x04 +#define MODE_PAGE_FLEXIBLE_DISK_GEOMETRY 0x05 +#define MODE_PAGE_CACHING 0x08 +#define MODE_PAGE_AUDIO_CTL 0x0e +#define MODE_PAGE_POWER 0x1a +#define MODE_PAGE_FAULT_FAIL 0x1c +#define MODE_PAGE_TO_PROTECT 0x1d +#define MODE_PAGE_CAPABILITIES 0x2a +#define MODE_PAGE_ALLS 0x3f +/* Not in Mt. Fuji, but in ATAPI 2.6 -- depricated now in favor + * of MODE_PAGE_SENSE_POWER */ +#define MODE_PAGE_CDROM 0x0d + +/* + * Based on values from but extending CD_MINS + * to the maximum common size allowed by the Orange's Book ATIP + * + * 90 and 99 min CDs are also available but using them as the + * upper limit reduces the effectiveness of the heuristic to + * detect DVDs burned to less than 25% of their maximum capacity + */ + +/* Some generally useful CD-ROM information */ +#define CD_MINS 80 /* max. minutes per CD */ +#define CD_SECS 60 /* seconds per minute */ +#define CD_FRAMES 75 /* frames per second */ +#define CD_FRAMESIZE 2048 /* bytes per frame, "cooked" mode */ +#define CD_MAX_BYTES (CD_MINS * CD_SECS * CD_FRAMES * CD_FRAMESIZE) +#define CD_MAX_SECTORS (CD_MAX_BYTES / 512) + +/* + * The MMC values are not IDE specific and might need to be moved + * to a common header if they are also needed for the SCSI emulation + */ + +/* Profile list from MMC-6 revision 1 table 91 */ +#define MMC_PROFILE_NONE 0x0000 +#define MMC_PROFILE_CD_ROM 0x0008 +#define MMC_PROFILE_CD_R 0x0009 +#define MMC_PROFILE_CD_RW 0x000A +#define MMC_PROFILE_DVD_ROM 0x0010 +#define MMC_PROFILE_DVD_R_SR 0x0011 +#define MMC_PROFILE_DVD_RAM 0x0012 +#define MMC_PROFILE_DVD_RW_RO 0x0013 +#define MMC_PROFILE_DVD_RW_SR 0x0014 +#define MMC_PROFILE_DVD_R_DL_SR 0x0015 +#define MMC_PROFILE_DVD_R_DL_JR 0x0016 +#define MMC_PROFILE_DVD_RW_DL 0x0017 +#define MMC_PROFILE_DVD_DDR 0x0018 +#define MMC_PROFILE_DVD_PLUS_RW 0x001A +#define MMC_PROFILE_DVD_PLUS_R 0x001B +#define MMC_PROFILE_DVD_PLUS_RW_DL 0x002A +#define MMC_PROFILE_DVD_PLUS_R_DL 0x002B +#define MMC_PROFILE_BD_ROM 0x0040 +#define MMC_PROFILE_BD_R_SRM 0x0041 +#define MMC_PROFILE_BD_R_RRM 0x0042 +#define MMC_PROFILE_BD_RE 0x0043 +#define MMC_PROFILE_HDDVD_ROM 0x0050 +#define MMC_PROFILE_HDDVD_R 0x0051 +#define MMC_PROFILE_HDDVD_RAM 0x0052 +#define MMC_PROFILE_HDDVD_RW 0x0053 +#define MMC_PROFILE_HDDVD_R_DL 0x0058 +#define MMC_PROFILE_HDDVD_RW_DL 0x005A +#define MMC_PROFILE_INVALID 0xFFFF diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index 8de99e2..0e9ced8 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -610,7 +610,7 @@ static int mode_sense_page(SCSIDiskState *s, int page, uint8_t **p_outbuf, * The buffer was already menset to zero by the caller of this function. */ switch (page) { - case 4: /* Rigid disk device geometry page. */ + case MODE_PAGE_HD_GEOMETRY: if (s->qdev.type == TYPE_ROM) { return -1; } @@ -645,7 +645,7 @@ static int mode_sense_page(SCSIDiskState *s, int page, uint8_t **p_outbuf, p[21] = 5400 & 0xff; break; - case 5: /* Flexible disk device geometry page. */ + case MODE_PAGE_FLEXIBLE_DISK_GEOMETRY: if (s->qdev.type == TYPE_ROM) { return -1; } @@ -687,7 +687,7 @@ static int mode_sense_page(SCSIDiskState *s, int page, uint8_t **p_outbuf, p[29] = 5400 & 0xff; break; - case 8: /* Caching page. */ + case MODE_PAGE_CACHING: p[0] = 8; p[1] = 0x12; if (page_control == 1) { /* Changeable Values */ @@ -698,7 +698,7 @@ static int mode_sense_page(SCSIDiskState *s, int page, uint8_t **p_outbuf, } break; - case 0x2a: /* CD Capabilities and Mechanical Status page. */ + case MODE_PAGE_CAPABILITIES: if (s->qdev.type != TYPE_ROM) { return -1; } -- 1.7.7.6