Age | Commit message (Collapse) | Author |
|
Tom: I did not commit a couple of your changes.
i did not include some punctuation fixes (full stops, etc.)
mnemorable -> mnemonic: i decided memorable was probably better
instrunctions -> instruction: i kept the plural
|
|
|
|
bzero() the sgl before fillig it up;
avoid reading registers extra times where we have a copy in the vars;
on scsi_cmd timeout call siop_handle_reset() directly instead of
relying on the RST interrupt which does not happen always it semms;
use bus_dmamap_load_raw().
krw@ ok
|
|
mapped and sync'ed appropriately, and is guaranteed to be in one
memory page.
Eliminate now unused dmamap_cmd and rs_cmd fields.
Fix another error message (adding active command to reset list) so
that it includes the adapter name.
Add missing letoh32() calls to debug code.
The evils of directly mapping *xs->cmd were pointed out by Mickey
during osiop development. In particular, *xs->cmd may start on one
memory page and run into the next. Since the dma logic in most
cards/drivers (including siop) only allocates one address/size pair to
map *xs->cmd, parts of a command could be lost or corrupted.
The large number of 6 byte dma mappings noted long ago by someone
(Henric?). This change reduces the dma mapping activity per i/o by
1/3 to 1/2 and may give a performance boost of some kind.
Successfully tested on i386, sparc64 (ultra30 - thanks Jolan,
blade100), macppc and alpha.
Unfortunately these changes don't fix the Blade1000 siop problems.
**NOTE** If scsi_generic is ever upped to 16 bytes the offsets in
siop.ss must be updated!
|
|
TARST_ASYNC if a bus reset occurred while in TARST_PROBING.
Improve DMA IRQ error message to always display the adapter name.
Correct an indent botch.
All of which doesn't help the Blade1000 boot, though it is now both
less noisy and more informative.
|
|
a) Set xs->status rather than cmd_tables->status because there will be
no interrupt processing to move it from cmd_tables->status to
xs->status.
b) Set cmd_c.status to correct value (CMDST_SENSE_DONE) when an active
sense command is reset.
c) Don't put a reset command from the ready queue into the free_list
twice, once in siop_scsicmd_end() and once manually.
Condition a) meant that the scsi layer was seeing successfully
completed i/o's (xs->error == XS_NOERROR) when they were in fact reset
and should have had xs->error == XS_TIMEOUT or xs->error == XS_RESET.
This meant lost data on output, and random or zero'ed data on input.
Condition b) meant that the wrong bus_dmamap_sync() was called, though
the actual action was apparently identical.
Condition c) meant that the free_list could become corrupt.
The problem was discovered by pb@ on a heavily loaded server that
experienced timeouts. This fix was tested by pb@ and henric@ to prove
it did not affect normal processing. If nothing else it will provide
better error messages if the problem is ever encountered again.
Probably a good candidate for -stable if pb@ can successfully
reproduce his timeout problems and not have his server crash.
|
|
In combination with previous openings fix makes Niklas happy. Probably
fixes some negotiation bugs too.
Another good candidate for -stable.
|
|
Assign a fixed value (SIOP_NTAGS) to the openings field in the
adapter's template sc_link, rather than incrementing the value as
cbd's are allocated. The template value is the one copied into each
device's sc_link structure as it is created.
Incrementing the value meant that each new device got a larger value
for openings. The total number of openings claimed by devices on a
bus soon exceeded the number of cbd's available. e.g. after 5
devices there would be 132 allocated cbd's, but the total number of
openings claimed by devices would be 300.
A heavy i/o load on an adapter with multiple devices could have
caused the upper scsi layer to try to queue more i/o's than the
driver had cbd's to store them in. Such i/o's would fail with EIO if
they were started with SCSI_NOSLEEP (e.g. sdstart()) or were not
queued within the specified retry limit. I/o's for devices 'later'
on the bus would be more likely to trigger this behaviour, due to
their inflated openings values.
This is good candidate for -stable.
|
|
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.
|
|
differences, undoing whitespace, spelling, etc. changes
and adopting the NetBSD code instead of equivalent home
grown code for PPR negotiation, etc.
siop.c 1.21 -> 1.64
siop_common.c 1.12 -> 1.30
siopreg.h 1.7 -> 1.13
siopvar.h 1.13 -> 1.18
siopvar_common.h 1.10 -> 1.21
ncr53cxxx.c 1.5 -> 1.10
siop.ss 1.12 -> 1.17
siop_pci.c 1.8 -> 1.11
siop_pci_common.c 1.6 -> 1.17
siop_pci_common.h 1.2 -> 1.4
Many fixes, add 1010-66 support, restructure things to prepare for
addition of esiop, osiop and oosiop drivers.
tested on various archs by art@, millert@, wilfried@, jason@,
Dan Weeks.
ok deraadt@.
|
|
My filesystem has been chopped to pieces.
|
|
noticed by aaron@, recommended by deraadt@
|
|
|
|
OK krw@
|
|
Most work by Wilbern Cobb <vedge@csoft.org> with some fixes from me, mickey@
and drahn@.
|
|
lacked it (scr_table).
Also remove scr_table_t typedef and just use 'struct scr_table' to be
consistant with all other structures.
|
|
at probe time, rather than allocating them dynamically as
SCSI commands are started.
This should eliminate one possible way of calling bus_dmamem_map()
while in interrupt context.
Potential problem spotted by Art@.
Inspired by changes to achieve same effect in NetBSD by bouyer@.
|
|
to the quirks table.
These latest changes, triggered by problems Dan Weeks was having
and developed with a lot of testing by Dan, should ensure that
siop is a) using the quirks of the correct LUN during wide/sync
negotiations and b) calling siop_add_dev() for all LUN's which
return valid information from an INQUIRY command.
|
|
using *_bus_dmamap_sync() defines that are defined appropriately
depending on __HAS_NEW_BUS_DMAMAP_SYNC.
Most of the code changes are simple reversions to the original NetBSD
code.
Slip in a siop_script_sync() instead of a manually done code section.
|
|
ugly INQUIRY snooping but avoids adding even uglier #ifdef's to turn
off stuff, e.g. tagged queuing.
Add two disk drives now known to lie about supporting tagged queuing
to quirks table. One from millert@ (<MICROP, 4421-07 0329SJ, 0329>)
and one from Hakan Olsson (<SEAGATE, ST150176LW, 0002>).
Add field 'inquiry_flags2' to struct scsi_link to hold flags2 field
from struct scsi_inquiry_data. These flags relate to SCSI-3 specific
features.
Clean up some logic, eliminating need for TARF_PPR flag.
|
|
Okay millert@, like previous commit.
|
|
sc_link->device_softc not necessarily available for devices like cd's
that don't issue SCSI commands after INQUIRY during probe, leaving
negotiation triggering to next LUN. Spotted by Nikolay Sturm.
Fixing this is not worth the effort and added complexity for a
cosmetic improvement.
Keep code cleanups done at the same time, and add a typo fix
(destiation -> destination).
|
|
i.e. calling siop_print_info() immediately for async devices.
With the change to use xs->sc_link as parameter to siop_print_info()
this immediate call wouldn't work as the sc_link is not initialized
until AFTER the return from processing the INQUIRY command.
So, just use the default negotiation logic which is triggered by the
next command to be handled.
|
|
adapter's siop_softc. This allows easy access to the dv_xname of the
device whose negotiation results are being reported. This makes boot
probe and subsequent log messages clearer.
e.g. message will now read
sd0: negotiated tagged 16 bit 20 MHz 16 REQ/ACK offset xfers
instead of
siop0: target 0 now using tagged 16 bit 20 MHz 16 REQ/ACK offset xfers
Clean up siop_print_info() a bit as long as we are there.
|
|
a) meaningful but not voluminous debug info is printed
and clearly associated with the offending siop bus.
b) instead of panic'ing, reset the scsi bus and return.
This problem was only seen under heavy load on powerpc.
Plus fix one typo (exeption -> exception).
ok deraadt@
|
|
Add support for PPR negotiations and DT transfers,
and the preservation and restoration of the
SCNTL4 register which controls Ultra3 transfers.
Redo sync lookup, since the same period factor
can mean two things depending on whether you are
using DT or ST. Keep a minimum allowed ST period
factor, and a minimum allowd DT period factor for
each adapter.
Currently NO support for QAS or IUS or AIP.
|
|
2) Negotiate and report wide/sync only after INQUIRY
results known.
3) Clean up wide/sync negotiation code a bit, ensuring
that an agressive target does not prematurely force
negotiation before the INQUIRY is done. Seen by millert@.
4) Ensure that a wide negotiation always resets the
sync settings to async.
5) Some error message improvements from thorpej@NetBSD.
6) Some KNF.
7) Print wide/sync negotiation results after each
completed negotiation.
8) Print some relevant information just before a panic
that should never happen. But does on PowerPC.
|
|
|
|
it. They might not turn you down. Spotted by drahn@.
|
|
results on one line, during boot polling only.
Force wide/sync negotiations for all targets during boot.
Delete extraneous name field and associated strings that duplicate
info provided in INQUIRY data.
Actually timeout during polling rather than wait forever for
ITSDONE.
Remove unneeded check for SCSI_POLL before calling scsi_done(). Makes
logic conform to other drivers.
|
|
Written for NetBSD by Manuel Bouyer.
Tested with various cards on i386 and alpha.
Outstanding issue: doesn't work with PowerPC yet.
|