(eca_init_rx_soft()) just sets up software state, and the other of
which (eca_init_rx_hard()) actually puts the interface into receive
mode and sets up the FIQ handler etc. Arrange that when we transmit a
frame, eca_init_rx_soft() has already been called, so we only need to
call eca_init_rx_hard() from the Tx downgrade handler.
The point of this is that I should be able to incorporate the
functionality of eca_init_rx_hard() into the Tx FIQ handler so that we
can switch from Tx to Rx with little enough delay that we don't drop
the first few bytes of the incoming frame.
to zero page, and it branches to either the rx or tx handler. My intention
is that the tx handler should switch to the rx one the moment it finishes,
without needing a downgrade, which I hope will get rid of the start-of-frame
rx overruns I'm seeing.
While I'm here, move the constants describing the shape of the FIQ state
structures out of if_ecavar.h and into genassym.cf where they belong.
complete for some reason, we defer it for a bit and then try again. This
gets ping down to 0% packet loss.
Of course, ping _should_ have been at 0% packet loss anyway, and that's the
next thing to deal with.
worked out by observing RISC iX's behaviour, so it may be technically
wrong. The only implementations of IP-over-Econet for which I've got
sources don't support broadcasts.
Tested using broadcast ping from RISC iX to NetBSD, and using rwhod.
Also, most device functions related to IRQ handling no longer take a device
pointer. We make so many assumptions about the machine's layout in irq.c that
this just seemed silly.
The architecture here follows that of the vax port -- each device has its
evcnt in its softc, but defers actually incrementing it to the IRQ
dispatcher. This way, devices can attach sub-counts (e.g. Rx and Tx counts
for Ethernet interfaces), but don't all have to have code to increment the
counters.
Drivers deliberately call evcnt_attach_dynamic() before establishing their
interrupt handler so that the establish routine can attach a parent event if
that's appropriate. At present, it isn't.
NULL "name" argument to irq_establish indicates that the device will maintain
an evcnt structure for this interrupt. In this case, irq_establish will still
maintain its own count (for DDB machine irqstat), but won't attach it to the
global list.
Change use of ev_group and ev_name to follow guidelines in evcnt(9).
Switch arckbd(4) over to the new arrangements.