--- src/sys/dev/netif/bge/if_bge.c 2007/03/31 09:31:57 1.64 +++ src/sys/dev/netif/bge/if_bge.c 2007/04/14 04:22:14 1.65 @@ -919,8 +919,11 @@ bge_init_tx_ring(struct bge_softc *sc) { sc->bge_txcnt = 0; sc->bge_tx_saved_considx = 0; + sc->bge_tx_prodidx = 0; + + /* Initialize transmit producer index for host-memory send ring. */ + CSR_WRITE_4(sc, BGE_MBX_TX_HOST_PROD0_LO, sc->bge_tx_prodidx); - CSR_WRITE_4(sc, BGE_MBX_TX_HOST_PROD0_LO, 0); /* 5700 b2 errata */ if (sc->bge_chiprev == BGE_CHIPREV_5700_BX) CSR_WRITE_4(sc, BGE_MBX_TX_HOST_PROD0_LO, 0); @@ -2412,7 +2415,7 @@ bge_start(struct ifnet *ifp) if (!sc->bge_link) return; - prodidx = CSR_READ_4(sc, BGE_MBX_TX_HOST_PROD0_LO); + prodidx = sc->bge_tx_prodidx; need_trans = 0; while(sc->bge_cdata.bge_tx_chain[prodidx] == NULL) { @@ -2461,6 +2464,8 @@ bge_start(struct ifnet *ifp) if (sc->bge_chiprev == BGE_CHIPREV_5700_BX) CSR_WRITE_4(sc, BGE_MBX_TX_HOST_PROD0_LO, prodidx); + sc->bge_tx_prodidx = prodidx; + /* * Set a timeout in case the chip goes out to lunch. */