Commit Graph

122 Commits

Author SHA1 Message Date
chs
d47bcd296c in many device attach paths, allocate memory with M_WAITOK instead of M_NOWAIT
and remove code to handle failures that can no longer happen.
2019-11-10 21:16:21 +00:00
christos
7b9c8da681 remove conditional portion that was wrong and always false. 2019-10-15 19:29:58 +00:00
jdolecek
d3cda6139a use pci_intr_establish_xname() everywhere 2018-12-09 11:14:01 +00:00
msaitoh
d21ffc75e5 - Use aprint*() instead of printf() in xxx_attach().
- Add missing aprint_naive("\n");
- KNF
2016-07-14 04:00:45 +00:00
msaitoh
8bc54e5be6 KNF. Remove extra spaces. No functional change. 2016-07-07 06:55:38 +00:00
christos
e58a356cba make pci_intr_string and eisa_intr_string take a buffer and a length
instead of relying in local static storage.
2014-03-29 19:28:24 +00:00
martin
57bfdd2d7c Remove unused variable 2013-09-14 12:44:17 +00:00
joerg
b345e8d051 Use proper format string 2011-05-24 18:17:24 +00:00
mjacob
29e9eb7163 Update isp driver to be in sync with other platforms. Mostly very minor changes
with effectively zero impact on NetBSD.
2011-02-28 17:17:55 +00:00
uebayasi
8184d5dc03 Don't pull in the whole uvm(9) API to access only PAGE_SIZE and
some other constants.  These are provided by sys/param.h now.
2010-11-13 13:51:57 +00:00
mjacob
59a28e407a Oops. Don't forget to set the isp_port value based upon PCI function code.
Otherwise you end up with both ports using the same WWPN. Bad.
Discovered by Havard. Pointy hat to me.
2010-04-12 14:26:21 +00:00
mjacob
06aa1abd00 Synchronize with other platforms:
Strongly architect handles so we can more easily detect bogus
	handles. This switches us to a full 32 bits for all handles.

	Handle the case of FC disks disappearing and then reappearing-
	at least at the FC transport level.

	Some better and finer control of debug and non-debug printouts.
2010-03-26 20:52:00 +00:00
tsutsui
91bbbb9ed1 Split device_t/softc.
Tested QLogic 1020 Fast Wide SCSI HBA at PCI.
Sbus attachment is untested, but not so much quirks in it.
2009-09-07 13:39:19 +00:00
mjacob
ad7d727f78 Update ISP driver to latest and greatest. Includes support for the 8Gb part. 2009-06-25 23:44:01 +00:00
cegger
b8169823d2 use device_private().
"looks good" ad@
XXX for the device_t/softc split, please check the driver that no cases have been missed.
2009-05-12 08:22:59 +00:00
cegger
a591bc88dd struct device * -> device_t, no functional changes intended. 2009-05-06 10:34:32 +00:00
cegger
59717d7121 struct cfdata * -> cfdata_t, no functional changes intended. 2009-05-06 09:25:14 +00:00
cegger
27b03461ec use aprint_*_dev and device_xname and get rid of isp_name 2008-04-07 19:26:44 +00:00
mjacob
0e65dd74d1 Checkpoint of some fairly major isp(4) rototilling.
Reintroduce more of a 'channel' concept in preparation for NP-IV support.
This gets rid of the chanA/chanB concept as the 2400 can have up to 128
virtual channels. Actually, with MID firmware you can also have the 2200
and 2300 support 'channels, but they do it with an FL-Port topology.
Because FC cards can now have 'channels', just about every support
function for fibre channel had to be redone to have a channel index
as well.  Rototill isp_ioctl.h for channel stuff as well.

Pick up a lot of work about fabric management (hopefully better) and keep
work in place that will allow for dynamic attachment/detachment of devices
(if I can figure out how to make the midlayer support it).

Merge the target code with external trees. Eventually it might even
be sorted out on NetBSD.

Update some firmware stuff.
2008-03-11 05:33:30 +00:00
mjacob
1d191096fb If we have 2K Login firmware for 23XX cards, remember to put out the
'extended' structure- not the older one. Matters for the swozzling
that goes on for big endian machines.
2007-06-26 20:58:27 +00:00
mjacob
3470b7cb13 Whoops- I almost forgot. Thank MetrumRG Associates for material
support in making 4Gb NetBSD support possible.
2007-05-25 01:59:24 +00:00
mjacob
f0b57d5f54 Major update to isp(4) driver to bring it in line with external sources.
The major changes are:

 + 4Gb (24XX) card support
 + Rewritten fabric and loop evaluation code
 + New f/w sets

