From 8baa843d7327c21afc937abe7f623a223f5e7f80 Mon Sep 17 00:00:00 2001 From: Arne Redlich Date: Sun, 18 Nov 2012 23:16:45 +0100 Subject: [PATCH] scsi-lowlevel: remove scsi_readtoc_params and fix READ TOC format field Set the format field in the READ TOC CDB (lower nibble of byte 2). Signed-off-by: Arne Redlich --- include/scsi-lowlevel.h | 8 -------- lib/scsi-lowlevel.c | 17 ++++++++++++----- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/include/scsi-lowlevel.h b/include/scsi-lowlevel.h index f6e662c..8c4fb08 100644 --- a/include/scsi-lowlevel.h +++ b/include/scsi-lowlevel.h @@ -176,13 +176,6 @@ struct scsi_readtoc_list { struct scsi_readtoc_desc desc[0]; }; -struct scsi_readtoc_params { - int msf; - int format; - int track_session; -}; - - struct scsi_report_supported_params { int return_timeouts; }; @@ -219,7 +212,6 @@ struct scsi_task { int expxferlen; unsigned char cdb[SCSI_CDB_MAX_SIZE]; union { - struct scsi_readtoc_params readtoc; struct scsi_maintenancein_params maintenancein; } params; diff --git a/lib/scsi-lowlevel.c b/lib/scsi-lowlevel.c index c31b7aa..ba48b57 100644 --- a/lib/scsi-lowlevel.c +++ b/lib/scsi-lowlevel.c @@ -317,6 +317,8 @@ scsi_cdb_readtoc(int msf, int format, int track_session, uint16_t alloc_len) task->cdb[1] |= 0x02; } + task->cdb[2] = format & 0xf; + /* Prevent invalid setting of Track/Session Number */ if (format == SCSI_READ_TOC || format == SCSI_READ_FULL_TOC) { task->cdb[6] = 0xff & track_session; @@ -332,10 +334,6 @@ scsi_cdb_readtoc(int msf, int format, int track_session, uint16_t alloc_len) } task->expxferlen = alloc_len; - task->params.readtoc.msf = msf; - task->params.readtoc.format = format; - task->params.readtoc.track_session = track_session; - return task; } @@ -353,10 +351,16 @@ scsi_readtoc_datain_getfullsize(struct scsi_task *task) return toc_data_len; } +static inline enum scsi_readtoc_fmt +scsi_readtoc_format(const struct scsi_task *task) +{ + return task->cdb[2] & 0xf; +} + static void scsi_readtoc_desc_unmarshall(struct scsi_task *task, struct scsi_readtoc_list *list, int i) { - switch(task->params.readtoc.format){ + switch(scsi_readtoc_format(task)) { case SCSI_READ_TOC: list->desc[i].desc.toc.adr = task->datain.data[4+8*i+1] & 0xf0; @@ -403,8 +407,11 @@ scsi_readtoc_desc_unmarshall(struct scsi_task *task, struct scsi_readtoc_list *l list->desc[i].desc.full.pframe = task->datain.data[4+11*i+10]; break; + default: + break; } } + /* * unmarshall the data in blob for read TOC into a structure */