Commit Graph

85 Commits

Author SHA1 Message Date
thorpej 8068d9eeb2 Handle cases like the following:
- controller calls scsi_done() with error XS_TIMEOUT
	- scsi_done() calls sddone()
	- sddone() calls disk_unbusy()
	- scsi_done() calls controller to retry command (missing the
	  call to disk_busy())
	- controller calls scsi_done()
	- scsi_done() calls sddone()
	- sddone() calls disk_busy(), which panics because of the imbalance.
Bug noticed by Leo Weppleman, who also suggested this fix; pass an additional
boolean argument ("complete") to the device's "done" routine, with a
value of `0' passed from the previous call to "done", and add an additional
call to "done" when the xfer resources are freed.
1996-01-12 22:43:26 +00:00
thorpej 5b39541e48 New generic disk framework. Highlights:
- New metrics handling.  Metrics are now kept in the new
	  `struct disk'.  Busy time is now stored as a timeval, and
	  transfer count in bytes.

	- Storage for disklabels is now dynamically allocated, so that
	  the size of the disk structure is not machine-dependent.

	- Several new functions for attaching and detaching disks, and
	  handling metrics calculation.

Old-style instrumentation is still supported in drivers that did it before.
However, old-style instrumentation is being deprecated, and will go away
once the userland utilities are updated for the new framework.

For usage and architectural details, see the forthcoming disk(9) manual
page.
1996-01-07 22:01:38 +00:00
thorpej 1cd2ca323b Remove a couple of now unneeded assignments. 1995-12-07 21:54:24 +00:00
thorpej b6c6d46a82 In sdminphys(), add a comment about the semantics of the "length" field
in a 6-byte read/write cdb (namely, length == 0 really means 256), and
that we handle this conservatively by limiting the transfer to 255 blocks.
*sigh* One just never knows how a pre-scsi-1 device is going to behave.
1995-12-07 19:46:00 +00:00
thorpej c9895db015 In both cd.c and sd.c:
If the read or write request can fit into a 6-byte cdb, then
	use a 6-byte cdb, otherwise use the 10-byte as before.

In sd.c:
	In sdattach(), make a note if the device is "ancient" (i.e.
	inqbuf.version & SID_ANSII == 0).

	Implement sdminphys(): if the device is "ancient", shorten the
	transfer so it will fit into a 6-byte cdb.

