| 620 | } |
| 621 | |
| 622 | uint16_t |
| 623 | ixgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, |
| 624 | uint16_t nb_pkts) |
| 625 | { |
| 626 | struct ixgbe_tx_queue *txq; |
| 627 | struct ixgbe_tx_entry *sw_ring; |
| 628 | struct ixgbe_tx_entry *txe, *txn; |
| 629 | volatile union ixgbe_adv_tx_desc *txr; |
| 630 | volatile union ixgbe_adv_tx_desc *txd, *txp; |
| 631 | struct rte_mbuf *tx_pkt; |
| 632 | struct rte_mbuf *m_seg; |
| 633 | uint64_t buf_dma_addr; |
| 634 | uint32_t olinfo_status; |
| 635 | uint32_t cmd_type_len; |
| 636 | uint32_t pkt_len; |
| 637 | uint16_t slen; |
| 638 | uint64_t ol_flags; |
| 639 | uint16_t tx_id; |
| 640 | uint16_t tx_last; |
| 641 | uint16_t nb_tx; |
| 642 | uint16_t nb_used; |
| 643 | uint64_t tx_ol_req; |
| 644 | uint32_t ctx = 0; |
| 645 | uint32_t new_ctx; |
| 646 | union ixgbe_tx_offload tx_offload; |
| 647 | #ifdef RTE_LIB_SECURITY |
| 648 | uint8_t use_ipsec; |
| 649 | #endif |
| 650 | |
| 651 | tx_offload.data[0] = 0; |
| 652 | tx_offload.data[1] = 0; |
| 653 | txq = tx_queue; |
| 654 | sw_ring = txq->sw_ring; |
| 655 | txr = txq->tx_ring; |
| 656 | tx_id = txq->tx_tail; |
| 657 | txe = &sw_ring[tx_id]; |
| 658 | txp = NULL; |
| 659 | |
| 660 | /* Determine if the descriptor ring needs to be cleaned. */ |
| 661 | if (txq->nb_tx_free < txq->tx_free_thresh) |
| 662 | ixgbe_xmit_cleanup(txq); |
| 663 | |
| 664 | rte_prefetch0(&txe->mbuf->pool); |
| 665 | |
| 666 | /* TX loop */ |
| 667 | for (nb_tx = 0; nb_tx < nb_pkts; nb_tx++) { |
| 668 | new_ctx = 0; |
| 669 | tx_pkt = *tx_pkts++; |
| 670 | pkt_len = tx_pkt->pkt_len; |
| 671 | |
| 672 | /* |
| 673 | * Determine how many (if any) context descriptors |
| 674 | * are needed for offload functionality. |
| 675 | */ |
| 676 | ol_flags = tx_pkt->ol_flags; |
| 677 | #ifdef RTE_LIB_SECURITY |
| 678 | use_ipsec = txq->using_ipsec && (ol_flags & RTE_MBUF_F_TX_SEC_OFFLOAD); |
| 679 | #endif |
nothing calls this directly
no test coverage detected