Commit Graph

58 Commits

Author SHA1 Message Date
Sam Leffler
05aabdfcf1 eliminate double free when sym_cam_attach fails
Noticed by:	Coverity Prevent analysis tool
2005-03-26 18:17:58 +00:00
Warner Losh
12d4efa1b0 Use BUS_PROBE_DEFAULT 2005-03-06 06:55:11 +00:00
Sam Leffler
72046dcea3 avoid null ptr deref
Noticed by:	Coverity Prevent analysis tool
Reviewed by:	scottl
2005-02-25 21:57:46 +00:00
Stefan Eßer
b67e92b038 Attempt to fix Symbios driver on amd64. The private memory allocation
function provided by the driver limits allocations to the page size,
i.e. 4KB on i385 and 8KB on typical 64 bit processors. Since amd64
has 64 bit pointers, but only 4KB pages, an array of pointers that
just fits into one page on all the other processors, does require
2 pages on amd64.

In order to make this driver useful on amd64, the allocation unit
has been increased to 2 pages on amd64 and contigmalloc() is used
instead of malloc(). All other processor types are unaffected by
this change. This modification has only been compile-tested on
amd64, yet, but should just work (FLW).
2005-01-01 19:05:46 +00:00
Matt Jacob
78fb2586ce Make it depend on PCI as well.
Submitted by:	Stefan eSSer
2004-09-10 18:39:02 +00:00
Matt Jacob
0c994d8520 Make sym depend, as a module, on cam.
Submitted by:"Norikatsu Shigemura" <nork@FreeBSD.org>
2004-09-10 17:57:33 +00:00
Nate Lawson
5f96beb9e0 Convert callers to the new bus_alloc_resource_any(9) API.
Submitted by:	Mark Santcroos <marks@ripe.net>
Reviewed by:	imp, dfr, bde
2004-03-17 17:50:55 +00:00
Warner Losh
f7744c2d67 unifdef old interface support out to prevent false positives.
Suggested by: jeffr, obrien, and others
2003-12-07 05:17:13 +00:00
John Baldwin
e27951b29c Use PCIR_BAR(x) instead of PCIR_MAPS.
Glanced over by:	imp, gibbs
Tested by:		i386 LINT
2003-09-02 17:30:40 +00:00
David E. O'Brien
42af95a3c2 Use __FBSDID().
Also some minor style cleanups.
2003-08-24 18:17:24 +00:00
Warner Losh
90cf0136c4 Prefer new location of pci include files (which have only been in the
tree for two or more years now), except in a few places where there's
code to be compatible with older versions of FreeBSD.
2003-08-22 07:08:17 +00:00
Scott Long
f6b1c44d1f Mega busdma API commit.
Add two new arguments to bus_dma_tag_create(): lockfunc and lockfuncarg.
Lockfunc allows a driver to provide a function for managing its locking
semantics while using busdma.  At the moment, this is used for the
asynchronous busdma_swi and callback mechanism.  Two lockfunc implementations
are provided: busdma_lock_mutex() performs standard mutex operations on the
mutex that is specified from lockfuncarg.  dftl_lock() is a panic
implementation and is defaulted to when NULL, NULL are passed to
bus_dma_tag_create().  The only time that NULL, NULL should ever be used is
when the driver ensures that bus_dmamap_load() will not be deferred.
Drivers that do not provide their own locking can pass
busdma_lock_mutex,&Giant args in order to preserve the former behaviour.

sparc64 and powerpc do not provide real busdma_swi functions, so this is
largely a noop on those platforms.  The busdma_swi on is64 is not properly
locked yet, so warnings will be emitted on this platform when busdma
callback deferrals happen.

If anyone gets panics or warnings from dflt_lock() being called, please
let me know right away.

Reviewed by:	tmm, gibbs
2003-07-01 15:52:06 +00:00
Peter Wemm
098f057be8 Add amd64 support. 2003-06-26 01:10:24 +00:00
Nate Lawson
2813692cc2 Merge common XPT_CALC_GEOMETRY functions into a single convenience function.
Devices below may experience a change in geometry.

* Due to a bug, aic(4) never used extended geometry.  Changes all drives
  >1G to now use extended translation.
* sbp(4) drives exactly 1 GB in size now no longer use extended geometry.
* umass(4) drives exactly 1 GB in size now no longer use extended geometry.

For all other controllers in this commit, this should be a no-op.

