- Reload SCNTL3 after selection from host (C1010-33).
- Reload SCNTL4 prior to any DATA OUT phase (C1010-66).
- Use max SCSI offset 31 for ST but 62 for DT.
53C810 non 'A', 53C815 and 53C825 non 'A' are now
attached by the driver (by default).
The driver uses a different SCRIPTS set based on
MEMORY MOVE instructions for these chips.
2 SCRIPTS sets (firmwares) numbered #1 and #2 are
used for the whole support of the 53C8XX family
to get possible:
- FW #1 : Only based on MEMORY MOVE instructions.
Selected for 810, 815, 825.
- FW #2 : LOAD/STORE based. This is the firmware
also used by previous driver versions.
Selected for other chips.
When both `ncr' and `sym' are configured, `sym'
will now attach all the 53C8XX devices by default.
Previous balancing between `ncr' and `sym' can be
preserved by:
- Either editing sym_conf.h and commenting the
following compile option:
#define SYM_CONF_GENERIC_SUPPORT
(This also saves about 3.5Kb of kernel memory).
- Or setting kernel config option
SYM_SETUP_LP_PROBE_MAP to 64 (bit 0x40)
multi-firmware support. This patch just changes
numerous names in the driver sources and is actually
nilpotent. This has been checked by comparing the
generated assembly code.
The names that have been changed are related to the
script names. They were named `script' and `script H'.
They are now named respectively `script A' and
`script B'.
support. Changes are rather simplifications of the SCRIPTS
interface (prior to complexifying it again;) ), dead code
removes and comment fixes.
Code removed:
- Handling of kernel variables referenced from SCRIPTS.
- Handling of selection without ATN.
Slightly rewritten:
- Handling of illegal phase (4/5) and data overrun conditions.
Simplifications:
- Extended error flag and bits now only set from the C code.
- Move the extended error status (xerr_status) and nego
status (nego_status) outside the data structure accessed
by SCRIPTS (struct dsb).
- Get rid of the script status field (scr_st).
- Only patch SCR_NO_OP SCRIPTS instructions to adapt SCRIPTS
to actual chip capabilities.
Cosmetic changes:
- Miscellaneous comments in SCRIPTS.
- FreeBSD_4_Bus define replaced by FreeBSD_Bus_Io_Abstraction.
introduced in FreeBSD-4.0. The driver is now full up-to-date
with regards to the current kernel interfaces.
Another significant change in this driver version applies
to the checking of the data direction. The driver is now
able to check against the expected data direction in any
circumstance and will not hang either if direction is wrong
at the start of the IO, or if for some weird reason,
the device changes to the wrong direction during the IO.
This driver version is still usable under FreeBSD 3.2/3.3,
since it only requires CAM, other kernel interface dependencies
being #if'ed in the sources according to kernel version.
But, in order to use the driver under those early kernel
versions, user has to move the driver sources by hand and make
appropriate tiny changes to let the kernel know about the driver.
Other changes:
- Remove the debugging stuff for WSR bit.
- Get rid of some warnings about volatile being discarded.
- Remove all the code intended to deal with experimental
C1010 revisions. This code got useless due to commercial
chip revisions having been fixed.
Fixes:
- Rewrite/rework the WSR condition handling.
Previous drivers snooped on the BUS through the SBDL IO
register and this has been discovered to trigger a spurious
SCSI parity error when WSR had been set by chip and cleared
by SCRIPTS prior to reading SBDL bit [0...7].
On the other hand, the C1010 does not use the SWIDE register
when synchronous data transfers are taking place and
requires a CHMOV (1) WHEN DATA_IN to be performed in order
to move to memory the residual byte when WSR is set and
the residual byte is useful data.
BTW, the new WSR handling by the driver is simpler.
- No longer attempt to read from SCRIPTS the SBDL register.
This is intended to avoid to be victimized again by any other
issue regarding the handling of this register by 8xx chips.
Miscellaneous:
- The driver is now able to handle the WSR + IGN RESIDUE
condition at the end of a DATA IN I/O without need of a
programmed interrupt. It is a minor? optimization.
- A few other minor cosmetic changes.
This driver version fixes notably a permanent SCSI parity
error condition at boot that can be triggerred due to recent
changes in cam_xpt.c between 1.79 and 1.80.
Changes in CAM/XPT are fine, but the new handling of the full
INQUIRY may trigger the driver problem when a target returned
an odd value in the `additionnal length' field of the INQUIRY
response.
The diff against previous driver version is large, but it
consists approximatively in:
- 350 lignes removed and not compiled in previous drivers
(They addressed experimental C1010 revisions)
- 250 lignes added or changed, half being comments or empty
lines.
So, in fact, the real changes are about 120 lines of source.
About 80 lines address SCRIPTS changes and about 40 lines
address C code changes.
Approved by: jkh
New WSR handling reviewed by Pamela Delaney <pam.delaney@lsil.com>
(For back-porting to Linux sym53c8xx driver 1.6x series)
condition.
- 1 line change that allows to balance chips between ncr
and sym using pci compat option (not compiled by default
in 4.0 but maintains the driver source 3.4 compatible).
- Set MAX_OFFS driver compile option to 63 (was 64 which is wrong).
- Fix a typo in the SYMBIOS NVRAM layout structure and add field and
bit definition for the support of PIM_NOBUSRESET.
- Report to XPT PIM_NOBUSRESET and PIM_SCANHILO if set by user in NVRAM.
- Negotiate SYNC immediately after WIDE response from the target as
suggested by Justin Gibbs.
- Remove some misleading comment about CmdQue handling by CAM.
- Apply correctly the MAX_WIDE and MAX_OFFS driver options.
(pci dev_id 0x21).
- Start the SCRIPTS processor without resetting the SCSI BUS
at initialization.
- Remove the "Host adapter CCB chain" (got useless given the
new queuing scheme).
- Display correctly the state of SCSI signals, when SCSI BUS
looks bad.
- Cosmetic changes in messages printed out at initialization.
- Notifications and messages on RESET conditions slightly
reworked.
- TEKRAM 24C16 NVRAM support fixed (also reported ok).
broken bit work-around enabled.
* Fixed a bug that made MDP not work. (However, MDP is actually not tested
due to lack of hardware using this feature).
* Chip table changed to support the C1010 B0 w/o the U3EN bit work-around
enabled.
* Add the SYM_SETUP_MAX_LUN, SYM_SETUP_LP_PROBE_MAP (used to tell the
driver about chips that are to be claimed with lower priority than old
PCI bus based driver (typically the ncr)), SYM_SETUP_SCSI_DIFF, and
SYM_SETUP_PCI_PARITY options.
Submitted by: Gerard Roudier <groudier@club-internet.fr>
PCI SCSI controllers. This driver also supports the following Symbios/LSI
PCI SCSI chips: 53C810A, 53C825A, 53C860, 53C875, 53C876, 53C885, 53C895.
However, it does NOT support earlier chips as the following ones: 53C810,
53C815, 53C825.
See README.sym for more details.
Submitted-by: Gerard Roudier <groudier@club-internet.fr>