Commit Graph

46 Commits

Author SHA1 Message Date
thorpej 623f83a793 Use BUS_DMA_READ and BUS_DMA_WRITE in some obvious places. 2001-07-19 16:25:23 +00:00
bouyer b1a2f97303 Also print DSA addr in a DIAGNOSTING printf. 2001-06-21 16:55:20 +00:00
bouyer a98b728b88 Call scsipi_channel_thaw() after scsipi_done() so that command ordering
is preserved.
2001-05-23 15:51:32 +00:00
lukem abf1970c82 delint newline in string 2001-04-30 02:17:55 +00:00
bouyer 937a7a3ed9 Pull up the thorpej_scsipi branch to main branch.
This is a completely rewritten scsipi_xfer execution engine, and the
associated changes to HBA drivers. Overview of changes & features:
- All xfers are queued in the mid-layer, rather than doing so in an
  ad-hoc fashion in individual adapter drivers.
- Adapter/channel resource management in the mid-layer, avoids even trying
  to start running an xfer if the adapter/channel doesn't have the resources.
- Better communication between the mid-layer and the adapters.
- Asynchronous event notification mechanism from adapter to mid-layer and
  peripherals.
- Better peripheral queue management: freeze/thaw, sorted requeueing during
  recovery, etc.
- Clean separation of peripherals, adapters, and adapter channels (no more
  scsipi_link).
- Kernel thread for each scsipi_channel makes error recovery much easier
  (no more dealing with interrupt context when recovering from an error).
- Mid-layer support for tagged queueing: commands can have the tag type
  set explicitly, tag IDs are allocated in the mid-layer (thus eliminating
  the need to use buggy tag ID allocation schemes in many adapter drivers).
- support for QUEUE FULL and CHECK CONDITION status in mid-layer; the command
  will be requeued, or a REQUEST SENSE will be sent as appropriate.

Just before the merge syssrc has been tagged with thorpej_scsipi_beforemerge
2001-04-25 17:53:04 +00:00
thorpej fd7ed72be1 Add BUS_DMA_STREAMING to data transfer maps. 2001-03-07 23:07:12 +00:00
thorpej 8f79095477 Differentiate a couple of similar error message, and add newlines
on the end of them.
2001-03-01 22:10:57 +00:00
bouyer 0653304779 Avoid sending new commands to the device if it has sense pending:
- run request sense command without disconnect
- don't restart the script before siop_scsicmd_end has been called if the
  cmd didn't complete with good status.
- reserve slot 0 for request sense, to make sure it'll be sent first.
2001-02-11 18:04:49 +00:00
bouyer 22189b442b Add a few siop_table_sync() calls. 2001-01-26 22:00:01 +00:00
thorpej 275539f03c NBPG -> PAGE_SIZE 2000-11-14 18:21:00 +00:00
bouyer fc92601259 Fixes related to QUEUE FULL status:
- move status handling in siop_scsicmd_end(), it's better than in siop_intr()
- define 2 internal SIOP status, for "no status reported by device" and
  reset condition
- add a list of "urgent" command, to be executed before the list of command
  queued the normal way; this is used for command which got aborted
  by a QUEUE FULL and have to be requeued in order.
- Don't accept to send a Q_TAG message not immediatly folowing a IDENTIFY
2000-10-23 23:18:10 +00:00
bouyer 7777f61cbe Rearrange for script changes (scheduler core in main script, command part
of the scheduler in command table).
Add tagged command queuing support.
2000-10-23 14:56:16 +00:00
bouyer 2ebf1a0cd0 Ops, sync the script DMA map when the script RAM *don't* exists. 2000-10-21 13:56:17 +00:00
bouyer d239df5374 Adapt for script change: don't assume Ent_lun_switch_entry == 0 2000-10-19 07:22:06 +00:00
bouyer f629a0ae67 Ops, add proper bus_dmamap_sync() calls for reselect switch operations. 2000-10-18 20:06:54 +00:00
bouyer 9d3f5d7fbd Adapt for new lun switch script.
Implement SCBUSACCEL ioctl.
Snapshot of work in progress on tagged queuing: we can send/receive
queue tag messages. Infrastructure to manage multiple commands per
devices not here yet.
2000-10-18 17:06:52 +00:00
bouyer f6bf6762ab Ops, disable debugging messages. 2000-10-06 20:07:10 +00:00
bouyer 171adcf634 Fix recurent typo: shed->sched 2000-10-06 16:39:04 +00:00
bouyer e353a6d9b2 Adapt for reselect handling from the script. While here, fix typo
(SIOP_SCXFER -> SIOP_SXFER).
2000-10-06 16:35:13 +00:00
bouyer ca5b9b0c22 Force 64bit arithmetic for timeout computation; a 32bit int opverflows for
large timeouts. Should fix PR kern/10575.
2000-07-27 21:28:17 +00:00
bouyer 10afc4e0a8 create a funcion, siop_busreset(), to reset the scsibus.
Reset the scsi bus at attach time, to be sure all devices start in narrow/async
mode.
Defer sync/wide negotiation until after whe have a valid
xs->sc_link->device_softc, so that we can honnor the NOSYNC/NOWIDE quirks.
2000-07-24 15:15:00 +00:00
pk f9e6c9cf42 Fixx off-by-one error in handlereset(). 2000-07-19 16:07:00 +00:00
mrg 314f1e97c5 remove include of <vm/vm.h>. <vm/vm.h> -> <uvm/uvm_extern.h> 2000-06-28 17:12:48 +00:00
mrg 2f159a1bac remove/move more mach vm header files:
<vm/pglist.h> -> <uvm/uvm_pglist.h>
	<vm/vm_inherit.h> -> <uvm/uvm_inherit.h>
	<vm/vm_kern.h> -> into <uvm/uvm_extern.h>
	<vm/vm_object.h> -> nothing
	<vm/vm_pager.h> -> into <uvm/uvm_pager.h>

