Instead of initializing UDMA mode, we turned it off and made sure that
it stays off by turning on the "UDMA enable by SET FEATURES" disable.
The damage was limited by bugs in cookie lookup, and suitable
initialization by some BIOSes. The cookie list has slaves before
masters, and the unit number is ignored when cookies are looked up,
so cookie lookup always finds cookies for slaves and the bug only
clobbers slaves, so the bug was harmless for common configurations
with no slaves or only non-UDMA slaves. UDMA initialization for
masters actually worked if the BIOS turns on the UDMA mode bit and
turns off the "UDMA enable by SET FEATURES" disable.
idiot about testing SA_QUIRK_2FM in samount. Fixed.
Removed the NORRLS quirk (to save quirk space) and left
the behaviour of being quiet about failed reserve/release
(failed due Illegal Request) the same.
Added a SF_QUIET_IR for prevent/allow for the same purposes.
* A function device_printf() to make pretty-printing driver messages easier.
* A function device_get_children() to query the children of a device.
* Generic implementations of BUS_ALLOC_RESOURCE and BUS_RELEASE_RESOURCE.
* Change bus_generic_print_child() so that it is actually useful.
- In wb_rxeof(), if the received packet is less than MINCLSIZE bytes,
copy it to an mbuf chain so as to be more frugal in our use of mbuf
clusters.
- The Winbond chip, like the ASIX, wants the 'TX interrupt request'
bit set in the _first_ fragment of a transmitted frame, not the
last. (At least the Winbond manual states this unambiguously; too
bad I wasn't paying attention when I read it the first time.)
- Turn off the transmit threshold mechanism (initialize the threshold
to 0). This effectively puts the chip in 'store and forward' mode
which seems to cut down on transmit errors a little. It may also
reduce transmit performace a bit, but I'm willing to do that if it
means better reliability.
- Normally, the driver allocates an mbuf cluster for each receive
descriptor. This is because we have to be prepared to accomodate up to
1500 bytes (a cluster buffer can hold up to 2K). However, using up a
whole cluster buffer for a tiny packet is a bit of a waste. Also,
it seems to me that sometimes mbufs will linger in the kernel for
a while after being passed out of the driver, which means we might
drain the mbuf cluster pool. The cluster pool is smaller than the
mbuf pool in general, so we do the following: if the packet is less
that MINCLSIZE bytes, then we copy it into a small mbuf chain and
leave the mbuf cluster in place for another go-round. This saves
mbuf clusters in some cases while still allowing them to be used
for heavy traffic exchanges with lots of full-sized frames.
- The transmit descriptor has a bit in the control word which allows
the driver to request that a 'TX OK' interrupt be generated when
a frame has been completed. Sometimes, a frame can be fragmented
across several descriptors. The manual for the real DEC 21140A says
that if this happens, the 'TX interrupt request' bit is only valid
in the descriptor of the last fragment. With the ASIX chip, it seems
the 'TX interrupt request' bit is only valid in the descriptor of
the _first_ fragment. Actually, the manual contains conflicting
information, but I think it's supposed to be the first fragment.
To play it safe, set the bit in both the first and last fragment to
be sure that we get a TX OK interrupt. Without this fix, the driver
can sometimes be late in releasing mbufs from the transmit queue
after transmission.
(<blank@fox.uni-trier.de>) about quirks being set as
arithmetic values, not as bitfields. Add HP, Kennedy
and M4 1/2" reel quirk entries.
Do a lot of gratuitous source changing.
Audit all functions that build ccbs for the tape driver
and decide whether each one can be retried or not.
Still to do is some more state management post errors.
IDE hardare. The attempted fix in rev.1.182 was a no-op except for
adding dozens of style bugs. The undocumented options ALI_V and
DISABLE_PCI_IDE go away as a side effect. ALI_V was a no-op because
rev.1.182 was a no-op. DISABLE_PCI_IDE didn't actually disable
PCI IDE. It disabled the buggy code in wdprobe() at a cost of
completely breaking support for Promise controllers.
Broken in: rev.1.139
The Eighth Edition is *not* descended from the Seventh Edition.
Submitted by: Greg Lehey <grog@lemis.com>
and Dennis Ritchie
Here's a quote from Dennis Ritchie, posted to Warren Toomey:
[January 1999]
----- Forwarded message from dmr -----
I also got mail from Norman Wilson today about the discussion.
This is mainly to confirm and fill out details of Wilson's account.
The Eighth Edition system started with (I believe) BSD 4.1c and
the work was done on VAX 11/750s -- our group did not get
a 780 until a while later.
Most of the operating system superstructure of BSD was retained
(in particular no one (even the indefatigable Norman)
wanted to get much into the paging code. Norman is also
right that the competitor was John Reiser's (and Tom London's)
32V descendant from another group at the Labs. In structure
this system had a lot to offer (in particular the buffer cache and the page
pool were unified, but it was clear that their work was not being
supported by their own management. It was used for a while on
our first 750 and also our first 11/780 ("alice", a name that lives
in netnews fame preceding the reach of Dejanews).
The big change leading to V8 was the scooping-out and replacement of
the character-device and networking part by the streams mechanism. Later,
Peter Weinberger added the file-system switch that enabled
remote file systems and prescient things ideas like /proc). Weinberger,
as Norman said, also did a simple-minded FFS.
The TCP/IP stack wasn't very important to us then and it has a mixed and
murky history. Much of it came from early CSRG work, but it was converted
to a streams approach by Robert Morris and subsequently fiddled over a lot.
Likewise, as Norman said, the applications (/bin and whatnot) were somewhat
of a mixture. Many were the locally-done versions, some were taken
from BSD in some incarnation, some from System V.
Dennis
----- End of forwarded message from dmr -----
if option CY_PCI_FASTINTR is configured and mapping the irq to a
fastintr is possible. Unfortunately, this has to be optional because
pci_map_int_right() doesn't handle the INTR_EXCL flag right --
INTR_EXCL is honoured even if the interrupt needs to be non-exclusive
for other devices to work.
buffer had to be left on the head of the queue for [bufq]disksort()
to sort against. This isn't right for devices that can support multiple
active i/o's, and only the fd driver did it. "Fixing" this in rev.1.36
of ufs_disksubr.c broke the fd driver in much the same way as rev.1.52
of <sys/buf.h> broke it (see rev.1.119).
Bug reported and fix tested by: dt
Make two digit years specified on the command line represent
the century that the computer currently resides. So 99 means
1999 this year, but 2099 next year.
Pointed out by: Peter Jeremy <peter.jeremy@auss2.alcatel.com.au>