static int skeleton_eventdev_create(const char *name, int socket_id) { struct rte_eventdev *eventdev; eventdev = rte_event_pmd_vdev_init(name, sizeof(struct skeleton_eventdev), socket_id); if (eventdev == NULL) { PMD_DRV_ERR("Failed to create eventdev vdev %s", name); goto fail; } eventdev->dev_ops = &skeleton_eventdev_ops; eventdev->schedule = NULL; eventdev->enqueue = skeleton_eventdev_enqueue; eventdev->enqueue_burst = skeleton_eventdev_enqueue_burst; eventdev->dequeue = skeleton_eventdev_dequeue; eventdev->dequeue_burst = skeleton_eventdev_dequeue_burst; return 0; fail: return -EFAULT; }
static int ssovf_vdev_probe(struct rte_vdev_device *vdev) { struct octeontx_ssovf_info oinfo; struct ssovf_mbox_dev_info info; struct ssovf_evdev *edev; struct rte_eventdev *eventdev; static int ssovf_init_once; const char *name; int ret; name = rte_vdev_device_name(vdev); /* More than one instance is not supported */ if (ssovf_init_once) { ssovf_log_err("Request to create >1 %s instance", name); return -EINVAL; } eventdev = rte_event_pmd_vdev_init(name, sizeof(struct ssovf_evdev), rte_socket_id()); if (eventdev == NULL) { ssovf_log_err("Failed to create eventdev vdev %s", name); return -ENOMEM; } eventdev->dev_ops = &ssovf_ops; /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) { ssovf_fastpath_fns_set(eventdev); return 0; } ret = octeontx_ssovf_info(&oinfo); if (ret) { ssovf_log_err("Failed to probe and validate ssovfs %d", ret); goto error; } edev = ssovf_pmd_priv(eventdev); edev->max_event_ports = oinfo.total_ssowvfs; edev->max_event_queues = oinfo.total_ssovfs; edev->is_timeout_deq = 0; ret = ssovf_mbox_dev_info(&info); if (ret < 0 || ret != sizeof(struct ssovf_mbox_dev_info)) { ssovf_log_err("Failed to get mbox devinfo %d", ret); goto error; } edev->min_deq_timeout_ns = info.min_deq_timeout_ns; edev->max_deq_timeout_ns = info.max_deq_timeout_ns; edev->max_num_events = info.max_num_events; ssovf_log_dbg("min_deq_tmo=%"PRId64" max_deq_tmo=%"PRId64" max_evts=%d", info.min_deq_timeout_ns, info.max_deq_timeout_ns, info.max_num_events); if (!edev->max_event_ports || !edev->max_event_queues) { ssovf_log_err("Not enough eventdev resource queues=%d ports=%d", edev->max_event_queues, edev->max_event_ports); ret = -ENODEV; goto error; } ssovf_log_info("Initializing %s domain=%d max_queues=%d max_ports=%d", name, oinfo.domain, edev->max_event_queues, edev->max_event_ports); ssovf_init_once = 1; return 0; error: rte_event_pmd_vdev_uninit(name); return ret; }