The 4Gb changes required major rototilling, which caused a rewrite of
fabric and loop eval code. The latter can now be set up to tune for
dynamic device arrival/departure if the framework is set up for it,
or to be firm about waiting for devices.

Testing has been principally on amd64, i386 and sparc64 and seems to
not have broken things for me.
2007-05-24 21:30:41 +00:00
christos
53524e44ef Kill caddr_t; there will be some MI fallout, but it will be fixed shortly. 2007-03-04 05:59:00 +00:00
cube
c27feae2a3 Make the logic of handling the options right. 2007-01-13 19:01:55 +00:00
christos
168cd830d2 __unused removal on arguments; approved by core. 2006-11-16 01:32:37 +00:00
christos
4d595fd7b1 - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
2006-10-12 01:30:41 +00:00
christos
5ec7f32544 add missing initializers 2006-09-02 17:02:57 +00:00
thorpej
2be6494fc9 Use device_cfdata(). 2006-03-29 04:16:44 +00:00
christos
95e1ffb156 merge ktrace-lwp. 2005-12-11 12:16:03 +00:00
christos
bb4c90071c - const poisoning
- avoid variable shadowing.
2005-05-30 04:35:22 +00:00
perry
f31bd063e9 nuke trailing whitespace 2005-02-27 00:26:58 +00:00
matt
02fd2a994a Fixes for that only support for the 2030 can be compiled in. 2004-03-10 22:42:47 +00:00
keihan
b8702f530b netbsd.org -> NetBSD.org
This was the last commit of this kind to src/sys, which is now totally
"NetBSD.org clean".  Thanks for the patiance, and sorry for all the commits.
2003-12-04 13:57:30 +00:00
mjacob
543f393343 Add in changes from Matt Thomas to check for 64 bit PCI stuff.
Note that a Qlogic 1020 is Fast Wide, not Ultra Fast Wide.
2003-08-07 01:05:56 +00:00
wiz
1ffa7b76c4 DMA, not dma nor Dma. 2003-05-03 18:10:37 +00:00
thorpej
0ea203767c Add ULL to 64-bit integer constants. 2002-11-25 02:16:50 +00:00
mjacob
ce9eb51cc5 Put in, sight unseen, changes which should enable 10160 support.
Interestingly enough, Sun actually made a product out of the 10160,
which is a single channel variant of the 12160 (Ultra3) card.
2002-10-18 23:26:15 +00:00
thorpej
b75a007d9f Add trailing ; to CFATTACH_DECL. 2002-10-02 16:51:16 +00:00
thorpej
387fc6dc87 Use CFATTACH_DECL(). 2002-09-30 20:37:04 +00:00
thorpej
f818766afe Declare all cfattach structures const. 2002-09-27 20:31:45 +00:00
mjacob
93ad4971f1 Various changes to allow for overriding just loopid and/or iid.
Fix a random 23XX ISR reading bug. Be chattier about HBA_BOTCH
errors. More f/w cashdump layering.
2002-08-12 21:33:39 +00:00
mjacob
f76122c26b Make all 23XX cards 'touched'. We seem to, too often, hang when trying
to run ABOUT FIRMWARE at the first isp_reset call. We *do* check for
the registers being set with values which would tell us if there's
firmware running or not- but this seems to not always work. It's not
essential, so move on.
2002-06-15 00:11:36 +00:00
mjacob
c3514c8f6d Slight touchup on last change- make sure HBA_BOTCH is set (just in case
somebody at a different level does the wrong thing) on ENOMEM/EAGAIN returns
from loading DMA.
2002-05-17 19:05:08 +00:00
matt
403b0fdb73 If a dma map can't be loaded due to resource shortage, make we report that
as a resource shortage instead of a driver stuffup.
2002-05-12 16:51:06 +00:00
mjacob
85fc807bc1 suggestion from Jason: have (in non-verbose boot case) card type printed out
on same line as attachment line.
2002-04-28 21:32:14 +00:00
mjacob
d76d04685a Handle Port Unavailable the same as Port Logout (i.e., send a LIP).
Unconst pointer to f/w in the ispdv structure. Too many compilers get
unhappy over our walking the array. Make casts as appropriate so that
initialization in structure is still happy.