These changes have eliminated the rejected read/write requests on my
Sun 3/60 with 2 ESDI disks behind an Emulex MD21.
1995-12-07 19:11:32 +00:00
mycroft 92221a1399 Return EINVAL if something other than a whole number of blocks is requested. 1995-10-10 02:52:56 +00:00
pk db0107b895 Specify SCSI_DATA_OUT in sddump() (from John Kohl; PR#1482). 1995-09-30 22:57:19 +00:00
thorpej 249cddaaa7 Don't declare Debugger(). It's handled in <sys/systm.h>.
#include <sys/systm.h> where necessary, as suggested by Jonathan Stone.
Fixes PR #1511.
1995-09-26 19:26:48 +00:00
mycroft 8887de9230 opri --> s 1995-08-12 22:58:01 +00:00
mycroft 8a9880e714 Fix oversight in previous. 1995-08-12 21:36:46 +00:00
mycroft 80d7b0695a minphys() functions really should return void. 1995-08-12 20:30:45 +00:00
mycroft 24a5e56396 Use an intermediate variable to shorten label initialization code. 1995-08-05 23:47:52 +00:00
cgd 3301cf82fd update SCSI minphys routines' definitions to match standard minphys()
definition and usage.
1995-07-24 06:55:37 +00:00
mycroft 7263209ce6 Make each disk and tape driver define its own read and write functions.
Deprecate rawread() and rawwrite() completely.  Remove d_strategy from cdevsw to
force the abstraction barrier.
1995-07-04 07:15:28 +00:00
cgd 2a8d6461a8 implement new-style block device dump routine if __BDEVSW_DUMP_OLD_TYPE
not defined, otherwise use an "not implemented" stub.
1995-06-26 05:16:55 +00:00
cgd 011aa68805 looks like some extra ')'s were left in here. 1995-05-03 21:38:57 +00:00
mycroft 1d2f0bce2a Make the byte-shifting code consistent. 1995-05-03 19:38:45 +00:00
mycroft 04e937dcbd Don't boundary check I/O to the `raw' partition. 1995-04-15 05:01:26 +00:00
mycroft 68c8c80929 kernel_pmap --> pmap_kernel() 1995-04-10 16:48:27 +00:00
mycroft 7e2dabf972 Add a missing unlock. 1995-04-01 10:29:41 +00:00
mycroft 1d568eab9a Revamp the locking mechanism slightly. 1995-03-29 23:04:39 +00:00
mycroft b51403f60d Remove the write protect check altogether, and rely on the drive to do it. 1995-03-25 19:45:18 +00:00
mycroft 06d0a67a07 Check for read-only media in open(), not write(). 1995-03-23 12:11:07 +00:00
mycroft 4712cd33dc Rearrange DIOCWDINFO a little; closer to wd.c. 1995-03-23 11:43:09 +00:00
mycroft 02df08a47e Allow DIOCWDINFO even if label is not `writable'. 1995-03-23 11:33:18 +00:00
mycroft e203e49ef5 Correct spelling of `fictitious'. Add patterns for optical memory devices.
From Alistair Crooks.
1995-03-07 21:46:06 +00:00
mycroft 321b00bd07 Some drives don't grok START with LoEj=1, either. 1995-01-30 11:47:56 +00:00
mycroft 0ece1143f6 Set the LoadEject bit when issuing a START. 1995-01-30 11:37:17 +00:00
mycroft 9085638020 Some devices really do require the START before the PREVENT. This makes no
sense.
1995-01-30 11:34:25 +00:00
mycroft 1611df6ae0 Update copyrights. 1995-01-26 12:05:49 +00:00
mycroft b76a328caa Redo the `wait for spin up' code. The Mach 3 method clearly doesn't work.
Also, rearrange the first open sequences a bit; SDEV_OPEN is no longer magic.
1995-01-26 11:56:51 +00:00
mycroft 726fa4e94f Do the PREVENT before the START. 1995-01-23 18:17:22 +00:00
mycroft a6e7fe0d2a If the disk reports a block size of 0, assume it really meant 512. 1995-01-16 21:40:17 +00:00
mycroft 7650bd97fc Always boundary check I/O. 1995-01-13 10:46:32 +00:00
mycroft 8fd135209c Numerous changes. Many bugs fixed, better autoconfig, a few new features. 1994-12-28 19:42:47 +00:00
mycroft 3e7afdbe8a Remove DIOCSBAD handling. It's not actually handled, so why recognize it? 1994-12-16 04:38:30 +00:00
mycroft ca65f2ce5d Remove dkbad.h. 1994-12-14 15:17:22 +00:00
mycroft cc44b4600c There's no point in bothering to unlock what we didn't lock. 1994-11-23 07:54:15 +00:00
mycroft 95edd299b0 Add still more locking. 1994-11-22 03:23:49 +00:00
mycroft fd32202948 Replace dev_unit with device_softc in scsi_link. Change argument to foostart()
to void*.
1994-11-21 10:39:09 +00:00
mycroft 5bd4115690 Add some missing locking, and some general cleanup. 1994-11-20 22:36:43 +00:00
deraadt 38483bbbf0 Enough Chinese torture already 1994-11-15 23:00:23 +00:00
cgd 6ac2bbfc35 be more careful with types, also pull in headers where necessary. 1994-10-30 21:43:03 +00:00
mycroft e5d974c51f First cut at making user-level SCSI commands work. This is untested.
Partly from John Brezak.
1994-10-20 20:31:23 +00:00
mycroft b8ab5f65d1 Back out change to print geometry from label at boot; can't do this reliably. 1994-10-20 16:54:44 +00:00
mycroft cd66683989 openpart -> openmask 1994-10-20 14:08:07 +00:00
mycroft bb12b9c8a2 Trivial stylistic changes. 1994-10-20 14:05:08 +00:00
mycroft b1568d887e Use the block size in the label in most cases. 1994-10-20 13:50:38 +00:00
mycroft d5b3572f5c Various changes:
* Get rid of unused `partflags'.
* Use dk_openpart, and remove `openparts'.  Also, allow an open on both
the block and characters devices at the same time.
* If there was a label, print the geometry from the label at boot time.
* Turn `wlabel' into a flag, and *don't* set it automatically in
DIOCWLABEL; disklabel(8) does that.
Other minor changes.
1994-10-20 13:33:36 +00:00
cgd 49c34d3337 move arch dependence to archs. clean up a bit. deal with weird MAXPARTITONS. 1994-10-14 18:26:22 +00:00