117ad3af9SDekel Peled /* SPDX-License-Identifier: BSD-3-Clause
217ad3af9SDekel Peled * Copyright 2020 Mellanox Technologies, Ltd
317ad3af9SDekel Peled */
417ad3af9SDekel Peled
517ad3af9SDekel Peled #ifndef RTE_PMD_MLX5_FLOW_OS_H_
617ad3af9SDekel Peled #define RTE_PMD_MLX5_FLOW_OS_H_
717ad3af9SDekel Peled
8e4ed8de3SDekel Peled #include "mlx5_flow.h"
9e4ed8de3SDekel Peled
10e4ed8de3SDekel Peled #ifdef HAVE_IBV_FLOW_DV_SUPPORT
11e4ed8de3SDekel Peled extern const struct mlx5_flow_driver_ops mlx5_flow_dv_drv_ops;
122b679150SSuanming Mou extern const struct mlx5_flow_driver_ops mlx5_flow_hw_drv_ops;
13e4ed8de3SDekel Peled #endif
14e4ed8de3SDekel Peled
15e4ed8de3SDekel Peled /**
16e4ed8de3SDekel Peled * Get OS enforced flow type. MLX5_FLOW_TYPE_MAX means "non enforced type".
17e4ed8de3SDekel Peled *
18e4ed8de3SDekel Peled * @return
19e4ed8de3SDekel Peled * Flow type (MLX5_FLOW_TYPE_MAX)
20e4ed8de3SDekel Peled */
21e4ed8de3SDekel Peled static inline enum mlx5_flow_drv_type
mlx5_flow_os_get_type(void)22e4ed8de3SDekel Peled mlx5_flow_os_get_type(void)
23e4ed8de3SDekel Peled {
24e4ed8de3SDekel Peled return MLX5_FLOW_TYPE_MAX;
25e4ed8de3SDekel Peled }
26e4ed8de3SDekel Peled
2717ad3af9SDekel Peled /**
2817ad3af9SDekel Peled * Check if item type is supported.
2917ad3af9SDekel Peled *
3017ad3af9SDekel Peled * @param item
3117ad3af9SDekel Peled * Item type to check.
3217ad3af9SDekel Peled *
3317ad3af9SDekel Peled * @return
3417ad3af9SDekel Peled * True is this item type is supported, false if not supported.
3517ad3af9SDekel Peled */
3617ad3af9SDekel Peled static inline bool
mlx5_flow_os_item_supported(int item __rte_unused)3717ad3af9SDekel Peled mlx5_flow_os_item_supported(int item __rte_unused)
3817ad3af9SDekel Peled {
3917ad3af9SDekel Peled return true;
4017ad3af9SDekel Peled }
4117ad3af9SDekel Peled
4217ad3af9SDekel Peled /**
4317ad3af9SDekel Peled * Check if action type is supported.
4417ad3af9SDekel Peled *
4517ad3af9SDekel Peled * @param action
4617ad3af9SDekel Peled * Action type to check.
4717ad3af9SDekel Peled *
4817ad3af9SDekel Peled * @return
4917ad3af9SDekel Peled * True is this action type is supported, false if not supported.
5017ad3af9SDekel Peled */
5117ad3af9SDekel Peled static inline bool
mlx5_flow_os_action_supported(int action __rte_unused)5217ad3af9SDekel Peled mlx5_flow_os_action_supported(int action __rte_unused)
5317ad3af9SDekel Peled {
5417ad3af9SDekel Peled return true;
5517ad3af9SDekel Peled }
5617ad3af9SDekel Peled
57e57b8587SDekel Peled /**
58e57b8587SDekel Peled * Create flow rule.
59e57b8587SDekel Peled *
60e57b8587SDekel Peled * @param[in] matcher
61e57b8587SDekel Peled * Pointer to match mask structure.
62e57b8587SDekel Peled * @param[in] match_value
63e57b8587SDekel Peled * Pointer to match value structure.
64e57b8587SDekel Peled * @param[in] num_actions
65e57b8587SDekel Peled * Number of actions in flow rule.
66e57b8587SDekel Peled * @param[in] actions
67e57b8587SDekel Peled * Pointer to array of flow rule actions.
68e57b8587SDekel Peled * @param[out] flow
69e57b8587SDekel Peled * Pointer to a valid flow rule object on success, NULL otherwise.
70e57b8587SDekel Peled *
71e57b8587SDekel Peled * @return
72e57b8587SDekel Peled * 0 on success, or -1 on failure and errno is set.
73e57b8587SDekel Peled */
74e57b8587SDekel Peled static inline int
mlx5_flow_os_create_flow(void * matcher,void * match_value,size_t num_actions,void * actions[],void ** flow)75e57b8587SDekel Peled mlx5_flow_os_create_flow(void *matcher, void *match_value,
76e57b8587SDekel Peled size_t num_actions, void *actions[], void **flow)
77e57b8587SDekel Peled {
78e57b8587SDekel Peled *flow = mlx5_glue->dv_create_flow(matcher, match_value,
79e57b8587SDekel Peled num_actions, actions);
80e57b8587SDekel Peled return (*flow) ? 0 : -1;
81e57b8587SDekel Peled }
82e57b8587SDekel Peled
83e57b8587SDekel Peled /**
84e57b8587SDekel Peled * Destroy flow rule.
85e57b8587SDekel Peled *
86e57b8587SDekel Peled * @param[in] drv_flow_ptr
87e57b8587SDekel Peled * Pointer to flow rule object.
88e57b8587SDekel Peled *
89e57b8587SDekel Peled * @return
90e57b8587SDekel Peled * 0 on success, or the value of errno on failure.
91e57b8587SDekel Peled */
92e57b8587SDekel Peled static inline int
mlx5_flow_os_destroy_flow(void * drv_flow_ptr)93e57b8587SDekel Peled mlx5_flow_os_destroy_flow(void *drv_flow_ptr)
94e57b8587SDekel Peled {
95e57b8587SDekel Peled return mlx5_glue->dv_destroy_flow(drv_flow_ptr);
96e57b8587SDekel Peled }
97e57b8587SDekel Peled
98e57b8587SDekel Peled /**
99e57b8587SDekel Peled * Create flow table.
100e57b8587SDekel Peled *
101e57b8587SDekel Peled * @param[in] domain
102e57b8587SDekel Peled * Pointer to relevant domain.
103e57b8587SDekel Peled * @param[in] table_id
104e57b8587SDekel Peled * Table ID.
105e57b8587SDekel Peled * @param[out] table
106e57b8587SDekel Peled * Pointer to a valid flow table object on success, NULL otherwise.
107e57b8587SDekel Peled *
108e57b8587SDekel Peled * @return
109e57b8587SDekel Peled * 0 on success, or -1 on failure and errno is set.
110e57b8587SDekel Peled */
111e57b8587SDekel Peled static inline int
mlx5_flow_os_create_flow_tbl(void * domain,uint32_t table_id,void ** table)112e57b8587SDekel Peled mlx5_flow_os_create_flow_tbl(void *domain, uint32_t table_id, void **table)
113e57b8587SDekel Peled {
114e57b8587SDekel Peled *table = mlx5_glue->dr_create_flow_tbl(domain, table_id);
115e57b8587SDekel Peled return (*table) ? 0 : -1;
116e57b8587SDekel Peled }
117e57b8587SDekel Peled
118e57b8587SDekel Peled /**
119e57b8587SDekel Peled * Destroy flow table.
120e57b8587SDekel Peled *
121e57b8587SDekel Peled * @param[in] table
122e57b8587SDekel Peled * Pointer to table object to destroy.
123e57b8587SDekel Peled *
124e57b8587SDekel Peled * @return
125e57b8587SDekel Peled * 0 on success, or the value of errno on failure.
126e57b8587SDekel Peled */
127e57b8587SDekel Peled static inline int
mlx5_flow_os_destroy_flow_tbl(void * table)128e57b8587SDekel Peled mlx5_flow_os_destroy_flow_tbl(void *table)
129e57b8587SDekel Peled {
130e57b8587SDekel Peled return mlx5_glue->dr_destroy_flow_tbl(table);
131e57b8587SDekel Peled }
132e57b8587SDekel Peled
133e57b8587SDekel Peled /**
134e57b8587SDekel Peled * Create flow matcher in a flow table.
135e57b8587SDekel Peled *
136e57b8587SDekel Peled * @param[in] ctx
137e57b8587SDekel Peled * Pointer to relevant device context.
138e57b8587SDekel Peled * @param[in] attr
139e57b8587SDekel Peled * Pointer to relevant attributes.
140e57b8587SDekel Peled * @param[in] table
141e57b8587SDekel Peled * Pointer to table object.
142e57b8587SDekel Peled * @param[out] matcher
143e57b8587SDekel Peled * Pointer to a valid flow matcher object on success, NULL otherwise.
144e57b8587SDekel Peled *
145e57b8587SDekel Peled * @return
146e57b8587SDekel Peled * 0 on success, or -1 on failure and errno is set.
147e57b8587SDekel Peled */
148e57b8587SDekel Peled static inline int
mlx5_flow_os_create_flow_matcher(void * ctx,void * attr,void * table,void ** matcher)149e57b8587SDekel Peled mlx5_flow_os_create_flow_matcher(void *ctx, void *attr, void *table,
150e57b8587SDekel Peled void **matcher)
151e57b8587SDekel Peled {
152e57b8587SDekel Peled *matcher = mlx5_glue->dv_create_flow_matcher(ctx, attr, table);
153e57b8587SDekel Peled return (*matcher) ? 0 : -1;
154e57b8587SDekel Peled }
155e57b8587SDekel Peled
156e57b8587SDekel Peled /**
157e57b8587SDekel Peled * Destroy flow matcher.
158e57b8587SDekel Peled *
159e57b8587SDekel Peled * @param[in] matcher
160e57b8587SDekel Peled * Pointer to matcher object to destroy.
161e57b8587SDekel Peled *
162e57b8587SDekel Peled * @return
163e57b8587SDekel Peled * 0 on success, or the value of errno on failure.
164e57b8587SDekel Peled */
165e57b8587SDekel Peled static inline int
mlx5_flow_os_destroy_flow_matcher(void * matcher)166e57b8587SDekel Peled mlx5_flow_os_destroy_flow_matcher(void *matcher)
167e57b8587SDekel Peled {
168e57b8587SDekel Peled return mlx5_glue->dv_destroy_flow_matcher(matcher);
169e57b8587SDekel Peled }
170e57b8587SDekel Peled
171b293fbf9SDekel Peled /**
172b293fbf9SDekel Peled * Create flow action: packet reformat.
173b293fbf9SDekel Peled *
174b293fbf9SDekel Peled * @param[in] ctx
175b293fbf9SDekel Peled * Pointer to relevant device context.
176b293fbf9SDekel Peled * @param[in] domain
177b293fbf9SDekel Peled * Pointer to domain handler.
178b293fbf9SDekel Peled * @param[in] resource
179b293fbf9SDekel Peled * Pointer to action data resource.
180b293fbf9SDekel Peled * @param[out] action
181b293fbf9SDekel Peled * Pointer to a valid action on success, NULL otherwise.
182b293fbf9SDekel Peled *
183b293fbf9SDekel Peled *
184b293fbf9SDekel Peled * @return
185b293fbf9SDekel Peled * 0 on success, or -1 on failure and errno is set.
186b293fbf9SDekel Peled */
187b293fbf9SDekel Peled static inline int
mlx5_flow_os_create_flow_action_packet_reformat(void * ctx,void * domain,void * resource,void ** action)188b293fbf9SDekel Peled mlx5_flow_os_create_flow_action_packet_reformat(void *ctx, void *domain,
189b293fbf9SDekel Peled void *resource, void **action)
190b293fbf9SDekel Peled {
191b293fbf9SDekel Peled struct mlx5_flow_dv_encap_decap_resource *res =
192b293fbf9SDekel Peled (struct mlx5_flow_dv_encap_decap_resource *)resource;
193b293fbf9SDekel Peled
194b293fbf9SDekel Peled *action = mlx5_glue->dv_create_flow_action_packet_reformat
195b293fbf9SDekel Peled (ctx, res->reformat_type, res->ft_type,
196b293fbf9SDekel Peled domain, res->flags, res->size,
197b293fbf9SDekel Peled (res->size ? res->buf : NULL));
198b293fbf9SDekel Peled return (*action) ? 0 : -1;
199b293fbf9SDekel Peled }
200b293fbf9SDekel Peled
201b293fbf9SDekel Peled /**
202b293fbf9SDekel Peled * Create flow action: modify header.
203b293fbf9SDekel Peled *
204b293fbf9SDekel Peled * @param[in] ctx
205b293fbf9SDekel Peled * Pointer to relevant device context.
206b293fbf9SDekel Peled * @param[in] domain
207b293fbf9SDekel Peled * Pointer to domain handler.
208b293fbf9SDekel Peled * @param[in] resource
209b293fbf9SDekel Peled * Pointer to action data resource.
210b293fbf9SDekel Peled * @param[in] actions_len
211b293fbf9SDekel Peled * Total length of actions data in resource.
212b293fbf9SDekel Peled * @param[out] action
213b293fbf9SDekel Peled * Pointer to a valid action on success, NULL otherwise.
214b293fbf9SDekel Peled *
215b293fbf9SDekel Peled *
216b293fbf9SDekel Peled * @return
217b293fbf9SDekel Peled * 0 on success, or -1 on failure and errno is set.
218b293fbf9SDekel Peled */
219b293fbf9SDekel Peled static inline int
mlx5_flow_os_create_flow_action_modify_header(void * ctx,void * domain,void * resource,uint32_t actions_len,void ** action)220b293fbf9SDekel Peled mlx5_flow_os_create_flow_action_modify_header(void *ctx, void *domain,
221b293fbf9SDekel Peled void *resource,
222b293fbf9SDekel Peled uint32_t actions_len,
223b293fbf9SDekel Peled void **action)
224b293fbf9SDekel Peled {
225b293fbf9SDekel Peled struct mlx5_flow_dv_modify_hdr_resource *res =
226b293fbf9SDekel Peled (struct mlx5_flow_dv_modify_hdr_resource *)resource;
227b293fbf9SDekel Peled
228b293fbf9SDekel Peled *action = mlx5_glue->dv_create_flow_action_modify_header
229e681eb05SMatan Azrad (ctx, res->ft_type, domain, res->root ?
230e681eb05SMatan Azrad MLX5DV_DR_ACTION_FLAGS_ROOT_LEVEL : 0,
231b293fbf9SDekel Peled actions_len, (uint64_t *)res->actions);
232b293fbf9SDekel Peled return (*action) ? 0 : -1;
233b293fbf9SDekel Peled }
234b293fbf9SDekel Peled
235b293fbf9SDekel Peled /**
236b293fbf9SDekel Peled * Create flow action: destination flow table.
237b293fbf9SDekel Peled *
238b293fbf9SDekel Peled * @param[in] tbl_obj
239b293fbf9SDekel Peled * Pointer to destination table object.
240b293fbf9SDekel Peled * @param[out] action
241b293fbf9SDekel Peled * Pointer to a valid action on success, NULL otherwise.
242b293fbf9SDekel Peled *
243b293fbf9SDekel Peled * @return
244b293fbf9SDekel Peled * 0 on success, or -1 on failure and errno is set.
245b293fbf9SDekel Peled */
246b293fbf9SDekel Peled static inline int
mlx5_flow_os_create_flow_action_dest_flow_tbl(void * tbl_obj,void ** action)247b293fbf9SDekel Peled mlx5_flow_os_create_flow_action_dest_flow_tbl(void *tbl_obj, void **action)
248b293fbf9SDekel Peled {
249b293fbf9SDekel Peled *action = mlx5_glue->dr_create_flow_action_dest_flow_tbl(tbl_obj);
250b293fbf9SDekel Peled return (*action) ? 0 : -1;
251b293fbf9SDekel Peled }
252b293fbf9SDekel Peled
253b293fbf9SDekel Peled /**
254b293fbf9SDekel Peled * Create flow action: destination port.
255b293fbf9SDekel Peled *
256b293fbf9SDekel Peled * @param[in] domain
257b293fbf9SDekel Peled * Pointer to domain handler.
258b293fbf9SDekel Peled * @param[in] port_id
259b293fbf9SDekel Peled * Destination port ID.
260b293fbf9SDekel Peled * @param[out] action
261b293fbf9SDekel Peled * Pointer to a valid action on success, NULL otherwise.
262b293fbf9SDekel Peled *
263b293fbf9SDekel Peled * @return
264b293fbf9SDekel Peled * 0 on success, or -1 on failure and errno is set.
265b293fbf9SDekel Peled */
266b293fbf9SDekel Peled static inline int
mlx5_flow_os_create_flow_action_dest_port(void * domain,uint32_t port_id,void ** action)267b293fbf9SDekel Peled mlx5_flow_os_create_flow_action_dest_port(void *domain, uint32_t port_id,
268b293fbf9SDekel Peled void **action)
269b293fbf9SDekel Peled {
270b293fbf9SDekel Peled /*
271b293fbf9SDekel Peled * Depending on rdma_core version the glue routine calls
272b293fbf9SDekel Peled * either mlx5dv_dr_action_create_dest_ib_port(domain, dev_port)
273b293fbf9SDekel Peled * or mlx5dv_dr_action_create_dest_vport(domain, vport_id).
274b293fbf9SDekel Peled */
275b293fbf9SDekel Peled *action = mlx5_glue->dr_create_flow_action_dest_port(domain, port_id);
276b293fbf9SDekel Peled return (*action) ? 0 : -1;
277b293fbf9SDekel Peled }
278b293fbf9SDekel Peled
279b293fbf9SDekel Peled /**
280b293fbf9SDekel Peled * Create flow action: push vlan.
281b293fbf9SDekel Peled *
282b293fbf9SDekel Peled * @param[in] domain
283b293fbf9SDekel Peled * Pointer to domain handler.
284b293fbf9SDekel Peled * @param[in] vlan_tag
285b293fbf9SDekel Peled * VLAN tag value.
286b293fbf9SDekel Peled * @param[out] action
287b293fbf9SDekel Peled * Pointer to a valid action on success, NULL otherwise.
288b293fbf9SDekel Peled *
289b293fbf9SDekel Peled * @return
290b293fbf9SDekel Peled * 0 on success, or -1 on failure and errno is set.
291b293fbf9SDekel Peled */
292b293fbf9SDekel Peled static inline int
mlx5_flow_os_create_flow_action_push_vlan(void * domain,rte_be32_t vlan_tag,void ** action)293b293fbf9SDekel Peled mlx5_flow_os_create_flow_action_push_vlan(void *domain, rte_be32_t vlan_tag,
294b293fbf9SDekel Peled void **action)
295b293fbf9SDekel Peled {
296b293fbf9SDekel Peled *action = mlx5_glue->dr_create_flow_action_push_vlan(domain, vlan_tag);
297b293fbf9SDekel Peled return (*action) ? 0 : -1;
298b293fbf9SDekel Peled }
299b293fbf9SDekel Peled
300b293fbf9SDekel Peled /**
301b293fbf9SDekel Peled * Create flow action: count.
302b293fbf9SDekel Peled *
303b293fbf9SDekel Peled * @param[in] cnt_obj
304b293fbf9SDekel Peled * Pointer to DevX counter object.
305b293fbf9SDekel Peled * @param[in] offset
306b293fbf9SDekel Peled * Offset of counter in array.
307b293fbf9SDekel Peled * @param[out] action
308b293fbf9SDekel Peled * Pointer to a valid action on success, NULL otherwise.
309b293fbf9SDekel Peled *
310b293fbf9SDekel Peled * @return
311b293fbf9SDekel Peled * 0 on success, or -1 on failure and errno is set.
312b293fbf9SDekel Peled */
313b293fbf9SDekel Peled static inline int
mlx5_flow_os_create_flow_action_count(void * cnt_obj,uint16_t offset,void ** action)314b293fbf9SDekel Peled mlx5_flow_os_create_flow_action_count(void *cnt_obj, uint16_t offset,
315b293fbf9SDekel Peled void **action)
316b293fbf9SDekel Peled {
317b293fbf9SDekel Peled *action = mlx5_glue->dv_create_flow_action_counter(cnt_obj, offset);
318b293fbf9SDekel Peled return (*action) ? 0 : -1;
319b293fbf9SDekel Peled }
320b293fbf9SDekel Peled
321b293fbf9SDekel Peled /**
322b293fbf9SDekel Peled * Create flow action: tag.
323b293fbf9SDekel Peled *
324b293fbf9SDekel Peled * @param[in] tag
325b293fbf9SDekel Peled * Tag value.
326b293fbf9SDekel Peled * @param[out] action
327b293fbf9SDekel Peled * Pointer to a valid action on success, NULL otherwise.
328b293fbf9SDekel Peled *
329b293fbf9SDekel Peled * @return
330b293fbf9SDekel Peled * 0 on success, or -1 on failure and errno is set.
331b293fbf9SDekel Peled */
332b293fbf9SDekel Peled static inline int
mlx5_flow_os_create_flow_action_tag(uint32_t tag,void ** action)333b293fbf9SDekel Peled mlx5_flow_os_create_flow_action_tag(uint32_t tag, void **action)
334b293fbf9SDekel Peled {
335b293fbf9SDekel Peled *action = mlx5_glue->dv_create_flow_action_tag(tag);
336b293fbf9SDekel Peled return (*action) ? 0 : -1;
337b293fbf9SDekel Peled }
338b293fbf9SDekel Peled
339b293fbf9SDekel Peled /**
340b293fbf9SDekel Peled * Create flow action: drop.
341b293fbf9SDekel Peled *
342b293fbf9SDekel Peled * @param[out] action
343b293fbf9SDekel Peled * Pointer to a valid action on success, NULL otherwise.
344b293fbf9SDekel Peled *
345b293fbf9SDekel Peled * @return
346b293fbf9SDekel Peled * 0 on success, or -1 on failure and errno is set.
347b293fbf9SDekel Peled */
348b293fbf9SDekel Peled static inline int
mlx5_flow_os_create_flow_action_drop(void ** action)349b293fbf9SDekel Peled mlx5_flow_os_create_flow_action_drop(void **action)
350b293fbf9SDekel Peled {
351b293fbf9SDekel Peled *action = mlx5_glue->dr_create_flow_action_drop();
352b293fbf9SDekel Peled return (*action) ? 0 : -1;
353b293fbf9SDekel Peled }
354b293fbf9SDekel Peled
355b293fbf9SDekel Peled /**
35614020ad5SOphir Munk * Create flow action: default miss.
35714020ad5SOphir Munk *
35814020ad5SOphir Munk * @param[out] action
35914020ad5SOphir Munk * Pointer to a valid action on success, NULL otherwise.
36014020ad5SOphir Munk *
36114020ad5SOphir Munk * @return
36214020ad5SOphir Munk * 0 on success, or -1 on failure and errno is set.
36314020ad5SOphir Munk */
36414020ad5SOphir Munk static inline int
mlx5_flow_os_create_flow_action_default_miss(void ** action)36514020ad5SOphir Munk mlx5_flow_os_create_flow_action_default_miss(void **action)
36614020ad5SOphir Munk {
36714020ad5SOphir Munk *action = mlx5_glue->dr_create_flow_action_default_miss();
36814020ad5SOphir Munk return (*action) ? 0 : -1;
36914020ad5SOphir Munk }
37014020ad5SOphir Munk
37114020ad5SOphir Munk /**
37280f998daSMichael Savisko * Create flow action: send_to_kernel.
37380f998daSMichael Savisko *
37480f998daSMichael Savisko * @param[in] tbl
37580f998daSMichael Savisko * Pointer to destination root table.
37680f998daSMichael Savisko * @param[in] priority
37780f998daSMichael Savisko * Priority to which traffic will arrive.
37880f998daSMichael Savisko * @param[out] action
37980f998daSMichael Savisko * Pointer to a valid action on success, NULL otherwise.
38080f998daSMichael Savisko *
38180f998daSMichael Savisko * @return
38280f998daSMichael Savisko * 0 on success, or -1 on failure and errno is set.
38380f998daSMichael Savisko */
38480f998daSMichael Savisko static inline int
mlx5_flow_os_create_flow_action_send_to_kernel(void * tbl,uint16_t priority,void ** action)38580f998daSMichael Savisko mlx5_flow_os_create_flow_action_send_to_kernel(void *tbl, uint16_t priority,
38680f998daSMichael Savisko void **action)
38780f998daSMichael Savisko {
38880f998daSMichael Savisko *action = mlx5_glue->dr_create_flow_action_send_to_kernel(tbl,
38980f998daSMichael Savisko priority);
39080f998daSMichael Savisko return (*action) ? 0 : -1;
39180f998daSMichael Savisko }
39280f998daSMichael Savisko
39380f998daSMichael Savisko /**
39488019723SOphir Munk * Create flow action: dest_devx_tir
39588019723SOphir Munk *
39688019723SOphir Munk * @param[in] tir
39788019723SOphir Munk * Pointer to DevX tir object
39888019723SOphir Munk * @param[out] action
39988019723SOphir Munk * Pointer to a valid action on success, NULL otherwise.
40088019723SOphir Munk *
40188019723SOphir Munk * @return
40288019723SOphir Munk * 0 on success, or -1 on failure and errno is set.
40388019723SOphir Munk */
40488019723SOphir Munk static inline int
mlx5_flow_os_create_flow_action_dest_devx_tir(struct mlx5_devx_obj * tir,void ** action)40588019723SOphir Munk mlx5_flow_os_create_flow_action_dest_devx_tir(struct mlx5_devx_obj *tir,
40688019723SOphir Munk void **action)
40788019723SOphir Munk {
40888019723SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT
40988019723SOphir Munk *action = mlx5_glue->dv_create_flow_action_dest_devx_tir(tir->obj);
41088019723SOphir Munk return (*action) ? 0 : -1;
41188019723SOphir Munk #else
41288019723SOphir Munk /* If no DV support - skip the operation and return success */
41388019723SOphir Munk RTE_SET_USED(tir);
41488019723SOphir Munk *action = 0;
41588019723SOphir Munk return 0;
41688019723SOphir Munk #endif
41788019723SOphir Munk }
41888019723SOphir Munk
41988019723SOphir Munk /**
420bd935fe3SOphir Munk * Create flow action: sampler
421bd935fe3SOphir Munk *
422bd935fe3SOphir Munk * @param[in] attr
423bd935fe3SOphir Munk * Pointer to sampler attribute
424bd935fe3SOphir Munk * @param[out] action
425bd935fe3SOphir Munk * Pointer to a valid action on success, NULL otherwise.
426bd935fe3SOphir Munk *
427bd935fe3SOphir Munk * @return
428bd935fe3SOphir Munk * 0 on success, or -1 on failure and errno is set.
429bd935fe3SOphir Munk */
430bd935fe3SOphir Munk static inline int
mlx5_os_flow_dr_create_flow_action_sampler(struct mlx5dv_dr_flow_sampler_attr * attr,void ** action)431bd935fe3SOphir Munk mlx5_os_flow_dr_create_flow_action_sampler
432bd935fe3SOphir Munk (struct mlx5dv_dr_flow_sampler_attr *attr,
433bd935fe3SOphir Munk void **action)
434bd935fe3SOphir Munk {
435bd935fe3SOphir Munk *action = mlx5_glue->dr_create_flow_action_sampler(attr);
436bd935fe3SOphir Munk return (*action) ? 0 : -1;
437bd935fe3SOphir Munk }
438bd935fe3SOphir Munk
439bd935fe3SOphir Munk /**
440bd935fe3SOphir Munk * Create flow action: dest_array
441bd935fe3SOphir Munk *
442bd935fe3SOphir Munk * @param[in] domain
443bd935fe3SOphir Munk * Pointer to relevant domain.
444bd935fe3SOphir Munk * @param[in] num_dest
445bd935fe3SOphir Munk * Number of destinations array.
446bd935fe3SOphir Munk * @param[in] dests
447bd935fe3SOphir Munk * Array of destination attributes.
448bd935fe3SOphir Munk * @param[out] action
449bd935fe3SOphir Munk * Pointer to a valid action on success, NULL otherwise.
450bd935fe3SOphir Munk *
451bd935fe3SOphir Munk * @return
452bd935fe3SOphir Munk * 0 on success, or -1 on failure and errno is set.
453bd935fe3SOphir Munk */
454bd935fe3SOphir Munk static inline int
mlx5_os_flow_dr_create_flow_action_dest_array(void * domain,size_t num_dest,struct mlx5dv_dr_action_dest_attr * dests[],void ** action)455bd935fe3SOphir Munk mlx5_os_flow_dr_create_flow_action_dest_array
456bd935fe3SOphir Munk (void *domain,
457bd935fe3SOphir Munk size_t num_dest,
458bd935fe3SOphir Munk struct mlx5dv_dr_action_dest_attr *dests[],
459bd935fe3SOphir Munk void **action)
460bd935fe3SOphir Munk {
461bd935fe3SOphir Munk *action = mlx5_glue->dr_create_flow_action_dest_array(
462bd935fe3SOphir Munk domain, num_dest, dests);
463bd935fe3SOphir Munk return (*action) ? 0 : -1;
464bd935fe3SOphir Munk }
465bd935fe3SOphir Munk
466bd935fe3SOphir Munk /**
467b293fbf9SDekel Peled * Destroy flow action.
468b293fbf9SDekel Peled *
469b293fbf9SDekel Peled * @param[in] action
470b293fbf9SDekel Peled * Pointer to action object to destroy.
471b293fbf9SDekel Peled *
472b293fbf9SDekel Peled * @return
473b293fbf9SDekel Peled * 0 on success, or the value of errno on failure.
474b293fbf9SDekel Peled */
475b293fbf9SDekel Peled static inline int
mlx5_flow_os_destroy_flow_action(void * action)476b293fbf9SDekel Peled mlx5_flow_os_destroy_flow_action(void *action)
477b293fbf9SDekel Peled {
478b293fbf9SDekel Peled return mlx5_glue->destroy_flow_action(action);
479b293fbf9SDekel Peled }
480b293fbf9SDekel Peled
481c604d92aSOphir Munk /**
482c604d92aSOphir Munk * OS wrapper over Verbs API.
483c604d92aSOphir Munk * Adjust flow priority based on the highest layer and the request priority.
484c604d92aSOphir Munk *
485c604d92aSOphir Munk * @param[in] dev
486c604d92aSOphir Munk * Pointer to the Ethernet device structure.
487c604d92aSOphir Munk * @param[in] priority
488c604d92aSOphir Munk * The rule base priority.
489c604d92aSOphir Munk * @param[in] subpriority
490c604d92aSOphir Munk * The priority based on the items.
491c604d92aSOphir Munk *
492c604d92aSOphir Munk * @return
493c604d92aSOphir Munk * The new priority.
494c604d92aSOphir Munk */
495c604d92aSOphir Munk static inline uint32_t
mlx5_os_flow_adjust_priority(struct rte_eth_dev * dev,int32_t priority,uint32_t subpriority)496c604d92aSOphir Munk mlx5_os_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,
497c604d92aSOphir Munk uint32_t subpriority)
498c604d92aSOphir Munk {
499c604d92aSOphir Munk return mlx5_flow_adjust_priority(dev, priority, subpriority);
500c604d92aSOphir Munk }
50162d5b30bSTal Shnaiderman
50262d5b30bSTal Shnaiderman static inline int
mlx5_os_flow_dr_sync_domain(void * domain,uint32_t flags)50362d5b30bSTal Shnaiderman mlx5_os_flow_dr_sync_domain(void *domain, uint32_t flags)
50462d5b30bSTal Shnaiderman {
50562d5b30bSTal Shnaiderman return mlx5_glue->dr_sync_domain(domain, flags);
50662d5b30bSTal Shnaiderman }
507fb96caa5SRaja Zidane
508fb96caa5SRaja Zidane /**
509fb96caa5SRaja Zidane * Validate ESP item.
510fb96caa5SRaja Zidane *
511fb96caa5SRaja Zidane * @param[in] item
512fb96caa5SRaja Zidane * Item specification.
513fb96caa5SRaja Zidane * @param[in] item_flags
514fb96caa5SRaja Zidane * Bit-fields that holds the items detected until now.
515fb96caa5SRaja Zidane * @param[in] target_protocol
516fb96caa5SRaja Zidane * The next protocol in the previous item.
517fb96caa5SRaja Zidane * @param[out] error
518fb96caa5SRaja Zidane * Pointer to error structure.
519fb96caa5SRaja Zidane *
520fb96caa5SRaja Zidane * @return
521fb96caa5SRaja Zidane * 0 on success, a negative errno value otherwise and rte_errno is set.
522fb96caa5SRaja Zidane */
523fb96caa5SRaja Zidane int
524*80c67625SGregory Etelson mlx5_flow_os_validate_item_esp(const struct rte_eth_dev *dev,
525*80c67625SGregory Etelson const struct rte_flow_item *item,
526fb96caa5SRaja Zidane uint64_t item_flags,
527fb96caa5SRaja Zidane uint8_t target_protocol,
528fb96caa5SRaja Zidane struct rte_flow_error *error);
529fb96caa5SRaja Zidane
5302ece3b71SBing Zhao /**
5312ece3b71SBing Zhao * Add per thread workspace to the global list for garbage collection.
5322ece3b71SBing Zhao *
5332ece3b71SBing Zhao * @param[in] ws
5342ece3b71SBing Zhao * Pointer to the flow workspace.
5352ece3b71SBing Zhao */
5362ece3b71SBing Zhao void mlx5_flow_os_workspace_gc_add(struct mlx5_flow_workspace *ws);
5372ece3b71SBing Zhao
53817ad3af9SDekel Peled #endif /* RTE_PMD_MLX5_FLOW_OS_H_ */
539