dev_info->dequeue_timeout_ns = dev->data->dev_conf.dequeue_timeout_ns;
- dev_info->pci_dev = dev->pci_dev;
+ dev_info->dev = dev->dev;
if (dev->driver)
dev_info->driver_name = dev->driver->pci_drv.driver.name;
return 0;
return 0;
}
+#define EVENT_QUEUE_SERVICE_PRIORITY_INVALID (0xdead)
+
static inline int
rte_event_dev_port_config(struct rte_eventdev *dev, uint8_t nb_ports)
{
"nb_ports %u", nb_ports);
return -(ENOMEM);
}
+ for (i = 0; i < nb_ports * RTE_EVENT_MAX_QUEUES_PER_DEV; i++)
+ dev->data->links_map[i] =
+ EVENT_QUEUE_SERVICE_PRIORITY_INVALID;
} else if (dev->data->ports != NULL && nb_ports != 0) {/* re-config */
RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->port_release, -ENOTSUP);
if (nb_ports > old_nb_ports) {
uint8_t new_ps = nb_ports - old_nb_ports;
+ unsigned int old_links_map_end =
+ old_nb_ports * RTE_EVENT_MAX_QUEUES_PER_DEV;
+ unsigned int links_map_end =
+ nb_ports * RTE_EVENT_MAX_QUEUES_PER_DEV;
memset(ports + old_nb_ports, 0,
sizeof(ports[0]) * new_ps);
sizeof(ports_dequeue_depth[0]) * new_ps);
memset(ports_enqueue_depth + old_nb_ports, 0,
sizeof(ports_enqueue_depth[0]) * new_ps);
- memset(links_map +
- (old_nb_ports * RTE_EVENT_MAX_QUEUES_PER_DEV),
- 0, sizeof(ports_enqueue_depth[0]) * new_ps);
+ for (i = old_links_map_end; i < links_map_end; i++)
+ links_map[i] =
+ EVENT_QUEUE_SERVICE_PRIORITY_INVALID;
}
dev->data->ports = ports;
RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_def_conf,
-ENOTSUP);
(*dev->dev_ops->queue_def_conf)(dev, queue_id, &def_conf);
- def_conf.event_queue_cfg = RTE_EVENT_QUEUE_CFG_DEFAULT;
queue_conf = &def_conf;
}
}
for (i = 0; i < nb_links; i++)
- if (queues[i] >= RTE_EVENT_MAX_QUEUES_PER_DEV)
+ if (queues[i] >= dev->data->nb_queues)
return -EINVAL;
diag = (*dev->dev_ops->port_link)(dev, dev->data->ports[port_id],
return diag;
}
-#define EVENT_QUEUE_SERVICE_PRIORITY_INVALID (0xdead)
-
int
rte_event_port_unlink(uint8_t dev_id, uint8_t port_id,
uint8_t queues[], uint16_t nb_unlinks)
}
for (i = 0; i < nb_unlinks; i++)
- if (queues[i] >= RTE_EVENT_MAX_QUEUES_PER_DEV)
+ if (queues[i] >= dev->data->nb_queues)
return -EINVAL;
diag = (*dev->dev_ops->port_unlink)(dev, dev->data->ports[port_id],
links_map = dev->data->links_map;
/* Point links_map to this port specific area */
links_map += (port_id * RTE_EVENT_MAX_QUEUES_PER_DEV);
- for (i = 0; i < RTE_EVENT_MAX_QUEUES_PER_DEV; i++) {
+ for (i = 0; i < dev->data->nb_queues; i++) {
if (links_map[i] != EVENT_QUEUE_SERVICE_PRIORITY_INVALID) {
queues[count] = i;
priorities[count] = (uint8_t)links_map[i];
if (timeout_ticks == NULL)
return -EINVAL;
- (*dev->dev_ops->timeout_ticks)(dev, ns, timeout_ticks);
- return 0;
+ return (*dev->dev_ops->timeout_ticks)(dev, ns, timeout_ticks);
}
int
rte_event_pmd_release(struct rte_eventdev *eventdev)
{
int ret;
+ char mz_name[RTE_EVENTDEV_NAME_MAX_LEN];
+ const struct rte_memzone *mz;
if (eventdev == NULL)
return -EINVAL;
eventdev->attached = RTE_EVENTDEV_DETACHED;
eventdev_globals.nb_devs--;
- eventdev->data = NULL;
+ if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+ rte_free(eventdev->data->dev_private);
+
+ /* Generate memzone name */
+ ret = snprintf(mz_name, sizeof(mz_name), "rte_eventdev_data_%u",
+ eventdev->data->dev_id);
+ if (ret >= (int)sizeof(mz_name))
+ return -EINVAL;
+
+ mz = rte_memzone_lookup(mz_name);
+ if (mz == NULL)
+ return -ENOMEM;
+
+ ret = rte_memzone_free(mz);
+ if (ret)
+ return ret;
+ }
+
+ eventdev->data = NULL;
return 0;
}
return eventdev;
}
+int
+rte_event_pmd_vdev_uninit(const char *name)
+{
+ struct rte_eventdev *eventdev;
+
+ if (name == NULL)
+ return -EINVAL;
+
+ eventdev = rte_event_pmd_get_named_dev(name);
+ if (eventdev == NULL)
+ return -ENODEV;
+
+ /* Free the event device */
+ rte_event_pmd_release(eventdev);
+
+ return 0;
+}
+
int
rte_event_pmd_pci_probe(struct rte_pci_driver *pci_drv,
struct rte_pci_device *pci_dev)
"device data");
}
- eventdev->pci_dev = pci_dev;
+ eventdev->dev = &pci_dev->device;
eventdev->driver = eventdrv;
/* Invoke PMD device initialization function */
/* Free event device */
rte_event_pmd_release(eventdev);
- if (rte_eal_process_type() == RTE_PROC_PRIMARY)
- rte_free(eventdev->data->dev_private);
-
- eventdev->pci_dev = NULL;
+ eventdev->dev = NULL;
eventdev->driver = NULL;
return 0;