aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/53c700.c
diff options
context:
space:
mode:
authorThomas Bogendoerfer <tsbogend@alpha.franken.de>2006-12-25 15:30:08 -0500
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2007-01-13 14:44:30 -0500
commitf67a9c1592b3a0292376bdcbdcc34cbe353967a8 (patch)
tree4e5379b864a0e8823e48ad7249d637f6a0ec1423 /drivers/scsi/53c700.c
parenta8b3485287731978899ced11f24628c927890e78 (diff)
[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)
667 __u8 min_xferp = (hostdata->chip710 ? NCR_710_MIN_XFERP : NCR_700_MIN_XFERP); 667 __u8 min_xferp = (hostdata->chip710 ? NCR_710_MIN_XFERP : NCR_700_MIN_XFERP);
668 668
669 if(hostdata->chip710) { 669 if(hostdata->chip710) {
670 __u8 burst_disable = hostdata->burst_disable 670 __u8 burst_disable = 0;
671 ? BURST_DISABLE : 0; 671 __u8 burst_length = 0;
672
673 switch (hostdata->burst_length) {
674 case 1:
675 burst_length = BURST_LENGTH_1;
676 break;
677 case 2:
678 burst_length = BURST_LENGTH_2;
679 break;
680 case 4:
681 burst_length = BURST_LENGTH_4;
682 break;
683 case 8:
684 burst_length = BURST_LENGTH_8;
685 break;
686 default:
687 burst_disable = BURST_DISABLE;
688 break;
689 }
672 dcntl_extra = COMPAT_700_MODE; 690 dcntl_extra = COMPAT_700_MODE;
673 691
674 NCR_700_writeb(dcntl_extra, host, DCNTL_REG); 692 NCR_700_writeb(dcntl_extra, host, DCNTL_REG);
675 NCR_700_writeb(BURST_LENGTH_8 | hostdata->dmode_extra, 693 NCR_700_writeb(burst_length | hostdata->dmode_extra,
676 host, DMODE_710_REG); 694 host, DMODE_710_REG);
677 NCR_700_writeb(burst_disable | (hostdata->differential ? 695 NCR_700_writeb(burst_disable | (hostdata->differential ?
678 DIFF : 0), host, CTEST7_REG); 696 DIFF : 0), host, CTEST7_REG);