Commit Graph

233 Commits

Author SHA1 Message Date
thorpej ef3500b579 Attempt to work around a hardware bug that screws up DMA on the 4/100.
Apparently, some early 4/100 DMA controllers do illegal memory access on
large ( >= NBPG ) transfers at the end of the transfer.  This appears
as SI_CSR_DMA_BUS_ERR in the csr.  To work around this, we simply
transfer the (up to 3) missing bytes from the bpr.  We were doing this
anyway, so the work-around is to ignore the bus error.

BUT!  I goofed when I implemented the "left-over byte" code for the sw!
It *should* be correct now.  Keep metrics (acceeible via DDB) on the number
of 1, 2, and 3 byte clean-ups, as well as the number of "clean" transfers,
just so we can get a clearer picture.

Thanks to Andrew Gillham <gillham@whirlpool.com> for noticing this!
1996-02-23 07:24:45 +00:00
mycroft 291267e40c Implement SDEV_AUTOSAVE. 1996-02-22 23:35:04 +00:00
thorpej c86505a6a5 If we get a transfer with the SCSI_POLL flag set, don't use DVMA. We
only get these during autoconfiguration and during crash dumps.  During
autoconfiguration, the transfers are small enough that DVMA won't be used
anyway.  However, using DVMA during a crash dump can be dangerous,
depending on the nature of the panic, so we avoid it.
1996-02-22 07:25:05 +00:00
thorpej 2f132eb5e7 Bring in Gordon's fix from the sun3 port:
Correct the DMA transfer count when the target disconnects before
	the whole transfer is completed.  (Affects VME writes)
	Reselect now works on the VME si board!
