lance.c emulation implements incorrect algorithm to scan receive/transmit descriptors: - it scans a whole ring of descriptors instead of stopping at first owned by host - it skips buffers in corner cases
- card is not reset, current rx/tx descriptor number is not reset when card is stopped by driver
Attached patch should fix these problems. On-demand packet transmission is also implemented.
Without this patch I had ~500 byte/second transfers with qemu-system-sparc,
now it network speed is much better :)
Looking at 7990 chip docs (main chip on lance card) it seems like there are more features not implemented; e.g. 1.6ms timer is needed to implement "normal" transmission.