1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2016-2017 Cavium, Inc 3 */ 4 5 #ifndef _RTE_EVENTDEV_PMD_VDEV_H_ 6 #define _RTE_EVENTDEV_PMD_VDEV_H_ 7 8 /** @file 9 * RTE Eventdev VDEV PMD APIs 10 * 11 * @note 12 * These API are from event VDEV PMD only and user applications should not call 13 * them directly. 14 */ 15 16 #include <string.h> 17 18 #include <rte_compat.h> 19 #include <rte_config.h> 20 #include <rte_debug.h> 21 #include <rte_eal.h> 22 #include <bus_vdev_driver.h> 23 24 #include "eventdev_pmd.h" 25 26 #ifdef __cplusplus 27 extern "C" { 28 #endif 29 30 /** 31 * @internal 32 * Creates a new virtual event device and returns the pointer to that device. 33 * 34 * @param name 35 * PMD type name 36 * @param dev_private_size 37 * Size of event PMDs private data 38 * @param socket_id 39 * Socket to allocate resources on. 40 * 41 * @return 42 * - Eventdev pointer if device is successfully created. 43 * - NULL if device cannot be created. 44 */ 45 __rte_internal 46 static inline struct rte_eventdev * 47 rte_event_pmd_vdev_init(const char *name, size_t dev_private_size, 48 int socket_id, struct rte_vdev_device *vdev) 49 { 50 51 struct rte_eventdev *eventdev; 52 53 /* Allocate device structure */ 54 eventdev = rte_event_pmd_allocate(name, socket_id); 55 if (eventdev == NULL) 56 return NULL; 57 58 /* Allocate private device structure */ 59 if (rte_eal_process_type() == RTE_PROC_PRIMARY) { 60 eventdev->data->dev_private = 61 rte_zmalloc_socket("eventdev device private", 62 dev_private_size, 63 RTE_CACHE_LINE_SIZE, 64 socket_id); 65 66 if (eventdev->data->dev_private == NULL) 67 rte_panic("Cannot allocate memzone for private device" 68 " data"); 69 } 70 eventdev->dev = &vdev->device; 71 72 return eventdev; 73 } 74 75 /** 76 * @internal 77 * Destroy the given virtual event device 78 * 79 * @param name 80 * PMD type name 81 * @return 82 * - 0 on success, negative on error 83 */ 84 __rte_internal 85 static inline int 86 rte_event_pmd_vdev_uninit(const char *name) 87 { 88 int ret; 89 struct rte_eventdev *eventdev; 90 91 if (name == NULL) 92 return -EINVAL; 93 94 eventdev = rte_event_pmd_get_named_dev(name); 95 if (eventdev == NULL) 96 return -ENODEV; 97 98 ret = rte_event_dev_close(eventdev->data->dev_id); 99 if (ret < 0) 100 return ret; 101 102 /* Free the event device */ 103 rte_event_pmd_release(eventdev); 104 105 return 0; 106 } 107 108 #ifdef __cplusplus 109 } 110 #endif 111 112 #endif /* _RTE_EVENTDEV_PMD_VDEV_H_ */ 113