Looked over by:	scottl
2003-06-14 22:17:41 +00:00
Maxime Henrion
7a648f56cf I deserve a big pointy hat for having missed all those references
to bus_dmasync_op_t in my last commit.
2003-04-10 23:50:06 +00:00
Alfred Perlstein
8deebb0160 Consolidate MIN/MAX macros into one place (param.h).
Submitted by: Hiten Pandya <hiten@unixdaemons.com>
2003-02-02 13:17:30 +00:00
Jens Schweikhardt
9d5abbddbf Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup,
especially in troff files.
2003-01-01 18:49:04 +00:00
Jens Schweikhardt
d64ada501a Fix typos, mostly s/ an / a / where appropriate and a few s/an/and/
Add FreeBSD Id tag where missing.
2002-12-30 21:18:15 +00:00
Poul-Henning Kamp
031fd299d7 Be consistent about functions being static.
Spotted by:	FlexeLint.
2002-10-16 08:48:39 +00:00
Mike Barcroft
a30d4b3270 Move the new byte order function prototypes from <sys/param.h> to
<sys/endian.h>.  This puts us in line with NetBSD and OpenBSD.
2002-04-26 22:48:23 +00:00
Peter Wemm
0d87e7d007 Fix some gcc-3.1+ warnings:
warning: deprecated use of label at end of compound statement
umass.c:2626:46: multi-line string literals are deprecated
2002-03-19 23:20:21 +00:00
John Baldwin
19f0fedd94 Comment tokens after #undef <macroname> and #endif.
Reported by:	gcc30
2001-12-13 11:12:30 +00:00
Gerard Roudier
a517ead7c8 Submitted by:David E. O'Brien
MFC after:3 days
- Add memory barrier definition for sparc64.
  Patch sent by David E. O'Brien, approved by maintainer.
- Fix an endianization error of a bus physical address used from SCRIPTS
  that made the driver fail on big endian machines as sparc64.
2001-11-24 12:35:48 +00:00
Gerard Roudier
2a8dc28258 MFC after: 0 days 2001-11-11 17:56:35 +00:00
Kris Kennaway
56bded8a29 s/adress/address/
Inspired by:    OpenBSD
MFC After:      1 week
2001-07-23 12:05:27 +00:00
Gerard Roudier
0df908ab74 Submitted by: Chip Salzenberg <chip@perlsupport.com>.
MFC after:	5 days
- Mask GPCNTL against 0x1c (was 0xfc) for the reading of the NVRAM.
  This ensures LEDC bit will not be set on 896 and later chips.
  Submitted by Chip Salzenberg <chip@perlsupport.com>.
- Add probe for Tekram 390 U2B/U2W SCSI (53C895) LED handling.
  Submitted by Chip Salzenberg <chip@valinux.com>
2001-07-01 16:04:07 +00:00
Matt Jacob
660fd20479 Correctly initialize free_ccbq so that if we fail to attach (as is
possible for some systems where the device is there, but the BIOS
hasn't allocated memory resources for it), we don't panic.

Submitted by:	 Gerard Roudier
2001-04-09 05:41:41 +00:00
Gerard Roudier
0a9619993d Add #if'ed support for the future option CAM_NEW_TRAN_CODE. 2001-03-24 21:11:31 +00:00
Mark Murray
ed34d0ade2 Turn on interrupt-entropy harvesting for all/any mass storage devices
I could find. I have no doubt missed a couple.

Interrupt entropy harvesting is still conditional on the
kern.random.sys.harvest_interrupt sysctl.
2001-03-01 17:09:09 +00:00
Gerard Roudier
b1bec479be Fix:
- Missing cpu_to_scr() added (endian-ness).

Improvement (fix|workaroung??):
- Blindly firing a PPR can lead to some messy situations due to
  various causes or misfeatures, for example:
  * The 53C1010-[33|66] supports offset 62 in DT mode, but only
    offset 31 in ST mode. As a result, a PPR(DT, offset 62)
    responded with PPR(ST, any offset > 31) must be rejected.
  * A device that doesn't know about PPR should reject it, but
    may also be confused by this message.
  When a PPR encounters problems, the driver now patches the goal
  transfer settings for legacy negotiations to be performed later
  with the offending target. This give a chance for bad situations
  to be fixed automagically.
2001-02-11 15:38:06 +00:00
Gerard Roudier
3c9013e257 A couple of chip errata work-arounds refined:
- When used on a 33MHz PCI BUS, the 53C1010-66 revision 0
  requires extra clocks to be inserted in data out phase.
  Revision 1 is fixed.
- The 53C1010-33 revision 1 requires internal cycles to be
  disabled due to possible contentions on IO registers.
  Revision 2 is fixed.
Fix:
- The probing of HVD from GPIO3 bit by the driver was reversed.
  The driver could misprobe the bus mode of a 825 or 875 chip
  that was not previously initialized (no BIOS for example).
2001-01-28 19:58:21 +00:00
Alexander Langer
8c529b3777 Remove unneeded include of <pci.h>
Approved by:	groudier
2000-12-07 20:58:16 +00:00
Poul-Henning Kamp
46aa3347cb Convert all users of fldoff() to offsetof(). fldoff() is bad
because it only takes a struct tag which makes it impossible to
use unions, typedefs etc.

Define __offsetof() in <machine/ansi.h>

Define offsetof() in terms of __offsetof() in <stddef.h> and <sys/types.h>

Remove myriad of local offsetof() definitions.

Remove includes of <stddef.h> in kernel code.

NB: Kernelcode should *never* include from /usr/include !

Make <sys/queue.h> include <machine/ansi.h> to avoid polluting the API.

Deprecate <struct.h> with a warning.  The warning turns into an error on
01-12-2000 and the file gets removed entirely on 01-01-2001.

Paritials reviews by:   various.
Significant brucifications by:  bde
2000-10-27 11:45:49 +00:00
Poul-Henning Kamp
db7e3af111 Remove unneeded #include <machine/clock.h> 2000-10-15 14:19:01 +00:00
Gerard Roudier
aeab966bdd PR: kern/20895
PR kern/20895:
- Add FE_DAC new feature flag to distinguish between
  64 bit PCI addressing (DAC cycles) and 64 bit PCI
  interface (64 bit Memory BARs).
- Properly deal with chips that have a 32 bit PCI
  interface but support and may generate DAC.
  (Only SYM53C895A for now).

PR misc/17584 (at least partially addressed):
- Try detecting hardware combinations that trigger
  spurious PCI master parity error detections by the
  PCI chip. This work-around is implemented in the
  `snooptest' routine and consists in retrying with
  PCI master parity checking disabled if such an
  error is reported by the PCI chip during this test.

Other:
- Fix a tiny bug in WIDE negotiation that was very
  unlikely to be triggerred. The BUS width was wrongly
  compared against chip's max. offset.
2000-09-03 12:36:21 +00:00
Gerard Roudier
3b2b8a84d3 - Various comment fixes and additions.
- Add 2 explicit (paranoid?) memory barriers in the
  interrupt code (After the reading of the `flag' and
  prior to looking at the data, of course. :-) ).
