mirror of
https://github.com/SCST-project/scst.git
synced 2026-08-20 06:06:23 +00:00
Micro-optimize the code for CDB parsing in several device handlers.
BSD-signed-off-by: Bart Van Assche <bvanassche@acm.org> git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@3948 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
#include <linux/cdrom.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#define LOG_PREFIX "dev_cdrom"
|
||||
|
||||
@@ -135,8 +136,7 @@ static int cdrom_attach(struct scst_device *dev)
|
||||
}
|
||||
|
||||
if (rc == 0) {
|
||||
int sector_size = ((buffer[4] << 24) | (buffer[5] << 16) |
|
||||
(buffer[6] << 8) | (buffer[7] << 0));
|
||||
uint32_t sector_size = get_unaligned_be32(&buffer[4]);
|
||||
if (sector_size == 0)
|
||||
params->block_shift = CDROM_DEF_BLOCK_SHIFT;
|
||||
else
|
||||
|
||||
@@ -230,8 +230,7 @@ static int disk_attach(struct scst_device *dev)
|
||||
}
|
||||
}
|
||||
if (rc == 0) {
|
||||
int sector_size = ((buffer[4] << 24) | (buffer[5] << 16) |
|
||||
(buffer[6] << 8) | (buffer[7] << 0));
|
||||
uint32_t sector_size = get_unaligned_be32(&buffer[4]);
|
||||
if (sector_size == 0)
|
||||
params->block_shift = DISK_DEF_BLOCK_SHIFT;
|
||||
else
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#define LOG_PREFIX "dev_modisk"
|
||||
|
||||
@@ -232,8 +233,7 @@ static int modisk_attach(struct scst_device *dev)
|
||||
}
|
||||
|
||||
if (rc == 0) {
|
||||
int sector_size = ((buffer[4] << 24) | (buffer[5] << 16) |
|
||||
(buffer[6] << 8) | (buffer[7] << 0));
|
||||
uint32_t sector_size = get_unaligned_be32(&buffer[4]);
|
||||
if (sector_size == 0)
|
||||
params->block_shift = MODISK_DEF_BLOCK_SHIFT;
|
||||
else
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <scsi/scsi_host.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#define LOG_PREFIX "dev_tape"
|
||||
|
||||
@@ -219,9 +220,7 @@ static int tape_attach(struct scst_device *dev)
|
||||
if (rc == 0) {
|
||||
int medium_type, mode, speed, density;
|
||||
if (buffer[3] == 8) {
|
||||
params->block_size = ((buffer[9] << 16) |
|
||||
(buffer[10] << 8) |
|
||||
(buffer[11] << 0));
|
||||
params->block_size = get_unaligned_be24(&buffer[9]);
|
||||
} else
|
||||
params->block_size = TAPE_DEF_BLOCK_SIZE;
|
||||
medium_type = buffer[1];
|
||||
@@ -336,15 +335,10 @@ static int tape_done(struct scst_cmd *cmd)
|
||||
if ((cmd->sense[2] & 0x0f) == BLANK_CHECK)
|
||||
/* No need for EOM in this case */
|
||||
cmd->sense[2] &= 0xcf;
|
||||
TransferLength = ((cmd->cdb[2] << 16) |
|
||||
(cmd->cdb[3] << 8) | cmd->cdb[4]);
|
||||
TransferLength = get_unaligned_be24(&cmd->cdb[2]);
|
||||
/* Compute the residual count */
|
||||
if ((cmd->sense[0] & 0x80) != 0) {
|
||||
Residue = ((cmd->sense[3] << 24) |
|
||||
(cmd->sense[4] << 16) |
|
||||
(cmd->sense[5] << 8) |
|
||||
cmd->sense[6]);
|
||||
}
|
||||
if ((cmd->sense[0] & 0x80) != 0)
|
||||
Residue = get_unaligned_be32(&cmd->sense[3]);
|
||||
TRACE_DBG("Checking the sense key "
|
||||
"sn[2]=%x cmd->cdb[0,1]=%x,%x TransLen/Resid"
|
||||
" %d/%d", (int)cmd->sense[2], cmd->cdb[0],
|
||||
|
||||
Reference in New Issue
Block a user