aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2007-09-21 06:23:42 -0400
committerJeff Garzik <jeff@garzik.org>2007-10-12 14:55:40 -0400
commit453941455218a81eedcea5dbafa38b8815920a8c (patch)
treeb2f21afae3beb39da13f089c02f0f09bfc4de697
parentad355b4628a19ba2af30409e13083edda221a5c9 (diff)
[libata] Slightly improved no-op REQUEST SENSE, SEND DIAGNOSTIC
A few pedantic apps care about missing or lame "mandatory" SCSI commands, so REQUEST SENSE -- as we autosense, R.S. just returns zeroes SEND DIAGNOSTIC -- our default (no-op) self-test succeeds, all other requests for testing fail. Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/ata/libata-scsi.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index b39966299e7b..79550908adcc 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -2912,6 +2912,7 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
2912{ 2912{
2913 struct ata_scsi_args args; 2913 struct ata_scsi_args args;
2914 const u8 *scsicmd = cmd->cmnd; 2914 const u8 *scsicmd = cmd->cmnd;
2915 u8 tmp8;
2915 2916
2916 args.dev = dev; 2917 args.dev = dev;
2917 args.id = dev->id; 2918 args.id = dev->id;
@@ -2926,7 +2927,6 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
2926 case SEEK_10: 2927 case SEEK_10:
2927 case TEST_UNIT_READY: 2928 case TEST_UNIT_READY:
2928 case FORMAT_UNIT: /* FIXME: correct? */ 2929 case FORMAT_UNIT: /* FIXME: correct? */
2929 case SEND_DIAGNOSTIC: /* FIXME: correct? */
2930 ata_scsi_rbuf_fill(&args, ata_scsiop_noop); 2930 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
2931 break; 2931 break;
2932 2932
@@ -2979,8 +2979,19 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
2979 ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns); 2979 ata_scsi_rbuf_fill(&args, ata_scsiop_report_luns);
2980 break; 2980 break;
2981 2981
2982 /* mandatory commands we haven't implemented yet */
2983 case REQUEST_SENSE: 2982 case REQUEST_SENSE:
2983 ata_scsi_set_sense(cmd, 0, 0, 0);
2984 cmd->result = (DRIVER_SENSE << 24);
2985 done(cmd);
2986 break;
2987
2988 case SEND_DIAGNOSTIC:
2989 tmp8 = scsicmd[1] & ~(1 << 3);
2990 if ((tmp8 == 0x4) && (!scsicmd[3]) && (!scsicmd[4]))
2991 ata_scsi_rbuf_fill(&args, ata_scsiop_noop);
2992 else
2993 ata_scsi_invalid_field(cmd, done);
2994 break;
2984 2995
2985 /* all other commands */ 2996 /* all other commands */
2986 default: 2997 default: