Commit Graph

85 Commits

Author SHA1 Message Date
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
mjacob 6bb9f4a949 Add support for 2 Gigabit cards (2300/2312). This necessitated a change
in how interrupts are down- the 23XX has not only a different place to check
for an interrupt, but unlike all other QLogic cards, you have to read the
status as a 32 bit word- not 16 bit words. Rather than have device specific
functions as called from the core module (in isp_intr), it makes more sense
to have the platform/bus modules do the gruntwork of splitting out the
isr, semaphore register and the first outgoing mailbox register (if needed)
*prior* to calling isp_intr (if calling isp_intr is necessary at all).
2001-09-01 07:12:23 +00:00
thorpej 44e529fecc Use BUS_DMA_READ and BUS_DMA_WRITE in some obvious places. 2001-07-19 16:36:14 +00:00
thorpej 51e70f6731 bzero -> memset 2001-07-07 16:46:34 +00:00
mjacob 60a0137d9c Ooops- we need to allocate an array of pointers to scsipi_xfer structures
isp_maxcmds in length- not an array of scsipi_xfer structures isp_maxcmds
in length.
2001-06-14 19:54:07 +00:00
mjacob ecdaf852b2 Clean up licence a bit. ANSIfy. 2001-03-14 05:47:56 +00:00
thorpej fd7ed72be1 Add BUS_DMA_STREAMING to data transfer maps. 2001-03-07 23:07:12 +00:00
mjacob 055ac54fd2 set default HBA role 2001-02-12 23:25:20 +00:00
mjacob c6b9ad5aeb Use bootverbose to now set whether or not we add
ISP_LOGCONFIG and ISP_LOGINFO messages into the
default logging mask.
2000-12-30 08:49:11 +00:00
sommerfeld 851de295eb Change pci_intr_map to get interrupt source information from a "struct
pci_attach_args *" instead of from four separate parameters which in
all cases were extracted from the same "struct pci_attach_args".

This both simplifies the driver api, and allows for alternate PCI
interrupt mapping schemes, such as one using the tables described in
the Intel Multiprocessor Spec which describe interrupt wirings for
devices behind pci-pci bridges based on the device's location rather
the bridge's location.

Tested on alpha and i386; welcome to 1.5Q
2000-12-28 22:59:06 +00:00
mjacob 3823efc25a Apply Bill Sommerfeld's -Wformat changes. 2000-12-28 22:23:41 +00:00
wiz c8b0b91e7e Fix pathnames in comment. 2000-12-23 01:37:57 +00:00
mjacob af2807f9f7 Finally fix this driver to be sensible about the ENDIAN dance. It's not
quite simply a question of the Qlogic being little endian and having
to have stuff swapped on big endian machines- it also has to do with the
fact that the SBus and PCI DMA layouts are wierd with respect to this.

At any rate, now finally fixed- works on Mac G4, tested it on a SS10
for sparc, checked on alpha to see if I've broken anything, and as
soon as I get another spare afternoon I'll finally install a sparc64
version which should just work (as it'll be like the Mac).
2000-12-09 08:06:31 +00:00
mjacob 3741d38c44 Correct omission by the previous committer. 2000-12-06 06:33:56 +00:00
thorpej cfe0892ed3 NBPG -> PAGE_SIZE 2000-11-14 18:42:55 +00:00
mjacob cecccb23b2 quiet chatty boot messages 2000-10-17 17:39:10 +00:00
mjacob 3607efd3d7 Remember to establish default PORT WWN. Add in some LOGDEBUG2 messages
for the dma mapping code.
2000-10-16 05:12:26 +00:00
mjacob 18e2c3aaad Add a maintenance note. Minor change in some logic in the DMA mapping. 2000-08-14 06:58:45 +00:00
mjacob cb4d63d57c More compilation breakage in the non-DEBUG case
(from Castor Fu <castor@geocast.com>)
2000-08-03 03:00:04 +00:00
mjacob 1ae072f471 Fix bonehead bug for compiles w/o DEBUG set
(thanks to KANETA Shin'ichi <kaneta@cr.chiba-u.ac.jp>)
2000-08-02 17:39:50 +00:00
mjacob 068c76fc80 Core version 2.0 (platform version 1.0) rewrite of ISP driver. Some
interace cleanups, some new common functions. The major impact that
will be noticeable right away is that if you boot with not Fibre connected
to the FC cards, you no longer hang indefinitely.
2000-08-01 23:55:09 +00:00
mjacob c466b99a9a Use new isp_handle_index function. Redo how firmware is checked for
and loaded. Remember to enable interrupts after isp_reset but before
isp_attach. Return CMD_EAGAIN on request queue overflow so we can retry
the command when there's more queue space.
2000-07-05 22:12:23 +00:00
mjacob 717d5b1cc3 Support for > 12 byte commands for parallel SCSI. 2000-02-19 01:54:42 +00:00
mjacob 6eba47aa8f add (untested in NetBSD yet) Qlogic 12160 (Ultra3) suppot 2000-02-12 02:22:37 +00:00
mjacob be6fe10ee6 get back to looking at config flags 1999-12-20 00:33:17 +00:00
mjacob edf809c8b6 Dual LVD (1280) support. 1999-12-16 05:35:42 +00:00
mjacob e5835e36c3 request/response queues now indexed via u_int16_t. Add back in f/w inclusion
and clean up it's compilation. get chip rev out of pci header.
1999-12-04 02:54:54 +00:00
mjacob 44c603dd7b Remove reference to loadable f/w. 1999-10-28 16:11:19 +00:00
mjacob cdad48e3b7 Oops- missed a MAXISPREQUEST sized thing- these are all gone now. It's amazing
this didn't eat me.
1999-10-17 02:40:26 +00:00
mjacob 2b4cd26aa4 stylistic cleanups 1999-10-17 01:22:08 +00:00
mjacob 83bb47c85a F/W version no longer relevant. Only do WWN seed for FC cards.
Now we malloc xflist and dma maps in mailbox setup routines.
We also do the appropriate endian swizzling at the end of a dma
map routine.
1999-10-14 02:14:35 +00:00
thorpej 63b8530b4e Update for SCSPI changes. 1999-09-30 23:04:39 +00:00
mjacob 3bb408eb05 Change to approved NASA/Ames copyright. Add in Qlogic 2200 support. 1999-07-05 20:28:11 +00:00
mjacob 61bf929d14 Do a fairly large internal restructuring to accomodate dual-bus host adapters
(e.g., the 1240). Include the new 1080/1240 NVRAM layout reading code. Some
moderately significant mailbox changes were necessary also to accomodate a
second channel.
1999-05-12 18:59:23 +00:00
mjacob eebeea5b23 Read the board revision and trim cache line size back from 16 to 1
for early revision 2100 boards. Make sure to turn ROM off for these
boards.
1999-04-04 01:14:58 +00:00
mjacob e50460f5fa Oops- if you enable 1080 support, remember to load the f/w 1999-03-27 01:08:59 +00:00
mjacob 99d46bf762 add isp1080 support and some basic PDB change stuff 1999-03-26 22:39:44 +00:00
mjacob d596b20f1e prototype 1080/1240 support 1999-03-17 06:16:42 +00:00