1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*d30ea906Sjfb8856606  * Copyright(c) 2016-2017 Cavium, Inc
32bfe3f2eSlogwang  */
42bfe3f2eSlogwang 
52bfe3f2eSlogwang #ifndef _RTE_EVENTDEV_PMD_VDEV_H_
62bfe3f2eSlogwang #define _RTE_EVENTDEV_PMD_VDEV_H_
72bfe3f2eSlogwang 
82bfe3f2eSlogwang /** @file
92bfe3f2eSlogwang  * RTE Eventdev VDEV PMD APIs
102bfe3f2eSlogwang  *
112bfe3f2eSlogwang  * @note
122bfe3f2eSlogwang  * These API are from event VDEV PMD only and user applications should not call
132bfe3f2eSlogwang  * them directly.
142bfe3f2eSlogwang  */
152bfe3f2eSlogwang 
162bfe3f2eSlogwang #ifdef __cplusplus
172bfe3f2eSlogwang extern "C" {
182bfe3f2eSlogwang #endif
192bfe3f2eSlogwang 
202bfe3f2eSlogwang #include <string.h>
212bfe3f2eSlogwang 
222bfe3f2eSlogwang #include <rte_config.h>
232bfe3f2eSlogwang #include <rte_debug.h>
242bfe3f2eSlogwang #include <rte_eal.h>
252bfe3f2eSlogwang #include <rte_bus_vdev.h>
262bfe3f2eSlogwang 
272bfe3f2eSlogwang #include "rte_eventdev_pmd.h"
282bfe3f2eSlogwang 
292bfe3f2eSlogwang /**
302bfe3f2eSlogwang  * @internal
312bfe3f2eSlogwang  * Creates a new virtual event device and returns the pointer to that device.
322bfe3f2eSlogwang  *
332bfe3f2eSlogwang  * @param name
342bfe3f2eSlogwang  *   PMD type name
352bfe3f2eSlogwang  * @param dev_private_size
362bfe3f2eSlogwang  *   Size of event PMDs private data
372bfe3f2eSlogwang  * @param socket_id
382bfe3f2eSlogwang  *   Socket to allocate resources on.
392bfe3f2eSlogwang  *
402bfe3f2eSlogwang  * @return
412bfe3f2eSlogwang  *   - Eventdev pointer if device is successfully created.
422bfe3f2eSlogwang  *   - NULL if device cannot be created.
432bfe3f2eSlogwang  */
442bfe3f2eSlogwang static inline struct rte_eventdev *
rte_event_pmd_vdev_init(const char * name,size_t dev_private_size,int socket_id)452bfe3f2eSlogwang rte_event_pmd_vdev_init(const char *name, size_t dev_private_size,
462bfe3f2eSlogwang 		int socket_id)
472bfe3f2eSlogwang {
482bfe3f2eSlogwang 
492bfe3f2eSlogwang 	struct rte_eventdev *eventdev;
502bfe3f2eSlogwang 
512bfe3f2eSlogwang 	/* Allocate device structure */
522bfe3f2eSlogwang 	eventdev = rte_event_pmd_allocate(name, socket_id);
532bfe3f2eSlogwang 	if (eventdev == NULL)
542bfe3f2eSlogwang 		return NULL;
552bfe3f2eSlogwang 
562bfe3f2eSlogwang 	/* Allocate private device structure */
572bfe3f2eSlogwang 	if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
582bfe3f2eSlogwang 		eventdev->data->dev_private =
592bfe3f2eSlogwang 				rte_zmalloc_socket("eventdev device private",
602bfe3f2eSlogwang 						dev_private_size,
612bfe3f2eSlogwang 						RTE_CACHE_LINE_SIZE,
622bfe3f2eSlogwang 						socket_id);
632bfe3f2eSlogwang 
642bfe3f2eSlogwang 		if (eventdev->data->dev_private == NULL)
652bfe3f2eSlogwang 			rte_panic("Cannot allocate memzone for private device"
662bfe3f2eSlogwang 					" data");
672bfe3f2eSlogwang 	}
682bfe3f2eSlogwang 
692bfe3f2eSlogwang 	return eventdev;
702bfe3f2eSlogwang }
712bfe3f2eSlogwang 
722bfe3f2eSlogwang /**
732bfe3f2eSlogwang  * @internal
742bfe3f2eSlogwang  * Destroy the given virtual event device
752bfe3f2eSlogwang  *
762bfe3f2eSlogwang  * @param name
772bfe3f2eSlogwang  *   PMD type name
782bfe3f2eSlogwang  * @return
792bfe3f2eSlogwang  *   - 0 on success, negative on error
802bfe3f2eSlogwang  */
812bfe3f2eSlogwang static inline int
rte_event_pmd_vdev_uninit(const char * name)822bfe3f2eSlogwang rte_event_pmd_vdev_uninit(const char *name)
832bfe3f2eSlogwang {
842bfe3f2eSlogwang 	int ret;
852bfe3f2eSlogwang 	struct rte_eventdev *eventdev;
862bfe3f2eSlogwang 
872bfe3f2eSlogwang 	if (name == NULL)
882bfe3f2eSlogwang 		return -EINVAL;
892bfe3f2eSlogwang 
902bfe3f2eSlogwang 	eventdev = rte_event_pmd_get_named_dev(name);
912bfe3f2eSlogwang 	if (eventdev == NULL)
922bfe3f2eSlogwang 		return -ENODEV;
932bfe3f2eSlogwang 
942bfe3f2eSlogwang 	ret = rte_event_dev_close(eventdev->data->dev_id);
952bfe3f2eSlogwang 	if (ret < 0)
962bfe3f2eSlogwang 		return ret;
972bfe3f2eSlogwang 
982bfe3f2eSlogwang 	/* Free the event device */
992bfe3f2eSlogwang 	rte_event_pmd_release(eventdev);
1002bfe3f2eSlogwang 
1012bfe3f2eSlogwang 	return 0;
1022bfe3f2eSlogwang }
1032bfe3f2eSlogwang 
1042bfe3f2eSlogwang #ifdef __cplusplus
1052bfe3f2eSlogwang }
1062bfe3f2eSlogwang #endif
1072bfe3f2eSlogwang 
1082bfe3f2eSlogwang #endif /* _RTE_EVENTDEV_PMD_VDEV_H_ */
109