| 1527 | } |
| 1528 | |
| 1529 | static int |
| 1530 | ifpga_rawdev_create(struct rte_pci_device *pci_dev, |
| 1531 | int socket_id) |
| 1532 | { |
| 1533 | int ret = 0; |
| 1534 | struct rte_rawdev *rawdev = NULL; |
| 1535 | struct ifpga_rawdev *dev = NULL; |
| 1536 | struct opae_adapter *adapter = NULL; |
| 1537 | struct opae_manager *mgr = NULL; |
| 1538 | struct opae_adapter_data_pci *data = NULL; |
| 1539 | char name[RTE_RAWDEV_NAME_MAX_LEN]; |
| 1540 | int i; |
| 1541 | |
| 1542 | if (!pci_dev) { |
| 1543 | IFPGA_RAWDEV_PMD_ERR("Invalid pci_dev of the device!"); |
| 1544 | ret = -EINVAL; |
| 1545 | goto cleanup; |
| 1546 | } |
| 1547 | |
| 1548 | memset(name, 0, sizeof(name)); |
| 1549 | snprintf(name, RTE_RAWDEV_NAME_MAX_LEN, IFPGA_RAWDEV_NAME_FMT, |
| 1550 | pci_dev->addr.bus, pci_dev->addr.devid, pci_dev->addr.function); |
| 1551 | |
| 1552 | IFPGA_RAWDEV_PMD_INFO("Init %s on NUMA node %d", name, rte_socket_id()); |
| 1553 | |
| 1554 | /* Allocate device structure */ |
| 1555 | rawdev = rte_rawdev_pmd_allocate(name, sizeof(struct opae_adapter), |
| 1556 | socket_id); |
| 1557 | if (rawdev == NULL) { |
| 1558 | IFPGA_RAWDEV_PMD_ERR("Unable to allocate rawdevice"); |
| 1559 | ret = -EINVAL; |
| 1560 | goto cleanup; |
| 1561 | } |
| 1562 | |
| 1563 | ipn3ke_bridge_func.get_ifpga_rawdev = ifpga_rawdev_get; |
| 1564 | ipn3ke_bridge_func.set_i40e_sw_dev = rte_pmd_i40e_set_switch_dev; |
| 1565 | |
| 1566 | dev = ifpga_rawdev_allocate(rawdev); |
| 1567 | if (dev == NULL) { |
| 1568 | IFPGA_RAWDEV_PMD_ERR("Unable to allocate ifpga_rawdevice"); |
| 1569 | ret = -EINVAL; |
| 1570 | goto cleanup; |
| 1571 | } |
| 1572 | dev->aer_enable = 0; |
| 1573 | |
| 1574 | /* alloc OPAE_FPGA_PCI data to register to OPAE hardware level API */ |
| 1575 | data = opae_adapter_data_alloc(OPAE_FPGA_PCI); |
| 1576 | if (!data) { |
| 1577 | ret = -ENOMEM; |
| 1578 | goto cleanup; |
| 1579 | } |
| 1580 | |
| 1581 | /* init opae_adapter_data_pci for device specific information */ |
| 1582 | for (i = 0; i < PCI_MAX_RESOURCE; i++) { |
| 1583 | data->region[i].phys_addr = pci_dev->mem_resource[i].phys_addr; |
| 1584 | data->region[i].len = pci_dev->mem_resource[i].len; |
| 1585 | data->region[i].addr = pci_dev->mem_resource[i].addr; |
| 1586 | } |
no test coverage detected