| 1086 | } |
| 1087 | |
| 1088 | static int |
| 1089 | dpaa2_eventdev_create(const char *name, struct rte_vdev_device *vdev) |
| 1090 | { |
| 1091 | struct rte_eventdev *eventdev; |
| 1092 | struct dpaa2_eventdev *priv; |
| 1093 | struct dpaa2_dpcon_dev *dpcon_dev = NULL; |
| 1094 | struct dpaa2_dpci_dev *dpci_dev = NULL; |
| 1095 | int ret; |
| 1096 | |
| 1097 | eventdev = rte_event_pmd_vdev_init(name, |
| 1098 | sizeof(struct dpaa2_eventdev), |
| 1099 | rte_socket_id(), vdev); |
| 1100 | if (eventdev == NULL) { |
| 1101 | DPAA2_EVENTDEV_ERR("Failed to create Event device %s", name); |
| 1102 | goto fail; |
| 1103 | } |
| 1104 | |
| 1105 | eventdev->dev_ops = &dpaa2_eventdev_ops; |
| 1106 | eventdev->enqueue = dpaa2_eventdev_enqueue; |
| 1107 | eventdev->enqueue_burst = dpaa2_eventdev_enqueue_burst; |
| 1108 | eventdev->enqueue_new_burst = dpaa2_eventdev_enqueue_burst; |
| 1109 | eventdev->enqueue_forward_burst = dpaa2_eventdev_enqueue_burst; |
| 1110 | eventdev->dequeue = dpaa2_eventdev_dequeue; |
| 1111 | eventdev->dequeue_burst = dpaa2_eventdev_dequeue_burst; |
| 1112 | eventdev->txa_enqueue = dpaa2_eventdev_txa_enqueue; |
| 1113 | eventdev->txa_enqueue_same_dest = dpaa2_eventdev_txa_enqueue_same_dest; |
| 1114 | |
| 1115 | /* For secondary processes, the primary has done all the work */ |
| 1116 | if (rte_eal_process_type() != RTE_PROC_PRIMARY) |
| 1117 | goto done; |
| 1118 | |
| 1119 | priv = eventdev->data->dev_private; |
| 1120 | priv->max_event_queues = 0; |
| 1121 | |
| 1122 | do { |
| 1123 | dpcon_dev = rte_dpaa2_alloc_dpcon_dev(); |
| 1124 | if (!dpcon_dev) |
| 1125 | break; |
| 1126 | priv->evq_info[priv->max_event_queues].dpcon = dpcon_dev; |
| 1127 | |
| 1128 | dpci_dev = rte_dpaa2_alloc_dpci_dev(); |
| 1129 | if (!dpci_dev) { |
| 1130 | rte_dpaa2_free_dpcon_dev(dpcon_dev); |
| 1131 | break; |
| 1132 | } |
| 1133 | priv->evq_info[priv->max_event_queues].dpci = dpci_dev; |
| 1134 | |
| 1135 | ret = dpaa2_eventdev_setup_dpci(dpci_dev, dpcon_dev); |
| 1136 | if (ret) { |
| 1137 | DPAA2_EVENTDEV_ERR( |
| 1138 | "DPCI setup failed: err(%d)", ret); |
| 1139 | return ret; |
| 1140 | } |
| 1141 | priv->max_event_queues++; |
| 1142 | } while (dpcon_dev && dpci_dev); |
| 1143 | |
| 1144 | RTE_LOG(INFO, PMD, "%s eventdev created\n", name); |
| 1145 |
no test coverage detected