1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2020 Mellanox Technologies, Ltd
5 #ifndef RTE_PMD_PRIVATE_MLX5_H_
6 #define RTE_PMD_PRIVATE_MLX5_H_
12 * This interface provides the ability to support private PMD
20 #define RTE_PMD_MLX5_FINE_GRANULARITY_INLINE "mlx5_fine_granularity_inline"
23 * Returns the dynamic flags name, that are supported.
26 * Array that is used to return the supported dynamic flags names.
28 * The number of elements in the names array.
31 * The number of dynamic flags that were copied if not negative.
33 * - ENOMEM - not enough entries in the array
34 * - EINVAL - invalid array entry
37 int rte_pmd_mlx5_get_dyn_flag_names(char *names[], unsigned int n);
39 #define MLX5_DOMAIN_BIT_NIC_RX (1 << 0) /**< NIC RX domain bit mask. */
40 #define MLX5_DOMAIN_BIT_NIC_TX (1 << 1) /**< NIC TX domain bit mask. */
41 #define MLX5_DOMAIN_BIT_FDB (1 << 2) /**< FDB (TX + RX) domain bit mask. */
44 * Synchronize the flows to make them take effort on hardware.
45 * It only supports DR flows now. For DV and Verbs flows, there is no need to
46 * call this function, and a success will return directly in case of Verbs.
49 * The port identifier of the Ethernet device.
51 * Refer to "/usr/include/infiniband/mlx5dv.h".
52 * Bitmask of domains in which the synchronization will be done.
53 * MLX5_DOMAIN_BIT* macros are used to specify the domains.
54 * An ADD or OR operation could be used to synchronize flows in more than
55 * one domain per call.
58 * - (0) if successful.
59 * - Negative value if an error.
62 int rte_pmd_mlx5_sync_flow(uint16_t port_id, uint32_t domains);
65 * External Rx queue rte_flow index minimal value.
67 #define MLX5_EXTERNAL_RX_QUEUE_ID_MIN (UINT16_MAX - 1000 + 1)
70 * Update mapping between rte_flow queue index (16 bits) and HW queue index (32
71 * bits) for RxQs which is created outside the PMD.
74 * The port identifier of the Ethernet device.
76 * Queue index in rte_flow.
78 * Queue index in hardware.
81 * 0 on success, a negative errno value otherwise and rte_errno is set.
82 * Possible values for rte_errno:
83 * - EEXIST - a mapping with the same rte_flow index already exists.
84 * - EINVAL - invalid rte_flow index, out of range.
85 * - ENODEV - there is no Ethernet device for this port id.
86 * - ENOTSUP - the port doesn't support external RxQ.
89 int rte_pmd_mlx5_external_rx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx,
93 * Remove mapping between rte_flow queue index (16 bits) and HW queue index (32
94 * bits) for RxQs which is created outside the PMD.
97 * The port identifier of the Ethernet device.
99 * Queue index in rte_flow.
102 * 0 on success, a negative errno value otherwise and rte_errno is set.
103 * Possible values for rte_errno:
104 * - EINVAL - invalid index, out of range, still referenced or doesn't exist.
105 * - ENODEV - there is no Ethernet device for this port id.
106 * - ENOTSUP - the port doesn't support external RxQ.
109 int rte_pmd_mlx5_external_rx_queue_id_unmap(uint16_t port_id,
116 #endif /* RTE_PMD_PRIVATE_MLX5_H_ */