*
* This API allow applications to configure and use generic devices having
* no specific type already available in DPDK.
- *
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
*/
#ifdef __cplusplus
#include <rte_memory.h>
#include <rte_errno.h>
-/* Rawdevice object - essentially a void to be typecasted by implementation */
+/* Rawdevice object - essentially a void to be typecast by implementation */
typedef void *rte_rawdev_obj_t;
/**
*
* @param[out] dev_info
* A pointer to a structure of type *rte_rawdev_info* to be filled with the
- * contextual information of the device.
+ * contextual information of the device. The dev_info->dev_private field
+ * should point to an appropriate buffer space for holding the device-
+ * specific info for that hardware.
+ * If the dev_private field is set to NULL, then the device-specific info
+ * function will not be called and only basic information about the device
+ * will be returned. This can be used to safely query the type of a rawdev
+ * instance without needing to know the size of the private data to return.
+ *
+ * @param dev_private_size
+ * The length of the memory space pointed to by dev_private in dev_info.
+ * This should be set to the size of the expected private structure to be
+ * returned, and may be checked by drivers to ensure the expected struct
+ * type is provided.
*
* @return
* - 0: Success, driver updates the contextual information of the raw device
*
*/
int
-rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info);
+rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info,
+ size_t dev_private_size);
/**
* Configure a raw device.
* driver/implementation can use to configure the device. It is also assumed
* that once the configuration is done, a `queue_id` type field can be used
* to refer to some arbitrary internal representation of a queue.
+ * @param dev_private_size
+ * The length of the memory space pointed to by dev_private in dev_info.
+ * This should be set to the size of the expected private structure to be
+ * used by the driver, and may be checked by drivers to ensure the expected
+ * struct type is provided.
*
* @return
* - 0: Success, device configured.
* - <0: Error code returned by the driver configuration function.
*/
int
-rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf);
+rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf,
+ size_t dev_private_size);
/**
* previously supplied to rte_rawdev_configure().
* @param[out] queue_conf
* The pointer to the default raw queue configuration data.
+ * @param queue_conf_size
+ * The size of the structure pointed to by queue_conf
* @return
* - 0: Success, driver updates the default raw queue configuration data.
* - <0: Error code returned by the driver info get function.
int
rte_rawdev_queue_conf_get(uint16_t dev_id,
uint16_t queue_id,
- rte_rawdev_obj_t queue_conf);
+ rte_rawdev_obj_t queue_conf,
+ size_t queue_conf_size);
/**
* Allocate and set up a raw queue for a raw device.
* @param queue_conf
* The pointer to the configuration data to be used for the raw queue.
* NULL value is allowed, in which case default configuration used.
+ * @param queue_conf_size
+ * The size of the structure pointed to by queue_conf
*
* @see rte_rawdev_queue_conf_get()
*
int
rte_rawdev_queue_setup(uint16_t dev_id,
uint16_t queue_id,
- rte_rawdev_obj_t queue_conf);
+ rte_rawdev_obj_t queue_conf,
+ size_t queue_conf_size);
/**
* Release and deallocate a raw queue from a raw device.
*/
int
rte_rawdev_queue_release(uint16_t dev_id, uint16_t queue_id);
+
/**
* Get the number of raw queues on a specific raw device
*
* @param dev_id
* Raw device identifiers
* @return
- * 0 for sucessful reset,
+ * 0 for successful reset,
* !0 for failure in resetting
*/
int
* @param dev_id
* The identifier of the device to configure.
* @param buffers
- * Collection of buffers for enqueueing
+ * Collection of buffers for enqueuing
* @param count
* Count of buffers to enqueue
* @param context