crypto/dpaa2_sec: fix HMAC supported key sizes
[dpdk.git] / lib / librte_eventdev / rte_eventdev_pmd.h
index e60eca9..3d72acf 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *
- *   Copyright(c) 2016 Cavium networks. All rights reserved.
+ *   Copyright(c) 2016 Cavium, Inc. All rights reserved.
  *
  *   Redistribution and use in source and binary forms, with or without
  *   modification, are permitted provided that the following conditions
@@ -12,7 +12,7 @@
  *       notice, this list of conditions and the following disclaimer in
  *       the documentation and/or other materials provided with the
  *       distribution.
- *     * Neither the name of Cavium networks nor the names of its
+ *     * Neither the name of Cavium, Inc nor the names of its
  *       contributors may be used to endorse or promote products derived
  *       from this software without specific prior written permission.
  *
@@ -46,32 +46,26 @@ extern "C" {
 
 #include <string.h>
 
+#include <rte_common.h>
 #include <rte_dev.h>
-#include <rte_pci.h>
-#include <rte_malloc.h>
 #include <rte_log.h>
-#include <rte_common.h>
+#include <rte_malloc.h>
 
 #include "rte_eventdev.h"
 
-#ifdef RTE_LIBRTE_EVENTDEV_DEBUG
-#define RTE_PMD_DEBUG_TRACE(...) \
-       rte_pmd_debug_trace(__func__, __VA_ARGS__)
-#else
-#define RTE_PMD_DEBUG_TRACE(...)
-#endif
-
 /* Logging Macros */
-#define RTE_EDEV_LOG_ERR(fmt, args...) \
-       RTE_LOG(ERR, EVENTDEV, "%s() line %u: " fmt "\n",  \
-                       __func__, __LINE__, ## args)
+#define RTE_EDEV_LOG_ERR(...) \
+       RTE_LOG(ERR, EVENTDEV, \
+               RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
+                       __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
 
 #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
-#define RTE_EDEV_LOG_DEBUG(fmt, args...) \
-       RTE_LOG(DEBUG, EVENTDEV, "%s() line %u: " fmt "\n",  \
-                       __func__, __LINE__, ## args)
+#define RTE_EDEV_LOG_DEBUG(...) \
+       RTE_LOG(DEBUG, EVENTDEV, \
+               RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
+                       __func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
 #else
-#define RTE_EDEV_LOG_DEBUG(fmt, args...) (void)0
+#define RTE_EDEV_LOG_DEBUG(...) (void)0
 #endif
 
 /* Macros to check for valid device */
@@ -95,7 +89,6 @@ extern "C" {
 /** Global structure used for maintaining state of allocated event devices */
 struct rte_eventdev_global {
        uint8_t nb_devs;        /**< Number of devices found */
-       uint8_t max_devs;       /**< Max number of devices */
 };
 
 extern struct rte_eventdev_global *rte_eventdev_globals;
@@ -121,8 +114,8 @@ rte_event_pmd_get_named_dev(const char *name)
        if (name == NULL)
                return NULL;
 
-       for (i = 0, dev = &rte_eventdevs[i];
-                       i < rte_eventdev_globals->max_devs; i++) {
+       for (i = 0; i < RTE_EVENT_MAX_DEVS; i++) {
+               dev = &rte_eventdevs[i];
                if ((dev->attached == RTE_EVENTDEV_ATTACHED) &&
                                (strcmp(dev->data->name, name) == 0))
                        return dev;
@@ -145,7 +138,7 @@ rte_event_pmd_is_valid_dev(uint8_t dev_id)
 {
        struct rte_eventdev *dev;
 
-       if (dev_id >= rte_eventdev_globals->nb_devs)
+       if (dev_id >= RTE_EVENT_MAX_DEVS)
                return 0;
 
        dev = &rte_eventdevs[dev_id];
@@ -303,6 +296,8 @@ typedef void (*eventdev_port_release_t)(void *port);
 /**
  * Link multiple source event queues to destination event port.
  *
+ * @param dev
+ *   Event device pointer
  * @param port
  *   Event port pointer
  * @param link
@@ -318,13 +313,15 @@ typedef void (*eventdev_port_release_t)(void *port);
  *   Returns 0 on success.
  *
  */
-typedef int (*eventdev_port_link_t)(void *port,
+typedef int (*eventdev_port_link_t)(struct rte_eventdev *dev, void *port,
                const uint8_t queues[], const uint8_t priorities[],
                uint16_t nb_links);
 
 /**
  * Unlink multiple source event queues from destination event port.
  *
+ * @param dev
+ *   Event device pointer
  * @param port
  *   Event port pointer
  * @param queues
@@ -336,7 +333,7 @@ typedef int (*eventdev_port_link_t)(void *port,
  *   Returns 0 on success.
  *
  */
-typedef int (*eventdev_port_unlink_t)(void *port,
+typedef int (*eventdev_port_unlink_t)(struct rte_eventdev *dev, void *port,
                uint8_t queues[], uint16_t nb_unlinks);
 
 /**
@@ -349,8 +346,11 @@ typedef int (*eventdev_port_unlink_t)(void *port,
  * @param[out] timeout_ticks
  *   Value for the *timeout_ticks* parameter in rte_event_dequeue() function
  *
+ * @return
+ *   Returns 0 on success.
+ *
  */
-typedef void (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev,
+typedef int (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev,
                uint64_t ns, uint64_t *timeout_ticks);
 
 /**
@@ -364,6 +364,71 @@ typedef void (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev,
  */
 typedef void (*eventdev_dump_t)(struct rte_eventdev *dev, FILE *f);
 
+/**
+ * Retrieve a set of statistics from device
+ *
+ * @param dev
+ *   Event device pointer
+ * @param ids
+ *   The stat ids to retrieve
+ * @param values
+ *   The returned stat values
+ * @param n
+ *   The number of id values and entries in the values array
+ * @return
+ *   The number of stat values successfully filled into the values array
+ */
+typedef int (*eventdev_xstats_get_t)(const struct rte_eventdev *dev,
+               enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
+               const unsigned int ids[], uint64_t values[], unsigned int n);
+
+/**
+ * Resets the statistic values in xstats for the device, based on mode.
+ */
+typedef int (*eventdev_xstats_reset_t)(struct rte_eventdev *dev,
+               enum rte_event_dev_xstats_mode mode,
+               int16_t queue_port_id,
+               const uint32_t ids[],
+               uint32_t nb_ids);
+
+/**
+ * Get names of extended stats of an event device
+ *
+ * @param dev
+ *   Event device pointer
+ * @param xstats_names
+ *   Array of name values to be filled in
+ * @param size
+ *   Number of values in the xstats_names array
+ * @return
+ *   When size >= the number of stats, return the number of stat values filled
+ *   into the array.
+ *   When size < the number of available stats, return the number of stats
+ *   values, and do not fill in any data into xstats_names.
+ */
+typedef int (*eventdev_xstats_get_names_t)(const struct rte_eventdev *dev,
+               enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
+               struct rte_event_dev_xstats_name *xstats_names,
+               unsigned int *ids, unsigned int size);
+
+/**
+ * Get value of one stats and optionally return its id
+ *
+ * @param dev
+ *   Event device pointer
+ * @param name
+ *   The name of the stat to retrieve
+ * @param id
+ *   Pointer to an unsigned int where we store the stat-id for future reference.
+ *   This pointer may be null if the id is not required.
+ * @return
+ *   The value of the stat, or (uint64_t)-1 if the stat is not found.
+ *   If the stat is not found, the id value will be returned as (unsigned)-1,
+ *   if id pointer is non-NULL
+ */
+typedef uint64_t (*eventdev_xstats_get_by_name)(const struct rte_eventdev *dev,
+               const char *name, unsigned int *id);
+
 /** Event device operations function pointer table */
 struct rte_eventdev_ops {
        eventdev_info_get_t dev_infos_get;      /**< Get device info. */
@@ -394,8 +459,42 @@ struct rte_eventdev_ops {
        /**< Converts ns to *timeout_ticks* value for rte_event_dequeue() */
        eventdev_dump_t dump;
        /* Dump internal information */
+
+       eventdev_xstats_get_t xstats_get;
+       /**< Get extended device statistics. */
+       eventdev_xstats_get_names_t xstats_get_names;
+       /**< Get names of extended stats. */
+       eventdev_xstats_get_by_name xstats_get_by_name;
+       /**< Get one value by name. */
+       eventdev_xstats_reset_t xstats_reset;
+       /**< Reset the statistics values in xstats. */
 };
 
+/**
+ * Allocates a new eventdev slot for an event device and returns the pointer
+ * to that slot for the driver to use.
+ *
+ * @param name
+ *   Unique identifier name for each device
+ * @param socket_id
+ *   Socket to allocate resources on.
+ * @return
+ *   - Slot in the rte_dev_devices array for a new device;
+ */
+struct rte_eventdev *
+rte_event_pmd_allocate(const char *name, int socket_id);
+
+/**
+ * Release the specified eventdev device.
+ *
+ * @param eventdev
+ * The *eventdev* pointer is the address of the *rte_eventdev* structure.
+ * @return
+ *   - 0 on success, negative on error
+ */
+int
+rte_event_pmd_release(struct rte_eventdev *eventdev);
+
 #ifdef __cplusplus
 }
 #endif