This will make a number of things easier in the future, as well as (finally!)
avoiding the Id-smashing problem which has plagued developers for so long.
Boy, I'm glad we're not using sup anymore. This update would have been
insane otherwise.
uses one or the other. This required some changes to the ahc_reset()
function, and how early the probes had to allocate their softc.
Turn the AHC_IN/OUT* macros into inline functions and lowercase their names
to indicate this change. Geting AHC_OUTSB to work as a macro doing
conditional memory mapped I/O would have been too gross.
Be smart about the STPWEN control bit in SCFRCTL1. It should only be set
if the low byte of the bus is to be terminated. We figure this out either
by "caching" the value left over from the BIOS setup before we reset the card
or by using the values stored in the seeprom if it is availible.
7810 being either the last of the first device to be probed, so use a counting
scheme instead to determine when one card ends and another begins. There may
be a better way to do this by decoding the PCI tag, which I will investigate
later.
2.2 Candidate.
This involves expanding the support of the SEEPROM routines to deal with
the larger SEEPROMs on these cards and providing a mechanism to share
SCB arrays between multiple controllers.
Most of the 398X support came from Dan Eischer.
ahc_data -> ahc_softc
Clean up some more type bogons I missed from the last pass.
NetBSD/OpenBSD support Submitted by:Noriyuki Soda <soda@sra.co.jp>,
Pete Bentley <pete@demon.net>,
Charles M. Hannum <mycroft@mit.edu>,
Theo de Raadt <deraadt@theos.com>
a BIOS was not installed, this will still be true by the time we probe
the chip. We use this heuristic to determine if we should use the left
over scratch ram target settings for controllers that don't have an
SEEPROM. We also "snapshot" the host adapter SCSI id and whether ultra
is enabled or not and use these values if a BIOS was installed. The card
will act as if a BIOS was installed even if there wasn't one if you warm
reboot, but since the scratch ram area is still valid in this case, its
hardly worth the effort of writing a shutdown routing that clears out
the scratch ram. This should make users of motherboard controllers
happy.
Use new XS_SELTIMEOUT error code for selection timeouts.
aic7870.c:
Move SCB walking code to aic7xxx.c and make it work for all card types.
The flag AHC_EXTSCB is no longer needed since the SCBs are walked in
all cases now.
Cleanse the SCSI subsystem of its internally defined types
u_int32, u_int16, u_int8, int32, int16, int8.
Use the system defined *_t types instead.
aic7870.c:
Handle Seeprom data a little better.
Simplify the initialization of adapters by pulling all card specific
initialization to the card specific modules.
Set the Latency timer and Burst len to good values if thery are not
initialized during post or are reset during chip reset.
Properly identify and handle external SCB SRAM. The code was false
id'ing 255 SCBs on aic7880 chips.
Reviewed by: David Greenman <davidg@FreeBSd.org>
incompatible with the type of a PCI interrupt handler. A new entry
point `ahc_pci_intr()' is used for PCI. ISA and PCI interrupts are
penalized equally (:-) by calling a common handler `ahc_intr()'. This
should be reorganized. Some strings now name the wrong function...
If RAMENB is set in devconfig, walk the external SCBs. Some Intel Xpress
motherboards set this bit.
For external SCBs for the 3940. It doesn't set RAMPS or RAMENB, but does
have the ram.
for now since I don't have any documentation on this card yet and it
is software compatible with the earlier cards.
The 2940 *Ultra* is Adaptec's push to take SCSI to 20MHz bus rates. Its
based on the aic7880 chip which is the successor to the aic7870.
to poll succesfully even if we are sharing the interrupt.
Register the interrupt handler before the attach.
This commit makes the 294x PCI shared interrupt compliant. This has
been tested with an aic7870 motherboard controller and a 294x in the
same machine shareing an irq.
a device specific shutdown routine for devconf. Assign the value of this
to the kern_devconf struct. Implement a device shutdown routine for if_de
that disables the device. This will stop the device from corrupting memory
after a reboot.