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