- Remove obsolete informations from the README.sym file.

This commit actually results in no object difference
for IA32, but 2x`mb' added for Alpha.
2000-07-02 21:26:50 +00:00
Gerard Roudier
2096333bc2 - Fix a harmless compilation warning on Alpha.
(Reported by Matthew Jacob)
- Fix a couple of __inline__ (changed to __inline).
- Check also against DT_DATA_IN phase on parity/crc error.
  (Merged from Pamela Delaney's changes in the Linux driver)
- Fix support for phase mismatch handling from the C code for
  the C1010 (only useful for testing issue).
- Add an asynchonous notification handler for `lost device'
  (AC_LOST).
2000-06-26 21:09:45 +00:00
Gerard Roudier
e19c49c532 Fix a problem of user settings from TEKRAM NVRAM
layout introduced in driver 1.5.3. The driver was
confused by the bogus TEKRAM table used to translate
user sync. setting to SCSI sync. factor.
Btw, the new TEKRAM DC-390 U3D and U3W Ultra-160
controllers seem to be using BIOS from SYMBIOS/LSI
and thus SYMBIOS NVRAM layout.
If that means that TEKRAM will now offer real
SYMBIOS software compatible SCSI controllers, then
it is a *GREAT NEWS*.
2000-06-13 20:17:41 +00:00
Gerard Roudier
ec8146d60d - Use `bus space' primitives for IO and MMIO instead
of IO/MMIO legacy methods.
- Prepare the driver for big endian CPU support.
- Clarify memory and IO barriers needed by the driver.
2000-06-08 19:48:16 +00:00
Gerard Roudier
94d057fdf4 - Make the NVRAM debug code compile and work.
- Get rid of a fiew uselessly `long' variables
  and casts to `long'.
- Estimate the PCI clock for all chips, except
  C1010 for now (we should do that for each PCI BUS)
- Refine a couple of C1010 errata work-arounds.
- For now, make sure AIP generation is disabled
  for the C1010-66.
2000-05-28 17:49:18 +00:00
Gerard Roudier
4fafb9d657 Work-around a couple of C1010 quirks:
- 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.
2000-05-07 09:54:33 +00:00
Gerard Roudier
79c3f400b1 Phase mismatch handling from SCRIPTS had been
broken by previous patch.
2000-04-30 21:42:55 +00:00
Gerard Roudier
c5595f9dd0 This new version adds support for early NCR chips.
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)
2000-04-29 10:20:16 +00:00
Poul-Henning Kamp
ed6aff7387 Remove unneeded <sys/buf.h> includes.
Due to some interesting cpp tricks in lockmgr, the LINT kernel shrinks
by 924 bytes.
2000-04-18 15:15:39 +00:00
Gerard Roudier
18dfcb3d0e Second patch that prepares for the addition of the
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'.
2000-04-16 20:05:36 +00:00
Gerard Roudier
454af27b5c First patch that prepares for the adding of multi-firmware
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.
2000-04-15 10:54:58 +00:00
Gerard Roudier
45b318264e This new driver version uses the DMA mapping interface
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.
2000-04-02 10:07:54 +00:00
Gerard Roudier
7a35ada03e Simplifications:
- 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)
2000-02-13 12:14:07 +00:00
Gerard Roudier
b5727bb5f0 - Fix an issue that paniced the machine in data overrun
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).
2000-01-28 20:11:32 +00:00
Gerard Roudier
6f9e728a48 - Add year 2000 copyright to driver files.
- 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.
2000-01-08 19:58:17 +00:00