Maybe this is realtek ring problem like in iPXE: http://git.ipxe.org/ipxe.git/commitdiff/5d3d62d
"realtek_destroy_ring() currently does nothing if the card is operating in legacy (pre-RTL8139C+) mode. In particular, the producer and consumer counters are incorrectly left holding their current values. Virtual hardware (e.g. the emulated RTL8139 in qemu and similar VMs) is tolerant of this behaviour, but real hardware will fail to transmit if the descriptors are not used in the correct order.
Fix by resetting the producer and consumer counters in realtek_destroy_ring() even if the card is operating in legacy mode.