static void __mlxsw_pci_queue_doorbell_arm_set(struct mlxsw_pci *mlxsw_pci, struct mlxsw_pci_queue *q, u16 val) { mlxsw_pci_write32(mlxsw_pci, DOORBELL(mlxsw_pci->doorbell_offset, mlxsw_pci_doorbell_arm_type_offset[q->type], q->num), val); }
static uint16_t bnx2x_xmit_pkts(void *p_txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { struct bnx2x_tx_queue *txq; struct bnx2x_softc *sc; struct bnx2x_fastpath *fp; uint16_t nb_tx_pkts; uint16_t nb_pkt_sent = 0; uint32_t ret; txq = p_txq; sc = txq->sc; fp = &sc->fp[txq->queue_id]; if ((unlikely((txq->nb_tx_desc - txq->nb_tx_avail) > txq->tx_free_thresh))) bnx2x_txeof(sc, fp); nb_tx_pkts = RTE_MIN(nb_pkts, txq->nb_tx_avail / BDS_PER_TX_PKT); if (unlikely(nb_tx_pkts == 0)) return 0; while (nb_tx_pkts--) { struct rte_mbuf *m = *tx_pkts++; assert(m != NULL); ret = bnx2x_tx_encap(txq, m); fp->tx_db.data.prod += ret; nb_pkt_sent++; } bnx2x_update_fp_sb_idx(fp); mb(); DOORBELL(sc, txq->queue_id, fp->tx_db.raw); mb(); if ((txq->nb_tx_desc - txq->nb_tx_avail) > txq->tx_free_thresh) bnx2x_txeof(sc, fp); return nb_pkt_sent; }