* Initialize the transmit descriptors. */
| 2183 | * Initialize the transmit descriptors. |
| 2184 | */ |
| 2185 | static int |
| 2186 | arge_tx_ring_init(struct arge_softc *sc) |
| 2187 | { |
| 2188 | struct arge_ring_data *rd; |
| 2189 | struct arge_txdesc *txd; |
| 2190 | bus_addr_t addr; |
| 2191 | int i; |
| 2192 | |
| 2193 | sc->arge_cdata.arge_tx_prod = 0; |
| 2194 | sc->arge_cdata.arge_tx_cons = 0; |
| 2195 | sc->arge_cdata.arge_tx_cnt = 0; |
| 2196 | |
| 2197 | rd = &sc->arge_rdata; |
| 2198 | bzero(rd->arge_tx_ring, sizeof(*rd->arge_tx_ring)); |
| 2199 | for (i = 0; i < ARGE_TX_RING_COUNT; i++) { |
| 2200 | if (i == ARGE_TX_RING_COUNT - 1) |
| 2201 | addr = ARGE_TX_RING_ADDR(sc, 0); |
| 2202 | else |
| 2203 | addr = ARGE_TX_RING_ADDR(sc, i + 1); |
| 2204 | rd->arge_tx_ring[i].packet_ctrl = ARGE_DESC_EMPTY; |
| 2205 | rd->arge_tx_ring[i].next_desc = addr; |
| 2206 | txd = &sc->arge_cdata.arge_txdesc[i]; |
| 2207 | txd->tx_m = NULL; |
| 2208 | } |
| 2209 | |
| 2210 | bus_dmamap_sync(sc->arge_cdata.arge_tx_ring_tag, |
| 2211 | sc->arge_cdata.arge_tx_ring_map, |
| 2212 | BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); |
| 2213 | |
| 2214 | return (0); |
| 2215 | } |
| 2216 | |
| 2217 | /* |
| 2218 | * Free the Tx ring, unload any pending dma transaction and free the mbuf. |
no test coverage detected