| 1096 | } |
| 1097 | |
| 1098 | int |
| 1099 | sfc_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; |
no test coverage detected