6e7907ee591a01c39de9d1980990271bcee3c7e0
[dpdk.git] / drivers / net / mlx5 / rte_pmd_mlx5.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2020 Mellanox Technologies, Ltd
3  */
4
5 #ifndef RTE_PMD_PRIVATE_MLX5_H_
6 #define RTE_PMD_PRIVATE_MLX5_H_
7
8 /**
9  * @file
10  * MLX5 public header.
11  *
12  * This interface provides the ability to support private PMD
13  * dynamic flags.
14  */
15
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19
20 #define RTE_PMD_MLX5_FINE_GRANULARITY_INLINE "mlx5_fine_granularity_inline"
21
22 /**
23  * Returns the dynamic flags name, that are supported.
24  *
25  * @param[out] names
26  *   Array that is used to return the supported dynamic flags names.
27  * @param[in] n
28  *   The number of elements in the names array.
29  *
30  * @return
31  *   The number of dynamic flags that were copied if not negative.
32  *   Otherwise:
33  *   - ENOMEM - not enough entries in the array
34  *   - EINVAL - invalid array entry
35  */
36 __rte_experimental
37 int rte_pmd_mlx5_get_dyn_flag_names(char *names[], unsigned int n);
38
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. */
42
43 /**
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.
47  *
48  * @param[in] port_id
49  *   The port identifier of the Ethernet device.
50  * @param[in] domains
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.
56  *
57  * @return
58  *   - (0) if successful.
59  *   - Negative value if an error.
60  */
61 __rte_experimental
62 int rte_pmd_mlx5_sync_flow(uint16_t port_id, uint32_t domains);
63
64 /**
65  * External Rx queue rte_flow index minimal value.
66  */
67 #define MLX5_EXTERNAL_RX_QUEUE_ID_MIN (UINT16_MAX - 1000 + 1)
68
69 /**
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.
72  *
73  * @param[in] port_id
74  *   The port identifier of the Ethernet device.
75  * @param[in] dpdk_idx
76  *   Queue index in rte_flow.
77  * @param[in] hw_idx
78  *   Queue index in hardware.
79  *
80  * @return
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.
87  */
88 __rte_experimental
89 int rte_pmd_mlx5_external_rx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx,
90                                           uint32_t hw_idx);
91
92 /**
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.
95  *
96  * @param[in] port_id
97  *   The port identifier of the Ethernet device.
98  * @param[in] dpdk_idx
99  *   Queue index in rte_flow.
100  *
101  * @return
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.
107  */
108 __rte_experimental
109 int rte_pmd_mlx5_external_rx_queue_id_unmap(uint16_t port_id,
110                                             uint16_t dpdk_idx);
111
112 #ifdef __cplusplus
113 }
114 #endif
115
116 #endif /* RTE_PMD_PRIVATE_MLX5_H_ */