Lines Matching refs:tx
1308 ss->tx.req = 0; in mxge_reset()
1309 ss->tx.done = 0; in mxge_reset()
1310 ss->tx.pkt_done = 0; in mxge_reset()
1311 ss->tx.queue_active = 0; in mxge_reset()
1312 ss->tx.activate = 0; in mxge_reset()
1313 ss->tx.deactivate = 0; in mxge_reset()
1314 ss->tx.wake = 0; in mxge_reset()
1315 ss->tx.defrag = 0; in mxge_reset()
1316 ss->tx.stall = 0; in mxge_reset()
1661 CTLFLAG_RD, &ss->tx.req, in mxge_add_sysctls()
1666 CTLFLAG_RD, &ss->tx.done, in mxge_add_sysctls()
1670 CTLFLAG_RD, &ss->tx.pkt_done, in mxge_add_sysctls()
1674 CTLFLAG_RD, &ss->tx.stall, in mxge_add_sysctls()
1678 CTLFLAG_RD, &ss->tx.wake, in mxge_add_sysctls()
1682 CTLFLAG_RD, &ss->tx.defrag, in mxge_add_sysctls()
1686 CTLFLAG_RD, &ss->tx.queue_active, in mxge_add_sysctls()
1690 CTLFLAG_RD, &ss->tx.activate, in mxge_add_sysctls()
1694 CTLFLAG_RD, &ss->tx.deactivate, in mxge_add_sysctls()
1703 mxge_submit_req_backwards(mxge_tx_ring_t *tx, in mxge_submit_req_backwards() argument
1707 starting_slot = tx->req; in mxge_submit_req_backwards()
1710 idx = (starting_slot + cnt) & tx->mask; in mxge_submit_req_backwards()
1711 mxge_pio_copy(&tx->lanai[idx], in mxge_submit_req_backwards()
1725 mxge_submit_req(mxge_tx_ring_t *tx, mcp_kreq_ether_send_t *src, in mxge_submit_req() argument
1735 idx = tx->req & tx->mask; in mxge_submit_req()
1740 dst = dstp = &tx->lanai[idx]; in mxge_submit_req()
1743 if ((idx + cnt) < tx->mask) { in mxge_submit_req()
1753 mxge_submit_req_backwards(tx, src, cnt); in mxge_submit_req()
1769 tx->req += cnt; in mxge_submit_req()
1859 mxge_tx_ring_t *tx; in mxge_encap_tso() local
1922 tx = &ss->tx; in mxge_encap_tso()
1923 req = tx->req_list; in mxge_encap_tso()
1924 seg = tx->seg_list; in mxge_encap_tso()
1999 if (__predict_false(cnt > tx->max_desc)) in mxge_encap_tso()
2012 tx->info[((cnt - 1) + tx->req) & tx->mask].flag = 1; in mxge_encap_tso()
2013 mxge_submit_req(tx, tx->req_list, cnt); in mxge_encap_tso()
2015 if ((ss->sc->num_slices > 1) && tx->queue_active == 0) { in mxge_encap_tso()
2017 *tx->send_go = 1; in mxge_encap_tso()
2018 tx->queue_active = 1; in mxge_encap_tso()
2019 tx->activate++; in mxge_encap_tso()
2026 bus_dmamap_unload(tx->dmat, tx->info[tx->req & tx->mask].map); in mxge_encap_tso()
2032 (long)seg - (long)tx->seg_list, tx->max_desc); in mxge_encap_tso()
2084 mxge_tx_ring_t *tx; in mxge_encap() local
2092 tx = &ss->tx; in mxge_encap()
2108 idx = tx->req & tx->mask; in mxge_encap()
2109 err = bus_dmamap_load_mbuf_sg(tx->dmat, tx->info[idx].map, in mxge_encap()
2110 m, tx->seg_list, &cnt, in mxge_encap()
2119 ss->tx.defrag++; in mxge_encap()
2121 err = bus_dmamap_load_mbuf_sg(tx->dmat, in mxge_encap()
2122 tx->info[idx].map, in mxge_encap()
2123 m, tx->seg_list, &cnt, in mxge_encap()
2131 bus_dmamap_sync(tx->dmat, tx->info[idx].map, in mxge_encap()
2133 tx->info[idx].m = m; in mxge_encap()
2143 req = tx->req_list; in mxge_encap()
2167 seg = tx->seg_list; in mxge_encap()
2206 tx->req_list[0].rdma_count = cnt; in mxge_encap()
2212 i, (int)ntohl(tx->req_list[i].addr_high), in mxge_encap()
2213 (int)ntohl(tx->req_list[i].addr_low), in mxge_encap()
2214 (int)ntohs(tx->req_list[i].length), in mxge_encap()
2215 (int)ntohs(tx->req_list[i].pseudo_hdr_offset), in mxge_encap()
2216 tx->req_list[i].cksum_offset, tx->req_list[i].flags, in mxge_encap()
2217 tx->req_list[i].rdma_count); in mxge_encap()
2221 tx->info[((cnt - 1) + tx->req) & tx->mask].flag = 1; in mxge_encap()
2222 mxge_submit_req(tx, tx->req_list, cnt); in mxge_encap()
2224 if ((ss->sc->num_slices > 1) && tx->queue_active == 0) { in mxge_encap()
2226 *tx->send_go = 1; in mxge_encap()
2227 tx->queue_active = 1; in mxge_encap()
2228 tx->activate++; in mxge_encap()
2246 mxge_tx_ring_t *tx; in mxge_qflush() local
2251 tx = &sc->ss[slice].tx; in mxge_qflush()
2252 mtx_lock(&tx->mtx); in mxge_qflush()
2253 while ((m = buf_ring_dequeue_sc(tx->br)) != NULL) in mxge_qflush()
2255 mtx_unlock(&tx->mtx); in mxge_qflush()
2266 mxge_tx_ring_t *tx; in mxge_start_locked() local
2270 tx = &ss->tx; in mxge_start_locked()
2272 while ((tx->mask - (tx->req - tx->done)) > tx->max_desc) { in mxge_start_locked()
2273 m = drbr_dequeue(ifp, tx->br); in mxge_start_locked()
2285 && (!drbr_empty(ifp, tx->br))) { in mxge_start_locked()
2287 tx->stall++; in mxge_start_locked()
2296 mxge_tx_ring_t *tx; in mxge_transmit_locked() local
2301 tx = &ss->tx; in mxge_transmit_locked()
2305 err = drbr_enqueue(ifp, tx->br, m); in mxge_transmit_locked()
2309 if (!drbr_needs_enqueue(ifp, tx->br) && in mxge_transmit_locked()
2310 ((tx->mask - (tx->req - tx->done)) > tx->max_desc)) { in mxge_transmit_locked()
2315 } else if ((err = drbr_enqueue(ifp, tx->br, m)) != 0) { in mxge_transmit_locked()
2318 if (!drbr_empty(ifp, tx->br)) in mxge_transmit_locked()
2328 mxge_tx_ring_t *tx; in mxge_transmit() local
2336 tx = &ss->tx; in mxge_transmit()
2338 if (mtx_trylock(&tx->mtx)) { in mxge_transmit()
2340 mtx_unlock(&tx->mtx); in mxge_transmit()
2342 err = drbr_enqueue(ifp, tx->br, m); in mxge_transmit()
2356 mxge_tx_ring_t *tx; in mxge_start_locked() local
2360 tx = &ss->tx; in mxge_start_locked()
2361 while ((tx->mask - (tx->req - tx->done)) > tx->max_desc) { in mxge_start_locked()
2375 tx->stall++; in mxge_start_locked()
2387 mtx_lock(&ss->tx.mtx); in mxge_start()
2389 mtx_unlock(&ss->tx.mtx); in mxge_start()
2831 mxge_tx_ring_t *tx; in mxge_tx_done() local
2837 tx = &ss->tx; in mxge_tx_done()
2839 while (tx->pkt_done != mcp_idx) { in mxge_tx_done()
2840 idx = tx->done & tx->mask; in mxge_tx_done()
2841 tx->done++; in mxge_tx_done()
2842 m = tx->info[idx].m; in mxge_tx_done()
2850 tx->info[idx].m = NULL; in mxge_tx_done()
2851 map = tx->info[idx].map; in mxge_tx_done()
2852 bus_dmamap_unload(tx->dmat, map); in mxge_tx_done()
2855 if (tx->info[idx].flag) { in mxge_tx_done()
2856 tx->info[idx].flag = 0; in mxge_tx_done()
2857 tx->pkt_done++; in mxge_tx_done()
2868 mtx_lock(&ss->tx.mtx); in mxge_tx_done()
2870 tx->req - tx->done < (tx->mask + 1)/4) { in mxge_tx_done()
2872 ss->tx.wake++; in mxge_tx_done()
2876 if ((ss->sc->num_slices > 1) && (tx->req == tx->done)) { in mxge_tx_done()
2879 if (tx->req == tx->done) { in mxge_tx_done()
2880 *tx->send_stop = 1; in mxge_tx_done()
2881 tx->queue_active = 0; in mxge_tx_done()
2882 tx->deactivate++; in mxge_tx_done()
2887 mtx_unlock(&ss->tx.mtx); in mxge_tx_done()
3084 mxge_tx_ring_t *tx = &ss->tx; in mxge_intr() local
3120 while ((send_done_count != tx->pkt_done) || in mxge_intr()
3122 if (send_done_count != tx->pkt_done) in mxge_intr()
3209 if (ss->tx.info == NULL) in mxge_free_slice_mbufs()
3212 for (i = 0; i <= ss->tx.mask; i++) { in mxge_free_slice_mbufs()
3213 ss->tx.info[i].flag = 0; in mxge_free_slice_mbufs()
3214 if (ss->tx.info[i].m == NULL) in mxge_free_slice_mbufs()
3216 bus_dmamap_unload(ss->tx.dmat, in mxge_free_slice_mbufs()
3217 ss->tx.info[i].map); in mxge_free_slice_mbufs()
3218 m_freem(ss->tx.info[i].m); in mxge_free_slice_mbufs()
3219 ss->tx.info[i].m = NULL; in mxge_free_slice_mbufs()
3242 if (ss->tx.req_bytes != NULL) in mxge_free_slice_rings()
3243 free(ss->tx.req_bytes, M_DEVBUF); in mxge_free_slice_rings()
3244 ss->tx.req_bytes = NULL; in mxge_free_slice_rings()
3246 if (ss->tx.seg_list != NULL) in mxge_free_slice_rings()
3247 free(ss->tx.seg_list, M_DEVBUF); in mxge_free_slice_rings()
3248 ss->tx.seg_list = NULL; in mxge_free_slice_rings()
3258 if (ss->tx.info != NULL) { in mxge_free_slice_rings()
3259 if (ss->tx.dmat != NULL) { in mxge_free_slice_rings()
3260 for (i = 0; i <= ss->tx.mask; i++) { in mxge_free_slice_rings()
3261 bus_dmamap_destroy(ss->tx.dmat, in mxge_free_slice_rings()
3262 ss->tx.info[i].map); in mxge_free_slice_rings()
3264 bus_dma_tag_destroy(ss->tx.dmat); in mxge_free_slice_rings()
3266 free(ss->tx.info, M_DEVBUF); in mxge_free_slice_rings()
3268 ss->tx.info = NULL; in mxge_free_slice_rings()
3422 ss->tx.mask = tx_ring_entries - 1; in mxge_alloc_slice_rings()
3423 ss->tx.max_desc = MIN(MXGE_MAX_SEND_DESC, tx_ring_entries / 4); in mxge_alloc_slice_rings()
3428 sizeof (*ss->tx.req_list) * (ss->tx.max_desc + 4); in mxge_alloc_slice_rings()
3429 ss->tx.req_bytes = malloc(bytes, M_DEVBUF, M_WAITOK); in mxge_alloc_slice_rings()
3431 ss->tx.req_list = (mcp_kreq_ether_send_t *) in mxge_alloc_slice_rings()
3432 ((unsigned long)(ss->tx.req_bytes + 7) & ~7UL); in mxge_alloc_slice_rings()
3435 bytes = sizeof (*ss->tx.seg_list) * ss->tx.max_desc; in mxge_alloc_slice_rings()
3436 ss->tx.seg_list = (bus_dma_segment_t *) in mxge_alloc_slice_rings()
3440 bytes = tx_ring_entries * sizeof (*ss->tx.info); in mxge_alloc_slice_rings()
3441 ss->tx.info = malloc(bytes, M_DEVBUF, M_ZERO|M_WAITOK); in mxge_alloc_slice_rings()
3451 ss->tx.max_desc - 2, /* num segs */ in mxge_alloc_slice_rings()
3455 &ss->tx.dmat); /* tag */ in mxge_alloc_slice_rings()
3465 for (i = 0; i <= ss->tx.mask; i++) { in mxge_alloc_slice_rings()
3466 err = bus_dmamap_create(ss->tx.dmat, 0, in mxge_alloc_slice_rings()
3467 &ss->tx.info[i].map); in mxge_alloc_slice_rings()
3577 ss->tx.lanai = in mxge_slice_open()
3579 ss->tx.send_go = (volatile uint32_t *) in mxge_slice_open()
3581 ss->tx.send_stop = (volatile uint32_t *) in mxge_slice_open()
3922 mtx_lock(&ss->tx.mtx); in mxge_watchdog_reset()
3948 mtx_unlock(&ss->tx.mtx); in mxge_watchdog_reset()
3978 mxge_warn_stuck(mxge_softc_t *sc, mxge_tx_ring_t *tx, int slice) in mxge_warn_stuck() argument
3980 tx = &sc->ss[slice].tx; in mxge_warn_stuck()
3984 tx->req, tx->done, tx->queue_active); in mxge_warn_stuck()
3986 tx->activate, tx->deactivate); in mxge_warn_stuck()
3988 tx->pkt_done, in mxge_warn_stuck()
3995 mxge_tx_ring_t *tx; in mxge_watchdog() local
4008 tx = &sc->ss[i].tx; in mxge_watchdog()
4009 if (tx->req != tx->done && in mxge_watchdog()
4010 tx->watchdog_req != tx->watchdog_done && in mxge_watchdog()
4011 tx->done == tx->watchdog_done) { in mxge_watchdog()
4013 if (tx->watchdog_rx_pause == rx_pause) { in mxge_watchdog()
4014 mxge_warn_stuck(sc, tx, i); in mxge_watchdog()
4023 tx->watchdog_req = tx->req; in mxge_watchdog()
4024 tx->watchdog_done = tx->done; in mxge_watchdog()
4025 tx->watchdog_rx_pause = rx_pause; in mxge_watchdog()
4066 rv += sc->ss[s].tx.br->br_drops; in mxge_get_counter()
4425 if (ss->tx.br != NULL) { in mxge_free_slices()
4426 drbr_free(ss->tx.br, M_DEVBUF); in mxge_free_slices()
4427 ss->tx.br = NULL; in mxge_free_slices()
4430 mtx_destroy(&ss->tx.mtx); in mxge_free_slices()
4491 snprintf(ss->tx.mtx_name, sizeof(ss->tx.mtx_name), in mxge_alloc_slices()
4493 mtx_init(&ss->tx.mtx, ss->tx.mtx_name, NULL, MTX_DEF); in mxge_alloc_slices()
4495 ss->tx.br = buf_ring_alloc(2048, M_DEVBUF, M_WAITOK, in mxge_alloc_slices()
4496 &ss->tx.mtx); in mxge_alloc_slices()
4988 ifp->if_hw_tsomaxsegcount = sc->ss[0].tx.max_desc; in mxge_attach()