aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/isp/isp_target.h
Commit message (Collapse)AuthorAgeFilesLines
* Fix some stupid copyright mistakes that have been there for quite some time.Matt Jacob2007-03-101-30/+26
| | | | Notes: svn path=/head/; revision=167403
* MFP4: Move default setting to the end of isp_reset instead of theMatt Jacob2007-01-201-14/+18
| | | | | | | | | | | | | front of isp_init so we can read NVRAM even if we're role ISP_NONE. Prepare for reintroduction of channels (for FC) for N-Port Virtualization. Fix a botch in handle assignment that caused us to nuke one device when a new one arrives and end up with two devices with the same identity in the virtual target mapping table. Notes: svn path=/head/; revision=166120
* Add 4Gb (24XX) support and lay the foundation for a lot of new stuff.Matt Jacob2006-11-021-56/+298
| | | | Notes: svn path=/head/; revision=163899
* Fix na_fcentry_t to not have a lun field. Fix indentation in handlyMatt Jacob2006-08-041-5/+8
| | | | | | | | | | | | the notify structs. Fix messages in isp_got_msg_fc to print out the loop id of the sender- not the wwpn which will be synthesized later, if possible, in the outer layers. Put in debug printouts to pair a notify ack to a notify so one can see the start/close of an immediate notify event. Put in spsace for TASK MANAGEMENT response flags (which we don't do yet). Notes: svn path=/head/; revision=160978
* Some more gratuitous format and name changes.Matt Jacob2006-04-211-3/+3
| | | | | | | | | | Pull in some target mode changes from a private branch. Pull in some more RELENG_4 compilation changes. A lot of lines changed, but not much content change yet. Notes: svn path=/head/; revision=157943
* a) clean up some declaration stuff (i.e., make more modern with respectMatt Jacob2006-02-151-186/+186
| | | | | | | | | | | | | | | | | | to getting rid u_int for uint and so on). b) Turn back on 64 bit DAC support. Cheeze it a bit in that we have two DMA callback functions- one when we have bus_addr_t > 4 bits in width and the other which should be normal. Even Cheezier in that we turn off setting up DMA maps to be BUS_SPACE_MAXADDR if we're in ISP_TARGET_MODE. More work on this in a week or so. c) Tested under amd64 and 1MB DFLTPHYS, sparc64, i386 (PAE, but insufficient memory to really test > 4GB). LINT check under amd64. MFC after: 1 month Notes: svn path=/head/; revision=155704
* First of several commits as this driver is dusted off and maybe broughtMatt Jacob2006-01-231-14/+120
| | | | | | | | | | | | | | | | | | | | | up to date. Principle changes for this reelase is to support 2K Port Login firmware. This allows us to support the 2322 (and 2422 4Gb) cards which only come with the 2K Port Login firmware. The 2322 should now work- but we don't have firmware sets for it in ispfw (as the change to load 2K Port Login f/w hasn't been made- that f/w is so big it has to be loaded in more than one chunk). Other changes are the beginnings of cleaning up some long standing target mode issues. The next changes here will incorporate a lot of bug fixes from others. Finally, some copyright cleanup and attempts to make the parts of the driver that are FreeBSD specific start conforming more to FreeBSD style. MFC after: 1 month Notes: svn path=/head/; revision=154704
* Add some macros for inserting tag ids.Matt Jacob2005-01-231-14/+52
| | | | | | | MFC after: 2 weeks Notes: svn path=/head/; revision=140652
* Start each of the license/copyright comments with /*-, minor shuffle of linesWarner Losh2005-01-061-1/+1
| | | | Notes: svn path=/head/; revision=139749
* Some ridiculous target mode botches- like having the wrong definitionsMatt Jacob2003-09-131-22/+20
| | | | | | | | for messages. Some spelling fixes. Some target mode structure cleanups to reflect reality. Notes: svn path=/head/; revision=120016
* Set default command count to 0xfe. This tells the f/w essentiallyMatt Jacob2002-06-161-3/+5
| | | | | | | | | | to *not* do flow control based upon resource counts for the firmware. Increase default immediate notify count to 16. Change isp_target_async to a function returning an integer. Notes: svn path=/head/; revision=98283
* Limit fabric search to a default 256 entries. This will all go awayMatt Jacob2002-03-211-3/+3
| | | | | | | | | | | | | | | | | | | | | | soon because it's just getting harder and harder to find switches that correctly implement the GET ALL NEXT subcommands for the SNS protocol. Latch up result out pointer and set a busy flag when we're looking at the response queue. This allows for a cleaner way to make sure we don't get multiple CPUs trying to read the same response queue entries. Change how isp_handle_other_response returns values (clarity). Make PORT UNAVAILABLE the same as PORT LOGOUT (force a LIP). Do some formatting changes. MFC after: 0 days Notes: svn path=/head/; revision=92893
* + A variety of 23XX changes:Matt Jacob2002-02-041-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | disable MWI on 2300 based on function code, set an 'isp_port' for the 2312- it's a separate instance, but the NVRAM is shared, and the second port's NVRAM is at offset 256. + Enable RIO operation for LVD SCSI cards. This makes a *big* difference as even under reasonable load we get batched completions of about 30 commands at a time on, say, an ISP1080. + Do 'continuation' mailbox commands- this allows us to specify a work area within the softc and 'continue' repeated mailbox commands. This is more or less on an ad hoc basis and is currently only used for firmware loading (which f/w now loads substantially faster becuase the calling thread is only woken when all the f/w words are loaded- not for each one of the 40000 f/w words that gets loaded). + If we're about to return from isp_intr with a 'bogus interrupt' indication, and we're not a 23XX card, check to see whether the semaphore register is currently *2* (not *1* as it should be) and whether there's an async completion sitting in outgoing mailbox0. This seems to capture cases of lost fast posting and RIO interrupts that the 12160 && 1080 have been known to pump out under extreme load (extreme, as in > 250 active commands). + FC_SCRATCH_ACQUIRE/FC_SCRATCH_RELEASE macros. + Endian correct swizzle/unswizzle of an ATIO2 that has a WWPN in it. MFC after: 1 week Notes: svn path=/head/; revision=90224
* Major restructuring for swizzling to the request queue and unswizzling fromMatt Jacob2001-12-111-194/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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). It also has to handle the SBus cards (for platforms that have them) which, while on a Big Endian machine, do *not* require *most* of the request/response queue entry fields to be swizzled or unswizzled. 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. 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). MFC after: 2 weeks Notes: svn path=/head/; revision=87635
* Fix SET_IID_VAL/SET_BUS_VAL macros to usable.Matt Jacob2001-09-041-2/+2
| | | | | | | MFC after: 4 weeks Notes: svn path=/head/; revision=83005
* Add a microcomment about how you'd use ispds64_t or ispdlist_tMatt Jacob2001-07-041-0/+8
| | | | | | | for CTIO3/CTIO4 entries. Notes: svn path=/head/; revision=79238
* Spring MegaChange #1.Matt Jacob2001-05-281-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ---- Make a device for each ISP- really usable only with devfs and add an ioctl entry point (this can be used to (re)set debug levels, reset the HBA, rescan the fabric, issue lips, etc). ---- Add in a kernel thread for Fibre Channel cards. The purpose of this thread is to be woken up to clean up after Fibre Channel events block things. Basically, any FC event that casts doubt on the location or identify of FC devices blocks the queues. When, and if, we get the PORT DATABASE CHANGED or NAME SERVER DATABASE CHANGED async event, we activate the kthread which will then, in full thread context, re-evaluate the local loop and/or the fabric. When it's satisfied that things are stable, it can then release the blocked queues and let commands flow again. The prior mechanism was a lazy evaluation. That is, the next command to come down the pipe after change events would pay the full price for re-evaluation. And if this was done off of a softcall, it really could hang up the system. These changes brings the FreeBSD port more in line with the Solaris, Linux and NetBSD ports. It also, more importantly, gets us being more proactive about topology changes which could then be reflected upwards to CAM so that the periph driver can be informed sooner rather than later when things arrive or depart. --- Add in the (correct) usage of locking macros- we now have lock transition macros which allow us to transition from holding the CAM lock (Giant) and grabbing the softc lock and vice versa. Switch over to having this HBA do real locking. Some folks claim this won't be a win. They're right. But you have to start somewhere, and this will begin to teach us how to DTRT for HBAs, etc. -- Start putting in prototype 2300 support. Add back in LIP and Loop Reset as async events that each platform will handle. Add in another int_bogus instrumentation point. Do some more substantial target mode cleanups. MFC after: 8 weeks Notes: svn path=/head/; revision=77365
* Amazing. The bits to enable tagged queing in target mode, grok that aMatt Jacob2001-04-041-11/+29
| | | | | | | | | | | | | | | | | tag is active for an ATIO, and say that you want to reconnect with a tag value in a CTIO have *never* been exercised until now. This lossage derived from Solaris code where this stuff originally came from that is about 7 years old. Amazing. We now bundle the incoming tag (legal values are 0..256) as the low 16 bits of the ccb_accept_tio's at_tagid while we put the firmware handle for this ATIO in the top 16 bits- define some macros to make this cleaner. Complete some Ansification. Notes: svn path=/head/; revision=75195
* First cut of target mode swizzling for non-little endian machines.Matt Jacob2001-03-141-116/+150
| | | | | | | It's probably wrong but it's a start. Notes: svn path=/head/; revision=74231
* Switch to using 16 bit handles instead of 32 bit handles.Matt Jacob2001-03-021-6/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a pretty invasive change, but there are three good reasons to do this: 1. We'll never have > 16 bits of handle. 2. We can (eventually) enable the RIO (Reduced Interrupt Operation) bits which return multiple completing 16 bit handles in mailbox registers. 3. The !)$*)$*~)@$*~)$* Qlogic target mode for parallel SCSI spec changed such that at_reserved (which was 32 bits) was split into two pieces- and one of which was a 16 bit handle id that functions like the at_rxid for Fibre Channel (a tag for the f/w to correlate CTIOs with a particular command). Since we had to muck with that and this changed the whole handler architecture, we might as well... Propagate new at_handle on through int ct_fwhandle. Follow implications of changing to 16 bit handles. These above changes at least get Qlogic 1040 cards working in target mode again. 1080/12160 cards don't work yet. In isp.c: Prepare for doing all loop management in outer layers. Notes: svn path=/head/; revision=73319
* Fix at2_entry_t to reflect what the firmware actually writes (insteadMatt Jacob2001-02-271-3/+2
| | | | | | | | of just deriving from SCSI at_entry_t). In this case, there is no 'suggested sense' for FC cards. Notes: svn path=/head/; revision=73115
* add a couple off offset defines for ATIO2sMatt Jacob2000-12-281-0/+3
| | | | Notes: svn path=/head/; revision=70457
* some copyright cleanupsMatt Jacob2000-09-211-5/+2
| | | | Notes: svn path=/head/; revision=66189
* Fix typo. Remove isp_tdebug (we'll use ISP_LOGTDEBUG2 in isp->isp_dblevMatt Jacob2000-08-011-6/+3
| | | | | | | as a selector now). Change DFLT_CMD_CNT to a fixed amount for now. Notes: svn path=/head/; revision=64089
* Add in some new IN_XXX and CT_XXXX flags in preparationMatt Jacob2000-07-181-0/+6
| | | | | | | | for the rototilling that !*$)~@!$_@*_(~@$*_(~@$*~@$* Qlogic F/W changes will need. Notes: svn path=/head/; revision=63390
* add "disable autodisconnect" flagsMatt Jacob2000-06-181-0/+1
| | | | Notes: svn path=/head/; revision=61771
* Some minor tweaklets.Matt Jacob2000-04-211-3/+5
| | | | Notes: svn path=/head/; revision=59453
* Fix ITDEBUG macro.Matt Jacob2000-02-151-1/+1
| | | | | | | Approved: jkh Notes: svn path=/head/; revision=57217
* cleanupMatt Jacob2000-01-151-82/+117
| | | | Notes: svn path=/head/; revision=56005
* These are platform independent definitions for target mode support-Matt Jacob2000-01-031-0/+619
code gratefully borrowed from Patrick Stirling who did a lot of the grunt work on this years ago. There are also some beginnings of swizzle macros in case we go to a big endian machine. This is just a first pass at this and is likely to change a bit over the next Notes: svn path=/head/; revision=55372