Limit length of fabric to 256. This will all go away soon.

Do a cleaner case of keeping multiple CPUs/threads from reading the
same response queue entries.
2002-03-22 02:34:05 +00:00
mjacob
91f80cf3fc Implement F/W crashdumps for 2200 && 2300 cards (kernel compile option).
Distinguish between 2312 and 2300 cards (they *are* different). Enable
RIO (Reduced Interrupt Operation) for the LVD cards (hey- I've seen
batched completions of the 30 commands at a time with this,....)...

If we get a Port Logout on local loop topologies, we have to force the
f/w to log back in. The easiest way (for us) to do this is to force
a LIP. This also will wake up the disk that probably just had a f/w crash.

Implement mailbox 'continuations'- this allows interrupts to re-drive
a mailbox command if it's one that just essentially repeats the previous
mailbox command (e.g., f/w download). This saves a boatload of sleep/wakeup
twitches.

If we're not a 2300 and we're about to return with a 'bogus interrupt'- check
the semaphore register to be non-zero at all and outgoing mailbox 0- this
seems to be where some of the lost ISP1080 commands came from.
2002-02-21 22:32:40 +00:00
mjacob
219d22404b Major restructuring for swizzling to the request queue and unswizzling from
the response queue. Instead of the ad hoc ISP_SWIZZLE_REQUEST, we now have
a complete set of inline functions in isp_inline.h. Each platform is
responsible for providing just one of a set of ISP_IOX_{GET,PUT}{8,16,32}
macros.

The reason this needs to be done is that we need to have a single set of
functions that will work correctly on multiple architectures for both little
and big endian machines. It also needs to work correctly in the case that
we have the request or response queues in memory that has to be treated
specially (e.g., have ddi_dma_sync called on it for Solaris after we update
it or before we read from it).

One thing that falls out of this is that we no longer build requests in the
request queue itself. Instead, we build the request locally (e.g., on the
stack) and then as part of the swizzling operation, copy it to the request
queue entry we've allocated. I thought long and hard about whether this was
too expensive a change to make as it in a lot of cases requires an extra
copy. On balance, the flexbility is worth it. With any luck, the entry that
we build locally stays in a processor writeback cache (after all, it's only
64 bytes) so that the cost of actually flushing it to the memory area that is
the shared queue with the PCI device is not all that expensive. We may examine
this again and try to get clever in the future to try and avoid copies.

Another change that falls out of this is that MEMORYBARRIER should be taken
a lot more seriously. The macro ISP_ADD_REQUEST does a MEMORYBARRIER on the
entry being added. But there had been many other places this had been missing.
It's now very important that it be done.

For NetBSD, it does a ddi_dmamap_sync as appropriate. This gets us out of
the explicit ddi_dmamap_sync on the whole response queue that we did for SBus
cards at each interrupt.

Set things up so that platforms that cannot have an SBus don't get a lot of
the SBus code checks (dead coded out).

Additional changes:

Fix a longstanding buglet of sorts. When we get an entry via isp_getrqentry,
the iptr value that gets returned is the value we intend to eventually plug
into the ISP registers as the entry *one past* the last one we've written-
*not* the current entry we're updating. All along we've been calling sync
functions on the wrong index value. Argh. The 'fix' here is to rename all
'iptr' variables as 'nxti' to remember that this is the 'next' pointer-
not the current pointer.

Devote a single bit to mboxbsy- and set aside bits for output mbox registers
that we need to pick up- we can have at least one command which does not
have any defined output registers (MBOX_EXECUTE_FIRMWARE).

Explicitly decode GetAllNext SNS Response back *as* a GetAllNext response.
Otherwise, we won't unswizzle it correctly.

Nuke some additional __P macros.
2001-12-14 00:13:44 +00:00
lukem
9048aaae21 add RCSID 2001-11-13 07:48:40 +00:00
mjacob
daf0329c3c Respect QLogic's errata- read BIU_ISR even on the 2300
to see if there's an interrupt (avoids PCI parity errors
which can occur on the 2312 if you access some registers
from the host at the same time the RISC on the 2312 is
accessing them).
2001-10-06 20:33:24 +00:00