Commit Graph

66 Commits

Author SHA1 Message Date
wiz
1ffa7b76c4 DMA, not dma nor Dma. 2003-05-03 18:10:37 +00:00
bouyer
b99551540c in siop_reset(), reset sc_ntargets to 0. The number of targets will be
computed again in siop_add_reselsw()
in siop_reset(), reset the tag reseloff to 0, in addition to the lun reseloff.
If siop_add_dev() fails this time we would use the old reseloff, clobbering
memory now used for something else.
2002-11-08 22:04:41 +00:00
wiz
5db23d2c5d enouth -> enough. 2002-07-26 01:00:39 +00:00
wiz
e00173a7f2 Spell 'should' correctly. 2002-07-18 11:59:06 +00:00
bouyer
af09484589 Be more verbose when returning XS_DRIVER_STUFFUP 2002-05-18 16:09:43 +00:00
thorpej
4daab7072a Don't access a scsipi channel's periph table directly; use
scsipi_lookup_periph().
2002-05-16 02:50:53 +00:00
bouyer
4b307fe0af It's not safe to access the SCNTL1 register while the SCRIPT is running.
On the 1010 this can wedge the chip. So abort the script instead.
the abort interrupt will trigger a bus reset.
2002-04-25 20:05:10 +00:00
bouyer
cd3578d7ef More copyright fixes, pointed out by Thomas. Thanks ! 2002-04-23 20:41:13 +00:00
bouyer
c7454ad973 - factor out parts of (e)siop_attach() to siop_common_attach()
- Add support for DT transfers (aka Ultra/160) in esiop

Note that DT transfers are not enabled for 53c1010-33 rev 0 yet; if I trust
FreeBSD it has a bug which prevent them to do DT properly.
From the same source there may be issues with some revs of 53c1010-66.
2002-04-23 17:33:27 +00:00
bouyer
6d37782a49 Bump the space for SCSI messages from 8 to 16 octets, as 8 may not be
enouth for IDENTIFY + TAG + PPR.
Get rid of constants in C code by use of a offsetof macro.
2002-04-23 12:55:26 +00:00
bouyer
cf06149dac Enable software LED control based on LED0 feature, not #define.
For now, set the LED0 feature if SIOP_SYMLED is defined in siop_pci_common.c.
From Jason R Thorpe.
2002-04-23 10:38:37 +00:00
bouyer
e3f96dde51 Fix last change: assign siop_cmd->tag in callers instead of siop_setuptables(),
and use siop_cmd->tag instead of xs->xs_tag_id. This way siop can use
xs->xs_tag_id + 1 without interferences with esiop.
2002-04-22 15:48:55 +00:00
bouyer
72906f4578 In siop_setuptables(), use the proposed tag_id, not tag_id +1.
In siop.c bump siop_cmd->tag by one as tag id 0 is reserved for untagged cmds.
2002-04-22 09:43:44 +00:00
bouyer
97fe8b91c5 Move a few things around, so that ic/siop_common.c and pci/siop_pci_common.c
can be compiled without including siopvar.h.
2002-04-20 00:15:54 +00:00
bouyer
52cdca5f88 If SIOP_SYMLED is defined, drive the activity LED though GPIO pin 1. 2002-04-18 12:03:15 +00:00
bouyer
e5727031fb Implement mstohz() as discussed on tech-kern, and use it in SCSI drivers
to convert xs->timeout to callout() parameter.
2002-04-05 18:27:45 +00:00
bouyer
5d5c5c0ddd As siop_morecbd() is called from the kernel thread, protect access to the
queues with splbio.
2002-03-01 21:37:03 +00:00
tsutsui
84926576f1 Call malloc(9) with M_ZERO flag instead of memset() after malloc(). 2002-01-12 16:03:11 +00:00
lukem
a4bae8b066 add/cleanup RCSID 2001-11-13 13:14:31 +00:00
bouyer
ea29ee7d56 Call siop_morecbd() only when scsipi ask us ADAPTER_REQ_GROW_RESOURCES.
This prevent using bus_dmamem_map() from interrupt context.
Should fix kern/13827.
2001-10-14 20:37:28 +00:00
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