xx,f0. This appears to heavily alleviate, but not to eliminate entirely,
the problems I've been seeing with garbage being read from the rx buffer.
I suspect the real solution lies elsewhere.
* Use the timer to timoe out transmit operations.
* Spot when the "next packet" pointer falls outside the recieve buffer and
reset the interface.
* Don't reset the interface when we get a bad packet (unless there's
something else wrong as well).
About the only bit of his code not here is the transmit routines, which I'll
merge in separately.
Also a few bug-fixes, so (for instance) multicast on an 8005 doesn't
immediately fall back to IFF_ALLMULTI.
This now provides slightly more functionality than the FreeBSD layer1-newbus
interface. It was meant to be a simple change to one header and a few
c files, but the change rippled all through various stuff.
To prevent a change to the kernel<->userland interface right now the kernel
is now lying about card types to userland (but who cares). This will be fixed
when the userland interface changes, after layer 3 <-> layer 4 has been
fixed.
Functional changes:
Provide a clean interface for hardware drivers to attach to the upper
layers. This will need another small change in the B-channel handling
when a similar change to the layer 3 <-> layer 4 interface happens.
Avoid passing indices into global arrays of pointers around, instead pass
the pointers itself. Don't code hardware driver types by predefined magic
numbers (think LKM). Prepare for detachable drivers (think pcmcia).
While there remove some sets of function pointers always pointing to the
same function (meant to be the configurable set of D channel protocol
handlers). It is unlikely another supported D-channel protocol will fit into
that (maximal layer interface) abstraction. When we get support for another
protocol, we will need to come up with a workable interface. Besides, the
old implementation was, uhm, strange.
provided to me by David Brownlee (thanks!).
Performance of this card is quite poor on my PS/2 with 386DX, like 100KB/s
at best, but as low as 5KB/s when transferring bigger files due to
packet overruns. It would be good to revisit this later, probably by
teaching the ic code to use RX Early.
up header guard. Clean up structure definition for at2_entry so
it's correct rather than derived from at_entry- this is important
for unswizzling purposes. Add a whole bunch of unswizzle macros-
they're not quite right yet but at least they're a start. Note that
we now have, for at_entry, a 16 bit firmware handle as part of what
had been at_reserved- this is to correlate ATIOs with CTIOs- and
this must be carried along as part of a tag value to use with all
CTIOs we send in relation to this ATIO. ANSIfy.
- Load the DMA address a byte at a time, and
- Use bus_space_read_stream_2() instead of bus_space_read_2() when reading
the byte-stream of configuration data from the card.
Sanity-checked on both i386 and sandpoint. Reviewed by ad.