aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/aacraid
diff options
context:
space:
mode:
authorRajashekhara, Mahesh <Mahesh_Rajashekhara@adaptec.com>2010-05-10 07:12:28 -0400
committerJames Bottomley <James.Bottomley@suse.de>2010-05-16 22:35:54 -0400
commite3cc268fe4a0ad1cbefbc53cee35c80281e609b8 (patch)
tree2a01479de6fc10141975e14674060f43adec5e59 /drivers/scsi/aacraid
parent5ca05594097438f81337e53ad50c2d17ffc28238 (diff)
[SCSI] aacraid: expose physical devices for models with newer firmware
The default driver setting is "expose_physicals=0", which means raw physical drives are not exposed to OS. If the user wants to expose connected physical drives, enable "expose_physicals" module parameter. With the new JBOD firmware, physical drives are not available for "expose_physicals>0". In function "aac_expose_phy_device", modified to reset the appropriate bit in the first byte of inquiry data. This fix exposes the connected physical drives. Signed-off-by: Mahesh Rajashekhara <aacraid@adaptec.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/aacraid')
-rw-r--r--drivers/scsi/aacraid/aachba.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index 7e26ebc26661..24b1ba06ece4 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -328,6 +328,16 @@ int aac_get_config_status(struct aac_dev *dev, int commit_flag)
328 return status; 328 return status;
329} 329}
330 330
331static void aac_expose_phy_device(struct scsi_cmnd *scsicmd)
332{
333 char inq_data;
334 scsi_sg_copy_to_buffer(scsicmd, &inq_data, sizeof(inq_data));
335 if ((inq_data & 0x20) && (inq_data & 0x1f) == TYPE_DISK) {
336 inq_data &= 0xdf;
337 scsi_sg_copy_from_buffer(scsicmd, &inq_data, sizeof(inq_data));
338 }
339}
340
331/** 341/**
332 * aac_get_containers - list containers 342 * aac_get_containers - list containers
333 * @common: adapter to probe 343 * @common: adapter to probe
@@ -2573,6 +2583,11 @@ static void aac_srb_callback(void *context, struct fib * fibptr)
2573 2583
2574 scsi_dma_unmap(scsicmd); 2584 scsi_dma_unmap(scsicmd);
2575 2585
2586 /* expose physical device if expose_physicald flag is on */
2587 if (scsicmd->cmnd[0] == INQUIRY && !(scsicmd->cmnd[1] & 0x01)
2588 && expose_physicals > 0)
2589 aac_expose_phy_device(scsicmd);
2590
2576 /* 2591 /*
2577 * First check the fib status 2592 * First check the fib status
2578 */ 2593 */