Lines Matching refs:tx
1285 ss->tx.req = 0; in mxge_reset()
1286 ss->tx.done = 0; in mxge_reset()
1287 ss->tx.pkt_done = 0; in mxge_reset()
1288 ss->tx.queue_active = 0; in mxge_reset()
1289 ss->tx.activate = 0; in mxge_reset()
1290 ss->tx.deactivate = 0; in mxge_reset()
1291 ss->tx.wake = 0; in mxge_reset()
1292 ss->tx.defrag = 0; in mxge_reset()
1293 ss->tx.stall = 0; in mxge_reset()
1618 CTLFLAG_RD, &ss->tx.req, in mxge_add_sysctls()
1623 CTLFLAG_RD, &ss->tx.done, in mxge_add_sysctls()
1627 CTLFLAG_RD, &ss->tx.pkt_done, in mxge_add_sysctls()
1631 CTLFLAG_RD, &ss->tx.stall, in mxge_add_sysctls()
1635 CTLFLAG_RD, &ss->tx.wake, in mxge_add_sysctls()
1639 CTLFLAG_RD, &ss->tx.defrag, in mxge_add_sysctls()
1643 CTLFLAG_RD, &ss->tx.queue_active, in mxge_add_sysctls()
1647 CTLFLAG_RD, &ss->tx.activate, in mxge_add_sysctls()
1651 CTLFLAG_RD, &ss->tx.deactivate, in mxge_add_sysctls()
1660 mxge_submit_req_backwards(mxge_tx_ring_t *tx, in mxge_submit_req_backwards() argument
1664 starting_slot = tx->req; in mxge_submit_req_backwards()
1667 idx = (starting_slot + cnt) & tx->mask; in mxge_submit_req_backwards()
1668 mxge_pio_copy(&tx->lanai[idx], in mxge_submit_req_backwards()
1682 mxge_submit_req(mxge_tx_ring_t *tx, mcp_kreq_ether_send_t *src, in mxge_submit_req() argument
1692 idx = tx->req & tx->mask; in mxge_submit_req()
1697 dst = dstp = &tx->lanai[idx]; in mxge_submit_req()
1700 if ((idx + cnt) < tx->mask) { in mxge_submit_req()
1710 mxge_submit_req_backwards(tx, src, cnt); in mxge_submit_req()
1726 tx->req += cnt; in mxge_submit_req()
1816 mxge_tx_ring_t *tx; in mxge_encap_tso() local
1878 tx = &ss->tx; in mxge_encap_tso()
1879 req = tx->req_list; in mxge_encap_tso()
1880 seg = tx->seg_list; in mxge_encap_tso()
1955 if (__predict_false(cnt > tx->max_desc)) in mxge_encap_tso()
1968 tx->info[((cnt - 1) + tx->req) & tx->mask].flag = 1; in mxge_encap_tso()
1969 mxge_submit_req(tx, tx->req_list, cnt); in mxge_encap_tso()
1971 if ((ss->sc->num_slices > 1) && tx->queue_active == 0) { in mxge_encap_tso()
1973 *tx->send_go = 1; in mxge_encap_tso()
1974 tx->queue_active = 1; in mxge_encap_tso()
1975 tx->activate++; in mxge_encap_tso()
1982 bus_dmamap_unload(tx->dmat, tx->info[tx->req & tx->mask].map); in mxge_encap_tso()
1988 (long)seg - (long)tx->seg_list, tx->max_desc); in mxge_encap_tso()
2040 mxge_tx_ring_t *tx; in mxge_encap() local
2047 tx = &ss->tx; in mxge_encap()
2063 idx = tx->req & tx->mask; in mxge_encap()
2064 err = bus_dmamap_load_mbuf_sg(tx->dmat, tx->info[idx].map, in mxge_encap()
2065 m, tx->seg_list, &cnt, in mxge_encap()
2074 ss->tx.defrag++; in mxge_encap()
2076 err = bus_dmamap_load_mbuf_sg(tx->dmat, in mxge_encap()
2077 tx->info[idx].map, in mxge_encap()
2078 m, tx->seg_list, &cnt, in mxge_encap()
2086 bus_dmamap_sync(tx->dmat, tx->info[idx].map, in mxge_encap()
2088 tx->info[idx].m = m; in mxge_encap()
2098 req = tx->req_list; in mxge_encap()
2122 seg = tx->seg_list; in mxge_encap()
2161 tx->req_list[0].rdma_count = cnt; in mxge_encap()
2167 i, (int)ntohl(tx->req_list[i].addr_high), in mxge_encap()
2168 (int)ntohl(tx->req_list[i].addr_low), in mxge_encap()
2169 (int)ntohs(tx->req_list[i].length), in mxge_encap()
2170 (int)ntohs(tx->req_list[i].pseudo_hdr_offset), in mxge_encap()
2171 tx->req_list[i].cksum_offset, tx->req_list[i].flags, in mxge_encap()
2172 tx->req_list[i].rdma_count); in mxge_encap()
2176 tx->info[((cnt - 1) + tx->req) & tx->mask].flag = 1; in mxge_encap()
2177 mxge_submit_req(tx, tx->req_list, cnt); in mxge_encap()
2179 if ((ss->sc->num_slices > 1) && tx->queue_active == 0) { in mxge_encap()
2181 *tx->send_go = 1; in mxge_encap()
2182 tx->queue_active = 1; in mxge_encap()
2183 tx->activate++; in mxge_encap()
2201 mxge_tx_ring_t *tx; in mxge_qflush() local
2206 tx = &sc->ss[slice].tx; in mxge_qflush()
2207 mtx_lock(&tx->mtx); in mxge_qflush()
2208 while ((m = buf_ring_dequeue_sc(tx->br)) != NULL) in mxge_qflush()
2210 mtx_unlock(&tx->mtx); in mxge_qflush()
2221 mxge_tx_ring_t *tx; in mxge_start_locked() local
2225 tx = &ss->tx; in mxge_start_locked()
2227 while ((tx->mask - (tx->req - tx->done)) > tx->max_desc) { in mxge_start_locked()
2228 m = drbr_dequeue(ifp, tx->br); in mxge_start_locked()
2240 && (!drbr_empty(ifp, tx->br))) { in mxge_start_locked()
2242 tx->stall++; in mxge_start_locked()
2251 mxge_tx_ring_t *tx; in mxge_transmit_locked() local
2256 tx = &ss->tx; in mxge_transmit_locked()
2260 err = drbr_enqueue(ifp, tx->br, m); in mxge_transmit_locked()
2264 if (!drbr_needs_enqueue(ifp, tx->br) && in mxge_transmit_locked()
2265 ((tx->mask - (tx->req - tx->done)) > tx->max_desc)) { in mxge_transmit_locked()
2270 } else if ((err = drbr_enqueue(ifp, tx->br, m)) != 0) { in mxge_transmit_locked()
2273 if (!drbr_empty(ifp, tx->br)) in mxge_transmit_locked()
2283 mxge_tx_ring_t *tx; in mxge_transmit() local
2291 tx = &ss->tx; in mxge_transmit()
2293 if (mtx_trylock(&tx->mtx)) { in mxge_transmit()
2295 mtx_unlock(&tx->mtx); in mxge_transmit()
2297 err = drbr_enqueue(ifp, tx->br, m); in mxge_transmit()
2311 mxge_tx_ring_t *tx; in mxge_start_locked() local
2315 tx = &ss->tx; in mxge_start_locked()
2316 while ((tx->mask - (tx->req - tx->done)) > tx->max_desc) { in mxge_start_locked()
2330 tx->stall++; in mxge_start_locked()
2342 mtx_lock(&ss->tx.mtx); in mxge_start()
2344 mtx_unlock(&ss->tx.mtx); in mxge_start()
2782 mxge_tx_ring_t *tx; in mxge_tx_done() local
2788 tx = &ss->tx; in mxge_tx_done()
2790 while (tx->pkt_done != mcp_idx) { in mxge_tx_done()
2791 idx = tx->done & tx->mask; in mxge_tx_done()
2792 tx->done++; in mxge_tx_done()
2793 m = tx->info[idx].m; in mxge_tx_done()
2801 tx->info[idx].m = NULL; in mxge_tx_done()
2802 map = tx->info[idx].map; in mxge_tx_done()
2803 bus_dmamap_unload(tx->dmat, map); in mxge_tx_done()
2806 if (tx->info[idx].flag) { in mxge_tx_done()
2807 tx->info[idx].flag = 0; in mxge_tx_done()
2808 tx->pkt_done++; in mxge_tx_done()
2819 mtx_lock(&ss->tx.mtx); in mxge_tx_done()
2821 tx->req - tx->done < (tx->mask + 1)/4) { in mxge_tx_done()
2823 ss->tx.wake++; in mxge_tx_done()
2827 if ((ss->sc->num_slices > 1) && (tx->req == tx->done)) { in mxge_tx_done()
2830 if (tx->req == tx->done) { in mxge_tx_done()
2831 *tx->send_stop = 1; in mxge_tx_done()
2832 tx->queue_active = 0; in mxge_tx_done()
2833 tx->deactivate++; in mxge_tx_done()
2838 mtx_unlock(&ss->tx.mtx); in mxge_tx_done()
3034 mxge_tx_ring_t *tx = &ss->tx; in mxge_intr() local
3069 while ((send_done_count != tx->pkt_done) || in mxge_intr()
3071 if (send_done_count != tx->pkt_done) in mxge_intr()
3155 if (ss->tx.info == NULL) in mxge_free_slice_mbufs()
3158 for (i = 0; i <= ss->tx.mask; i++) { in mxge_free_slice_mbufs()
3159 ss->tx.info[i].flag = 0; in mxge_free_slice_mbufs()
3160 if (ss->tx.info[i].m == NULL) in mxge_free_slice_mbufs()
3162 bus_dmamap_unload(ss->tx.dmat, in mxge_free_slice_mbufs()
3163 ss->tx.info[i].map); in mxge_free_slice_mbufs()
3164 m_freem(ss->tx.info[i].m); in mxge_free_slice_mbufs()
3165 ss->tx.info[i].m = NULL; in mxge_free_slice_mbufs()
3187 if (ss->tx.req_bytes != NULL) in mxge_free_slice_rings()
3188 free(ss->tx.req_bytes, M_DEVBUF); in mxge_free_slice_rings()
3189 ss->tx.req_bytes = NULL; in mxge_free_slice_rings()
3191 if (ss->tx.seg_list != NULL) in mxge_free_slice_rings()
3192 free(ss->tx.seg_list, M_DEVBUF); in mxge_free_slice_rings()
3193 ss->tx.seg_list = NULL; in mxge_free_slice_rings()
3203 if (ss->tx.info != NULL) { in mxge_free_slice_rings()
3204 if (ss->tx.dmat != NULL) { in mxge_free_slice_rings()
3205 for (i = 0; i <= ss->tx.mask; i++) { in mxge_free_slice_rings()
3206 bus_dmamap_destroy(ss->tx.dmat, in mxge_free_slice_rings()
3207 ss->tx.info[i].map); in mxge_free_slice_rings()
3209 bus_dma_tag_destroy(ss->tx.dmat); in mxge_free_slice_rings()
3211 free(ss->tx.info, M_DEVBUF); in mxge_free_slice_rings()
3213 ss->tx.info = NULL; in mxge_free_slice_rings()
3367 ss->tx.mask = tx_ring_entries - 1; in mxge_alloc_slice_rings()
3368 ss->tx.max_desc = MIN(MXGE_MAX_SEND_DESC, tx_ring_entries / 4); in mxge_alloc_slice_rings()
3372 sizeof (*ss->tx.req_list) * (ss->tx.max_desc + 4); in mxge_alloc_slice_rings()
3373 ss->tx.req_bytes = malloc(bytes, M_DEVBUF, M_WAITOK); in mxge_alloc_slice_rings()
3375 ss->tx.req_list = (mcp_kreq_ether_send_t *) in mxge_alloc_slice_rings()
3376 ((uintptr_t)(ss->tx.req_bytes + 7) & ~7UL); in mxge_alloc_slice_rings()
3379 bytes = sizeof (*ss->tx.seg_list) * ss->tx.max_desc; in mxge_alloc_slice_rings()
3380 ss->tx.seg_list = (bus_dma_segment_t *) in mxge_alloc_slice_rings()
3384 bytes = tx_ring_entries * sizeof (*ss->tx.info); in mxge_alloc_slice_rings()
3385 ss->tx.info = malloc(bytes, M_DEVBUF, M_ZERO|M_WAITOK); in mxge_alloc_slice_rings()
3395 ss->tx.max_desc - 2, /* num segs */ in mxge_alloc_slice_rings()
3399 &ss->tx.dmat); /* tag */ in mxge_alloc_slice_rings()
3409 for (i = 0; i <= ss->tx.mask; i++) { in mxge_alloc_slice_rings()
3410 err = bus_dmamap_create(ss->tx.dmat, 0, in mxge_alloc_slice_rings()
3411 &ss->tx.info[i].map); in mxge_alloc_slice_rings()
3519 ss->tx.lanai = in mxge_slice_open()
3521 ss->tx.send_go = (volatile uint32_t *) in mxge_slice_open()
3523 ss->tx.send_stop = (volatile uint32_t *) in mxge_slice_open()
3861 mtx_lock(&ss->tx.mtx); in mxge_watchdog_reset()
3887 mtx_unlock(&ss->tx.mtx); in mxge_watchdog_reset()
3916 mxge_warn_stuck(mxge_softc_t *sc, mxge_tx_ring_t *tx, int slice) in mxge_warn_stuck() argument
3918 tx = &sc->ss[slice].tx; in mxge_warn_stuck()
3922 tx->req, tx->done, tx->queue_active); in mxge_warn_stuck()
3924 tx->activate, tx->deactivate); in mxge_warn_stuck()
3926 tx->pkt_done, in mxge_warn_stuck()
3933 mxge_tx_ring_t *tx; in mxge_watchdog() local
3946 tx = &sc->ss[i].tx; in mxge_watchdog()
3947 if (tx->req != tx->done && in mxge_watchdog()
3948 tx->watchdog_req != tx->watchdog_done && in mxge_watchdog()
3949 tx->done == tx->watchdog_done) { in mxge_watchdog()
3951 if (tx->watchdog_rx_pause == rx_pause) { in mxge_watchdog()
3952 mxge_warn_stuck(sc, tx, i); in mxge_watchdog()
3961 tx->watchdog_req = tx->req; in mxge_watchdog()
3962 tx->watchdog_done = tx->done; in mxge_watchdog()
3963 tx->watchdog_rx_pause = rx_pause; in mxge_watchdog()
4004 rv += sc->ss[s].tx.br->br_drops; in mxge_get_counter()
4362 if (ss->tx.br != NULL) { in mxge_free_slices()
4363 drbr_free(ss->tx.br, M_DEVBUF); in mxge_free_slices()
4364 ss->tx.br = NULL; in mxge_free_slices()
4367 mtx_destroy(&ss->tx.mtx); in mxge_free_slices()
4428 snprintf(ss->tx.mtx_name, sizeof(ss->tx.mtx_name), in mxge_alloc_slices()
4430 mtx_init(&ss->tx.mtx, ss->tx.mtx_name, NULL, MTX_DEF); in mxge_alloc_slices()
4432 ss->tx.br = buf_ring_alloc(2048, M_DEVBUF, M_WAITOK, in mxge_alloc_slices()
4433 &ss->tx.mtx); in mxge_alloc_slices()
4922 ifp->if_hw_tsomaxsegcount = sc->ss[0].tx.max_desc; in mxge_attach()