From 85e427ea54eee2a6fb25e66796c67b111a8045a9 Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Tue, 25 Sep 2012 06:54:01 -0700 Subject: [PATCH] SCSI: READTOC change alloclen to a uint32 and encode it in the CDB --- include/scsi-lowlevel.h | 2 +- lib/scsi-lowlevel.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/scsi-lowlevel.h b/include/scsi-lowlevel.h index 0483ee1..7c9f431 100644 --- a/include/scsi-lowlevel.h +++ b/include/scsi-lowlevel.h @@ -110,7 +110,7 @@ enum scsi_xfer_dir { /* * READTOC */ -EXTERN struct scsi_task *scsi_cdb_readtoc(int msf, int format, int track_session, uint32_t xferlen); +EXTERN struct scsi_task *scsi_cdb_readtoc(int msf, int format, int track_session, uint16_t alloc_len); enum scsi_readtoc_fmt { SCSI_READ_TOC = 0, diff --git a/lib/scsi-lowlevel.c b/lib/scsi-lowlevel.c index a536177..11c01c3 100644 --- a/lib/scsi-lowlevel.c +++ b/lib/scsi-lowlevel.c @@ -308,7 +308,7 @@ scsi_cdb_readcapacity10(int lba, int pmi) * READTOC */ struct scsi_task * -scsi_cdb_readtoc(int msf, int format, int track_session, uint32_t xferlen) +scsi_cdb_readtoc(int msf, int format, int track_session, uint16_t alloc_len) { struct scsi_task *task; @@ -335,13 +335,15 @@ scsi_cdb_readtoc(int msf, int format, int track_session, uint32_t xferlen) task->cdb[6] = 0xff & track_session; } + *(uint16_t *)&task->cdb[7] = htons(alloc_len); + task->cdb_size = 10; - if (xferlen != 0) { + if (alloc_len != 0) { task->xfer_dir = SCSI_XFER_READ; } else { task->xfer_dir = SCSI_XFER_NONE; } - task->expxferlen = xferlen; + task->expxferlen = alloc_len; task->params.readtoc.msf = msf; task->params.readtoc.format = format;