Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd. 3 : : */ 4 : : 5 : : #include "sxe2_ethdev.h" 6 : : #include "sxe2_queue.h" 7 : : #include "sxe2_common_log.h" 8 : : #include "sxe2_tx.h" 9 : : #include "sxe2_rx.h" 10 : : 11 : 0 : void sxe2_sw_queue_ctx_hw_cap_set(struct sxe2_adapter *adapter, 12 : : struct sxe2_drv_queue_caps *q_caps) 13 : : { 14 : 0 : adapter->q_ctxt.qp_cnt_assign = q_caps->queues_cnt; 15 : 0 : adapter->q_ctxt.base_idx_in_pf = q_caps->base_idx_in_pf; 16 : 0 : } 17 : : 18 : 0 : int32_t sxe2_queues_init(struct rte_eth_dev *dev) 19 : : { 20 : 0 : struct sxe2_adapter *adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(dev); 21 : 0 : int32_t ret = 0; 22 : 0 : uint16_t buf_size; 23 : 0 : uint16_t frame_size; 24 : 0 : struct sxe2_rx_queue *rxq; 25 : 0 : uint16_t nb_rxq; 26 : : 27 [ # # ]: 0 : if (adapter->is_dev_repr) 28 : : frame_size = SXE2_FRAME_SIZE_MAX - SXE2_ETH_OVERHEAD; 29 : : else 30 : 0 : frame_size = dev->data->mtu + SXE2_ETH_OVERHEAD; 31 : : 32 [ # # ]: 0 : for (nb_rxq = 0; nb_rxq < dev->data->nb_rx_queues; nb_rxq++) { 33 : 0 : rxq = dev->data->rx_queues[nb_rxq]; 34 [ # # ]: 0 : if (!rxq) 35 : 0 : continue; 36 : : 37 [ # # ]: 0 : buf_size = rte_pktmbuf_data_room_size(rxq->mb_pool) - RTE_PKTMBUF_HEADROOM; 38 : 0 : rxq->rx_buf_len = RTE_ALIGN_FLOOR(buf_size, (1 << SXE2_RXQ_CTX_DBUFF_SHIFT)); 39 : 0 : rxq->rx_buf_len = RTE_MIN(rxq->rx_buf_len, SXE2_RX_MAX_DATA_BUF_SIZE); 40 [ # # ]: 0 : if (frame_size > rxq->rx_buf_len) 41 : 0 : dev->data->scattered_rx = 1; 42 : : } 43 : : 44 : 0 : adapter->ptp_ctxt.mbuf_rx_ts_offset = -1; 45 : 0 : adapter->ptp_ctxt.mbuf_rx_ts_flag = 0; 46 [ # # ]: 0 : if (dev->data->dev_conf.rxmode.offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) { 47 : 0 : ret = rte_mbuf_dyn_rx_timestamp_register 48 : 0 : (&adapter->ptp_ctxt.mbuf_rx_ts_offset, 49 : : (uint64_t *)&adapter->ptp_ctxt.mbuf_rx_ts_flag); 50 [ # # ]: 0 : if (ret) 51 : 0 : PMD_LOG_ERR(INIT, "Failed to enable timestamp offloads, ret=%d", ret); 52 : : } 53 : : 54 : 0 : return ret; 55 : : } 56 : : 57 : 0 : int32_t sxe2_queues_start(struct rte_eth_dev *dev) 58 : : { 59 : 0 : int32_t ret = 0; 60 : : 61 : 0 : ret = sxe2_txqs_all_start(dev); 62 [ # # ]: 0 : if (ret) { 63 : 0 : PMD_LOG_ERR(INIT, "Failed to start tx queue."); 64 : 0 : goto l_end; 65 : : } 66 : : 67 : 0 : ret = sxe2_rxqs_all_start(dev); 68 [ # # ]: 0 : if (ret) { 69 : 0 : PMD_LOG_ERR(INIT, "Failed to start rx queue."); 70 : 0 : sxe2_txqs_all_stop(dev); 71 : : } 72 : 0 : l_end: 73 : 0 : return ret; 74 : : } 75 : : 76 : 0 : void sxe2_queues_release(struct rte_eth_dev *dev) 77 : : { 78 : 0 : sxe2_all_rxqs_release(dev); 79 : : 80 : 0 : sxe2_all_txqs_release(dev); 81 : 0 : }