#include <linux/skbuff.h>
#include <asm/io.h>
+#include <asm/hardware.h>
#include <asm/irq.h>
#include "smc91x.h"
if (tx_status & TS_LOSTCAR)
lp->stats.tx_carrier_errors++;
+ SMC_WAIT_MMU_BUSY();
+
if (tx_status & TS_LATCOL) {
PRINTK("%s: late collision occurred on last xmit\n", dev->name);
lp->stats.tx_window_errors++;
- if (!(lp->stats.tx_window_errors & 63) && net_ratelimit()) {
- printk(KERN_INFO "%s: unexpectedly large numbers of "
- "late collisions. Please check duplex "
- "setting.\n", dev->name);
- }
+ /* It's really cheap to requeue the pkt here */
+ SMC_SET_MMU_CMD( MC_ENQUEUE );
+ } else {
+ /* kill the packet */
+ SMC_SET_MMU_CMD(MC_FREEPKT);
}
- /* kill the packet */
- SMC_WAIT_MMU_BUSY();
- SMC_SET_MMU_CMD(MC_FREEPKT);
-
/* Don't restore Packet Number Reg until busy bit is cleared */
SMC_WAIT_MMU_BUSY();
SMC_SET_PN(saved_packet);