Against bk:linuxppc_2_4 Use retry counter (RC) to detect collisions instead of Defer (DEF).
>From Table 6-29: (MPC860T (Rev. D) Fast Ethernet Controller 0.8) 6 DEF Defer indication, written by FEC (valid if L = 1). Set when the FEC had to defer while trying to transmit a frame. This bit is not set if a collision occurs during transmission. 10-13 RC Retry count, written by FEC (valid if L = 1). Counts retries needed to successfully send this frame. If RC = 0, the frame was sent correctly the first time. If RC = 15, the frame was sent successfully while the retry count was at its maximum value. If RL = 1, RC has no meaning. /Thomas -------------- next part -------------- --- fec.c 2002-10-15 14:58:00.000000000 +0200 +++ fec_cfix.c 2002-10-24 20:59:20.000000000 +0200 @@ -502,11 +502,12 @@ if (bdp->cbd_sc & BD_ENET_TX_READY) printk("HEY! Enet xmit interrupt and TX_READY.\n"); #endif - /* Deferred means some collisions occurred during transmit, - * but we eventually sent the packet OK. - */ - if (bdp->cbd_sc & BD_ENET_TX_DEF) - fep->stats.collisions++; + /* Check retry counter, i.e. collision counter */ + /* Only valid if LAST is set, but it should always be. */ + if (bdp->cbd_sc & BD_ENET_TX_RCMASK){ + /* Note that counter cannot go higher than 15 */ + fep->stats.collisions+=(bdp->cbd_sc & BD_ENET_TX_RCMASK)>>2; + } /* Free the sk buffer associated with this last transmit. */