Home | History | Annotate | only in /src/sys/dev/microcode/siop
History log of /src/sys/dev/microcode/siop
RevisionDateAuthorComments
 1.6 06-Apr-2003  tsutsui Tweak siop scripts assembler for new oosiop.
 1.5 21-Apr-2002  bouyer First cut at a esiop driver (enhanced siop). Doesn't implement tagged queuing
yet.
If is restricted to SIOP which implement the load/store instruction, and
has 10 scratch registers (basically, 825 and newer, possibly 770).
It implements a different interface between host and script, using a real
ring for command starts, and improved support for reconnect which will allow
256 tag per device. It uses interrupt on the fly to signal complete command,
which allows several commands to be serviced per interrupt and doesn't require
the script to stop to signal command completion.
 1.4 12-Dec-2001  tv MKfoo=no -> NOfoo
 1.3 05-Dec-2001  fredette Now generate oosiop.out, the compiled 53c700 script.
 1.2 30-Apr-2001  tsutsui branches: 1.2.2;
Add a MI driver for the Symbios/NCR 53c710 SCSI controller.
This is based on amiga's siop driver, but converted to use
bus_space(9) functions and modified to fit bus_dma(9) framework.

Currently tested on NetBSD/arc with jazzio 53c710 SCSI,
which really requires bus_dma(9) functions :-)
Sync transfers and disconnect/reconnect are also working.

TODO:
- Test under more heavy load
- Clean up osiop_checkintr() hander
- Reorganize command queue and sync negotiation handling more suitable
for thorpej-scsipi mid-layer
- Re-think defered interrupt handling for amiga
 1.1 21-Apr-2000  bouyer branches: 1.1.6; 1.1.8;
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'.
 1.1.8.3 20-Jun-2002  nathanw Catch up to -current.
 1.1.8.2 08-Jan-2002  nathanw Catch up to -current.
 1.1.8.1 21-Jun-2001  nathanw Catch up to -current.
 1.1.6.2 20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
A i386 GENERIC kernel compiles without the siop, ahc and bha drivers
(will be updated later). i386 IDE/ATAPI and ncr work, as well as
sparc/esp_sbus. alpha should work as well (untested yet).
siop, ahc and bha will be updated once I've updated the branch to current
-current, as well as machine-dependant code.
 1.1.6.1 21-Apr-2000  bouyer file Makefile was added on branch thorpej_scsipi on 2000-11-20 11:42:06 +0000
 1.2.2.2 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.2.2.1 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.14 18-Nov-2005  bouyer Regen: save offset at disconnect after a data phase without save data pointer.
 1.13 17-May-2004  bouyer branches: 1.13.10; 1.13.12; 1.13.18;
Regen from esiop.ss 1.18
 1.12 17-May-2004  bouyer Regen from esiop.ss 1.17.
 1.11 06-Aug-2003  bouyer branches: 1.11.4;
Regen from esiop.ss 1.15.
 1.10 02-May-2002  bouyer branches: 1.10.4; 1.10.6; 1.10.8; 1.10.14;
Regen: move a few things around to save a few JUMP.
 1.9 27-Apr-2002  bouyer Regen: use a u_int32_t in script RAM to pass flags between script and driver.
 1.8 27-Apr-2002  bouyer Regen: implement done command ring.
 1.7 25-Apr-2002  bouyer Regen: 2 DSA entry per lun, load SCRATCHC before select, avoid race condition
