MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sfc_rx_qinit

Function sfc_rx_qinit

dpdk/drivers/net/sfc/sfc_rx.c:1098–1306  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1096}
1097
1098int
1099sfc_rx_qinit(struct sfc_adapter *sa, sfc_sw_index_t sw_index,
1100 uint16_t nb_rx_desc, unsigned int socket_id,
1101 const struct rte_eth_rxconf *rx_conf,
1102 struct rte_mempool *mb_pool)
1103{
1104 struct sfc_adapter_shared *sas = sfc_sa2shared(sa);
1105 sfc_ethdev_qid_t ethdev_qid;
1106 const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic);
1107 struct sfc_rss *rss = &sfc_sa2shared(sa)->rss;
1108 int rc;
1109 unsigned int rxq_entries;
1110 unsigned int evq_entries;
1111 unsigned int rxq_max_fill_level;
1112 uint64_t offloads;
1113 uint16_t buf_size;
1114 struct sfc_rxq_info *rxq_info;
1115 struct sfc_evq *evq;
1116 struct sfc_rxq *rxq;
1117 struct sfc_dp_rx_qcreate_info info;
1118 struct sfc_dp_rx_hw_limits hw_limits;
1119 struct sfc_port *port = &sa->port;
1120 uint16_t rx_free_thresh;
1121 const char *error;
1122
1123 memset(&hw_limits, 0, sizeof(hw_limits));
1124 hw_limits.rxq_max_entries = sa->rxq_max_entries;
1125 hw_limits.rxq_min_entries = sa->rxq_min_entries;
1126 hw_limits.evq_max_entries = sa->evq_max_entries;
1127 hw_limits.evq_min_entries = sa->evq_min_entries;
1128
1129 rc = sa->priv.dp_rx->qsize_up_rings(nb_rx_desc, &hw_limits, mb_pool,
1130 &rxq_entries, &evq_entries,
1131 &rxq_max_fill_level);
1132 if (rc != 0)
1133 goto fail_size_up_rings;
1134 SFC_ASSERT(rxq_entries >= sa->rxq_min_entries);
1135 SFC_ASSERT(rxq_entries <= sa->rxq_max_entries);
1136 SFC_ASSERT(rxq_max_fill_level <= nb_rx_desc);
1137
1138 ethdev_qid = sfc_ethdev_rx_qid_by_rxq_sw_index(sas, sw_index);
1139
1140 offloads = rx_conf->offloads;
1141 /* Add device level Rx offloads if the queue is an ethdev Rx queue */
1142 if (ethdev_qid != SFC_ETHDEV_QID_INVALID)
1143 offloads |= sa->eth_dev->data->dev_conf.rxmode.offloads;
1144
1145 rc = sfc_rx_qcheck_conf(sa, rxq_max_fill_level, rx_conf, offloads);
1146 if (rc != 0)
1147 goto fail_bad_conf;
1148
1149 buf_size = sfc_rx_mb_pool_buf_size(sa, mb_pool);
1150 if (buf_size == 0) {
1151 sfc_err(sa,
1152 "RxQ %d (internal %u) mbuf pool object size is too small",
1153 ethdev_qid, sw_index);
1154 rc = EINVAL;
1155 goto fail_bad_conf;

Callers 3

sfc_repr_proxy_rxq_initFunction · 0.85
sfc_mae_counter_rxq_initFunction · 0.85
sfc_rx_queue_setupFunction · 0.85

Calls 15

sfc_sa2sharedFunction · 0.85
efx_nic_cfg_getFunction · 0.85
memsetFunction · 0.85
sfc_rx_qcheck_confFunction · 0.85
sfc_rx_mb_pool_buf_sizeFunction · 0.85
sfc_rx_check_scatterFunction · 0.85
sfc_dp_rx_offload_capaFunction · 0.85
sfc_ft_is_activeFunction · 0.85
sfc_ev_qinitFunction · 0.85
sfc_dma_allocFunction · 0.85
efx_rxq_sizeFunction · 0.85

Tested by

no test coverage detected