also includes a bunch of <vm/vm_page.h> include removals (due to redudancy
with <vm/vm.h>), and a scattering of other similar headers.
2000-06-26 14:20:25 +00:00
bouyer dbc130250d Patch from Eduardo Horvath: don't bus_dmamap_sync the script dma map if
it lives in the on-chip RAM !
2000-06-20 17:16:22 +00:00
bouyer 22a10be43e sheduler->scheduler, as pointed out by Klaus Klein 2000-06-13 13:59:15 +00:00
bouyer 221a99f782 Handle "scsi bus mode change" interrupts on 895 and higther.
Thanks to Hal Murray for reporting the problem and testing the fix.
2000-06-12 20:13:41 +00:00
tsutsui 3f94f56142 Adapt struct scsipi_adapter changes. 2000-06-07 14:40:20 +00:00
bouyer 0e7cd755f4 use the correct variable in a debug printf(). 2000-06-05 21:47:25 +00:00
bouyer b063b2ec36 Separate the sheduler from the main script, allocate another DMA-safe
memory page for the sheduler. Put the main script in the on-chip RAM when
available.
Avoid a null-pointer dereference when DSA is invalid.
2000-05-25 10:10:54 +00:00
bouyer 2904666f56 Allocate dynamically the command block descriptors. 2000-05-23 17:08:07 +00:00
bouyer c94bdce1f4 Don't enable debug message by default. 2000-05-15 15:16:59 +00:00
bouyer 863014523a - split siop.c in script-dependant vs script-independant part, for
comming esiop
- add a reset callback for bus-dependant registers settings
2000-05-15 07:48:24 +00:00
bouyer 2222d240a7 Use correct divider value for scxfer 2000-05-11 09:30:12 +00:00
soren 6a1547768c Typos. 2000-05-06 00:44:00 +00:00
bouyer 904ca34539 Ops, restore sync/wide parameters after a reselect.
Also, better handling of parity errors.
2000-05-05 09:32:48 +00:00
bouyer 4c9516aa3b Rework the command queue, to avoid having commands blocked at the end
of the queue. Load is now properly balanced across all disks of the same bus.
2000-05-05 09:05:44 +00:00
bouyer 2306b4a34e When a WDTR message is rejected, initiate sync negotiation anyway.
When a SDTR message is rejected indicate that target is async
Add a missing bus_dma_sync call.
2000-05-04 17:18:27 +00:00
bouyer f5b572d26b - LP64 issues in debug printfs.
- on a phase mismatch, do byte recovery only if we were in data phase.
  Otherwise just clear the fifo.
- Properly handle reject of a sync or wide negotiation.
2000-05-04 16:56:13 +00:00
bouyer 3bb9a5f666 - do sync/wide negotiation
- use a circular queue for the start slots, so that order has better chances
  to be preserved.
2000-05-02 19:03:02 +00:00
bouyer fcf693203f More big-endian fixes from Izumi Tsutsui. 2000-04-27 16:49:07 +00:00
bouyer bf7a94ec2b Fix copyrigth notice. 2000-04-27 14:06:57 +00:00
bouyer ce7f4dafe1 Big-endian fixes from Izumi Tsutsui. 2000-04-26 20:00:31 +00:00
bouyer eba93ce7d2 Ops, need to restore correct DSA value after a phase mismatch, we may have
been interrupted during a S/G operation.
2000-04-25 20:02:33 +00:00
bouyer 88be4752d0 - Change the script to start new commands in an asyncronous way, using
'command slots' in which the host can put command and wait for the script
 to start them
- Change siop.c to do full disconnect/reslelect, allowing as much as one
 command per target/lun to run in parallel.
- Fix bug in registers init where a board without BIOS would end at
  ID 0 (now the driver works on alpha too).
- better handling of messages, sending back a MSG_EXT_SDTR in response to an
  incoming MSG_EXT_SDTR, and MSG_MESSAGE_REJECT for unhandled messages.
- fix use of bus_dmamap_sync() and htole32().
- supports shared interrups
- change some int8 and int16 to int, for alpha and mips benefits ( suggested by
  Toru Nishimura)
2000-04-25 16:27:05 +00:00
bouyer 19ada4a82a Snapshot of work in progress: new driver for the NCR 53c8xx SCSI controller
(the name 'siop' is still being discussed, may change).
Only basic disconnect/reselect for now, no sync/wide negotiation.
Tested with 810A, 875 and 895 on i386 only.
The bus-independant part should also be able to handle the 53c720 and 53c770.
A new driver with enhanced script should appear for the 825/875/895 'soon'.
2000-04-21 17:56:58 +00:00