| 1224 | } |
| 1225 | |
| 1226 | static int ena_start(struct rte_eth_dev *dev) |
| 1227 | { |
| 1228 | struct ena_adapter *adapter = dev->data->dev_private; |
| 1229 | uint64_t ticks; |
| 1230 | int rc = 0; |
| 1231 | uint16_t i; |
| 1232 | |
| 1233 | /* Cannot allocate memory in secondary process */ |
| 1234 | if (rte_eal_process_type() != RTE_PROC_PRIMARY) { |
| 1235 | PMD_DRV_LOG(WARNING, "dev_start not supported in secondary.\n"); |
| 1236 | return -EPERM; |
| 1237 | } |
| 1238 | |
| 1239 | rc = ena_setup_rx_intr(dev); |
| 1240 | if (rc) |
| 1241 | return rc; |
| 1242 | |
| 1243 | rc = ena_queue_start_all(dev, ENA_RING_TYPE_RX); |
| 1244 | if (rc) |
| 1245 | return rc; |
| 1246 | |
| 1247 | rc = ena_queue_start_all(dev, ENA_RING_TYPE_TX); |
| 1248 | if (rc) |
| 1249 | goto err_start_tx; |
| 1250 | |
| 1251 | if (adapter->edev_data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) { |
| 1252 | rc = ena_rss_configure(adapter); |
| 1253 | if (rc) |
| 1254 | goto err_rss_init; |
| 1255 | } |
| 1256 | |
| 1257 | ena_stats_restart(dev); |
| 1258 | |
| 1259 | adapter->timestamp_wd = rte_get_timer_cycles(); |
| 1260 | adapter->keep_alive_timeout = ENA_DEVICE_KALIVE_TIMEOUT; |
| 1261 | |
| 1262 | ticks = rte_get_timer_hz(); |
| 1263 | rte_timer_reset(&adapter->timer_wd, ticks, PERIODICAL, rte_lcore_id(), |
| 1264 | ena_timer_wd_callback, dev); |
| 1265 | |
| 1266 | ++adapter->dev_stats.dev_start; |
| 1267 | adapter->state = ENA_ADAPTER_STATE_RUNNING; |
| 1268 | |
| 1269 | for (i = 0; i < dev->data->nb_rx_queues; i++) |
| 1270 | dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED; |
| 1271 | for (i = 0; i < dev->data->nb_tx_queues; i++) |
| 1272 | dev->data->tx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED; |
| 1273 | |
| 1274 | return 0; |
| 1275 | |
| 1276 | err_rss_init: |
| 1277 | ena_queue_stop_all(dev, ENA_RING_TYPE_TX); |
| 1278 | err_start_tx: |
| 1279 | ena_queue_stop_all(dev, ENA_RING_TYPE_RX); |
| 1280 | return rc; |
| 1281 | } |
| 1282 | |
| 1283 | static int ena_stop(struct rte_eth_dev *dev) |
nothing calls this directly
no test coverage detected