| 6390 | } |
| 6391 | |
| 6392 | static int bnxt_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, |
| 6393 | struct rte_pci_device *pci_dev) |
| 6394 | { |
| 6395 | struct rte_eth_devargs eth_da = { .nb_representor_ports = 0 }; |
| 6396 | struct rte_eth_dev *backing_eth_dev; |
| 6397 | uint16_t num_rep; |
| 6398 | int ret = 0; |
| 6399 | |
| 6400 | if (pci_dev->device.devargs) { |
| 6401 | ret = rte_eth_devargs_parse(pci_dev->device.devargs->args, |
| 6402 | ð_da); |
| 6403 | if (ret) |
| 6404 | return ret; |
| 6405 | } |
| 6406 | |
| 6407 | num_rep = eth_da.nb_representor_ports; |
| 6408 | PMD_DRV_LOG(DEBUG, "nb_representor_ports = %d\n", |
| 6409 | num_rep); |
| 6410 | |
| 6411 | /* We could come here after first level of probe is already invoked |
| 6412 | * as part of an application bringup(OVS-DPDK vswitchd), so first check |
| 6413 | * for already allocated eth_dev for the backing device (PF/Trusted VF) |
| 6414 | */ |
| 6415 | backing_eth_dev = rte_eth_dev_allocated(pci_dev->device.name); |
| 6416 | if (backing_eth_dev == NULL) { |
| 6417 | ret = rte_eth_dev_create(&pci_dev->device, pci_dev->device.name, |
| 6418 | sizeof(struct bnxt), |
| 6419 | eth_dev_pci_specific_init, pci_dev, |
| 6420 | bnxt_dev_init, NULL); |
| 6421 | |
| 6422 | if (ret || !num_rep) |
| 6423 | return ret; |
| 6424 | |
| 6425 | backing_eth_dev = rte_eth_dev_allocated(pci_dev->device.name); |
| 6426 | } |
| 6427 | PMD_DRV_LOG(DEBUG, "BNXT Port:%d pci probe\n", |
| 6428 | backing_eth_dev->data->port_id); |
| 6429 | |
| 6430 | if (!num_rep) |
| 6431 | return ret; |
| 6432 | |
| 6433 | /* probe representor ports now */ |
| 6434 | ret = bnxt_rep_port_probe(pci_dev, ð_da, backing_eth_dev, |
| 6435 | pci_dev->device.devargs->args); |
| 6436 | |
| 6437 | return ret; |
| 6438 | } |
| 6439 | |
| 6440 | static int bnxt_pci_remove(struct rte_pci_device *pci_dev) |
| 6441 | { |
nothing calls this directly
no test coverage detected