``rte_rawdev_info_get()``,
allowing limited driver type-checking and ABI compatibility.
+* rawdev: Changed the return type of the function ``rte_dev_info_get()``
+ from ``void`` to ``int`` allowing the return of error codes from drivers.
+
ABI Changes
-----------
return 0;
}
-static void
+static int
ifpga_rawdev_info_get(struct rte_rawdev *dev,
rte_rawdev_obj_t dev_info,
size_t dev_info_size)
if (!dev_info || dev_info_size != sizeof(*afu_dev)) {
IFPGA_RAWDEV_PMD_ERR("Invalid request");
- return;
+ return -EINVAL;
}
adapter = ifpga_rawdev_get_priv(dev);
if (!adapter)
- return;
+ return -ENOENT;
afu_dev = dev_info;
afu_dev->rawdev = dev;
if (ifpga_fill_afu_dev(acc, afu_dev)) {
IFPGA_RAWDEV_PMD_ERR("cannot get info\n");
- return;
+ return -ENOENT;
}
}
/* get LineSide BAR Index */
if (opae_manager_get_eth_group_region_info(mgr, 0,
&opae_lside_eth_info)) {
- return;
+ return -ENOENT;
}
lside_bar_idx = opae_lside_eth_info.mem_idx;
/* get NICSide BAR Index */
if (opae_manager_get_eth_group_region_info(mgr, 1,
&opae_nside_eth_info)) {
- return;
+ return -ENOENT;
}
nside_bar_idx = opae_nside_eth_info.mem_idx;
if (lside_bar_idx >= PCI_MAX_RESOURCE ||
nside_bar_idx >= PCI_MAX_RESOURCE ||
lside_bar_idx == nside_bar_idx)
- return;
+ return -ENOENT;
/* fill LineSide BAR Index */
afu_dev->mem_resource[lside_bar_idx].phys_addr =
afu_dev->mem_resource[nside_bar_idx].addr =
opae_nside_eth_info.addr;
}
+ return 0;
}
static int
RTE_SET_USED(dev);
}
-static void
+static int
ioat_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info,
size_t dev_info_size)
{
struct rte_ioat_rawdev_config *cfg = dev_info;
struct rte_ioat_rawdev *ioat = dev->dev_private;
- if (cfg != NULL && dev_info_size == sizeof(*cfg))
- cfg->ring_size = ioat->ring_size;
+ if (dev_info == NULL || dev_info_size != sizeof(*cfg))
+ return -EINVAL;
+
+ cfg->ring_size = ioat->ring_size;
+ return 0;
}
static const char * const xstat_names[] = {
return nb_rx;
}
-static void
+static int
ntb_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info,
size_t dev_info_size)
{
if (dev_info_size != sizeof(*info)) {
NTB_LOG(ERR, "Invalid size parameter to %s", __func__);
- return;
+ return -EINVAL;
}
info->mw_cnt = hw->mw_cnt;
if (!hw->queue_size || !hw->queue_pairs) {
NTB_LOG(ERR, "No queue size and queue num assigned.");
- return;
+ return -EAGAIN;
}
hw->hdr_size_per_queue = RTE_ALIGN(sizeof(struct ntb_header) +
hw->queue_size * sizeof(struct ntb_used),
RTE_CACHE_LINE_SIZE);
info->ntb_hdr_size = hw->hdr_size_per_queue * hw->queue_pairs;
+
+ return 0;
}
static int
static struct queue_buffers queue_buf[SKELETON_MAX_QUEUES] = {};
static void clear_queue_bufs(int queue_id);
-static void skeleton_rawdev_info_get(struct rte_rawdev *dev,
+static int skeleton_rawdev_info_get(struct rte_rawdev *dev,
rte_rawdev_obj_t dev_info,
size_t dev_info_size)
{
if (!dev_info || dev_info_size != sizeof(*skeldev_conf)) {
SKELETON_PMD_ERR("Invalid request");
- return;
+ return -EINVAL;
}
skeldev = skeleton_rawdev_get_priv(dev);
skeldev_conf->capabilities = skeldev->capabilities;
skeldev_conf->device_state = skeldev->device_state;
skeldev_conf->firmware_state = skeldev->fw.firmware_state;
+
+ return 0;
}
static int skeleton_rawdev_configure(const struct rte_rawdev *dev,
size_t dev_private_size)
{
struct rte_rawdev *rawdev;
+ int ret = 0;
RTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
RTE_FUNC_PTR_OR_ERR_RET(dev_info, -EINVAL);
if (dev_info->dev_private != NULL) {
RTE_FUNC_PTR_OR_ERR_RET(*rawdev->dev_ops->dev_info_get, -ENOTSUP);
- (*rawdev->dev_ops->dev_info_get)(rawdev, dev_info->dev_private,
+ ret = (*rawdev->dev_ops->dev_info_get)(rawdev,
+ dev_info->dev_private,
dev_private_size);
}
dev_info->device = rawdev->device;
dev_info->socket_id = rawdev->socket_id;
- return 0;
+ return ret;
}
int
* The size of the structure pointed to by dev_info->dev_private
*
* @return
- * Returns 0 on success
+ * Returns 0 on success, negative error code on failure
*/
-typedef void (*rawdev_info_get_t)(struct rte_rawdev *dev,
+typedef int (*rawdev_info_get_t)(struct rte_rawdev *dev,
rte_rawdev_obj_t dev_info,
size_t dev_private_size);