Lines Matching defs:wq

157 static void oce_tx_restart(POCE_SOFTC sc, struct oce_wq *wq);
158 static void oce_process_tx_completion(struct oce_wq *wq);
160 struct oce_wq *wq);
640 struct oce_wq *wq = NULL;
650 wq = sc->wq[queue_index];
652 LOCK(&wq->tx_lock);
653 status = oce_multiq_transmit(ifp, m, wq);
654 UNLOCK(&wq->tx_lock);
668 while ((m = buf_ring_dequeue_sc(sc->wq[i]->br)) != NULL)
1031 struct oce_wq *wq = sc->wq[wq_index];
1091 pd = &wq->pckts[wq->pkt_desc_head];
1094 rc = bus_dmamap_load_mbuf_sg(wq->tag,
1104 if (num_wqes >= RING_NUM_FREE(wq->ring)) {
1105 bus_dmamap_unload(wq->tag, pd->map);
1108 atomic_store_rel_int(&wq->pkt_desc_head,
1109 (wq->pkt_desc_head + 1) % \
1111 bus_dmamap_sync(wq->tag, pd->map, BUS_DMASYNC_PREWRITE);
1115 RING_GET_PRODUCER_ITEM_VA(wq->ring, struct oce_nic_hdr_wqe);
1148 RING_PUT(wq->ring, 1);
1149 atomic_add_int(&wq->ring->num_used, 1);
1153 RING_GET_PRODUCER_ITEM_VA(wq->ring,
1159 pd->wqe_idx = wq->ring->pidx;
1160 RING_PUT(wq->ring, 1);
1161 atomic_add_int(&wq->ring->num_used, 1);
1165 RING_GET_PRODUCER_ITEM_VA(wq->ring,
1171 pd->wqe_idx = wq->ring->pidx;
1172 RING_PUT(wq->ring, 1);
1173 atomic_add_int(&wq->ring->num_used, 1);
1178 wq->tx_stats.tx_reqs++;
1179 wq->tx_stats.tx_wrbs += num_wqes;
1180 wq->tx_stats.tx_bytes += m->m_pkthdr.len;
1181 wq->tx_stats.tx_pkts++;
1183 bus_dmamap_sync(wq->ring->dma.tag, wq->ring->dma.map,
1185 reg_value = (num_wqes << 16) | wq->wq_id;
1197 OCE_WRITE_REG32(sc, db, wq->db_offset, reg_value);
1229 oce_process_tx_completion(struct oce_wq *wq)
1232 POCE_SOFTC sc = (POCE_SOFTC) wq->parent;
1235 pd = &wq->pckts[wq->pkt_desc_tail];
1236 atomic_store_rel_int(&wq->pkt_desc_tail,
1237 (wq->pkt_desc_tail + 1) % OCE_WQ_PACKET_ARRAY_SIZE);
1238 atomic_subtract_int(&wq->ring->num_used, pd->nsegs + 1);
1239 bus_dmamap_sync(wq->tag, pd->map, BUS_DMASYNC_POSTWRITE);
1240 bus_dmamap_unload(wq->tag, pd->map);
1247 if (wq->ring->num_used < (wq->ring->num_items / 2)) {
1249 oce_tx_restart(sc, wq);
1255 oce_tx_restart(POCE_SOFTC sc, struct oce_wq *wq)
1261 if (!drbr_empty(sc->ifp, wq->br))
1262 taskqueue_enqueue(taskqueue_swi, &wq->txtask);
1335 struct oce_wq *wq = arg;
1336 POCE_SOFTC sc = wq->parent;
1340 LOCK(&wq->tx_lock);
1341 rc = oce_multiq_transmit(ifp, NULL, wq);
1344 "TX[%d] restart failed\n", wq->queue_index);
1346 UNLOCK(&wq->tx_lock);
1369 LOCK(&sc->wq[def_q]->tx_lock);
1371 UNLOCK(&sc->wq[def_q]->tx_lock);
1374 sc->wq[def_q]->tx_stats.tx_stops ++;
1388 struct oce_wq *wq = (struct oce_wq *)arg;
1389 POCE_SOFTC sc = wq->parent;
1390 struct oce_cq *cq = wq->cq;
1394 LOCK(&wq->tx_compl_lock);
1401 wq->ring->cidx = cqe->u0.s.wqe_index + 1;
1402 if (wq->ring->cidx >= wq->ring->num_items)
1403 wq->ring->cidx -= wq->ring->num_items;
1405 oce_process_tx_completion(wq);
1406 wq->tx_stats.tx_compl++;
1419 UNLOCK(&wq->tx_compl_lock);
1424 oce_multiq_transmit(if_t ifp, struct mbuf *m, struct oce_wq *wq)
1431 br = wq->br;
1432 queue_index = wq->queue_index;
1451 wq->tx_stats.tx_stops ++;
2307 struct oce_wq *wq;
2333 wq = sc->wq[i];
2334 tx_reqs = wq->tx_stats.tx_reqs;
2457 oce_tx_restart(sc, sc->wq[i]);
2469 struct oce_wq *wq;
2479 for_all_wq_queues(sc, wq, i) {
2480 num_wqes = oce_wq_handler(wq);
2485 if(!wq->ring->num_used)
2495 for_all_wq_queues(sc, wq, i) {
2496 while(wq->ring->num_used) {
2497 LOCK(&wq->tx_compl_lock);
2498 oce_process_tx_completion(wq);
2499 UNLOCK(&wq->tx_compl_lock);
2513 struct oce_wq *wq;
2543 for_all_wq_queues(sc, wq, i)
2544 oce_drain_wq_cq(wq);
2560 struct oce_wq *wq;
2575 for_all_wq_queues(sc, wq, i) {
2576 rc = oce_start_wq(wq);