when setting f_cmd_free.
 1.6 24-Apr-2002  bouyer Regen: get rid or ID in scheduler slot, to save RAM.
 1.5 24-Apr-2002  bouyer Regen: bump the number of slots in the cmd ring to 256.
 1.4 23-Apr-2002  bouyer Regen: bump message size to 16 octets.
 1.3 22-Apr-2002  bouyer Regen: block on wait MSG_OUT after a SELECT.
 1.2 22-Apr-2002  bouyer Regen: tagged queuing support, and led on/off fragments.
 1.1 21-Apr-2002  bouyer Generated from esiop.ss, for the new esiop driver.
 1.10.14.4 11-Dec-2005  christos Sync with head.
 1.10.14.3 21-Sep-2004  skrll Fix the sync with head I botched.
 1.10.14.2 18-Sep-2004  skrll Sync with HEAD.
 1.10.14.1 03-Aug-2004  skrll Sync with HEAD
 1.10.8.2 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.10.8.1 02-May-2002  jdolecek file esiop.out was added on branch kqueue on 2002-06-23 17:47:18 +0000
 1.10.6.2 20-Jun-2002  nathanw Catch up to -current.
 1.10.6.1 02-May-2002  nathanw file esiop.out was added on branch nathanw_sa on 2002-06-20 03:45:13 +0000
 1.10.4.4 14-Dec-2005  jmc Regen (requested in ticket #5957 by bouyer)
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0. PR#31990
 1.10.4.3 17-Mar-2005  tron Regen for ticket 1750.
 1.10.4.2 17-Mar-2005  tron Regen for ticket 1749.
 1.10.4.1 15-Aug-2003  tron Regen.
 1.11.4.3 01-Dec-2005  riz Regen for ticket 10168.
 1.11.4.2 11-May-2005  snj branches: 1.11.4.2.2;
Regen for ticket 1365.
 1.11.4.1 11-May-2005  snj Regen for ticket 1364.
 1.11.4.2.2.1 01-Dec-2005  riz Regen for ticket 10168.
 1.13.18.1 22-Nov-2005  yamt sync with head.
 1.13.12.1 21-Jun-2006  yamt sync with head.
 1.13.10.1 21-Nov-2005  tron Regen for ticket #973.
 1.22 23-May-2022  andvar s/beggining/beginning/ in comments.
 1.21 19-Oct-2009  bouyer Remove closes 3 & 4 from my licence. Lots of thanks to Soren Jacobsen
for the booring work !
 1.20 18-Nov-2005  bouyer branches: 1.20.74;
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0.
Problem reported and patch tested by edwin, Roy Bixler and YAMAMOTO Takashi.
Fix kern/31990 by YAMAMOTO Takashi.
 1.19 27-Feb-2005  perry branches: 1.19.2; 1.19.4; 1.19.10;
nuke trailing whitespace
 1.18 17-May-2004  bouyer branches: 1.18.4; 1.18.6;
when an unexpected disconnect occurs only compute the resid; do the
real save data pointers when we get the message (or rather, at disconnect
time following the message).
Factor out code to do this, and to deal with xs->resid, in siop_common.c.
 1.17 17-May-2004  bouyer Properly compute xs->resid, instead of assuming it'll always be 0 when
a command is done.
 1.16 05-Oct-2003  bouyer branches: 1.16.4;
Remove references to University of California from my copyright notices.
 1.15 06-Aug-2003  bouyer Properly handle messages that we get at reconnect time (other than
SIMPLE_Q_TAG). Some drives start sync/wide negotiation at reconnect time.
Problem reported and fix tested by Andreas Wrede.
 1.14 29-Aug-2002  bouyer branches: 1.14.6;
Fix typo in comment.
 1.13 02-May-2002  bouyer branches: 1.13.2; 1.13.4; 1.13.6; 1.13.8;
Move a few things around, to save some JUMP.
 1.12 27-Apr-2002  bouyer Use a u_int32_t in script RAM instead of the SEM bit in ISTAT to pass flags
between script and driver. This allows more than one flag, and is easier to
manage (we almost can't read/write istat outside of the irq handler).
 1.11 27-Apr-2002  bouyer Implement a ring for the completed commands. This avoid a (problematic only
if error occurs after status is collected) race condition
when using the status byte to detect completed commands (a command descriptor
could be recycled before the device disconnected), and make the
interrupt routine handling completed commands more efficient (no need to
scan target * lun * tag array any more).
 1.10 25-Apr-2002  bouyer - We can't share the per-lun DSA entry for untagged and tag table DSA;
there may be tagged commands still running when we queue a request sense
command.
Solve this by using 2 DSA entry per LUN
- Now that we have the command DSA before select, we can load T/L/Q in
SCRATCHC. This makes the selection timeout handler simpler.
- Avoid a race condition when setting the free flag in the cmd ring (see
comment in the script)
- don't forget to update the ID in the head of LUN table after a sync/wide
negotiation. This fixes the command timeout at the first data command
after negotiation (the bus reset handler did update the ID properly,
so subsequent commands were OK).
- for DMA interrupts, clear fifo if it's not empty. Leaving the fifo dirty
would prevent subsequent interrupts from coming in.
- Various improvements in debug messages
- misc cleanups.
 1.9 24-Apr-2002  bouyer For a new command, use the id in the command table and get rid of the ID in the
scheduler slot. This costs a few more instructions but divide the size of the
scheduler ring by 2, saving 1k of onboard RAM (a bus with 15 devices would
overflow the on-board RAM by 128 bytes).
 1.8 24-Apr-2002  bouyer Bump the number of slots in the command ring to 256.
 1.7 23-Apr-2002  bouyer More copyright fixes, pointed out by Thomas. Thanks !
 1.6 23-Apr-2002  bouyer Fix copyrigth.
 1.5 23-Apr-2002  bouyer 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.
 1.4 22-Apr-2002  bouyer It seems that the script processor continue to exec a few intructions
after the selection timeout is posted but the number executed isn't
reliable. So wait for MSG_OUT rigth after the select so that the state of
the script when the interruption is handled is known.
 1.3 22-Apr-2002  bouyer Add the led_on/led_off script fragments.
 1.2 22-Apr-2002  bouyer Add support for tagged queuing to esiop (256 tags per device).
For this add another indirecton: the DSA in the LUN table points to
a table of DSA indexed by the tag number when tagged command is in use.
For non tagged command, the LUN DSA still points to the tables describing the
xfer directly.
 1.1 21-Apr-2002  bouyer First cut at a esiop driver (enhanced siop). Doesn't implement tagged queuing
yet.
If is restricted to SIOP which implement the load/store instruction, and
has 10 scratch registers (basically, 825 and newer, possibly 770).
It implements a different interface between host and script, using a real
ring for command starts, and improved support for reconnect which will allow
256 tag per device. It uses interrupt on the fly to signal complete command,
which allows several commands to be serviced per interrupt and doesn't require
the script to stop to signal command completion.
 1.13.8.3 06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.13.8.2 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.13.8.1 02-May-2002  jdolecek file esiop.ss was added on branch kqueue on 2002-06-23 17:47:18 +0000
 1.13.6.3 17-Sep-2002  nathanw Catch up to -current.
 1.13.6.2 20-Jun-2002  nathanw Catch up to -current.
 1.13.6.1 02-May-2002  nathanw file esiop.ss was added on branch nathanw_sa on 2002-06-20 03:45:14 +0000
 1.13.4.4 14-Dec-2005  jmc Pullup via patch (requested in ticket #5957 by bouyer)
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0. PR#31990
 1.13.4.3 17-Mar-2005  tron Pull up revision 1.18 (requested by bouyer in ticket #1750):
when an unexpected disconnect occurs only compute the resid; do the
real save data pointers when we get the message (or rather, at disconnect
time following the message).
Factor out code to do this, and to deal with xs->resid, in siop_common.c.
 1.13.4.2 17-Mar-2005  tron Pull up revision 1.17 (requested by bouyer in ticket #1749):
Properly compute xs->resid, instead of assuming it'll always be 0 when
a command is done.
 1.13.4.1 15-Aug-2003  tron Pull up revision 1.15 (requested by bouyer in ticket #1399):
Properly handle messages that we get at reconnect time (other than
SIMPLE_Q_TAG). Some drives start sync/wide negotiation at reconnect time.
Problem reported and fix tested by Andreas Wrede.
 1.13.2.1 31-Aug-2002  gehenna catch up with -current.
 1.14.6.5 11-Dec-2005  christos Sync with head.
 1.14.6.4 04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.14.6.3 21-Sep-2004  skrll Fix the sync with head I botched.
 1.14.6.2 18-Sep-2004  skrll Sync with HEAD.
 1.14.6.1 03-Aug-2004  skrll Sync with HEAD
 1.16.4.3 01-Dec-2005  riz Pull up following revision(s) (requested by bouyer in ticket #10168):
sys/dev/ic/siop.c: revision 1.79 via patch
sys/dev/ic/siopvar_common.h: revision 1.33 via patch
sys/dev/ic/esiopvar.h: revision 1.13 via patch
sys/dev/ic/esiop.c: revision 1.34 via patch
sys/dev/microcode/siop/esiop.ss: revision 1.20 via patch
sys/dev/ic/siopvar.h: revision 1.22 via patch
sys/dev/microcode/siop/siop.ss: revision 1.20 via patch
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0.
Problem reported and patch tested by edwin, Roy Bixler and YAMAMOTO Takashi.
Fix kern/31990 by YAMAMOTO Takashi.
 1.16.4.2 11-May-2005  snj branches: 1.16.4.2.2;
Pull up revision 1.18 (requested by bouyer in ticket #1365):
when an unexpected disconnect occurs only compute the resid; do the
real save data pointers when we get the message (or rather, at disconnect
time following the message).
Factor out code to do this, and to deal with xs->resid, in siop_common.c.
 1.16.4.1 11-May-2005  snj Pull up revision 1.17 (requested by bouyer in ticket #1364):
Properly compute xs->resid, instead of assuming it'll always be 0 when
a command is done.
 1.16.4.2.2.1 01-Dec-2005  riz Pull up following revision(s) (requested by bouyer in ticket #10168):
sys/dev/ic/siop.c: revision 1.79 via patch
sys/dev/ic/siopvar_common.h: revision 1.33 via patch
sys/dev/ic/esiopvar.h: revision 1.13 via patch
sys/dev/ic/esiop.c: revision 1.34 via patch
sys/dev/microcode/siop/esiop.ss: revision 1.20 via patch
sys/dev/ic/siopvar.h: revision 1.22 via patch
sys/dev/microcode/siop/siop.ss: revision 1.20 via patch
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0.
Problem reported and patch tested by edwin, Roy Bixler and YAMAMOTO Takashi.
Fix kern/31990 by YAMAMOTO Takashi.
 1.18.6.1 19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.18.4.1 29-Apr-2005  kent sync with -current
 1.19.10.1 22-Nov-2005  yamt sync with head.
 1.19.4.1 21-Jun-2006  yamt sync with head.
 1.19.2.1 21-Nov-2005  tron Pull up following revision(s) (requested by bouyer in ticket #973):
sys/dev/ic/siop.c: revision 1.79
sys/dev/ic/siopvar_common.h: revision 1.33
sys/dev/ic/esiopvar.h: revision 1.13
sys/dev/ic/esiop.c: revision 1.34
sys/dev/microcode/siop/esiop.ss: revision 1.20
sys/dev/ic/siopvar.h: revision 1.22
sys/dev/microcode/siop/siop.ss: revision 1.20
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0.
Problem reported and patch tested by edwin, Roy Bixler and YAMAMOTO Takashi.
Fix kern/31990 by YAMAMOTO Takashi.
 1.20.74.1 11-Mar-2010  yamt sync with head
 1.17 21-Apr-2022  andvar s/substract/subtract/ in comments and error message.
s/obtainted/obtained/ in one comment.
 1.16 21-Oct-2009  snj Drop 3rd and 4th clauses (except on files where copyright is shared
with UC, in which case only the ad clause has been removed). Approved
by mhitch@ (copyright holder).
 1.15 11-Dec-2005  christos branches: 1.15.74;
merge ktrace-lwp.
 1.14 11-Feb-2005  simonb White space nit- don't put a space before/after increment/decrement
operators.
 1.13 16-May-2004  bouyer branches: 1.13.4; 1.13.6;
Make it compile with recent compilers.
 1.12 14-Jul-2003  lukem branches: 1.12.2;
add missing __RCSID()
 1.11 06-Apr-2003  tsutsui branches: 1.11.2;
Tweak siop scripts assembler for new oosiop.
 1.10 21-Apr-2002  bouyer branches: 1.10.4;
- handle INTFLY (interrupt on the fly) command
- hanlde set/clear carry
- handle shl, shr (shift left and rigth) and xor operators
 1.9 20-Apr-2002  bouyer Fix scratchd2 address.
 1.8 17-Apr-2002  bouyer Really use a JUMP for NOP, not a block move.
 1.7 05-Dec-2001  fredette Added support for the Symbios/NCR 53c700 SCSI controller.
This chip is very similar to the 53c710, except that it's
missing a few registers, doesn't do relative jumps and
doesn't have the table-indirect addressing mode.

I have checked that this still generates the same output
on the existing scripts for the other chips.
 1.6 29-Apr-2001  tsutsui branches: 1.6.2;
Correct register address map for 53c710.
 1.5 23-Oct-2000  bouyer branches: 1.5.2; 1.5.4;
Allow conditionnal branch like "JUMP foo, IF FALSE"
The branch will never be taken as is, but the driver can patch the script.
 1.4 18-Oct-2000  bouyer Fix off by one error when using RETURN, WHEN/IF ...
 1.3 09-Oct-2000  bouyer Emit a warning when a symbol is undefined.
 1.2 25-Apr-2000  bouyer branches: 1.2.4;
- Add support for NOP instruction
- fix dsp value for second operand of memory move, so that patch list will be
correct.
 1.1 21-Apr-2000  bouyer Script assembler for the NCR 53c7xx/8xx scsi controller. Initial work
done by Michael L. Hitch, support for the 8xx and some improvements
by me.
 1.2.4.1 15-Dec-2000  he Pull up revisions 1.3-1.5 (requested by bouyer):
Allow conditional branch like "JUMP foo, IF FALSE" (that the
driver can later patch). Bug fixes and syntax checking improvement.
 1.5.4.3 20-Jun-2002  nathanw Catch up to -current.
 1.5.4.2 08-Jan-2002  nathanw Catch up to -current.
 1.5.4.1 21-Jun-2001  nathanw Catch up to -current.
 1.5.2.2 20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
A i386 GENERIC kernel compiles without the siop, ahc and bha drivers
(will be updated later). i386 IDE/ATAPI and ncr work, as well as
sparc/esp_sbus. alpha should work as well (untested yet).
siop, ahc and bha will be updated once I've updated the branch to current
-current, as well as machine-dependant code.
 1.5.2.1 23-Oct-2000  bouyer file ncr53cxxx.c was added on branch thorpej_scsipi on 2000-11-20 11:42:06 +0000
 1.6.2.2 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.6.2.1 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.10.4.1 19-Mar-2005  jmc Pullup patch (requested by tron in ticket #5713)

Fix this to build with GCC 3.3.x.
 1.11.2.4 15-Feb-2005  skrll Sync with HEAD.
 1.11.2.3 21-Sep-2004  skrll Fix the sync with head I botched.
 1.11.2.2 18-Sep-2004  skrll Sync with HEAD.
 1.11.2.1 03-Aug-2004  skrll Sync with HEAD
 1.12.2.1 20-May-2004  tron Pull up revision 1.13 (requested by bouyer in ticket #348):
Make it compile with recent compilers.
 1.13.6.1 12-Feb-2005  yamt sync with head.
 1.13.4.1 29-Apr-2005  kent sync with -current
 1.15.74.1 11-Mar-2010  yamt sync with head
 1.3 06-Apr-2003  tsutsui Regen scripts for new oosiop.
 1.2 07-Jul-2002  fredette Regen.
 1.1 05-Dec-2001  fredette branches: 1.1.2; 1.1.4; 1.1.12; 1.1.14;
Generated from oosiop.ss rev. 1.1:
Initial compiled script for 53c700.
 1.1.14.1 17-Mar-2005  tron Regen for ticket 1749.
 1.1.12.1 15-Jul-2002  gehenna catch up with -current.
 1.1.4.3 06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.1.4.2 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.1.4.1 05-Dec-2001  thorpej file oosiop.out was added on branch kqueue on 2002-01-10 19:56:11 +0000
 1.1.2.3 01-Aug-2002  nathanw Catch up to -current.
 1.1.2.2 08-Jan-2002  nathanw Catch up to -current.
 1.1.2.1 05-Dec-2001  nathanw file oosiop.out was added on branch nathanw_sa on 2002-01-08 00:30:54 +0000
 1.2 06-Apr-2003  tsutsui Add MI NCR/Symbios 53c700 SCSI driver.
This "oosiop" driver was originally written by Shuichiro URATA
for arc port, and then it was modified by me to make it work
also on hp700.

This driver has been tested on my NEC Express5800/240 with 53c700-66
for several months, and also tested on HP9000 735/125 with 53c700
(though current hp700 port has been broken since SA merge).
Both sync transfer and disconnect/reselect work fine,
but tagged queuing is not implemented yet.
 1.1 05-Dec-2001  fredette branches: 1.1.2; 1.1.4;
New script for the Symbios/NCR 53c700 SCSI controller.
This is closely related to osiop.ss, the script for the
53c710.
 1.1.4.2 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.1.4.1 05-Dec-2001  thorpej file oosiop.ss was added on branch kqueue on 2002-01-10 19:56:12 +0000
 1.1.2.2 08-Jan-2002  nathanw Catch up to -current.
 1.1.2.1 05-Dec-2001  nathanw file oosiop.ss was added on branch nathanw_sa on 2002-01-08 00:30:54 +0000
 1.1 30-Apr-2001  tsutsui branches: 1.1.2; 1.1.18;
Generated from osiop.ss rev. 1.1:
Initial compiled script for 53c710.
 1.1.18.1 17-Mar-2005  tron Regen for ticket 1749.
 1.1.2.2 21-Jun-2001  nathanw Catch up to -current.
 1.1.2.1 30-Apr-2001  nathanw file osiop.out was added on branch nathanw_sa on 2001-06-21 20:04:14 +0000
 1.3 12-Dec-2016  maya acknowleg -> acknowledg, proceedure -> procedure.
only comments were changed.

from miod
 1.2 21-Oct-2009  snj branches: 1.2.22; 1.2.40; 1.2.44;
Drop 3rd and 4th clauses (except on files where copyright is shared
with UC, in which case only the ad clause has been removed). Approved
by mhitch@ (copyright holder).
 1.1 30-Apr-2001  tsutsui branches: 1.1.2; 1.1.126;
Add a MI driver for the Symbios/NCR 53c710 SCSI controller.
This is based on amiga's siop driver, but converted to use
bus_space(9) functions and modified to fit bus_dma(9) framework.

Currently tested on NetBSD/arc with jazzio 53c710 SCSI,
which really requires bus_dma(9) functions :-)
Sync transfers and disconnect/reconnect are also working.

TODO:
- Test under more heavy load
- Clean up osiop_checkintr() hander
- Reorganize command queue and sync negotiation handling more suitable
for thorpej-scsipi mid-layer
- Re-think defered interrupt handling for amiga
 1.1.126.1 11-Mar-2010  yamt sync with head
 1.1.2.2 21-Jun-2001  nathanw Catch up to -current.
 1.1.2.1 30-Apr-2001  nathanw file osiop.ss was added on branch nathanw_sa on 2001-06-21 20:04:15 +0000
 1.2.44.1 07-Jan-2017  pgoyette Sync with HEAD. (Note that most of these changes are simply $NetBSD$
tag issues.)
 1.2.40.1 05-Feb-2017  skrll Sync with HEAD
 1.2.22.1 03-Dec-2017  jdolecek update from HEAD
 1.16 18-Nov-2005  bouyer Regen: save offset at disconnect after a data phase without save data pointer.
 1.15 17-May-2004  bouyer branches: 1.15.10; 1.15.12; 1.15.18;
Regen from siop.ss 1.18
 1.14 23-Apr-2002  bouyer branches: 1.14.4; 1.14.10; 1.14.14;
Regen: bump message size to 16 octets.
 1.13 18-Apr-2002  bouyer Regen: add hooks to drive LED via GPIO.
 1.12 07-Dec-2001  fredette Regen.
 1.11 23-Oct-2000  bouyer branches: 1.11.2; 1.11.4; 1.11.6;
Regen
 1.10 19-Oct-2000  bouyer Regen
 1.9 18-Oct-2000  bouyer Regen
 1.8 06-Oct-2000  bouyer Regen
 1.7 06-Oct-2000  bouyer Regen
 1.6 25-May-2000  bouyer branches: 1.6.4;
Regen.
 1.5 15-May-2000  bouyer Regen
 1.4 04-May-2000  bouyer Ops, regen siop.out from the last siop.ss.
 1.3 04-May-2000  bouyer Add a flag hold in scratcha0, set when we're doing a data transfer. Used
for save data pointers.
 1.2 25-Apr-2000  bouyer - 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)
 1.1 21-Apr-2000  bouyer 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'.
 1.6.4.1 15-Dec-2000  he Pull up regenerated file (requested by bouyer):
Speed improvements to the siop driver, and add tagged queueing
support. As a side effect, better handling of some not so common
phase or message sequences.
 1.11.6.2 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.11.6.1 10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.11.4.2 20-Jun-2002  nathanw Catch up to -current.
 1.11.4.1 08-Jan-2002  nathanw Catch up to -current.
 1.11.2.2 20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
A i386 GENERIC kernel compiles without the siop, ahc and bha drivers
(will be updated later). i386 IDE/ATAPI and ncr work, as well as
sparc/esp_sbus. alpha should work as well (untested yet).
siop, ahc and bha will be updated once I've updated the branch to current
-current, as well as machine-dependant code.
 1.11.2.1 23-Oct-2000  bouyer file siop.out was added on branch thorpej_scsipi on 2000-11-20 11:42:08 +0000
 1.14.14.2 01-Dec-2005  riz Regen for ticket 10168.
 1.14.14.1 11-May-2005  snj branches: 1.14.14.1.2;
Regen for ticket 1365.
 1.14.14.1.2.1 01-Dec-2005  riz Regen for ticket 10168.
 1.14.10.4 11-Dec-2005  christos Sync with head.
 1.14.10.3 21-Sep-2004  skrll Fix the sync with head I botched.
 1.14.10.2 18-Sep-2004  skrll Sync with HEAD.
 1.14.10.1 03-Aug-2004  skrll Sync with HEAD
 1.14.4.3 14-Dec-2005  jmc Regen (requested in ticket #5957 by bouyer)
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0. PR#31990
 1.14.4.2 17-Mar-2005  tron Regen for ticket 1750.
 1.14.4.1 17-Mar-2005  tron Regen for ticket 1749.
 1.15.18.1 22-Nov-2005  yamt sync with head.
 1.15.12.1 21-Jun-2006  yamt sync with head.
 1.15.10.1 21-Nov-2005  tron Regen for ticket #973.
 1.21 19-Oct-2009  bouyer Remove closes 3 & 4 from my licence. Lots of thanks to Soren Jacobsen
for the booring work !
 1.20 18-Nov-2005  bouyer branches: 1.20.74;
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0.
Problem reported and patch tested by edwin, Roy Bixler and YAMAMOTO Takashi.
Fix kern/31990 by YAMAMOTO Takashi.
 1.19 27-Feb-2005  perry branches: 1.19.2; 1.19.4; 1.19.10;
nuke trailing whitespace
 1.18 17-May-2004  bouyer branches: 1.18.4; 1.18.6;
when an unexpected disconnect occurs only compute the resid; do the
real save data pointers when we get the message (or rather, at disconnect
time following the message).
Factor out code to do this, and to deal with xs->resid, in siop_common.c.
 1.17 26-Jul-2002  wiz branches: 1.17.6; 1.17.10;
Spell '[Rr]ight' correctly. From Jim Bernard.
 1.16 26-Jul-2002  wiz enouth -> enough.
 1.15 23-Apr-2002  bouyer branches: 1.15.2; 1.15.4;
More copyright fixes, pointed out by Thomas. Thanks !
 1.14 23-Apr-2002  bouyer 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.
 1.13 18-Apr-2002  bouyer Add hooks to drive the activity led via the GPIO pin 1, as required by some
tekram and symbios adapters.
 1.12 23-Oct-2000  bouyer branches: 1.12.2; 1.12.4; 1.12.6;
Rearrange things a bit to have less jumps
Install the core of the scheduler in main script (so it's in RAM when there is
one), and avoid jump in the common case. The command part of the scheduler now
lives in host memory, with tables.
Add template for a tag switch.
 1.11 19-Oct-2000  bouyer Move restore_scntl3 before the lun switch, to ease freeing of unused lun
slots.
 1.10 18-Oct-2000  bouyer Redo the target/lun sw in a better way, and handle queue tag messages.
 1.9 06-Oct-2000  bouyer Fix recurent typo: shed->sched
 1.8 06-Oct-2000  bouyer Handle reselect entirely in script; for this provide a script area,
modified by the driver, which will load the appropriate DSA for a given
target/lun.
 1.7 13-Jun-2000  bouyer branches: 1.7.2;
sheduler->scheduler, as pointed out by Klaus Klein
 1.6 25-May-2000  bouyer branches: 1.6.2;
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.
 1.5 15-May-2000  bouyer - use my standart copyrigth notice
- After reselect, don't clear ack after the IDENTIFY message, this breaks
when the reselecting target has different sync parameters than the previous
one.
 1.4 04-May-2000  bouyer Add a flag hold in scratcha0, set when we're doing a data transfer. Used
for save data pointers.
 1.3 27-Apr-2000  bouyer Add NetBSD RCS Id and copyrigth notice.
 1.2 25-Apr-2000  bouyer - 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)
 1.1 21-Apr-2000  bouyer 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'.
 1.6.2.1 22-Jun-2000  minoura Sync w/ netbsd-1-5-base.
 1.7.2.1 15-Dec-2000  he Pull up revisions 1.8-1.12 (requested by bouyer):
Speed improvements to the siop driver, and add tagged queueing
support. As a side effect, better handling of some not so common
phase or message sequences.
 1.12.6.2 06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.12.6.1 23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.12.4.2 01-Aug-2002  nathanw Catch up to -current.
 1.12.4.1 20-Jun-2002  nathanw Catch up to -current.
 1.12.2.2 20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
A i386 GENERIC kernel compiles without the siop, ahc and bha drivers
(will be updated later). i386 IDE/ATAPI and ncr work, as well as
sparc/esp_sbus. alpha should work as well (untested yet).
siop, ahc and bha will be updated once I've updated the branch to current
-current, as well as machine-dependant code.
 1.12.2.1 23-Oct-2000  bouyer file siop.ss was added on branch thorpej_scsipi on 2000-11-20 11:42:09 +0000
 1.15.4.2 14-Dec-2005  jmc Pullup via patch (requested in ticket #5957 by bouyer)
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0. PR#31990
 1.15.4.1 17-Mar-2005  tron Pull up revision 1.18 (requested by bouyer in ticket #1750):
when an unexpected disconnect occurs only compute the resid; do the
real save data pointers when we get the message (or rather, at disconnect
time following the message).
Factor out code to do this, and to deal with xs->resid, in siop_common.c.
 1.15.2.1 29-Aug-2002  gehenna catch up with -current.
 1.17.10.2 01-Dec-2005  riz Pull up following revision(s) (requested by bouyer in ticket #10168):
sys/dev/ic/siop.c: revision 1.79 via patch
sys/dev/ic/siopvar_common.h: revision 1.33 via patch
sys/dev/ic/esiopvar.h: revision 1.13 via patch
sys/dev/ic/esiop.c: revision 1.34 via patch
sys/dev/microcode/siop/esiop.ss: revision 1.20 via patch
sys/dev/ic/siopvar.h: revision 1.22 via patch
sys/dev/microcode/siop/siop.ss: revision 1.20 via patch
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0.
Problem reported and patch tested by edwin, Roy Bixler and YAMAMOTO Takashi.
Fix kern/31990 by YAMAMOTO Takashi.
 1.17.10.1 11-May-2005  snj branches: 1.17.10.1.2;
Pull up revision 1.18 (requested by bouyer in ticket #1365):
when an unexpected disconnect occurs only compute the resid; do the
real save data pointers when we get the message (or rather, at disconnect
time following the message).
Factor out code to do this, and to deal with xs->resid, in siop_common.c.
 1.17.10.1.2.1 01-Dec-2005  riz Pull up following revision(s) (requested by bouyer in ticket #10168):
sys/dev/ic/siop.c: revision 1.79 via patch
sys/dev/ic/siopvar_common.h: revision 1.33 via patch
sys/dev/ic/esiopvar.h: revision 1.13 via patch
sys/dev/ic/esiop.c: revision 1.34 via patch
sys/dev/microcode/siop/esiop.ss: revision 1.20 via patch
sys/dev/ic/siopvar.h: revision 1.22 via patch
sys/dev/microcode/siop/siop.ss: revision 1.20 via patch
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0.
Problem reported and patch tested by edwin, Roy Bixler and YAMAMOTO Takashi.
Fix kern/31990 by YAMAMOTO Takashi.
 1.17.6.5 11-Dec-2005  christos Sync with head.
 1.17.6.4 04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.17.6.3 21-Sep-2004  skrll Fix the sync with head I botched.
 1.17.6.2 18-Sep-2004  skrll Sync with HEAD.
 1.17.6.1 03-Aug-2004  skrll Sync with HEAD
 1.18.6.1 19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.18.4.1 29-Apr-2005  kent sync with -current
 1.19.10.1 22-Nov-2005  yamt sync with head.
 1.19.4.1 21-Jun-2006  yamt sync with head.
 1.19.2.1 21-Nov-2005  tron Pull up following revision(s) (requested by bouyer in ticket #973):
sys/dev/ic/siop.c: revision 1.79
sys/dev/ic/siopvar_common.h: revision 1.33
sys/dev/ic/esiopvar.h: revision 1.13
sys/dev/ic/esiop.c: revision 1.34
sys/dev/microcode/siop/esiop.ss: revision 1.20
sys/dev/ic/siopvar.h: revision 1.22
sys/dev/microcode/siop/siop.ss: revision 1.20
Some drives disconnect after the last data phase without a save data pointer
message. In such case we would not update resid with the proper value
(eventually resid would not be updated at all if there was only one data
phase). To fix this, have the script save the offset in the data tables at
disconnect time if there was a transfer, and use this to compute the resid
if the current offset is 0.
Problem reported and patch tested by edwin, Roy Bixler and YAMAMOTO Takashi.
Fix kern/31990 by YAMAMOTO Takashi.
 1.20.74.1 11-Mar-2010  yamt sync with head

RSS XML Feed