summaryrefslogtreecommitdiff
path: root/drivers/scsi/53c700.c
diff options
context:
space:
mode:
authorThomas Bogendoerfer <tsbogend@alpha.franken.de>2006-12-25 23:30:08 +0300
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2007-01-13 22:44:30 +0300
commitf67a9c1592b3a0292376bdcbdcc34cbe353967a8 (patch)
tree4e5379b864a0e8823e48ad7249d637f6a0ec1423 /drivers/scsi/53c700.c
parenta8b3485287731978899ced11f24628c927890e78 (diff)
downloadlinux-f67a9c1592b3a0292376bdcbdcc34cbe353967a8.tar.xz
[SCSI] 53c700: Allow setting burst length
This is a patch, which allows not only disabling bursting but to specify different burst lenghts. This feature is needed to get the 53c700 driver working for the onboard SCSI controller of SNI RM machines, which only work reliably with a 4 word burst length. Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/53c700.c')
-rw-r--r--drivers/scsi/53c700.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
index 68103e508db7..88e061d13d0b 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -667,12 +667,30 @@ NCR_700_chip_setup(struct Scsi_Host *host)
__u8 min_xferp = (hostdata->chip710 ? NCR_710_MIN_XFERP : NCR_700_MIN_XFERP);
if(hostdata->chip710) {
- __u8 burst_disable = hostdata->burst_disable
- ? BURST_DISABLE : 0;
+ __u8 burst_disable = 0;
+ __u8 burst_length = 0;
+
+ switch (hostdata->burst_length) {
+ case 1:
+ burst_length = BURST_LENGTH_1;
+ break;
+ case 2:
+ burst_length = BURST_LENGTH_2;
+ break;
+ case 4:
+ burst_length = BURST_LENGTH_4;
+ break;
+ case 8:
+ burst_length = BURST_LENGTH_8;
+ break;
+ default:
+ burst_disable = BURST_DISABLE;
+ break;
+ }
dcntl_extra = COMPAT_700_MODE;
NCR_700_writeb(dcntl_extra, host, DCNTL_REG);
- NCR_700_writeb(BURST_LENGTH_8 | hostdata->dmode_extra,
+ NCR_700_writeb(burst_length | hostdata->dmode_extra,
host, DMODE_710_REG);
NCR_700_writeb(burst_disable | (hostdata->differential ?
DIFF : 0), host, CTEST7_REG);