Darren Reed <darrenr@vitruvius.arbld.unimelb.edu.au> in PR #1227.
This change is slightly different than the one submitted by Darren in
that the DIRECTED_BROADCAST compile-time option will behave like it used
to so that existing configurations utilizing it won't have to change.
- 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.
size of the resulting loader. The read_inode() function now returns the
result of the strategy function instead of success in all cases (ufs.c).
Fixes pr#1817
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!)
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!)
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).
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).
- 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.