[v6,07/14] net/mlx5: add get hairpin capabilities
Checks
Commit Message
This commits adds the hairpin get capabilities function.
Signed-off-by: Ori Kam <orika@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
---
V6:
- add MLX5 hairpin support to release note.
---
doc/guides/rel_notes/release_19_11.rst | 1 +
drivers/net/mlx5/mlx5.c | 2 ++
drivers/net/mlx5/mlx5.h | 3 ++-
drivers/net/mlx5/mlx5_ethdev.c | 27 +++++++++++++++++++++++++++
4 files changed, 32 insertions(+), 1 deletion(-)
@@ -149,6 +149,7 @@ New Features
* Added support for VLAN set PCP offload command.
* Added support for VLAN set VID offload command.
* Added support for matching on packets withe Geneve tunnel header.
+ * Added hairpin support.
* **Updated the AF_XDP PMD.**
@@ -1039,6 +1039,7 @@ struct mlx5_dev_spawn_data {
.udp_tunnel_port_add = mlx5_udp_tunnel_port_add,
.get_module_info = mlx5_get_module_info,
.get_module_eeprom = mlx5_get_module_eeprom,
+ .hairpin_cap_get = mlx5_hairpin_cap_get,
};
/* Available operations from secondary process. */
@@ -1101,6 +1102,7 @@ struct mlx5_dev_spawn_data {
.is_removed = mlx5_is_removed,
.get_module_info = mlx5_get_module_info,
.get_module_eeprom = mlx5_get_module_eeprom,
+ .hairpin_cap_get = mlx5_hairpin_cap_get,
};
/**
@@ -789,7 +789,8 @@ int mlx5_get_module_info(struct rte_eth_dev *dev,
struct rte_eth_dev_module_info *modinfo);
int mlx5_get_module_eeprom(struct rte_eth_dev *dev,
struct rte_dev_eeprom_info *info);
-
+int mlx5_hairpin_cap_get(struct rte_eth_dev *dev,
+ struct rte_eth_hairpin_cap *cap);
/* mlx5_mac.c */
int mlx5_get_mac(struct rte_eth_dev *dev, uint8_t (*mac)[RTE_ETHER_ADDR_LEN]);
@@ -2114,3 +2114,30 @@ int mlx5_get_module_eeprom(struct rte_eth_dev *dev,
rte_free(eeprom);
return ret;
}
+
+/**
+ * DPDK callback to retrieve hairpin capabilities.
+ *
+ * @param dev
+ * Pointer to Ethernet device structure.
+ * @param[out] cap
+ * Storage for hairpin capability data.
+ *
+ * @return
+ * 0 on success, a negative errno value otherwise and rte_errno is set.
+ */
+int mlx5_hairpin_cap_get(struct rte_eth_dev *dev,
+ struct rte_eth_hairpin_cap *cap)
+{
+ struct mlx5_priv *priv = dev->data->dev_private;
+
+ if (priv->sh->devx == 0) {
+ rte_errno = ENOTSUP;
+ return -rte_errno;
+ }
+ cap->max_nb_queues = UINT16_MAX;
+ cap->max_rx_2_tx = 1;
+ cap->max_tx_2_rx = 1;
+ cap->max_nb_desc = 8192;
+ return 0;
+}