Am 13.10.2011 13:03, schrieb Paolo Bonzini: > This patch adds a few stub implementations for MMC commands to > scsi-disk, to be filled in later in the series. It also adds to > scsi-defs.h constants for commands implemented by ide/atapi.c, > when missing. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > hw/scsi-defs.h | 3 ++ > hw/scsi-disk.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++---- > 2 files changed, 61 insertions(+), 5 deletions(-) > > diff --git a/hw/scsi-defs.h b/hw/scsi-defs.h > index 8094698..030d4c2 100644 > --- a/hw/scsi-defs.h > +++ b/hw/scsi-defs.h > @@ -113,6 +113,7 @@ > #define READ_12 0xa8 > #define WRITE_12 0xaa > #define SERVICE_ACTION_IN_12 0xab > +#define READ_DVD_STRUCTURE 0xad > #define WRITE_VERIFY_12 0xae > #define VERIFY_12 0xaf > #define SEARCH_HIGH_12 0xb0 > @@ -122,6 +123,8 @@ > #define SEND_VOLUME_TAG 0xb6 > #define READ_DEFECT_DATA_12 0xb7 > #define SET_CD_SPEED 0xbb > +#define MECHANISM_STATUS 0xbd > +#define READ_CD 0xbe > > /* > * SERVICE ACTION IN subcodes > diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c > index 880cb22..95a6b77 100644 > --- a/hw/scsi-disk.c > +++ b/hw/scsi-disk.c > @@ -563,6 +563,43 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, > uint8_t *outbuf) > return buflen; > } > > +static int scsi_read_dvd_structure(SCSIDiskState *s, SCSIDiskReq *r, > + uint8_t *outbuf) > +{ > + scsi_check_condition(r, SENSE_CODE(INVALID_OPCODE)); > + return -1; > +} > + > +static int scsi_get_event_status_notification(SCSIDiskState *s, > + SCSIDiskReq *r, uint8_t > *outbuf) > +{ > + scsi_check_condition(r, SENSE_CODE(INVALID_OPCODE)); > + return -1; > +} > + > +static int scsi_get_configuration(SCSIDiskState *s, SCSIDiskReq *r, > + uint8_t *outbuf) > +{ > + 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; > +} > + > +static int scsi_emulate_mechanism_status(SCSIDiskState *s, uint8_t *outbuf) > +{ > + if (s->qdev.type != TYPE_ROM) { > + return -1; > + } > + memset(outbuf, 0, 8); > + outbuf[5] = 1; // CD-ROM > + return 8; > +} > + > static int mode_sense_page(SCSIDiskState *s, int page, uint8_t **p_outbuf, > int page_control) > { > @@ -947,12 +984,25 @@ static int scsi_disk_emulate_command(SCSIDiskReq *r) > outbuf[7] = 0; > buflen = 8; > break; > + case MECHANISM_STATUS: > + buflen = scsi_emulate_mechanism_status(s, outbuf); > + if (buflen < 0) > + goto illegal_request;
Braces are missing here and in the other commands. Kevin