diff options
author | Thomas Bogendoerfer <tsbogend@alpha.franken.de> | 2006-12-25 15:30:08 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2007-01-13 14:44:30 -0500 |
commit | f67a9c1592b3a0292376bdcbdcc34cbe353967a8 (patch) | |
tree | 4e5379b864a0e8823e48ad7249d637f6a0ec1423 /drivers/scsi/53c700.c | |
parent | a8b3485287731978899ced11f24628c927890e78 (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.c | 24 |
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); |