summaryrefslogtreecommitdiffstats
path: root/sys/dev/aic7xxx
Commit message (Collapse)AuthorAgeFilesLines
* Revert AHD_TIMER_MAX_US to its original definition now that thegibbs2003-01-221-2/+1
| | | | ahc and ahd modules have correct dependencies on the assembler.
* Bandaid to make the kernel compile until the scsi-crew can find out whatphk2003-01-211-1/+2
| | | | is happening.
* Fix a missed goal.period -> goal.offset change. Ingibbs2003-01-201-2/+2
| | | | | this case, the bug resulted in comparing a period against an offset.
* aic7xxx.reg:gibbs2003-01-206-138/+251
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a constant for the controller's stack size and the maximum scsi offset. aic7xxx.seq: Style nit. The source is implied to be the destination unless overridden in an "and" instruction. Update target mode code for changes in identify seen sequencer flags. aic7xxx_pci.c: Ensure that the PCIERRGENDIS bit is set in the PCIERRGEN config space register. Perhaps this is a reason for the spurios parity errors reported on U160 controllers. Honor the AHC_NO_BIOS_INIT flag. Allow PCI interrupt reporting to be disabled, by clearing the PERRRESEN bit in the command register. This option is now enabled via a new softc flag: AHC_DISABLE_PCI_PERR. Disable SERR and pause the controller prior to performing our mmapped I/O test. This should handle the case of controllers that do not "auto-access pause". For legacy controllers, use SCB ram instead of scratch ram since the latter may contain settings left over from the BIOS that we will use if an seeprom is not found. Make use of new ahc_inl/outl() inlines. aic7xxx.h: Reformat a few comments to follow driver style. Add a controller flags that indicate that a controller has not been initialized by the BIOS and whether to disable PCI parity errors.. Remove stack probing softc members. Add a few more syncrate constants that are useful in speed fallback calculations. Add the SHOW_MASKED_ERRORS debug flag. aic7xxx.h: aic7xxx.c: Implement the SCB_SILENT flag. This is useful for hushing up the driver during DV or other operations that we expect to cause transmission errors. The messages will still print if the SHOW_MASKED_ERRORS debug option is enabled. aic7xxx_inline.h: Implement ahc_[in|out][w|l|q]. This removes the need for manual 'or and shift" type operations throughout the driver. aic7xxx.c: Move SELTO dignostic so that the SCB is still valid when we use it for printing path information. If we are narrow, limit syncrate to Ultra2. Don't clobber ppr_options when forcing a renegotiation. The current ppr_options may be referenced while queuing new commands. Don't set our width to unknown when forcing negotiation on narrow controllers. This will confuse the negotiation code into negotiating with a wide message on narrow controllers. Add an "asserting atn" diagnostic with controller/target information. Remove the probe_stack code. The stack is always 4 deep on legacy controllers, so probing is pointless. This also avoids an issue where probing the stack would upset the aic7770. In ahc_reset(), record whether or not we found the controller in a reset state. If the controller was already reset, assume that no BIOS has initialized the controller and ignore left over scratch ram settings. Fix an ifdef bug that caused sequencer debugging to be enabled always. Clear the ultraenb flag in our tstate during startup. The ultraenbled'ness of a device is recorded in the user transfer settings. tstate->ultraenb bitmask indicates which devices we have negotiated an ultra speed with. Just after initialization, we are async. Setting the ultraenb flag while async seems to be harmless, but it was confusing to see the ULTRAENB flag set in the SCB. Enhance residual diagnostic to indicate if the residual if for sense information or normal data transfers. Indicate the features, bugs, and flags set in the softc that are used to control firmware patch download when booting verbose. In ahc_dump_card_state() fix a logic reversal. The SCSIPHASE register only exists on U160 controllers. The SCSISIGI register exists on all controllers. Not the other way around. Also print out the ERROR register. Allow ahc_dump_card_state() to be called when the sequencer is not paused. Add dump card state markers as in the U320 driver.
* aic79xx.c:gibbs2003-01-207-152/+844
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implement the SCB_SILENT flag. This is useful for hushing up the driver during DV or other operations that we expect to cause transmission errors. The messages will still print if the SHOW_MASKED_ERRORS debug option is enabled. Save and restore the NEGOADDR address when setting new transfer settings. The sequencer performs lookups in the negotiation table too and it expects NEGOADDR to remain consistent across pause/unpause sessions. Consistently use "offset" instead of "period" to determine if we are running sync or not. Add a SHOW_MESSAGES diagnostic for when we assert ATN during message processing. Print out IU, QAS, and RTI features when showing transfer options. Limit the syncrate after all option conformance changes have taken place in ahd_devlimited_syncrate. Changes in options may change the final syncrate we accept. Keep a copy of the hs_mailbox in our softc so that we can perform read/modify/write operations on the hs_mailbox without having to pause the sequencer to read the last written value. Use the ENINT_COALESS flag in the hs_mailbox to toggle interrupt coalessing. Add entrypoints for enabling interrupt coalessing and setting both a timeout (how long to wait for commands to be coalessed) and a maximum commands to coaless value. Add a statistics timer that decides when to enable or disable interrupt coalessing based on load. Add a routine, ahd_reset_cmds_pending() which is used to update the CMDS_PENDING sequencer variable whenever error recovery compeltes SCBs without notifying the sequencer. Since ahd_reset_cmds_pending is called during ahd_unpause() only if we've aborted SCBs, its call to ahd_flush_qoutfifo should not cause recursion through ahd_run_qoutfifo(). A panic has been added to ensure that this recursion does not occur. In ahd_search_qinfifo, update the CMDS_PENDING sequencer variable directly. ahd_search_qinififo can be called in situations where using ahd_reset_cmds_pending() might cause recursion. Since we can safely determine the exact number to reduce CMDS_PENDING by in this scenario without running the qoutfifo, the manual update is sufficient. Clean up diagnostics. Add ahd_flush_qoutfifo() which will run the qoutfifo as well as complete any commands sitting on the sequencer's COMPLETE_SCB lists or the good status FIFO. Use this routine in several places that did similar things in an add-hoc, but incomplete, fashion. A call to this routine was also added to ahd_abort_scbs() to close a race. In ahd_pause_and_flushwork() only return once selections are safely disabled. Flush all completed commands via ahd_flush_qoutfifo(). Remove "Now packetized" diagnostic now that this information is incorperated into the actual negotiation messages that are displayed. When forcing renegotiation, don't clober the current ppr_options. Much of the driver uses this information to determine if we are currently packetized or not. Remove some stray spaces at column 1 in ahd_set_tags. When complaining about getting a host message loop request with no pending messages, print out the SCB_CONTROL register down on the card. Modify the ahd_sent_msg() routine to handle a search for an outgoing identify message. Use this to detect a msg reject on an identify message which typically indicates that the target thought we were packetized. Force a renegotiation in this case. In ahd_search_qinfifo(), wait more effectively for SCB DMA activities to cease. We also disable SCB fetch operations since we are about to change the qinfifo and any fetch in progress will likely be invalidated. In ahd_qinfifo_count(), fix the qinfifo empty case. In ahd_dump_card_state(), print out CCSCBCTL in the correct mode. If we are a narrow controller, don't set the current width to unknown when forcing a future negotiation. This just confuses the code into attempting a wide negotiation on a narrow bus. Add support for task management function completions. Modify ahd_handle_devreset so that it can handle lun resets in addition to target resets. Use ahd_handle_devreset for lun and target reset task management functions. Handle the abort task TMF race case better. We now wait until any current selections are over and then set the TMF back to zero. This should cause the sequencer to ignore the abort TMF completion should it occur. Correct a bug in the illegal phase handler that caused us to drop down to narrow when handling the unexpected command phase case after 3rd party reset of a packetized device. Indicate the features, bugs, and flags set in the softc that are used to control firmware patch download when booting verbose. aic79xx.h: Add coalessing and HS_MAILBOX fields. Add per-softc variables for the stats "daemon". Add a debug option for interrupt coalessing activities. Add two new softc flags: o AHD_UPDATE_PEND_CMDS Run ahd_reset_cmds_pending() on the next unpause. o AHD_RUNNING_QOUTFIFO Used to catch recursion through ahd_run_qoutfifo(). aic79xx.reg: Correct register addresses related to the software timer and the DFDBCTL register. Add constants paramaterizing the software timer. Add scratch ram locations for storing interrupt coalessing tunables. Break INTMASK in SEQITNCTL out into INTMASK1 and INTMASK2. In at least the REV A, these are writable bits. We make use of that for a swtimer workaround in the sequencer. Since HS_MAILBOX autoclears, provide a sequencer variable to store its contents. Add SEQINT codes for handling task management completions. aic79xx.seq: Correct ignore wide residue processing check for a wide negotiation being in effect. We must be in the SCSI register window in order to access the negotiation table. Use the software timer and a commands completed count to implement interrupt coalessing. The command complete is deferred until either the maximum command threshold or a the expiration of a command deferral timer. If we have more SCBs to complete to the host (sitting in COMPLETE_SCB lists), always try to coaless them up to our coalessing limit. If coalessing is enabled, but we have fewer commands oustanting than the host's min coalessing limit, complete the command immediately. Add code to track the number of commands outstanding. Commands are outstanding from the time they are placed into the execution queue until the DMA to post completion is setup. Add a workaround for intvec_2 interrupts on the H2A4. In H2A4, the mode pointer is not saved for intvec2, but is restored on iret. This can lead to the restoration of a bogus mode ptr. Manually clear the intmask bits and do a normal return to compensate. We use intvec_2 to track interrupt coalessing timeouts. Since we cannot disable the swtimer's countdown, simply mask its interrupt once we no longer care about it firing. In idle_loop_cchan, update LOCAL_HS_MAILBOX everytime we are notified of an HS_MAILBOX update via the HS_MAILBOX_ACT bit in QOFF_CTLSTA. We have to use a local copy of persistant portions of the HS_MAILBOX as the mailbox auto-clears on any read. Move the test for the cfg4istat interrupt up an instruction to hopefully close a race between the next outgoing selection and our disabling of selections. Add a missing ret to the last instruction in load_overrun_buf. Add notifications to the host of task management completions as well as the completions for commands that completed successfully before their corresponding TMF could be sent. Hold a critical section during select-out processing until we have a fully identified connection. This removes a race condition with the legacy abort handler. Correct a few spelling errors in some comments. aic79xx_inline.h: Call ahd_reset_cmds_pending() in ahd_unpause if required. Update cmdcmplt interrupt statistics in our interrupt handler. Allow callers to ahd_send_scb() to set the task management function. aic79xx_pci.c: Disable SERR and pause the controller prior to performing our mmapped I/O test. The U320 controllers do not support "auto-access-pause". aic79xx_osm.c: Set the task management function now that ahd_send_scb() doesn't do it for us. We also perform a lun reset in response to BDR requests to packetized devices.
* Allow constants to be complex expressions so long as thosegibbs2003-01-201-15/+6
| | | | | | | expressions can be fully evaluated during assembly. Remove the numerical_value portion of the grammer which is no longer referenced.
* Fix the last reference to the reg_print.c file handlegibbs2003-01-201-2/+2
| | | | | in symtable_dump. This allows the assembler to operate without generating this file.
* Convert the use of MAXBSIZE in the dma tag to more appropriate values.scottl2002-12-315-8/+13
| | | | | | Use BUS_SPACE_MAXSIZE_32BIT for the parent dma tags, and (NSEGS - 1) * PAGE_SIZE for the data buffer tags. FreeBSD/sparc64 is more strict about checking these values that other arches.
* The sequencer downloading code assumes that all jumpscottl2002-12-051-3/+5
| | | | | | | | | | labels are acurate in relation to a fully compiled sequencer program (all patches downloaded). Correct a few occurances of a relative jump across a macro that ended up jumping us into the last instruction of the macro. Spproved by: re (bmah)
* Last minute fixes to ahc and ahd:scottl2002-12-046-47/+94
| | | | | | | | | | | | | | | | | | | | | | | | | ahd_pci.c: Retrieve the allow_memio hint from the resource manager to determine whether or not to try PCI MEMIO. aic79xx_osm.h: aic7xxx_osm.h: Don't wrongly abuse the callout_reset() interface when trying to abuse timeouts generated from the CAM layer. This fixes the console freeze and lost timeout problem that many have reported, especially on SMP systems. aic79xx_pci.c aic7xxx_pci.c Rewrite the MEMIO test routine to prevent certain broken chipsets from trying to burst multiple DWORDs to the registers. Also make the routine better detect byte merging by the host bridge and deal with it. aic79xx.reg: Correct an incorrect register definition. Approved by: re (rwatson, jhb)
* Major update to the ahd driver to fix many bugs found in the previousscottl2002-12-014-372/+949
| | | | | | | | | | version, plus add support for the new features found in the Rev B version of the chip. The changelog is quite long and can be provided on request. Major features include vastly improved protocol violation handling, full support for the 7902 Rev B, better parity error handling, and better packetized overrun handling, to name a few. Approved by: re (blanket)
* Implement workaround for broken busfree-rev in the A4.scottl2002-12-011-69/+148
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | HP -> CPQ Rearrange IDs to better match which chips they use. Convert to uniform product description strings. Simplify 7901A setup function. Add the NONPACKFIFO_BUG and PACED_NEGTABLE_BUG entries for the A. Add rev B bugs and features. The double write workaround for CURRSCB is only required if abort pending is set. Remove this work around and set the abort pending bug bit on the B at least until we have better confirmation that the double write is always safe. Add updated H2B identifiers Move IOCell paramters into softc and add a hook for the OSM to modify these as well as other settings prior to committing them to the chip. SLEW -> SLEWRATE PREQDIS in DEVCONFIG1 went away after the A2. Remove all code that references this bit. This is especially important since this bit was reused in the B for a different HW fix workaround. Properly set the AHD_NEW_IOCELL_OPTS and AHD_NEW_DFCNTRL_OPTS features for the B. Remove stray/random extra 7901A generic PCI table entry. Also switch the correct 7901A generic entry to use ID_ALL_MASK since we can only differentiate the 7901A from the 7902 by checking for a "type field" of 0xE. Set AHD_INTCOLLISIONT_BUG for the Rev B. Set the PREQDIS bit in DEVCONFIG1 for the B. The bit is misnamed, but seems to disable a work-around that breaks on the B on PCI busses. Add a routine for testing memory mapped register access. This will hopefully detect things like buggy via chipsets so that the OSM can fallback to using I/O mapped access when memory mapped I/O simply will not work. Approved by: re (blanket)
* Add our controller name to the front of ourscottl2002-12-011-3/+16
| | | | | | | | | | | diagnostic "Setting Mode" messages. Use a read of HCNTRL to flush our write to CLRCMDCMPLT on the RevB. This allows us to check to see if the sequencer is paused and to initiate the interrupt collision workaround without incuring an extra read. Approved by: re (blanket)
* Remove redundant check for chip type being PCI-X.scottl2002-12-011-4/+4
| | | | | | | | | PCI-X only workarounds are automatically masked out if we are operating in PCI mode. Make use of ahd_pci_test_register_access() Approved by: re (blanket)
* Update to include new ahd_scb_timer_reset APIscottl2002-12-011-3/+12
| | | | | | | | Move IOCell paramters into softc and add a hook for the OSM to modify these as well as other settings prior to committing them to the chip. Approved by: re (blanket)
* Synchronize perforce Id tagsscottl2002-11-301-1/+1
| | | | Approved by: re (blanket)
* Bring in many bugfixes and changes obtained from formal testing:scottl2002-11-304-149/+435
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | aic7xxx.c: aic7xxx.h: aic7xxx.reg: aic7xxx.seq: Bring in the protocol violation handler from the U320 driver and replace the NO_IDENT sequencer interrupt code with the PROTO_VIOLATION code. Support for this code required the following changes: SEQ_FLAGS: IDENTIFY_SEEN -> NOT_IDENTIFIED Added NO_CDB_SENT SCB_CONTROL: TARGET_SCB == STATUS_RCVD for initiator mode scb->flags: Added SCB_TARGET_SCB since we cannot rely on TARGET_SCB as a target/initiator differentiator due to it being overloaded in initiator mode to indicate that status has been received. aic7xxx.seq: Move data fifo CLRCHN to mesgin_rdptrs which is a safer location for doing this operation. This also saves a sequencer instruction. aic7xxx.c: aic7xxx.h: Change ahc/ahd_upate_neg_request() to take a "negotiation type" enum that allows us to negotiate: o only if the goal and current parameters differ. o only if the goal is non-async o always - even if the negotiation will be for async. aic7xxx.seq: Reset the FIFO whenever a short CDB transfer occurs so that the FIFO contents do not corrupt a future CDB transfer retry. Add support for catching the various protocol violations handled by ahc_handle_protocol_violation. Reformat some comments. aic7xxx.c: aic7xxx.h: Just for safety, have the aic7xxx driver probe the stack depth. aic7xxx.c: aic7xxx.h: Save and restore stack contents during diagnostics. Some chip variants overwrite stale entries on a stack "pop". Don't use 0 to probe the stack depth. 0 is the typical value used to backfill the stack if entries are overwritten on a "pop". aic7xxx.h: Add a missing typedef. Collapse SCB flag entries so they are bit contiguous. Add AHD_ULTRA2_XFER_PERIOD for narrow fallback calculations aic7xxx.c: Don't panic (as a diagnostic to catch bugs) if we decided to force the renegotiation of async even if we believe we are already async. This should allow us to negotiate async instead of the full user goal rate during startup if bus resets are disabled. Add a space to the end of the ahc/ahd_print_devinfo routines so that it behaves as expected by the code that uses it. Only force a renegotiation on a selection timeout if the SCB was valid. Doing otherwise may be dangerous as the connection was not valid for an unknown reason. Add additional diagnostic output to ahc_dump_card_state(), and have it use the register pretty printing functions. Update ahc_reg_print() to handle a NULL cur_col. Add a newline to ahc_dump_card_state() output. Bring back "use_ppr". We need to use_ppr anytime doppr is true or we have non-zero protocol options. The later case was not handled in the recent removal of use_ppr. Move a comment and remove a useless clearing of use_ppr. Don't disable ENBUSFREE when single stepping on a DT capable controller. We cannot re-enable unexpected busfree detection, so we must clear BUSFREE on each step instead. Correct the lookup of the SCB ID in ahc_handle_proto_error. Remove a diagnostic printf. Remove unecessary restoration of the STACK for older chips. Approved by: re (blanket)
* Add a routine for testing memory mapped register access.scottl2002-11-301-8/+58
| | | | | | | | This will hopefully detect things like buggy via chipsets so that the OSM can fallback to using I/O mapped access when memory mapped I/O simply will not work. Approved by: re (blanket)
* Always compile in the AHC_ALLOW_MEMIO code, but only try MEMIO ifscottl2002-11-301-4/+22
| | | | | | | | | AHC_ALLOW_MEMIO is set, or the hint hint.ahc.N.allow_memio=1 is set in the bootloader. Make use of ah?_pci_test_register_access(). Approved by: re (blanket)
* Handle changes to SCB_CONTROL, scb->flags and SEQ_FLAGSscottl2002-11-301-5/+6
| | | | Approved by: re (blanket)
* Use the new ahc_scb_timer_reset APIscottl2002-11-301-4/+27
| | | | | | Remove AHC_ALLOW_MEMIO Approved by: re (blanket)
* Add support for the Olivetti branded EISA boards.scottl2002-11-301-1/+15
| | | | Approved by: re (blanket)
* Revisit the printf format fixes for alpha. intmax_t doesn't exist inscottl2002-11-282-5/+4
| | | | | | RELENG_4, so cast to u_long in order to stay compatible. Approved by: re (blanket)
* Minor updates to the aicasm:scottl2002-11-273-5/+5
| | | | | | | | | | | | | | aicasm_gram.y: Use a direct move from allzeros to emulate a mvi of 0. aicasm_insformat.h: sync $Id$ aicasm_symbol.c: Minor header change. Approved by: re (blanket)
* Fix printf format problems that were stopping LINT on alphascottl2002-11-252-4/+5
| | | | | Submitted by: jmallett, many others Approved by: re
* Use better return types and a couple of casts to eliminate warnings onscottl2002-11-121-7/+7
| | | | | | | alpha. This will take the file out of sync with the private version that we maintain, but alpha tinderbox has been broken for too long. Tested on: i386, sparc64, alpha
* Never allow memory mapped I/O in PCI-X mode on controllers thatgibbs2002-10-161-2/+4
| | | | | do not support that configuration. This should fix problems with embedded 7902 controllers running in PCI-X mode.
* Remove a left over '&' from the conversion to using ourgibbs2002-09-301-2/+2
| | | | | | softc referenced seeprom store. MFC after: 1 day
* Use fcntl.h from inside /sys.obrien2002-09-301-1/+1
| | | | Reviewd by: scottl
* Be consistent about "static" functions: if the function is markedphk2002-09-281-1/+1
| | | | | | static in its prototype, mark it static at the definition too. Inspired by: FlexeLint warning #512
* Add a missing pair of curly braces to a conditional debuggibbs2002-09-271-2/+3
| | | | | statement. This ensures that debug code doesn't trigger if it isn't enabled. <blush>
* Remove redundant inclusion of inttypes.h in aicasm_gram.ygibbs2002-09-274-8/+7
| | | | | | and properly sort inttypes.h into list of includes. Noticed by: Mike Barcroft <mike@freebsd.org>
* Upgrade to version 1.1 of the aic79xx U320 driver.gibbs2002-09-266-243/+335
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | aic79xx.c: o Remove redundant ahd_update_modes() call. o Correct panic in diagnostic should state corruption cause the SCB Id to be invalid during a selection timeout. o Add workaround for missing BUSFREEREV feature in Rev A silicon. o Corect formatting nits. o Use register pretty printing in more places. o Save and restore our SCB pointer when updating the waiting queue list for an "expected" LQ-out busfree. o In ahd_clear_intstat, deal with the missing autoclear in the CLRLQO* registers. o BE fixup in a diagnostic printf. o Make sure that we are in the proper mode before disabling selections in ahd_update_pending_scbs. o Add more diagnostics. o task_attribute_nonpkt_tag -> task_attribute: we don't need a nonpkt_tag field anymore for allowing all 512 SCBs to be used in non-packetized connections. o Negotiate HOLD_MCS to U320 devices. o Add a few additional mode assertions. o Restore the chip mode after clearing out the qinfifo so that code using ahd_abort_scbs sees a consistent mode. o Simplify the DMA engine shutdown routine prior to performing a bus reset. o Perform the sequencer restart after a chip reset prior to setting up our timer to poll for the reset to be complete. On some OSes, the timer could actually pre-empt us and order is important here. o Have our "reset poller" set the expected mode since there is no guarantee of what mode will be in force when we are called from the OS timer. o Save and restore the SCB pointer in ahd_dump_card_state(). This routine must not modify card state. o Ditto for ahd_dump_scbs(). aic79xx.h: o Add a few more chip bug definitions. o Align our tag on a 32bit boundary. aic79xx.reg: aic79xx.seq: o Start work on removing workarounds for Rev B. o Use a special location in scratch from for stroring our SCBPTR during legacy FIFO allocations. This corrects problems in mixed packetized/non-packetized configurations where calling into a FIFO task corrupted our SCBPTR. o Don't rely on DMA priority to guarantee that all data in our FIFOs will flush prior to a command completion notification going out of the command channel. We've never seen this assumption fail, but better safe than sorry. o Deal with missing BUSFREEREV feature in H2A. o Simplify disconnect list code now that the list will always have only a single entry. o Implement the AHD_REG_SLOW_SETTLE_BUG workaround. o Swith to using "REG_ISR" for local mode scratch during our ISR. o Add a missing jmp to the data_group_dma_loop after our data pointers have been re-initialized by the kernel. o Correct test in the bitbucket code so that we actually wait for the bitbucket to complete before signaling the kernel of the overrun condition. o Reposition pkt_saveptrs to avoid a jmp instruction. o Update a comment to reflect that the code now waits for a FIFO to drain prior to issuing a CLRCHN. aic79xx_inline.h: o Remove unused untagged queue handling code. o Don't attempt to htole64 what could be a 32bit value. aic79xx_pci.c: o Set additional bug flags for rev A chips.
* Expand vendor ID.gibbs2002-09-261-1/+1
|
* Correct a spelling error.gibbs2002-09-261-2/+2
|
* Sync perforce IDs for changes first committed to FreeBSD and thengibbs2002-09-264-4/+4
| | | | to the Adaptec driver repository.
* Use inttypes.hgibbs2002-09-265-7/+26
| | | | | | Upgrade assembler to allow a move immediate of 0. This is helpful in certain macros where we can't know the value of the immediate in advance.
* The ahc driver should only have one devclass, not one for each busscottl2002-09-224-9/+10
| | | | | | | attachment. Submitted by: too many people to count MFC after: 3 days
* Use the correct bit value for a debug optionsscottl2002-09-011-1/+1
|
* Sync perforce Ids.gibbs2002-08-312-2/+2
|
* Identify new controllers and the aic7901A.gibbs2002-08-311-33/+55
| | | | | | | | Move interrupt enable to the OSM. Remove some debugging messages. Remove chip bug workarounds for non-production asics.
* Hook up the endian macros.gibbs2002-08-311-28/+41
| | | | Correct some comments.
* Enable card interrupts in our OSM rather than in the core.gibbs2002-08-311-19/+29
| | | | | | | | | | | | | | This ensures that we don't enter our interrupt handler until all OSM components it might reference have been fully initialized during attach. Remove vestiges of untagged queue handling. Add hints to ahd_get_scb() so it knows what type of SCB collision management to perform for each new transaction. Properly disable/enable IU_REQ with changes in tagged queuing and disconnection settings passed in by CAM.
* Correct lun representation during packetized operation.gibbs2002-08-311-44/+26
| | | | | | | | | | | | | | | | Uninline some routines that are just too big to be inlined. Add some helper macros for SCB ID collision management. Use a hardware SCB rather than a full SCB for the "next SCB to queue" sentinal. Update for new "high SCBID bit" qoutfifo delivery scheme. If interrupts are disabled on the card, don't bother running our interrupt handler. Our handler was called due to a shared interrupt, and the card's interrupts are explicitly disabled to prevent entry into our interrupt handler.
* Add a prefix to be used for assembler generated tables andgibbs2002-08-311-83/+62
| | | | | | | | | | | | | | | | | | | | | | | functions for register pretty-printing. Implement "top bit of SCBID is valid bit" qoutfifo delivery scheme. "the the" -> "the". Remove old and never used tag collision chain handling in the sequencer. Tag collisions are never allowed to get as far as on the controller. Simplify busy target table handling routines. Update comments to reflect reality. Add support for catching more protocol violations. Correct a bug in data fifo handling in mixed packetized and non-packetized environments. SG_STATE must be cleared even if an SG fetch is not in progress at the time of FIFO shutdown or we may confuse the non-packetized transaction idle-loop.
* Convert to new assembler field syntax.gibbs2002-08-311-776/+834
| | | | | | | | Add preliminary Rev B definitions. Add QOUTFIFO_ENTRY_VALID_TAG for new qoufifo scheme. Reserve SCB space for large luns.
* Updates for new non-packetized SCB-ID collision avoidance,gibbs2002-08-311-107/+125
| | | | | | | | | | | | | | busy target table addressing changes, our qoufifo scheme, and long lun support. Drop bus reset hold delay to 25us. Remove chip workarounds for revisions that never went to production. Add aic7901A identification information. Remove untagged queue logic.
* Identify the AIC7901A as such instead of an AIC7902.gibbs2002-08-311-477/+775
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Push protocol violation handler to its own routine. We now properly detect and recovery from the following target induced protocol violations: o Unexpected or invalid non-packetized Relesection o Command complete with no status message o Good Status after incomplete cdb transfer Add an SCB collision avoidance algorithm that allows us to use all 512 SCBs for non-packetized operations. There is still the possibility of running out of SCBs with non-colliding tag identifiers, but the algorithm ensures that the stall will be rare and short lived. Convert to a read-only algorithm for validing entries in the qoufifo. The sequencer now toggles the high bit of the SCB identifier on each wrap around of the qinfifo. If the high bit doesn't match the expected value for this pass of the qoufifo, the entry is not valid. This has the benefit of working on machines that have large granularity cache write back semantics without requiring any additional memory. Remove lots of code related to untagged SCB queues. Since these controllers can keep a fully busy target table, we will never have untagged SCB queues. Lots of improvements to diagnostic logging. Clarify some comments. Don't clear BUSFREE interrupt enable in SIMODE1 in the SELTO handler. Just clearing the interrupt status is sufficient and this avoids the chance of disabling busfree detection in connection that occurs while we are handling the busfree interrupt. Clear all possible interrupt sources when handling a busfree interrupt. The hardware clears some but not all of them. Don't panic if we get into the default SCSIINT handler. Dump the card state and clear all interrupt sources in the hope that we can continue. LASTPHASE != PREVPHASE. Use the correct PREVPHASE for testing against values in the PERRDIAG register. According to SPI4, the bus free that is required after certain PPR negotiations will only occur at the end of all message phases. Handle the bus free if it occurs after a transaction in either the message-in or message-out phases. The busfree can also occur if the status of IU_REQ changes due to a WDTR or SDTR message. We now set the expect busfree flag in ahd_set_syncrate so that it works regardless of message type. Correct a problem with missing certain busfree events. The chip supports single-stepping even if a SCSIINT is pending. This obviates the need to clear all of the SCSI interrupt enables prior to single stepping. Since ENBUSFREE can only be disabled manually and not re-enabled, avoiding touching this bit in the single-step case yields reliable bus free detection. Enhance ahd_clear_intstat to clear all SCSIINT sources. Only use ahd_update_pending_scbs() if we are active on the bus. We cannot modify the "MK_MESSAGE" bits on SCBs in the execution queue if a selection might be in process since the sequencer uses this bit to detect PPR negotiation to a target with an outstanding IU_REQ agreement. Allocate the SCB delivery mechansim's sentinal SCB specially so we don't waste a valid SCB for this task. Move tranceive state settle logic to ahd_chip_init() since this needs to occur after every chip reset, not just the chip reset that happens during primary driver initialization. Correct a bug with transmitting lun information in packetized connections. Restrict busy target table operations to the range of luns that can be used for non-packetized connections. Larger luns can only be accessed in packetized mode. Correct a busy target table addressing bug. Be more careful about how we shutdown the DMA engines during bus reset events. Only freeze the SIMQ once regardless of the number of bus reset events that occur while we are polling for the resets to stop. Don't rely on the sequencer remaining paused() during our reset poll. It is safe for the sequencer to run during this time, and many callers to the bus reset code would need to be modified to make this assumption universally true. Even if we are not going to clobber SCB state when an auto-request sense SCB has a check condition, we must still unfreeze the queue. Re-arrange the BAD STATUS handler to handle this case appropriately. Modify the SCB download size depending on whether long luns are being stored in the SCB. Add ahd_print_register() for pretty printing register diagnostics. Don't trust that the flexport logic to detect the presence of a seeprom is available. It may not be on some motherboard implementations. "the the" -> "the"
* If interrupts are disabled on the card, don't bother runninggibbs2002-08-311-1/+10
| | | | | | our interrupt handler. Our handler was called due to a shared interrupt, and the card's interrupts are explicitly disabled to prevent entry into our interrupt handler.
* Update Perforce Ids.gibbs2002-08-312-2/+2
|
OpenPOWER on IntegriCloud