static int cryptodev_scheduler_remove(struct rte_vdev_device *vdev) { const char *name; struct rte_cryptodev *dev; struct scheduler_ctx *sched_ctx; if (vdev == NULL) return -EINVAL; name = rte_vdev_device_name(vdev); dev = rte_cryptodev_pmd_get_named_dev(name); if (dev == NULL) return -EINVAL; sched_ctx = dev->data->dev_private; if (sched_ctx->nb_slaves) { uint32_t i; for (i = 0; i < sched_ctx->nb_slaves; i++) rte_cryptodev_scheduler_slave_detach(dev->data->dev_id, sched_ctx->slaves[i].dev_id); } return rte_cryptodev_pmd_destroy(dev); }
static int cryptodev_scheduler_remove(struct rte_vdev_device *vdev) { const char *name; struct rte_cryptodev *dev; struct scheduler_ctx *sched_ctx; if (vdev == NULL) return -EINVAL; name = rte_vdev_device_name(vdev); dev = rte_cryptodev_pmd_get_named_dev(name); if (dev == NULL) return -EINVAL; sched_ctx = dev->data->dev_private; if (sched_ctx->nb_slaves) { uint32_t i; for (i = 0; i < sched_ctx->nb_slaves; i++) rte_cryptodev_scheduler_slave_detach(dev->data->dev_id, sched_ctx->slaves[i].dev_id); } RTE_LOG(INFO, PMD, "Closing Crypto Scheduler device %s on numa " "socket %u\n", name, rte_socket_id()); return 0; }
static int ssovf_vdev_remove(struct rte_vdev_device *vdev) { const char *name; name = rte_vdev_device_name(vdev); ssovf_log_info("Closing %s", name); return rte_event_pmd_vdev_uninit(name); }
static int skeleton_eventdev_remove(struct rte_vdev_device *vdev) { const char *name; name = rte_vdev_device_name(vdev); PMD_DRV_LOG(INFO, "Closing %s on NUMA node %d", name, rte_socket_id()); return rte_event_pmd_vdev_uninit(name); }
static int skeleton_eventdev_probe(struct rte_vdev_device *vdev) { const char *name; name = rte_vdev_device_name(vdev); RTE_LOG(INFO, PMD, "Initializing %s on NUMA node %d\n", name, rte_socket_id()); return skeleton_eventdev_create(name, rte_socket_id()); }
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; }