1996-02-22 07:14:53 +00:00
thorpej a246f6c835 Fixup some RCS ids. 1996-02-22 06:50:49 +00:00
pk 66fedbbe19 Correct format in a printf(). 1996-02-21 10:21:14 +00:00
chuck adeed1d823 minor clean up: revise locations of disk_busy/disk_unbusy calls to match xd.c 1996-02-21 03:36:51 +00:00
pk b9de283ae6 Fix typo; pointed out by jtk. 1996-02-19 10:30:09 +00:00
thorpej a9012450ec Fix bug in bwtwounblank() ... didn't have code to enable video on sun4/200
obio framebuffer.  Noticed when my 4/260 dropped into DDB and the screen
didn't unblank.  Pull all of the video enable/disable into functions so
this mishap doesn't happen again.
1996-02-19 00:15:46 +00:00
pk 54bd5c6954 Fix ANSI prototype goof (from Openbsd).
Add explicit return type to most functions.
V3 PROM console support.
1996-02-13 22:49:48 +00:00
pk 3237aa23d2 Avoid compiler warning. 1996-02-12 21:05:18 +00:00
pk d5ddbf99ab Separate DMA and SCSI routines more. 1996-02-12 15:59:51 +00:00
thorpej 8a6ad45eed In fdcretry(), if we're not using implied seeks, set the state to DOSEEK
rather than SEEKCOMPLETE before retrying the operation.  If implied seeks
are being used, the state is set to DOIO (no change).  This is why I
couldn't reproduce the disk_unbusy() panic on my SS2; it uses implied
seeks.  Patch from John F. Woods <jfw@jfwhome.funhouse.com>
1996-02-10 18:37:36 +00:00
chuck 2accbfeefb - moved disk_busy() call from xdstrategy() to xdc_startbuf()
[prevents disk_unbusy panic when disk is loaded (if no
	free IOPBs, xdstrategy() would queue the buffer for pickup
	by xdcintr() but xdcintr() would never call disk_busy().
	xdc_startbuf() is a better place since all bufs are routed
	through here]   problem detected by girish@dworkin.wustl.edu,
	diagnosed and corrected by me.
- move disk_unbusy() call in xdc_remove_iorq() before the call to
	XDC_FREE() [don't want to access a data structure that was just put
	on a free list]
1996-02-08 04:40:33 +00:00
pk 52c068d6e6 Be sure to reset the chip when relection fails to prevent corrupting data. 1996-02-06 02:03:46 +00:00
mycroft 88e512b693 LOCORE -> _LOCORE 1996-02-01 22:28:24 +00:00
thorpej b97cbfb606 Implement DIOCLOCK. It's a no-op in this driver. 1996-01-30 18:31:05 +00:00
gwr 427556aeab Move struct definitions to MD code. 1996-01-24 19:52:57 +00:00
thorpej 353f4388fb Use a shutdownhook to make sure the drive motor is turned off
at halt/reboot time, as suggested by Perry Metzger.
1996-01-16 19:35:06 +00:00
thorpej 8a5504241e Three distinct changes:
- Better disklabel handling.  While a disklabel isn't used
	  in the driver, some versions of the OpenPROM insist on
	  one being present in order to boot from floppy.  These
	  changes provide a default label (in a way similar to how
	  the SCSI disk driver provides a default) so that a user
	  can more easily place the label on the disk.

	- Fix semi-bug in bootpath handling.  It appears as if the
	  bootpath can appear in a couple of formats: "/fd@0,0", which
	  is what bootpath_fake() creates on v0 proms and may be
	  passed by some v2 proms, and "/fd0" which is what the
	  v2 prom on my SS2 passes.  We now handle both formats.

	- Use a mountroot hook to eject the floppy and wait for
	  the user to insert a filesystem floppy if we're the boot/root
	  device.
1996-01-15 00:14:42 +00:00
chuck ef895a47d4 - call mapiodev() with sizeof(struct xyc) rather than ra_len (which is
zero since xycmatch no longer sets it).   [if you call mapiodev()
	with a zero size it will reuse the KVA it returns, swiping the device
	out from under you!]
 - make xyc->iopbase point in the kernels DVMA space rather than at the
	normal malloc'd KVA.   this isn't compatable with sun4m [doesn't
	have a kernel DVMA space] and will need to be changed later (XXX).
 - move disk_attach() to before reading the disk label as per Jason.
	otherwise we are reading into an unallocated buffer (oops!)
1996-01-13 03:42:40 +00:00
chuck ca80988399 - call mapiodev() with sizeof(struct xdc) rather than ra_len (which is
zero since xdcmatch no longer sets it).   [if you call mapiodev()
	with a zero size it will reuse the KVA it returns, swiping the device
	out from under you!]
 - make xdc->iopbase point in the kernels DVMA space rather than at the
	normal malloc'd KVA.   this isn't compatable with sun4m [doesn't
	have a kernel DVMA space] and will need to be changed later (XXX).
 - move disk_attach() to before reading the disk label as per Jason.
	otherwise we are reading into an unallocated buffer (oops!)
1996-01-13 03:35:53 +00:00
chuck dfbaa33f05 we handle all our mappings, so don't have obio.c do any for us
(i.e. don't set ra->ra_len in the match function).
1996-01-12 23:08:57 +00:00
chuck 3ef3001bec nuke uneeded variable in match function. 1996-01-12 23:06:23 +00:00
chuck 93cc1b33e1 we no longer need to add in the offset to the mapped VA to get the correct
device address (bus_tmp, bus_map, and mapiodev now do this for us).

also, we handle all our mappings, so don't have obio.c do any for us
(i.e. don't set ra->ra_len in xycmatch).
1996-01-12 22:45:04 +00:00
chuck d14b5cb80e we no longer need to add in the offset to the mapped VA to get the correct
device address (bus_tmp, bus_map, and mapiodev now do this for us).

also, we handle all our mappings, so don't have obio.c do any for us
(i.e. don't set ra->ra_len in xdcmatch).
1996-01-12 22:43:55 +00:00
chuck b5ddd8431d dmamatch never added in the offset for the dma registers to the VA,
and thus probed the wrong address on the 4/300 (but it worked because
it was probing the esp0 registers!).

now that bus_tmp() adds the offset in for us [as of obio 1.19] i
discoved that a byte access to the dma registers is not allowed.
so, i've change probeget to use a word access.
1996-01-12 22:03:39 +00:00
chuck afb262e8da improved handling of mapping of devices who's registers do not reside on
page boundaries:
 - change bus_tmp() to include the offset from the start of page in the
        returned KVA [rather than forcing each driver to add it back in
        individually]
 - changed bus_map() to include the offset from the start of page in the
        the returned value if a mapping is found in the PROM's KVA area
 - clarified a few comments
1996-01-12 21:44:16 +00:00
thorpej 43b4486bb3 Balance calls to disk_busy() and disk_unbusy() properly to avoid
dk_busy < 0 panics.  Count seeks.
1996-01-12 00:19:29 +00:00
pk 7430f70694 Return `no error' after ejecting; per Jason. 1996-01-11 21:18:40 +00:00
pk 5035080586 Correct page frame calculation after mapdev() interface change. 1996-01-11 11:19:01 +00:00
thorpej 926f925088 Re-arrange slightly the si_options special case for the `sw'. 1996-01-09 02:36:58 +00:00
thorpej 3cb556defb Disable DMA by default on the 4/100 `sw' controller. I've had a couple
of reports of data corruption, and would rather be slow and safe until
the DMA bug is fixed.
1996-01-09 02:06:50 +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 d35bd4bb23 Fix a typo that would bite if the interrupt level were wildcarded in the
kernel config file.
1996-01-04 00:20:19 +00:00
thorpej 6d6c652f18 New driver for the Sun SCSI-3 VME and 4/100-series SCSI "Weird" controllers,
utilizing David Jones' new MI NCR 5380 code.  Ported from the sun3 ncr_si.c
and "sw" DMA code written by me.

This driver contains user-configurable "options", which can be set via the
"flags" directive in the kernel configuration file.  By default, only
DMA is enabled.  DMA completion interrupts and reselection may be enabled
by setting the appropriate bits with "flags".  See si.c for details.

Note that DMA completion interrupts and reselection don't yet work on the
4/100 controller.  I don't know why, and it's unlikely that I'll have
the opportunity to find out any time soon.  DMA does work, and results
in a considerable performance increase.

DMA, DMA completion interrupts, and reslection all work on my 4/260 (VME)
system with modern SCSI-II disks.
1996-01-01 22:40:56 +00:00
mycroft 3da4b2a160 The IST_* and IPL_* constants are not bus-specific; don't treat them as such.
Change splimp -> splnet in Ethernet, ARCnet, and FDDI drivers.
1995-12-24 02:29:35 +00:00
pk 644c68a706 Towards machine independency, per cgd: macros to access hardware registers. 1995-12-18 23:58:31 +00:00
pk 0d1981416d Adapt to changed mapiodev() interface. 1995-12-11 12:43:14 +00:00
pk f840d96cfe Adapt to changed mapiodev() interface.
Use new DVMA routines.
1995-12-11 12:40:20 +00:00
pk 7987c7fce9 Use `def_width' and `def_height' as default values when getting rom properties. 1995-12-10 22:55:32 +00:00
mycroft 494a9b9eb9 Use the MI LANCE code. 1995-12-10 10:15:06 +00:00
pk 480398f38e dvma_malloc => malloc/dvma_mapin. (not the most elegant solution, but it'll
have to do for now).
1995-12-06 22:40:22 +00:00
pk 8a1606d530 Don't return `XS_DRIVER_STUFFUP' too easily; this can hose buffer cache
writes. Say XS_TIMEOUT in stead so the scsi code will retry.
1995-12-01 01:00:55 +00:00
pk ee08e9085b Extend the size of the "soft" FIFOs which reportedly reduces the number
of FIFO overflows on high baud rates.
However, doing so on all 4 ports would cost a whopping 64KB (at 4096 entries
per FIFO) of kernel memory. So, the FIFOs are now allocated at attach time
allowing the size for the keyboard and mouse ports to be reduced (to 128)
which should be adequate for the 1200 baud they use.
1995-11-29 23:41:31 +00:00
pk 12bfe2e68e Must change `u_long' to `u_int32_t' as Jason pointed out. 1995-11-29 22:03:53 +00:00
pk e9a919b88f Code from Jason to better configure /dev/fb. 1995-11-29 01:45:36 +00:00
pk ce474272f1 Prevent synch negotiation on ESP100 chips 1995-11-28 22:49:31 +00:00
pk 9bf3251e46 Lots of major and minor bug fixes and changes.
- properly do MSG_IN handshaking, so we can actually receive multi-byte msgs.
- do synch negotiation (now that the above works).
- handle disconnects.
There are a few trial-and-error bits at points where the docs I have are
particularly ambiguous about the state of chip and/or SCSI bus.

Things to do:
- more cleanup
- deal with MSG_OUT phase better
- keep some "config reg 3" bits per target (ie. FASTCLK and FASTSCSI).
1995-11-28 20:49:12 +00:00
pk def161af38 Careful with signed chars (caddr_t *!).
Merge in 1.1 changes.
1995-11-28 20:26:59 +00:00