172f75660SOphir Munk /* SPDX-License-Identifier: BSD-3-Clause 272f75660SOphir Munk * Copyright 2018 6WIND S.A. 372f75660SOphir Munk * Copyright 2018 Mellanox Technologies, Ltd 472f75660SOphir Munk */ 572f75660SOphir Munk 672f75660SOphir Munk #include <errno.h> 772f75660SOphir Munk #include <stdalign.h> 872f75660SOphir Munk #include <stddef.h> 972f75660SOphir Munk #include <stdint.h> 1072f75660SOphir Munk #include <stdlib.h> 1172f75660SOphir Munk /* 1272f75660SOphir Munk * Not needed by this file; included to work around the lack of off_t 1372f75660SOphir Munk * definition for mlx5dv.h with unpatched rdma-core versions. 1472f75660SOphir Munk */ 1572f75660SOphir Munk #include <sys/types.h> 1672f75660SOphir Munk 1772f75660SOphir Munk #include "mlx5_glue.h" 1872f75660SOphir Munk 1972f75660SOphir Munk static int 2072f75660SOphir Munk mlx5_glue_fork_init(void) 2172f75660SOphir Munk { 22*42f113c5SErez Ferber #ifdef HAVE_IBV_FORK_UNNEEDED 23*42f113c5SErez Ferber if (ibv_is_fork_initialized() == IBV_FORK_UNNEEDED) 24*42f113c5SErez Ferber return 0; /* ibv_fork_init() not needed */ 25*42f113c5SErez Ferber #endif 2672f75660SOphir Munk return ibv_fork_init(); 2772f75660SOphir Munk } 2872f75660SOphir Munk 2972f75660SOphir Munk static struct ibv_pd * 3072f75660SOphir Munk mlx5_glue_alloc_pd(struct ibv_context *context) 3172f75660SOphir Munk { 3272f75660SOphir Munk return ibv_alloc_pd(context); 3372f75660SOphir Munk } 3472f75660SOphir Munk 3572f75660SOphir Munk static int 3672f75660SOphir Munk mlx5_glue_dealloc_pd(struct ibv_pd *pd) 3772f75660SOphir Munk { 3872f75660SOphir Munk return ibv_dealloc_pd(pd); 3972f75660SOphir Munk } 4072f75660SOphir Munk 410777921aSMichael Baum static struct ibv_pd * 420777921aSMichael Baum mlx5_glue_import_pd(struct ibv_context *context, uint32_t pd_handle) 430777921aSMichael Baum { 440777921aSMichael Baum #ifdef HAVE_MLX5_IBV_IMPORT_CTX_PD_AND_MR 450777921aSMichael Baum return ibv_import_pd(context, pd_handle); 460777921aSMichael Baum #else 470777921aSMichael Baum (void)context; 480777921aSMichael Baum (void)pd_handle; 490777921aSMichael Baum errno = ENOTSUP; 500777921aSMichael Baum return NULL; 510777921aSMichael Baum #endif 520777921aSMichael Baum } 530777921aSMichael Baum 540777921aSMichael Baum static int 550777921aSMichael Baum mlx5_glue_unimport_pd(struct ibv_pd *pd) 560777921aSMichael Baum { 570777921aSMichael Baum #ifdef HAVE_MLX5_IBV_IMPORT_CTX_PD_AND_MR 580777921aSMichael Baum ibv_unimport_pd(pd); 590777921aSMichael Baum return 0; 600777921aSMichael Baum #else 610777921aSMichael Baum (void)pd; 620777921aSMichael Baum errno = ENOTSUP; 630777921aSMichael Baum return -errno; 640777921aSMichael Baum #endif 650777921aSMichael Baum } 660777921aSMichael Baum 6772f75660SOphir Munk static struct ibv_device ** 6872f75660SOphir Munk mlx5_glue_get_device_list(int *num_devices) 6972f75660SOphir Munk { 7072f75660SOphir Munk return ibv_get_device_list(num_devices); 7172f75660SOphir Munk } 7272f75660SOphir Munk 7372f75660SOphir Munk static void 7472f75660SOphir Munk mlx5_glue_free_device_list(struct ibv_device **list) 7572f75660SOphir Munk { 7672f75660SOphir Munk ibv_free_device_list(list); 7772f75660SOphir Munk } 7872f75660SOphir Munk 7972f75660SOphir Munk static struct ibv_context * 8072f75660SOphir Munk mlx5_glue_open_device(struct ibv_device *device) 8172f75660SOphir Munk { 8272f75660SOphir Munk return ibv_open_device(device); 8372f75660SOphir Munk } 8472f75660SOphir Munk 850777921aSMichael Baum static struct ibv_context * 860777921aSMichael Baum mlx5_glue_import_device(int cmd_fd) 870777921aSMichael Baum { 880777921aSMichael Baum #ifdef HAVE_MLX5_IBV_IMPORT_CTX_PD_AND_MR 890777921aSMichael Baum return ibv_import_device(cmd_fd); 900777921aSMichael Baum #else 910777921aSMichael Baum (void)cmd_fd; 920777921aSMichael Baum errno = ENOTSUP; 930777921aSMichael Baum return NULL; 940777921aSMichael Baum #endif 950777921aSMichael Baum } 960777921aSMichael Baum 9772f75660SOphir Munk static int 9872f75660SOphir Munk mlx5_glue_close_device(struct ibv_context *context) 9972f75660SOphir Munk { 10072f75660SOphir Munk return ibv_close_device(context); 10172f75660SOphir Munk } 10272f75660SOphir Munk 10372f75660SOphir Munk static int 10472f75660SOphir Munk mlx5_glue_query_device(struct ibv_context *context, 10572f75660SOphir Munk struct ibv_device_attr *device_attr) 10672f75660SOphir Munk { 10772f75660SOphir Munk return ibv_query_device(context, device_attr); 10872f75660SOphir Munk } 10972f75660SOphir Munk 11072f75660SOphir Munk static int 11172f75660SOphir Munk mlx5_glue_query_device_ex(struct ibv_context *context, 11272f75660SOphir Munk const struct ibv_query_device_ex_input *input, 11372f75660SOphir Munk struct ibv_device_attr_ex *attr) 11472f75660SOphir Munk { 11572f75660SOphir Munk return ibv_query_device_ex(context, input, attr); 11672f75660SOphir Munk } 11772f75660SOphir Munk 118dfceca7eSAlex Vesker static const char * 119dfceca7eSAlex Vesker mlx5_glue_get_device_name(struct ibv_device *device) 120dfceca7eSAlex Vesker { 121dfceca7eSAlex Vesker return ibv_get_device_name(device); 122dfceca7eSAlex Vesker } 123dfceca7eSAlex Vesker 12472f75660SOphir Munk static int 12572f75660SOphir Munk mlx5_glue_query_rt_values_ex(struct ibv_context *context, 12672f75660SOphir Munk struct ibv_values_ex *values) 12772f75660SOphir Munk { 12872f75660SOphir Munk return ibv_query_rt_values_ex(context, values); 12972f75660SOphir Munk } 13072f75660SOphir Munk 13172f75660SOphir Munk static int 13272f75660SOphir Munk mlx5_glue_query_port(struct ibv_context *context, uint8_t port_num, 13372f75660SOphir Munk struct ibv_port_attr *port_attr) 13472f75660SOphir Munk { 13572f75660SOphir Munk return ibv_query_port(context, port_num, port_attr); 13672f75660SOphir Munk } 13772f75660SOphir Munk 13872f75660SOphir Munk static struct ibv_comp_channel * 13972f75660SOphir Munk mlx5_glue_create_comp_channel(struct ibv_context *context) 14072f75660SOphir Munk { 14172f75660SOphir Munk return ibv_create_comp_channel(context); 14272f75660SOphir Munk } 14372f75660SOphir Munk 14472f75660SOphir Munk static int 14572f75660SOphir Munk mlx5_glue_destroy_comp_channel(struct ibv_comp_channel *channel) 14672f75660SOphir Munk { 14772f75660SOphir Munk return ibv_destroy_comp_channel(channel); 14872f75660SOphir Munk } 14972f75660SOphir Munk 15072f75660SOphir Munk static struct ibv_cq * 15172f75660SOphir Munk mlx5_glue_create_cq(struct ibv_context *context, int cqe, void *cq_context, 15272f75660SOphir Munk struct ibv_comp_channel *channel, int comp_vector) 15372f75660SOphir Munk { 15472f75660SOphir Munk return ibv_create_cq(context, cqe, cq_context, channel, comp_vector); 15572f75660SOphir Munk } 15672f75660SOphir Munk 15772f75660SOphir Munk static int 15872f75660SOphir Munk mlx5_glue_destroy_cq(struct ibv_cq *cq) 15972f75660SOphir Munk { 16072f75660SOphir Munk return ibv_destroy_cq(cq); 16172f75660SOphir Munk } 16272f75660SOphir Munk 16372f75660SOphir Munk static int 16472f75660SOphir Munk mlx5_glue_get_cq_event(struct ibv_comp_channel *channel, struct ibv_cq **cq, 16572f75660SOphir Munk void **cq_context) 16672f75660SOphir Munk { 16772f75660SOphir Munk return ibv_get_cq_event(channel, cq, cq_context); 16872f75660SOphir Munk } 16972f75660SOphir Munk 17072f75660SOphir Munk static void 17172f75660SOphir Munk mlx5_glue_ack_cq_events(struct ibv_cq *cq, unsigned int nevents) 17272f75660SOphir Munk { 17372f75660SOphir Munk ibv_ack_cq_events(cq, nevents); 17472f75660SOphir Munk } 17572f75660SOphir Munk 17672f75660SOphir Munk static struct ibv_rwq_ind_table * 17772f75660SOphir Munk mlx5_glue_create_rwq_ind_table(struct ibv_context *context, 17872f75660SOphir Munk struct ibv_rwq_ind_table_init_attr *init_attr) 17972f75660SOphir Munk { 18072f75660SOphir Munk return ibv_create_rwq_ind_table(context, init_attr); 18172f75660SOphir Munk } 18272f75660SOphir Munk 18372f75660SOphir Munk static int 18472f75660SOphir Munk mlx5_glue_destroy_rwq_ind_table(struct ibv_rwq_ind_table *rwq_ind_table) 18572f75660SOphir Munk { 18672f75660SOphir Munk return ibv_destroy_rwq_ind_table(rwq_ind_table); 18772f75660SOphir Munk } 18872f75660SOphir Munk 18972f75660SOphir Munk static struct ibv_wq * 19072f75660SOphir Munk mlx5_glue_create_wq(struct ibv_context *context, 19172f75660SOphir Munk struct ibv_wq_init_attr *wq_init_attr) 19272f75660SOphir Munk { 19372f75660SOphir Munk return ibv_create_wq(context, wq_init_attr); 19472f75660SOphir Munk } 19572f75660SOphir Munk 19672f75660SOphir Munk static int 19772f75660SOphir Munk mlx5_glue_destroy_wq(struct ibv_wq *wq) 19872f75660SOphir Munk { 19972f75660SOphir Munk return ibv_destroy_wq(wq); 20072f75660SOphir Munk } 20172f75660SOphir Munk static int 20272f75660SOphir Munk mlx5_glue_modify_wq(struct ibv_wq *wq, struct ibv_wq_attr *wq_attr) 20372f75660SOphir Munk { 20472f75660SOphir Munk return ibv_modify_wq(wq, wq_attr); 20572f75660SOphir Munk } 20672f75660SOphir Munk 20772f75660SOphir Munk static struct ibv_flow * 20872f75660SOphir Munk mlx5_glue_create_flow(struct ibv_qp *qp, struct ibv_flow_attr *flow) 20972f75660SOphir Munk { 21072f75660SOphir Munk return ibv_create_flow(qp, flow); 21172f75660SOphir Munk } 21272f75660SOphir Munk 21372f75660SOphir Munk static int 21472f75660SOphir Munk mlx5_glue_destroy_flow(struct ibv_flow *flow_id) 21572f75660SOphir Munk { 21672f75660SOphir Munk return ibv_destroy_flow(flow_id); 21772f75660SOphir Munk } 21872f75660SOphir Munk 21972f75660SOphir Munk static int 22072f75660SOphir Munk mlx5_glue_destroy_flow_action(void *action) 22172f75660SOphir Munk { 22272f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 22372f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 22472f75660SOphir Munk return mlx5dv_dr_action_destroy(action); 22572f75660SOphir Munk #else 22672f75660SOphir Munk struct mlx5dv_flow_action_attr *attr = action; 22772f75660SOphir Munk int res = 0; 22872f75660SOphir Munk switch (attr->type) { 22972f75660SOphir Munk case MLX5DV_FLOW_ACTION_TAG: 23072f75660SOphir Munk break; 23172f75660SOphir Munk default: 23272f75660SOphir Munk res = ibv_destroy_flow_action(attr->action); 23372f75660SOphir Munk break; 23472f75660SOphir Munk } 235cdb034a8SOphir Munk free(action); 23672f75660SOphir Munk return res; 23772f75660SOphir Munk #endif 23872f75660SOphir Munk #else 23972f75660SOphir Munk (void)action; 24072f75660SOphir Munk return -ENOTSUP; 24172f75660SOphir Munk #endif 24272f75660SOphir Munk } 24372f75660SOphir Munk 24472f75660SOphir Munk static struct ibv_qp * 24572f75660SOphir Munk mlx5_glue_create_qp(struct ibv_pd *pd, struct ibv_qp_init_attr *qp_init_attr) 24672f75660SOphir Munk { 24772f75660SOphir Munk return ibv_create_qp(pd, qp_init_attr); 24872f75660SOphir Munk } 24972f75660SOphir Munk 25072f75660SOphir Munk static struct ibv_qp * 25172f75660SOphir Munk mlx5_glue_create_qp_ex(struct ibv_context *context, 25272f75660SOphir Munk struct ibv_qp_init_attr_ex *qp_init_attr_ex) 25372f75660SOphir Munk { 25472f75660SOphir Munk return ibv_create_qp_ex(context, qp_init_attr_ex); 25572f75660SOphir Munk } 25672f75660SOphir Munk 25772f75660SOphir Munk static int 25872f75660SOphir Munk mlx5_glue_destroy_qp(struct ibv_qp *qp) 25972f75660SOphir Munk { 26072f75660SOphir Munk return ibv_destroy_qp(qp); 26172f75660SOphir Munk } 26272f75660SOphir Munk 26372f75660SOphir Munk static int 26472f75660SOphir Munk mlx5_glue_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr, int attr_mask) 26572f75660SOphir Munk { 26672f75660SOphir Munk return ibv_modify_qp(qp, attr, attr_mask); 26772f75660SOphir Munk } 26872f75660SOphir Munk 26972f75660SOphir Munk static struct ibv_mr * 27072f75660SOphir Munk mlx5_glue_reg_mr(struct ibv_pd *pd, void *addr, size_t length, int access) 27172f75660SOphir Munk { 27272f75660SOphir Munk return ibv_reg_mr(pd, addr, length, access); 27372f75660SOphir Munk } 27472f75660SOphir Munk 27572f75660SOphir Munk static struct ibv_mr * 2766ebd062eSMichael Baum mlx5_glue_reg_mr_iova(struct ibv_pd *pd, void *addr, size_t length, 2776ebd062eSMichael Baum uint64_t iova, int access) 2786ebd062eSMichael Baum { 2796ebd062eSMichael Baum #ifdef HAVE_MLX5_IBV_REG_MR_IOVA 2806ebd062eSMichael Baum return ibv_reg_mr_iova(pd, addr, length, iova, access); 2816ebd062eSMichael Baum #else 2826ebd062eSMichael Baum (void)pd; 2836ebd062eSMichael Baum (void)addr; 2846ebd062eSMichael Baum (void)length; 2856ebd062eSMichael Baum (void)iova; 2866ebd062eSMichael Baum (void)access; 2876ebd062eSMichael Baum errno = ENOTSUP; 2886ebd062eSMichael Baum return NULL; 2896ebd062eSMichael Baum #endif 2906ebd062eSMichael Baum } 2916ebd062eSMichael Baum 2926ebd062eSMichael Baum static struct ibv_mr * 29372f75660SOphir Munk mlx5_glue_alloc_null_mr(struct ibv_pd *pd) 29472f75660SOphir Munk { 29572f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 29672f75660SOphir Munk return ibv_alloc_null_mr(pd); 29772f75660SOphir Munk #else 29872f75660SOphir Munk (void)pd; 29972f75660SOphir Munk errno = ENOTSUP; 30072f75660SOphir Munk return NULL; 30172f75660SOphir Munk #endif 30272f75660SOphir Munk } 30372f75660SOphir Munk 30472f75660SOphir Munk static int 30572f75660SOphir Munk mlx5_glue_dereg_mr(struct ibv_mr *mr) 30672f75660SOphir Munk { 30772f75660SOphir Munk return ibv_dereg_mr(mr); 30872f75660SOphir Munk } 30972f75660SOphir Munk 31072f75660SOphir Munk static struct ibv_counter_set * 31172f75660SOphir Munk mlx5_glue_create_counter_set(struct ibv_context *context, 31272f75660SOphir Munk struct ibv_counter_set_init_attr *init_attr) 31372f75660SOphir Munk { 31472f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42 31572f75660SOphir Munk (void)context; 31672f75660SOphir Munk (void)init_attr; 31772f75660SOphir Munk return NULL; 31872f75660SOphir Munk #else 31972f75660SOphir Munk return ibv_create_counter_set(context, init_attr); 32072f75660SOphir Munk #endif 32172f75660SOphir Munk } 32272f75660SOphir Munk 32372f75660SOphir Munk static int 32472f75660SOphir Munk mlx5_glue_destroy_counter_set(struct ibv_counter_set *cs) 32572f75660SOphir Munk { 32672f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42 32772f75660SOphir Munk (void)cs; 32872f75660SOphir Munk return -ENOTSUP; 32972f75660SOphir Munk #else 33072f75660SOphir Munk return ibv_destroy_counter_set(cs); 33172f75660SOphir Munk #endif 33272f75660SOphir Munk } 33372f75660SOphir Munk 33472f75660SOphir Munk static int 33572f75660SOphir Munk mlx5_glue_describe_counter_set(struct ibv_context *context, 33672f75660SOphir Munk uint16_t counter_set_id, 33772f75660SOphir Munk struct ibv_counter_set_description *cs_desc) 33872f75660SOphir Munk { 33972f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42 34072f75660SOphir Munk (void)context; 34172f75660SOphir Munk (void)counter_set_id; 34272f75660SOphir Munk (void)cs_desc; 34372f75660SOphir Munk return -ENOTSUP; 34472f75660SOphir Munk #else 34572f75660SOphir Munk return ibv_describe_counter_set(context, counter_set_id, cs_desc); 34672f75660SOphir Munk #endif 34772f75660SOphir Munk } 34872f75660SOphir Munk 34972f75660SOphir Munk static int 35072f75660SOphir Munk mlx5_glue_query_counter_set(struct ibv_query_counter_set_attr *query_attr, 35172f75660SOphir Munk struct ibv_counter_set_data *cs_data) 35272f75660SOphir Munk { 35372f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42 35472f75660SOphir Munk (void)query_attr; 35572f75660SOphir Munk (void)cs_data; 35672f75660SOphir Munk return -ENOTSUP; 35772f75660SOphir Munk #else 35872f75660SOphir Munk return ibv_query_counter_set(query_attr, cs_data); 35972f75660SOphir Munk #endif 36072f75660SOphir Munk } 36172f75660SOphir Munk 36272f75660SOphir Munk static struct ibv_counters * 36372f75660SOphir Munk mlx5_glue_create_counters(struct ibv_context *context, 36472f75660SOphir Munk struct ibv_counters_init_attr *init_attr) 36572f75660SOphir Munk { 36672f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 36772f75660SOphir Munk (void)context; 36872f75660SOphir Munk (void)init_attr; 36972f75660SOphir Munk errno = ENOTSUP; 37072f75660SOphir Munk return NULL; 37172f75660SOphir Munk #else 37272f75660SOphir Munk return ibv_create_counters(context, init_attr); 37372f75660SOphir Munk #endif 37472f75660SOphir Munk } 37572f75660SOphir Munk 37672f75660SOphir Munk static int 37772f75660SOphir Munk mlx5_glue_destroy_counters(struct ibv_counters *counters) 37872f75660SOphir Munk { 37972f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 38072f75660SOphir Munk (void)counters; 38172f75660SOphir Munk return -ENOTSUP; 38272f75660SOphir Munk #else 38372f75660SOphir Munk return ibv_destroy_counters(counters); 38472f75660SOphir Munk #endif 38572f75660SOphir Munk } 38672f75660SOphir Munk 38772f75660SOphir Munk static int 38872f75660SOphir Munk mlx5_glue_attach_counters(struct ibv_counters *counters, 38972f75660SOphir Munk struct ibv_counter_attach_attr *attr, 39072f75660SOphir Munk struct ibv_flow *flow) 39172f75660SOphir Munk { 39272f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 39372f75660SOphir Munk (void)counters; 39472f75660SOphir Munk (void)attr; 39572f75660SOphir Munk (void)flow; 39672f75660SOphir Munk return -ENOTSUP; 39772f75660SOphir Munk #else 39872f75660SOphir Munk return ibv_attach_counters_point_flow(counters, attr, flow); 39972f75660SOphir Munk #endif 40072f75660SOphir Munk } 40172f75660SOphir Munk 40272f75660SOphir Munk static int 40372f75660SOphir Munk mlx5_glue_query_counters(struct ibv_counters *counters, 40472f75660SOphir Munk uint64_t *counters_value, 40572f75660SOphir Munk uint32_t ncounters, 40672f75660SOphir Munk uint32_t flags) 40772f75660SOphir Munk { 40872f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 40972f75660SOphir Munk (void)counters; 41072f75660SOphir Munk (void)counters_value; 41172f75660SOphir Munk (void)ncounters; 41272f75660SOphir Munk (void)flags; 41372f75660SOphir Munk return -ENOTSUP; 41472f75660SOphir Munk #else 41572f75660SOphir Munk return ibv_read_counters(counters, counters_value, ncounters, flags); 41672f75660SOphir Munk #endif 41772f75660SOphir Munk } 41872f75660SOphir Munk 41972f75660SOphir Munk static void 42072f75660SOphir Munk mlx5_glue_ack_async_event(struct ibv_async_event *event) 42172f75660SOphir Munk { 42272f75660SOphir Munk ibv_ack_async_event(event); 42372f75660SOphir Munk } 42472f75660SOphir Munk 42572f75660SOphir Munk static int 42672f75660SOphir Munk mlx5_glue_get_async_event(struct ibv_context *context, 42772f75660SOphir Munk struct ibv_async_event *event) 42872f75660SOphir Munk { 42972f75660SOphir Munk return ibv_get_async_event(context, event); 43072f75660SOphir Munk } 43172f75660SOphir Munk 43272f75660SOphir Munk static const char * 43372f75660SOphir Munk mlx5_glue_port_state_str(enum ibv_port_state port_state) 43472f75660SOphir Munk { 43572f75660SOphir Munk return ibv_port_state_str(port_state); 43672f75660SOphir Munk } 43772f75660SOphir Munk 43872f75660SOphir Munk static struct ibv_cq * 43972f75660SOphir Munk mlx5_glue_cq_ex_to_cq(struct ibv_cq_ex *cq) 44072f75660SOphir Munk { 44172f75660SOphir Munk return ibv_cq_ex_to_cq(cq); 44272f75660SOphir Munk } 44372f75660SOphir Munk 44472f75660SOphir Munk static void * 44572f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_flow_tbl(void *tbl) 44672f75660SOphir Munk { 44772f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 44872f75660SOphir Munk return mlx5dv_dr_action_create_dest_table(tbl); 44972f75660SOphir Munk #else 45072f75660SOphir Munk (void)tbl; 45172f75660SOphir Munk errno = ENOTSUP; 45272f75660SOphir Munk return NULL; 45372f75660SOphir Munk #endif 45472f75660SOphir Munk } 45572f75660SOphir Munk 45672f75660SOphir Munk static void * 45772f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_port(void *domain, uint32_t port) 45872f75660SOphir Munk { 4590fd928bbSViacheslav Ovsiienko #ifdef HAVE_MLX5DV_DR_CREATE_DEST_IB_PORT 46072f75660SOphir Munk return mlx5dv_dr_action_create_dest_ib_port(domain, port); 46172f75660SOphir Munk #else 46272f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_ESWITCH 46372f75660SOphir Munk return mlx5dv_dr_action_create_dest_vport(domain, port); 46472f75660SOphir Munk #else 46572f75660SOphir Munk (void)domain; 46672f75660SOphir Munk (void)port; 46772f75660SOphir Munk errno = ENOTSUP; 46872f75660SOphir Munk return NULL; 46972f75660SOphir Munk #endif 47072f75660SOphir Munk #endif 47172f75660SOphir Munk } 47272f75660SOphir Munk 47372f75660SOphir Munk static void * 47472f75660SOphir Munk mlx5_glue_dr_create_flow_action_drop(void) 47572f75660SOphir Munk { 47672f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_ESWITCH 47772f75660SOphir Munk return mlx5dv_dr_action_create_drop(); 47872f75660SOphir Munk #else 47972f75660SOphir Munk errno = ENOTSUP; 48072f75660SOphir Munk return NULL; 48172f75660SOphir Munk #endif 48272f75660SOphir Munk } 48372f75660SOphir Munk 48472f75660SOphir Munk static void * 48572f75660SOphir Munk mlx5_glue_dr_create_flow_action_push_vlan(struct mlx5dv_dr_domain *domain, 48672f75660SOphir Munk rte_be32_t vlan_tag) 48772f75660SOphir Munk { 48872f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_VLAN 48972f75660SOphir Munk return mlx5dv_dr_action_create_push_vlan(domain, vlan_tag); 49072f75660SOphir Munk #else 49172f75660SOphir Munk (void)domain; 49272f75660SOphir Munk (void)vlan_tag; 49372f75660SOphir Munk errno = ENOTSUP; 49472f75660SOphir Munk return NULL; 49572f75660SOphir Munk #endif 49672f75660SOphir Munk } 49772f75660SOphir Munk 49872f75660SOphir Munk static void * 49972f75660SOphir Munk mlx5_glue_dr_create_flow_action_pop_vlan(void) 50072f75660SOphir Munk { 50172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_VLAN 50272f75660SOphir Munk return mlx5dv_dr_action_create_pop_vlan(); 50372f75660SOphir Munk #else 50472f75660SOphir Munk errno = ENOTSUP; 50572f75660SOphir Munk return NULL; 50672f75660SOphir Munk #endif 50772f75660SOphir Munk } 50872f75660SOphir Munk 50972f75660SOphir Munk static void * 51072f75660SOphir Munk mlx5_glue_dr_create_flow_tbl(void *domain, uint32_t level) 51172f75660SOphir Munk { 51272f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 51372f75660SOphir Munk return mlx5dv_dr_table_create(domain, level); 51472f75660SOphir Munk #else 51572f75660SOphir Munk (void)domain; 51672f75660SOphir Munk (void)level; 51772f75660SOphir Munk errno = ENOTSUP; 51872f75660SOphir Munk return NULL; 51972f75660SOphir Munk #endif 52072f75660SOphir Munk } 52172f75660SOphir Munk 52272f75660SOphir Munk static int 52372f75660SOphir Munk mlx5_glue_dr_destroy_flow_tbl(void *tbl) 52472f75660SOphir Munk { 52572f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 52672f75660SOphir Munk return mlx5dv_dr_table_destroy(tbl); 52772f75660SOphir Munk #else 52872f75660SOphir Munk (void)tbl; 52972f75660SOphir Munk errno = ENOTSUP; 53072f75660SOphir Munk return errno; 53172f75660SOphir Munk #endif 53272f75660SOphir Munk } 53372f75660SOphir Munk 53472f75660SOphir Munk static void * 53572f75660SOphir Munk mlx5_glue_dr_create_domain(struct ibv_context *ctx, 53672f75660SOphir Munk enum mlx5dv_dr_domain_type domain) 53772f75660SOphir Munk { 53872f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 53972f75660SOphir Munk return mlx5dv_dr_domain_create(ctx, domain); 54072f75660SOphir Munk #else 54172f75660SOphir Munk (void)ctx; 54272f75660SOphir Munk (void)domain; 54372f75660SOphir Munk errno = ENOTSUP; 54472f75660SOphir Munk return NULL; 54572f75660SOphir Munk #endif 54672f75660SOphir Munk } 54772f75660SOphir Munk 54872f75660SOphir Munk static int 54972f75660SOphir Munk mlx5_glue_dr_destroy_domain(void *domain) 55072f75660SOphir Munk { 55172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 55272f75660SOphir Munk return mlx5dv_dr_domain_destroy(domain); 55372f75660SOphir Munk #else 55472f75660SOphir Munk (void)domain; 55572f75660SOphir Munk errno = ENOTSUP; 55672f75660SOphir Munk return errno; 55772f75660SOphir Munk #endif 55872f75660SOphir Munk } 55972f75660SOphir Munk 5606e0cd74aSBing Zhao static int 5616e0cd74aSBing Zhao mlx5_glue_dr_sync_domain(void *domain, uint32_t flags) 5626e0cd74aSBing Zhao { 5636e0cd74aSBing Zhao #ifdef HAVE_MLX5DV_DR 5646e0cd74aSBing Zhao return mlx5dv_dr_domain_sync(domain, flags); 5656e0cd74aSBing Zhao #else 5666e0cd74aSBing Zhao (void)domain; 5676e0cd74aSBing Zhao (void)flags; 5686e0cd74aSBing Zhao errno = ENOTSUP; 5696e0cd74aSBing Zhao return errno; 5706e0cd74aSBing Zhao #endif 5716e0cd74aSBing Zhao } 5726e0cd74aSBing Zhao 57372f75660SOphir Munk static struct ibv_cq_ex * 57472f75660SOphir Munk mlx5_glue_dv_create_cq(struct ibv_context *context, 57572f75660SOphir Munk struct ibv_cq_init_attr_ex *cq_attr, 57672f75660SOphir Munk struct mlx5dv_cq_init_attr *mlx5_cq_attr) 57772f75660SOphir Munk { 57872f75660SOphir Munk return mlx5dv_create_cq(context, cq_attr, mlx5_cq_attr); 57972f75660SOphir Munk } 58072f75660SOphir Munk 58172f75660SOphir Munk static struct ibv_wq * 58272f75660SOphir Munk mlx5_glue_dv_create_wq(struct ibv_context *context, 58372f75660SOphir Munk struct ibv_wq_init_attr *wq_attr, 58472f75660SOphir Munk struct mlx5dv_wq_init_attr *mlx5_wq_attr) 58572f75660SOphir Munk { 58672f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT 58772f75660SOphir Munk (void)context; 58872f75660SOphir Munk (void)wq_attr; 58972f75660SOphir Munk (void)mlx5_wq_attr; 59072f75660SOphir Munk errno = ENOTSUP; 59172f75660SOphir Munk return NULL; 59272f75660SOphir Munk #else 59372f75660SOphir Munk return mlx5dv_create_wq(context, wq_attr, mlx5_wq_attr); 59472f75660SOphir Munk #endif 59572f75660SOphir Munk } 59672f75660SOphir Munk 59772f75660SOphir Munk static int 59872f75660SOphir Munk mlx5_glue_dv_query_device(struct ibv_context *ctx, 59972f75660SOphir Munk struct mlx5dv_context *attrs_out) 60072f75660SOphir Munk { 60172f75660SOphir Munk return mlx5dv_query_device(ctx, attrs_out); 60272f75660SOphir Munk } 60372f75660SOphir Munk 60472f75660SOphir Munk static int 60572f75660SOphir Munk mlx5_glue_dv_set_context_attr(struct ibv_context *ibv_ctx, 60672f75660SOphir Munk enum mlx5dv_set_ctx_attr_type type, void *attr) 60772f75660SOphir Munk { 60872f75660SOphir Munk return mlx5dv_set_context_attr(ibv_ctx, type, attr); 60972f75660SOphir Munk } 61072f75660SOphir Munk 61172f75660SOphir Munk static int 61272f75660SOphir Munk mlx5_glue_dv_init_obj(struct mlx5dv_obj *obj, uint64_t obj_type) 61372f75660SOphir Munk { 61472f75660SOphir Munk return mlx5dv_init_obj(obj, obj_type); 61572f75660SOphir Munk } 61672f75660SOphir Munk 61772f75660SOphir Munk static struct ibv_qp * 61872f75660SOphir Munk mlx5_glue_dv_create_qp(struct ibv_context *context, 61972f75660SOphir Munk struct ibv_qp_init_attr_ex *qp_init_attr_ex, 62072f75660SOphir Munk struct mlx5dv_qp_init_attr *dv_qp_init_attr) 62172f75660SOphir Munk { 62272f75660SOphir Munk #ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT 62372f75660SOphir Munk return mlx5dv_create_qp(context, qp_init_attr_ex, dv_qp_init_attr); 62472f75660SOphir Munk #else 62572f75660SOphir Munk (void)context; 62672f75660SOphir Munk (void)qp_init_attr_ex; 62772f75660SOphir Munk (void)dv_qp_init_attr; 62872f75660SOphir Munk errno = ENOTSUP; 62972f75660SOphir Munk return NULL; 63072f75660SOphir Munk #endif 63172f75660SOphir Munk } 63272f75660SOphir Munk 63372f75660SOphir Munk static void * 634dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow_matcher(struct ibv_context *context, 635dfceca7eSAlex Vesker struct mlx5dv_flow_matcher_attr *matcher_attr) 636dfceca7eSAlex Vesker { 637dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT 638dfceca7eSAlex Vesker return mlx5dv_create_flow_matcher(context, matcher_attr); 639dfceca7eSAlex Vesker #else 640dfceca7eSAlex Vesker (void)context; 641dfceca7eSAlex Vesker (void)matcher_attr; 642dfceca7eSAlex Vesker errno = ENOTSUP; 643dfceca7eSAlex Vesker return NULL; 644dfceca7eSAlex Vesker #endif 645dfceca7eSAlex Vesker } 646dfceca7eSAlex Vesker 647dfceca7eSAlex Vesker static void * 64872f75660SOphir Munk mlx5_glue_dv_create_flow_matcher(struct ibv_context *context, 64972f75660SOphir Munk struct mlx5dv_flow_matcher_attr *matcher_attr, 65072f75660SOphir Munk void *tbl) 65172f75660SOphir Munk { 65272f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 65372f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 65472f75660SOphir Munk (void)context; 65572f75660SOphir Munk return mlx5dv_dr_matcher_create(tbl, matcher_attr->priority, 65672f75660SOphir Munk matcher_attr->match_criteria_enable, 65772f75660SOphir Munk matcher_attr->match_mask); 65872f75660SOphir Munk #else 65972f75660SOphir Munk (void)tbl; 660dfceca7eSAlex Vesker return __mlx5_glue_dv_create_flow_matcher(context, matcher_attr); 66172f75660SOphir Munk #endif 66272f75660SOphir Munk #else 66372f75660SOphir Munk (void)context; 66472f75660SOphir Munk (void)matcher_attr; 66572f75660SOphir Munk (void)tbl; 66672f75660SOphir Munk errno = ENOTSUP; 66772f75660SOphir Munk return NULL; 66872f75660SOphir Munk #endif 66972f75660SOphir Munk } 67072f75660SOphir Munk 67172f75660SOphir Munk static void * 672dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow(void *matcher, 673dfceca7eSAlex Vesker void *match_value, 674dfceca7eSAlex Vesker size_t num_actions, 675dfceca7eSAlex Vesker void *actions) 676dfceca7eSAlex Vesker { 677dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT 678dfceca7eSAlex Vesker return mlx5dv_create_flow(matcher, 679dfceca7eSAlex Vesker match_value, 680dfceca7eSAlex Vesker num_actions, 681dfceca7eSAlex Vesker (struct mlx5dv_flow_action_attr *)actions); 682dfceca7eSAlex Vesker #else 683dfceca7eSAlex Vesker (void)matcher; 684dfceca7eSAlex Vesker (void)match_value; 685dfceca7eSAlex Vesker (void)num_actions; 686dfceca7eSAlex Vesker (void)actions; 687dfceca7eSAlex Vesker return NULL; 688dfceca7eSAlex Vesker #endif 689dfceca7eSAlex Vesker } 690dfceca7eSAlex Vesker 691dfceca7eSAlex Vesker static void * 69272f75660SOphir Munk mlx5_glue_dv_create_flow(void *matcher, 69372f75660SOphir Munk void *match_value, 69472f75660SOphir Munk size_t num_actions, 69572f75660SOphir Munk void *actions[]) 69672f75660SOphir Munk { 69772f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 69872f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 69972f75660SOphir Munk return mlx5dv_dr_rule_create(matcher, match_value, num_actions, 70072f75660SOphir Munk (struct mlx5dv_dr_action **)actions); 70172f75660SOphir Munk #else 70243e73483SThomas Monjalon size_t i; 70372f75660SOphir Munk struct mlx5dv_flow_action_attr actions_attr[8]; 70472f75660SOphir Munk 70572f75660SOphir Munk if (num_actions > 8) 70672f75660SOphir Munk return NULL; 70743e73483SThomas Monjalon for (i = 0; i < num_actions; i++) 70872f75660SOphir Munk actions_attr[i] = 70972f75660SOphir Munk *((struct mlx5dv_flow_action_attr *)(actions[i])); 710dfceca7eSAlex Vesker return __mlx5_glue_dv_create_flow(matcher, match_value, 71172f75660SOphir Munk num_actions, actions_attr); 71272f75660SOphir Munk #endif 71372f75660SOphir Munk #else 71472f75660SOphir Munk (void)matcher; 71572f75660SOphir Munk (void)match_value; 71672f75660SOphir Munk (void)num_actions; 71772f75660SOphir Munk (void)actions; 71872f75660SOphir Munk return NULL; 71972f75660SOphir Munk #endif 72072f75660SOphir Munk } 72172f75660SOphir Munk 72272f75660SOphir Munk static void * 72372f75660SOphir Munk mlx5_glue_dv_create_flow_action_counter(void *counter_obj, uint32_t offset) 72472f75660SOphir Munk { 72572f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 72672f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 72772f75660SOphir Munk return mlx5dv_dr_action_create_flow_counter(counter_obj, offset); 72872f75660SOphir Munk #else 72972f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 73072f75660SOphir Munk 73172f75660SOphir Munk (void)offset; 732cdb034a8SOphir Munk action = malloc(sizeof(*action)); 73372f75660SOphir Munk if (!action) 73472f75660SOphir Munk return NULL; 73572f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_COUNTERS_DEVX; 73672f75660SOphir Munk action->obj = counter_obj; 73772f75660SOphir Munk return action; 73872f75660SOphir Munk #endif 73972f75660SOphir Munk #else 74072f75660SOphir Munk (void)counter_obj; 74172f75660SOphir Munk (void)offset; 74272f75660SOphir Munk errno = ENOTSUP; 74372f75660SOphir Munk return NULL; 74472f75660SOphir Munk #endif 74572f75660SOphir Munk } 74672f75660SOphir Munk 74772f75660SOphir Munk static void * 74872f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_ibv_qp(void *qp) 74972f75660SOphir Munk { 75072f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 75172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 75272f75660SOphir Munk return mlx5dv_dr_action_create_dest_ibv_qp(qp); 75372f75660SOphir Munk #else 75472f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 75572f75660SOphir Munk 756cdb034a8SOphir Munk action = malloc(sizeof(*action)); 75772f75660SOphir Munk if (!action) 75872f75660SOphir Munk return NULL; 75972f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_DEST_IBV_QP; 76072f75660SOphir Munk action->obj = qp; 76172f75660SOphir Munk return action; 76272f75660SOphir Munk #endif 76372f75660SOphir Munk #else 76472f75660SOphir Munk (void)qp; 76572f75660SOphir Munk errno = ENOTSUP; 76672f75660SOphir Munk return NULL; 76772f75660SOphir Munk #endif 76872f75660SOphir Munk } 76972f75660SOphir Munk 77072f75660SOphir Munk static void * 77172f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_devx_tir(void *tir) 77272f75660SOphir Munk { 77372f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR 77472f75660SOphir Munk return mlx5dv_dr_action_create_dest_devx_tir(tir); 77572f75660SOphir Munk #else 77672f75660SOphir Munk (void)tir; 77772f75660SOphir Munk errno = ENOTSUP; 77872f75660SOphir Munk return NULL; 77972f75660SOphir Munk #endif 78072f75660SOphir Munk } 78172f75660SOphir Munk 78272f75660SOphir Munk static void * 783dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow_action_modify_header 784dfceca7eSAlex Vesker (struct ibv_context *ctx, 785dfceca7eSAlex Vesker size_t actions_sz, 786dfceca7eSAlex Vesker uint64_t actions[], 787dfceca7eSAlex Vesker enum mlx5dv_flow_table_type ft_type) 788dfceca7eSAlex Vesker { 789dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT 790dfceca7eSAlex Vesker return mlx5dv_create_flow_action_modify_header 791dfceca7eSAlex Vesker (ctx, actions_sz, actions, ft_type); 792dfceca7eSAlex Vesker #else 793dfceca7eSAlex Vesker (void)ctx; 794dfceca7eSAlex Vesker (void)ft_type; 795dfceca7eSAlex Vesker (void)actions_sz; 796dfceca7eSAlex Vesker (void)actions; 797dfceca7eSAlex Vesker errno = ENOTSUP; 798dfceca7eSAlex Vesker return NULL; 799dfceca7eSAlex Vesker #endif 800dfceca7eSAlex Vesker } 801dfceca7eSAlex Vesker 802dfceca7eSAlex Vesker static void * 80372f75660SOphir Munk mlx5_glue_dv_create_flow_action_modify_header 80472f75660SOphir Munk (struct ibv_context *ctx, 80572f75660SOphir Munk enum mlx5dv_flow_table_type ft_type, 80672f75660SOphir Munk void *domain, uint64_t flags, 80772f75660SOphir Munk size_t actions_sz, 80872f75660SOphir Munk uint64_t actions[]) 80972f75660SOphir Munk { 81072f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 81172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 81272f75660SOphir Munk (void)ctx; 81372f75660SOphir Munk (void)ft_type; 81472f75660SOphir Munk return mlx5dv_dr_action_create_modify_header(domain, flags, actions_sz, 81572f75660SOphir Munk (__be64 *)actions); 81672f75660SOphir Munk #else 81772f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 81872f75660SOphir Munk 81972f75660SOphir Munk (void)domain; 82072f75660SOphir Munk (void)flags; 821cdb034a8SOphir Munk action = malloc(sizeof(*action)); 82272f75660SOphir Munk if (!action) 82372f75660SOphir Munk return NULL; 82472f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION; 825dfceca7eSAlex Vesker action->action = __mlx5_glue_dv_create_flow_action_modify_header 82672f75660SOphir Munk (ctx, actions_sz, actions, ft_type); 82772f75660SOphir Munk return action; 82872f75660SOphir Munk #endif 82972f75660SOphir Munk #else 83072f75660SOphir Munk (void)ctx; 83172f75660SOphir Munk (void)ft_type; 83272f75660SOphir Munk (void)domain; 83372f75660SOphir Munk (void)flags; 83472f75660SOphir Munk (void)actions_sz; 83572f75660SOphir Munk (void)actions; 83672f75660SOphir Munk errno = ENOTSUP; 83772f75660SOphir Munk return NULL; 83872f75660SOphir Munk #endif 83972f75660SOphir Munk } 84072f75660SOphir Munk 84172f75660SOphir Munk static void * 842dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow_action_packet_reformat 843dfceca7eSAlex Vesker (struct ibv_context *ctx, 844dfceca7eSAlex Vesker size_t data_sz, void *data, 845dfceca7eSAlex Vesker enum mlx5dv_flow_action_packet_reformat_type reformat_type, 846dfceca7eSAlex Vesker enum mlx5dv_flow_table_type ft_type) 847dfceca7eSAlex Vesker { 848dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT 849dfceca7eSAlex Vesker return mlx5dv_create_flow_action_packet_reformat 850dfceca7eSAlex Vesker (ctx, data_sz, data, reformat_type, ft_type); 851dfceca7eSAlex Vesker #else 852dfceca7eSAlex Vesker (void)ctx; 853dfceca7eSAlex Vesker (void)reformat_type; 854dfceca7eSAlex Vesker (void)ft_type; 855dfceca7eSAlex Vesker (void)data_sz; 856dfceca7eSAlex Vesker (void)data; 857dfceca7eSAlex Vesker errno = ENOTSUP; 858dfceca7eSAlex Vesker return NULL; 859dfceca7eSAlex Vesker #endif 860dfceca7eSAlex Vesker } 861dfceca7eSAlex Vesker 862dfceca7eSAlex Vesker static void * 86372f75660SOphir Munk mlx5_glue_dv_create_flow_action_packet_reformat 86472f75660SOphir Munk (struct ibv_context *ctx, 86572f75660SOphir Munk enum mlx5dv_flow_action_packet_reformat_type reformat_type, 86672f75660SOphir Munk enum mlx5dv_flow_table_type ft_type, 86772f75660SOphir Munk struct mlx5dv_dr_domain *domain, 86872f75660SOphir Munk uint32_t flags, size_t data_sz, void *data) 86972f75660SOphir Munk { 87072f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 87172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 87272f75660SOphir Munk (void)ctx; 87372f75660SOphir Munk (void)ft_type; 87472f75660SOphir Munk return mlx5dv_dr_action_create_packet_reformat(domain, flags, 87572f75660SOphir Munk reformat_type, data_sz, 87672f75660SOphir Munk data); 87772f75660SOphir Munk #else 87872f75660SOphir Munk (void)domain; 87972f75660SOphir Munk (void)flags; 88072f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 88172f75660SOphir Munk 882cdb034a8SOphir Munk action = malloc(sizeof(*action)); 88372f75660SOphir Munk if (!action) 88472f75660SOphir Munk return NULL; 88572f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION; 886dfceca7eSAlex Vesker action->action = __mlx5_glue_dv_create_flow_action_packet_reformat 88772f75660SOphir Munk (ctx, data_sz, data, reformat_type, ft_type); 88872f75660SOphir Munk return action; 88972f75660SOphir Munk #endif 89072f75660SOphir Munk #else 89172f75660SOphir Munk (void)ctx; 89272f75660SOphir Munk (void)reformat_type; 89372f75660SOphir Munk (void)ft_type; 89472f75660SOphir Munk (void)domain; 89572f75660SOphir Munk (void)flags; 89672f75660SOphir Munk (void)data_sz; 89772f75660SOphir Munk (void)data; 89872f75660SOphir Munk errno = ENOTSUP; 89972f75660SOphir Munk return NULL; 90072f75660SOphir Munk #endif 90172f75660SOphir Munk } 90272f75660SOphir Munk 90372f75660SOphir Munk static void * 90472f75660SOphir Munk mlx5_glue_dv_create_flow_action_tag(uint32_t tag) 90572f75660SOphir Munk { 90672f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 90772f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 90872f75660SOphir Munk return mlx5dv_dr_action_create_tag(tag); 909ed5d2365SMichael Baum #else /* HAVE_MLX5DV_DR */ 91072f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 91166914d19SSuanming Mou 912cdb034a8SOphir Munk action = malloc(sizeof(*action)); 91372f75660SOphir Munk if (!action) 91472f75660SOphir Munk return NULL; 91572f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_TAG; 91672f75660SOphir Munk action->tag_value = tag; 91772f75660SOphir Munk return action; 918ed5d2365SMichael Baum #endif /* HAVE_MLX5DV_DR */ 919ed5d2365SMichael Baum #else /* HAVE_IBV_FLOW_DV_SUPPORT */ 92072f75660SOphir Munk (void)tag; 92172f75660SOphir Munk errno = ENOTSUP; 92272f75660SOphir Munk return NULL; 923ed5d2365SMichael Baum #endif /* HAVE_IBV_FLOW_DV_SUPPORT */ 92472f75660SOphir Munk } 92572f75660SOphir Munk 92672f75660SOphir Munk static void * 92772f75660SOphir Munk mlx5_glue_dv_create_flow_action_meter(struct mlx5dv_dr_flow_meter_attr *attr) 92872f75660SOphir Munk { 92972f75660SOphir Munk #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_FLOW_METER) 93072f75660SOphir Munk return mlx5dv_dr_action_create_flow_meter(attr); 93172f75660SOphir Munk #else 93272f75660SOphir Munk (void)attr; 93372f75660SOphir Munk errno = ENOTSUP; 93472f75660SOphir Munk return NULL; 93572f75660SOphir Munk #endif 93672f75660SOphir Munk } 93772f75660SOphir Munk 93872f75660SOphir Munk static int 93972f75660SOphir Munk mlx5_glue_dv_modify_flow_action_meter(void *action, 94072f75660SOphir Munk struct mlx5dv_dr_flow_meter_attr *attr, 94172f75660SOphir Munk uint64_t modify_bits) 94272f75660SOphir Munk { 94372f75660SOphir Munk #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_FLOW_METER) 94472f75660SOphir Munk return mlx5dv_dr_action_modify_flow_meter(action, attr, modify_bits); 94572f75660SOphir Munk #else 94672f75660SOphir Munk (void)action; 94772f75660SOphir Munk (void)attr; 94872f75660SOphir Munk (void)modify_bits; 94972f75660SOphir Munk errno = ENOTSUP; 95072f75660SOphir Munk return errno; 95172f75660SOphir Munk #endif 95272f75660SOphir Munk } 95372f75660SOphir Munk 954d4d85aa6SShiri Kuzin static void * 955a2999c7bSDekel Peled mlx5_glue_dv_create_flow_action_aso(struct mlx5dv_dr_domain *domain, 956a2999c7bSDekel Peled void *aso_obj, 957a2999c7bSDekel Peled uint32_t offset, 958a2999c7bSDekel Peled uint32_t flags, 959a2999c7bSDekel Peled uint8_t return_reg_c) 960a2999c7bSDekel Peled { 961a2999c7bSDekel Peled #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_ASO) 962a2999c7bSDekel Peled return mlx5dv_dr_action_create_aso(domain, aso_obj, offset, 963a2999c7bSDekel Peled flags, return_reg_c); 964a2999c7bSDekel Peled #else 965a2999c7bSDekel Peled (void)domain; 966a2999c7bSDekel Peled (void)aso_obj; 967a2999c7bSDekel Peled (void)offset; 968a2999c7bSDekel Peled (void)flags; 969a2999c7bSDekel Peled (void)return_reg_c; 970a2999c7bSDekel Peled errno = ENOTSUP; 971a2999c7bSDekel Peled return NULL; 972a2999c7bSDekel Peled #endif 973a2999c7bSDekel Peled } 974a2999c7bSDekel Peled 975a2999c7bSDekel Peled static void * 976d4d85aa6SShiri Kuzin mlx5_glue_dr_create_flow_action_default_miss(void) 977d4d85aa6SShiri Kuzin { 978d4d85aa6SShiri Kuzin #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_DEFAULT_MISS) 979d4d85aa6SShiri Kuzin return mlx5dv_dr_action_create_default_miss(); 980d4d85aa6SShiri Kuzin #else 981d4d85aa6SShiri Kuzin errno = ENOTSUP; 982d4d85aa6SShiri Kuzin return NULL; 983d4d85aa6SShiri Kuzin #endif 984d4d85aa6SShiri Kuzin } 985d4d85aa6SShiri Kuzin 98672f75660SOphir Munk static int 98772f75660SOphir Munk mlx5_glue_dv_destroy_flow(void *flow_id) 98872f75660SOphir Munk { 98972f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 99072f75660SOphir Munk return mlx5dv_dr_rule_destroy(flow_id); 99172f75660SOphir Munk #else 99272f75660SOphir Munk return ibv_destroy_flow(flow_id); 99372f75660SOphir Munk #endif 99472f75660SOphir Munk } 99572f75660SOphir Munk 99672f75660SOphir Munk static int 997dfceca7eSAlex Vesker __mlx5_glue_dv_destroy_flow_matcher(void *matcher) 998dfceca7eSAlex Vesker { 999dfceca7eSAlex Vesker #ifdef HAVE_IBV_FLOW_DV_SUPPORT 1000dfceca7eSAlex Vesker return mlx5dv_destroy_flow_matcher(matcher); 1001dfceca7eSAlex Vesker #else 1002dfceca7eSAlex Vesker (void)matcher; 1003dfceca7eSAlex Vesker errno = ENOTSUP; 1004dfceca7eSAlex Vesker return errno; 1005dfceca7eSAlex Vesker #endif 1006dfceca7eSAlex Vesker } 1007dfceca7eSAlex Vesker 1008dfceca7eSAlex Vesker static int 100972f75660SOphir Munk mlx5_glue_dv_destroy_flow_matcher(void *matcher) 101072f75660SOphir Munk { 101172f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 101272f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 101372f75660SOphir Munk return mlx5dv_dr_matcher_destroy(matcher); 101472f75660SOphir Munk #else 1015dfceca7eSAlex Vesker return __mlx5_glue_dv_destroy_flow_matcher(matcher); 101672f75660SOphir Munk #endif 101772f75660SOphir Munk #else 101872f75660SOphir Munk (void)matcher; 101972f75660SOphir Munk errno = ENOTSUP; 102072f75660SOphir Munk return errno; 102172f75660SOphir Munk #endif 102272f75660SOphir Munk } 102372f75660SOphir Munk 102472f75660SOphir Munk static struct ibv_context * 102572f75660SOphir Munk mlx5_glue_dv_open_device(struct ibv_device *device) 102672f75660SOphir Munk { 102772f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 102872f75660SOphir Munk return mlx5dv_open_device(device, 102972f75660SOphir Munk &(struct mlx5dv_context_attr){ 103072f75660SOphir Munk .flags = MLX5DV_CONTEXT_FLAGS_DEVX, 103172f75660SOphir Munk }); 103272f75660SOphir Munk #else 103372f75660SOphir Munk (void)device; 103472f75660SOphir Munk errno = ENOTSUP; 103572f75660SOphir Munk return NULL; 103672f75660SOphir Munk #endif 103772f75660SOphir Munk } 103872f75660SOphir Munk 103972f75660SOphir Munk static struct mlx5dv_devx_obj * 104072f75660SOphir Munk mlx5_glue_devx_obj_create(struct ibv_context *ctx, 104172f75660SOphir Munk const void *in, size_t inlen, 104272f75660SOphir Munk void *out, size_t outlen) 104372f75660SOphir Munk { 104472f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 104572f75660SOphir Munk return mlx5dv_devx_obj_create(ctx, in, inlen, out, outlen); 104672f75660SOphir Munk #else 104772f75660SOphir Munk (void)ctx; 104872f75660SOphir Munk (void)in; 104972f75660SOphir Munk (void)inlen; 105072f75660SOphir Munk (void)out; 105172f75660SOphir Munk (void)outlen; 105272f75660SOphir Munk errno = ENOTSUP; 105372f75660SOphir Munk return NULL; 105472f75660SOphir Munk #endif 105572f75660SOphir Munk } 105672f75660SOphir Munk 105772f75660SOphir Munk static int 105872f75660SOphir Munk mlx5_glue_devx_obj_destroy(struct mlx5dv_devx_obj *obj) 105972f75660SOphir Munk { 106072f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 106172f75660SOphir Munk return mlx5dv_devx_obj_destroy(obj); 106272f75660SOphir Munk #else 106372f75660SOphir Munk (void)obj; 106472f75660SOphir Munk return -ENOTSUP; 106572f75660SOphir Munk #endif 106672f75660SOphir Munk } 106772f75660SOphir Munk 106872f75660SOphir Munk static int 106972f75660SOphir Munk mlx5_glue_devx_obj_query(struct mlx5dv_devx_obj *obj, 107072f75660SOphir Munk const void *in, size_t inlen, 107172f75660SOphir Munk void *out, size_t outlen) 107272f75660SOphir Munk { 107372f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 107472f75660SOphir Munk return mlx5dv_devx_obj_query(obj, in, inlen, out, outlen); 107572f75660SOphir Munk #else 107672f75660SOphir Munk (void)obj; 107772f75660SOphir Munk (void)in; 107872f75660SOphir Munk (void)inlen; 107972f75660SOphir Munk (void)out; 108072f75660SOphir Munk (void)outlen; 108172f75660SOphir Munk return -ENOTSUP; 108272f75660SOphir Munk #endif 108372f75660SOphir Munk } 108472f75660SOphir Munk 108572f75660SOphir Munk static int 108672f75660SOphir Munk mlx5_glue_devx_obj_modify(struct mlx5dv_devx_obj *obj, 108772f75660SOphir Munk const void *in, size_t inlen, 108872f75660SOphir Munk void *out, size_t outlen) 108972f75660SOphir Munk { 109072f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 109172f75660SOphir Munk return mlx5dv_devx_obj_modify(obj, in, inlen, out, outlen); 109272f75660SOphir Munk #else 109372f75660SOphir Munk (void)obj; 109472f75660SOphir Munk (void)in; 109572f75660SOphir Munk (void)inlen; 109672f75660SOphir Munk (void)out; 109772f75660SOphir Munk (void)outlen; 109872f75660SOphir Munk return -ENOTSUP; 109972f75660SOphir Munk #endif 110072f75660SOphir Munk } 110172f75660SOphir Munk 110272f75660SOphir Munk static int 110372f75660SOphir Munk mlx5_glue_devx_general_cmd(struct ibv_context *ctx, 110472f75660SOphir Munk const void *in, size_t inlen, 110572f75660SOphir Munk void *out, size_t outlen) 110672f75660SOphir Munk { 110772f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 110872f75660SOphir Munk return mlx5dv_devx_general_cmd(ctx, in, inlen, out, outlen); 110972f75660SOphir Munk #else 111072f75660SOphir Munk (void)ctx; 111172f75660SOphir Munk (void)in; 111272f75660SOphir Munk (void)inlen; 111372f75660SOphir Munk (void)out; 111472f75660SOphir Munk (void)outlen; 111572f75660SOphir Munk return -ENOTSUP; 111672f75660SOphir Munk #endif 111772f75660SOphir Munk } 111872f75660SOphir Munk 111972f75660SOphir Munk static struct mlx5dv_devx_cmd_comp * 112072f75660SOphir Munk mlx5_glue_devx_create_cmd_comp(struct ibv_context *ctx) 112172f75660SOphir Munk { 112272f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC 112372f75660SOphir Munk return mlx5dv_devx_create_cmd_comp(ctx); 112472f75660SOphir Munk #else 112572f75660SOphir Munk (void)ctx; 112672f75660SOphir Munk errno = -ENOTSUP; 112772f75660SOphir Munk return NULL; 112872f75660SOphir Munk #endif 112972f75660SOphir Munk } 113072f75660SOphir Munk 113172f75660SOphir Munk static void 113272f75660SOphir Munk mlx5_glue_devx_destroy_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp) 113372f75660SOphir Munk { 113472f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC 113572f75660SOphir Munk mlx5dv_devx_destroy_cmd_comp(cmd_comp); 113672f75660SOphir Munk #else 113772f75660SOphir Munk (void)cmd_comp; 113872f75660SOphir Munk errno = -ENOTSUP; 113972f75660SOphir Munk #endif 114072f75660SOphir Munk } 114172f75660SOphir Munk 114272f75660SOphir Munk static int 114372f75660SOphir Munk mlx5_glue_devx_obj_query_async(struct mlx5dv_devx_obj *obj, const void *in, 114472f75660SOphir Munk size_t inlen, size_t outlen, uint64_t wr_id, 114572f75660SOphir Munk struct mlx5dv_devx_cmd_comp *cmd_comp) 114672f75660SOphir Munk { 114772f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC 114872f75660SOphir Munk return mlx5dv_devx_obj_query_async(obj, in, inlen, outlen, wr_id, 114972f75660SOphir Munk cmd_comp); 115072f75660SOphir Munk #else 115172f75660SOphir Munk (void)obj; 115272f75660SOphir Munk (void)in; 115372f75660SOphir Munk (void)inlen; 115472f75660SOphir Munk (void)outlen; 115572f75660SOphir Munk (void)wr_id; 115672f75660SOphir Munk (void)cmd_comp; 115772f75660SOphir Munk return -ENOTSUP; 115872f75660SOphir Munk #endif 115972f75660SOphir Munk } 116072f75660SOphir Munk 116172f75660SOphir Munk static int 116272f75660SOphir Munk mlx5_glue_devx_get_async_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp, 116372f75660SOphir Munk struct mlx5dv_devx_async_cmd_hdr *cmd_resp, 116472f75660SOphir Munk size_t cmd_resp_len) 116572f75660SOphir Munk { 116672f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC 116772f75660SOphir Munk return mlx5dv_devx_get_async_cmd_comp(cmd_comp, cmd_resp, 116872f75660SOphir Munk cmd_resp_len); 116972f75660SOphir Munk #else 117072f75660SOphir Munk (void)cmd_comp; 117172f75660SOphir Munk (void)cmd_resp; 117272f75660SOphir Munk (void)cmd_resp_len; 117372f75660SOphir Munk return -ENOTSUP; 117472f75660SOphir Munk #endif 117572f75660SOphir Munk } 117672f75660SOphir Munk 117772f75660SOphir Munk static struct mlx5dv_devx_umem * 117872f75660SOphir Munk mlx5_glue_devx_umem_reg(struct ibv_context *context, void *addr, size_t size, 117972f75660SOphir Munk uint32_t access) 118072f75660SOphir Munk { 118172f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 118272f75660SOphir Munk return mlx5dv_devx_umem_reg(context, addr, size, access); 118372f75660SOphir Munk #else 118472f75660SOphir Munk (void)context; 118572f75660SOphir Munk (void)addr; 118672f75660SOphir Munk (void)size; 118772f75660SOphir Munk (void)access; 118872f75660SOphir Munk errno = -ENOTSUP; 118972f75660SOphir Munk return NULL; 119072f75660SOphir Munk #endif 119172f75660SOphir Munk } 119272f75660SOphir Munk 119372f75660SOphir Munk static int 119472f75660SOphir Munk mlx5_glue_devx_umem_dereg(struct mlx5dv_devx_umem *dv_devx_umem) 119572f75660SOphir Munk { 119672f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 119772f75660SOphir Munk return mlx5dv_devx_umem_dereg(dv_devx_umem); 119872f75660SOphir Munk #else 119972f75660SOphir Munk (void)dv_devx_umem; 120072f75660SOphir Munk return -ENOTSUP; 120172f75660SOphir Munk #endif 120272f75660SOphir Munk } 120372f75660SOphir Munk 120472f75660SOphir Munk static int 120572f75660SOphir Munk mlx5_glue_devx_qp_query(struct ibv_qp *qp, 120672f75660SOphir Munk const void *in, size_t inlen, 120772f75660SOphir Munk void *out, size_t outlen) 120872f75660SOphir Munk { 120972f75660SOphir Munk #ifdef HAVE_IBV_DEVX_QP 121072f75660SOphir Munk return mlx5dv_devx_qp_query(qp, in, inlen, out, outlen); 121172f75660SOphir Munk #else 121272f75660SOphir Munk (void)qp; 121372f75660SOphir Munk (void)in; 121472f75660SOphir Munk (void)inlen; 121572f75660SOphir Munk (void)out; 121672f75660SOphir Munk (void)outlen; 121772f75660SOphir Munk errno = ENOTSUP; 121872f75660SOphir Munk return errno; 121972f75660SOphir Munk #endif 122072f75660SOphir Munk } 122172f75660SOphir Munk 122272f75660SOphir Munk static int 122375a9a73dSMatan Azrad mlx5_glue_devx_wq_query(struct ibv_wq *wq, const void *in, size_t inlen, 122475a9a73dSMatan Azrad void *out, size_t outlen) 122575a9a73dSMatan Azrad { 122675a9a73dSMatan Azrad #ifdef HAVE_IBV_DEVX_QP 122775a9a73dSMatan Azrad return mlx5dv_devx_wq_query(wq, in, inlen, out, outlen); 122875a9a73dSMatan Azrad #else 122975a9a73dSMatan Azrad (void)wq; 123075a9a73dSMatan Azrad (void)in; 123175a9a73dSMatan Azrad (void)inlen; 123275a9a73dSMatan Azrad (void)out; 123375a9a73dSMatan Azrad (void)outlen; 123475a9a73dSMatan Azrad errno = ENOTSUP; 123575a9a73dSMatan Azrad return errno; 123675a9a73dSMatan Azrad #endif 123775a9a73dSMatan Azrad } 123875a9a73dSMatan Azrad 123975a9a73dSMatan Azrad static int 124072f75660SOphir Munk mlx5_glue_devx_port_query(struct ibv_context *ctx, 124172f75660SOphir Munk uint32_t port_num, 1242d0cf77e8SViacheslav Ovsiienko struct mlx5_port_info *info) 124372f75660SOphir Munk { 1244d0cf77e8SViacheslav Ovsiienko int err = 0; 1245d0cf77e8SViacheslav Ovsiienko 1246d0cf77e8SViacheslav Ovsiienko info->query_flags = 0; 1247d0cf77e8SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_DR_DEVX_PORT_V35 1248d0cf77e8SViacheslav Ovsiienko /* The DevX port query API is implemented (rdma-core v35 and above). */ 1249d0cf77e8SViacheslav Ovsiienko struct mlx5_ib_uapi_query_port devx_port; 1250d0cf77e8SViacheslav Ovsiienko 1251d0cf77e8SViacheslav Ovsiienko memset(&devx_port, 0, sizeof(devx_port)); 1252d0cf77e8SViacheslav Ovsiienko err = mlx5dv_query_port(ctx, port_num, &devx_port); 1253d0cf77e8SViacheslav Ovsiienko if (err) 1254d0cf77e8SViacheslav Ovsiienko return err; 1255d0cf77e8SViacheslav Ovsiienko if (devx_port.flags & MLX5DV_QUERY_PORT_VPORT_REG_C0) { 1256d0cf77e8SViacheslav Ovsiienko info->vport_meta_tag = devx_port.reg_c0.value; 1257d0cf77e8SViacheslav Ovsiienko info->vport_meta_mask = devx_port.reg_c0.mask; 1258d0cf77e8SViacheslav Ovsiienko info->query_flags |= MLX5_PORT_QUERY_REG_C0; 1259d0cf77e8SViacheslav Ovsiienko } 1260d0cf77e8SViacheslav Ovsiienko if (devx_port.flags & MLX5DV_QUERY_PORT_VPORT) { 1261d0cf77e8SViacheslav Ovsiienko info->vport_id = devx_port.vport; 1262d0cf77e8SViacheslav Ovsiienko info->query_flags |= MLX5_PORT_QUERY_VPORT; 1263d0cf77e8SViacheslav Ovsiienko } 1264dfceca7eSAlex Vesker if (devx_port.flags & MLX5DV_QUERY_PORT_ESW_OWNER_VHCA_ID) { 1265dfceca7eSAlex Vesker info->esw_owner_vhca_id = devx_port.esw_owner_vhca_id; 1266dfceca7eSAlex Vesker info->query_flags |= MLX5_PORT_QUERY_ESW_OWNER_VHCA_ID; 1267dfceca7eSAlex Vesker } 126872f75660SOphir Munk #else 1269d0cf77e8SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_DR_DEVX_PORT 1270d0cf77e8SViacheslav Ovsiienko /* The legacy DevX port query API is implemented (prior v35). */ 1271d0cf77e8SViacheslav Ovsiienko struct mlx5dv_devx_port devx_port = { 1272d0cf77e8SViacheslav Ovsiienko .comp_mask = MLX5DV_DEVX_PORT_VPORT | 1273dfceca7eSAlex Vesker MLX5DV_DEVX_PORT_MATCH_REG_C_0 | 1274dfceca7eSAlex Vesker MLX5DV_DEVX_PORT_VPORT_VHCA_ID | 1275dfceca7eSAlex Vesker MLX5DV_DEVX_PORT_ESW_OWNER_VHCA_ID 1276d0cf77e8SViacheslav Ovsiienko }; 1277d0cf77e8SViacheslav Ovsiienko 1278d0cf77e8SViacheslav Ovsiienko err = mlx5dv_query_devx_port(ctx, port_num, &devx_port); 1279d0cf77e8SViacheslav Ovsiienko if (err) 1280d0cf77e8SViacheslav Ovsiienko return err; 1281d0cf77e8SViacheslav Ovsiienko if (devx_port.comp_mask & MLX5DV_DEVX_PORT_MATCH_REG_C_0) { 1282d0cf77e8SViacheslav Ovsiienko info->vport_meta_tag = devx_port.reg_c_0.value; 1283d0cf77e8SViacheslav Ovsiienko info->vport_meta_mask = devx_port.reg_c_0.mask; 1284d0cf77e8SViacheslav Ovsiienko info->query_flags |= MLX5_PORT_QUERY_REG_C0; 1285d0cf77e8SViacheslav Ovsiienko } 1286d0cf77e8SViacheslav Ovsiienko if (devx_port.comp_mask & MLX5DV_DEVX_PORT_VPORT) { 1287d0cf77e8SViacheslav Ovsiienko info->vport_id = devx_port.vport_num; 1288d0cf77e8SViacheslav Ovsiienko info->query_flags |= MLX5_PORT_QUERY_VPORT; 1289d0cf77e8SViacheslav Ovsiienko } 1290d0cf77e8SViacheslav Ovsiienko #else 1291d0cf77e8SViacheslav Ovsiienko RTE_SET_USED(ctx); 1292d0cf77e8SViacheslav Ovsiienko RTE_SET_USED(port_num); 1293d0cf77e8SViacheslav Ovsiienko #endif /* HAVE_MLX5DV_DR_DEVX_PORT */ 1294d0cf77e8SViacheslav Ovsiienko #endif /* HAVE_MLX5DV_DR_DEVX_PORT_V35 */ 1295d0cf77e8SViacheslav Ovsiienko return err; 129672f75660SOphir Munk } 129772f75660SOphir Munk 129872f75660SOphir Munk static int 1299a38d22edSHaifei Luo mlx5_glue_dr_dump_single_rule(FILE *file, void *rule) 1300a38d22edSHaifei Luo { 1301a38d22edSHaifei Luo #ifdef HAVE_MLX5_DR_FLOW_DUMP_RULE 1302a38d22edSHaifei Luo return mlx5dv_dump_dr_rule(file, rule); 1303a38d22edSHaifei Luo #else 1304a38d22edSHaifei Luo RTE_SET_USED(file); 1305a38d22edSHaifei Luo RTE_SET_USED(rule); 1306a38d22edSHaifei Luo return -ENOTSUP; 1307a38d22edSHaifei Luo #endif 1308a38d22edSHaifei Luo } 1309a38d22edSHaifei Luo 1310a38d22edSHaifei Luo static int 131172f75660SOphir Munk mlx5_glue_dr_dump_domain(FILE *file, void *domain) 131272f75660SOphir Munk { 131372f75660SOphir Munk #ifdef HAVE_MLX5_DR_FLOW_DUMP 131472f75660SOphir Munk return mlx5dv_dump_dr_domain(file, domain); 131572f75660SOphir Munk #else 131672f75660SOphir Munk RTE_SET_USED(file); 131772f75660SOphir Munk RTE_SET_USED(domain); 131872f75660SOphir Munk return -ENOTSUP; 131972f75660SOphir Munk #endif 132072f75660SOphir Munk } 132172f75660SOphir Munk 1322a3def854SJiawei Wang static void * 13234d23dd35SJiawei Wang mlx5_glue_dr_create_flow_action_sampler 13244d23dd35SJiawei Wang (struct mlx5dv_dr_flow_sampler_attr *attr) 1325a3def854SJiawei Wang { 1326a3def854SJiawei Wang #ifdef HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE 1327a3def854SJiawei Wang return mlx5dv_dr_action_create_flow_sampler(attr); 1328a3def854SJiawei Wang #else 1329a3def854SJiawei Wang (void)attr; 1330a3def854SJiawei Wang errno = ENOTSUP; 1331a3def854SJiawei Wang return NULL; 1332a3def854SJiawei Wang #endif 1333a3def854SJiawei Wang } 1334a3def854SJiawei Wang 13354d23dd35SJiawei Wang static void * 13364d23dd35SJiawei Wang mlx5_glue_dr_action_create_dest_array 13374d23dd35SJiawei Wang (void *domain, 13384d23dd35SJiawei Wang size_t num_dest, 13394d23dd35SJiawei Wang struct mlx5dv_dr_action_dest_attr *dests[]) 13404d23dd35SJiawei Wang { 13414d23dd35SJiawei Wang #ifdef HAVE_MLX5_DR_CREATE_ACTION_DEST_ARRAY 13424d23dd35SJiawei Wang return mlx5dv_dr_action_create_dest_array 13434d23dd35SJiawei Wang (domain, 13444d23dd35SJiawei Wang num_dest, 13454d23dd35SJiawei Wang dests); 13464d23dd35SJiawei Wang #else 13474d23dd35SJiawei Wang (void)domain; 13484d23dd35SJiawei Wang (void)num_dest; 13494d23dd35SJiawei Wang (void)dests; 13504d23dd35SJiawei Wang errno = ENOTSUP; 13514d23dd35SJiawei Wang return NULL; 13524d23dd35SJiawei Wang #endif 13534d23dd35SJiawei Wang } 13544d23dd35SJiawei Wang 135572f75660SOphir Munk static int 135672f75660SOphir Munk mlx5_glue_devx_query_eqn(struct ibv_context *ctx, uint32_t cpus, 135772f75660SOphir Munk uint32_t *eqn) 135872f75660SOphir Munk { 135972f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 136072f75660SOphir Munk return mlx5dv_devx_query_eqn(ctx, cpus, eqn); 136172f75660SOphir Munk #else 136272f75660SOphir Munk (void)ctx; 136372f75660SOphir Munk (void)cpus; 136472f75660SOphir Munk (void)eqn; 136572f75660SOphir Munk return -ENOTSUP; 136672f75660SOphir Munk #endif 136772f75660SOphir Munk } 136872f75660SOphir Munk 136972f75660SOphir Munk static struct mlx5dv_devx_event_channel * 137072f75660SOphir Munk mlx5_glue_devx_create_event_channel(struct ibv_context *ctx, int flags) 137172f75660SOphir Munk { 137272f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 137372f75660SOphir Munk return mlx5dv_devx_create_event_channel(ctx, flags); 137472f75660SOphir Munk #else 137572f75660SOphir Munk (void)ctx; 137672f75660SOphir Munk (void)flags; 137772f75660SOphir Munk errno = ENOTSUP; 137872f75660SOphir Munk return NULL; 137972f75660SOphir Munk #endif 138072f75660SOphir Munk } 138172f75660SOphir Munk 138272f75660SOphir Munk static void 138372f75660SOphir Munk mlx5_glue_devx_destroy_event_channel(struct mlx5dv_devx_event_channel *eventc) 138472f75660SOphir Munk { 138572f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 138672f75660SOphir Munk mlx5dv_devx_destroy_event_channel(eventc); 138772f75660SOphir Munk #else 138872f75660SOphir Munk (void)eventc; 138972f75660SOphir Munk #endif 139072f75660SOphir Munk } 139172f75660SOphir Munk 139272f75660SOphir Munk static int 139372f75660SOphir Munk mlx5_glue_devx_subscribe_devx_event(struct mlx5dv_devx_event_channel *eventc, 139472f75660SOphir Munk struct mlx5dv_devx_obj *obj, 139572f75660SOphir Munk uint16_t events_sz, uint16_t events_num[], 139672f75660SOphir Munk uint64_t cookie) 139772f75660SOphir Munk { 139872f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 139972f75660SOphir Munk return mlx5dv_devx_subscribe_devx_event(eventc, obj, events_sz, 140072f75660SOphir Munk events_num, cookie); 140172f75660SOphir Munk #else 140272f75660SOphir Munk (void)eventc; 140372f75660SOphir Munk (void)obj; 140472f75660SOphir Munk (void)events_sz; 140572f75660SOphir Munk (void)events_num; 140672f75660SOphir Munk (void)cookie; 140772f75660SOphir Munk return -ENOTSUP; 140872f75660SOphir Munk #endif 140972f75660SOphir Munk } 141072f75660SOphir Munk 141172f75660SOphir Munk static int 141272f75660SOphir Munk mlx5_glue_devx_subscribe_devx_event_fd(struct mlx5dv_devx_event_channel *eventc, 141372f75660SOphir Munk int fd, struct mlx5dv_devx_obj *obj, 141472f75660SOphir Munk uint16_t event_num) 141572f75660SOphir Munk { 141672f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 141772f75660SOphir Munk return mlx5dv_devx_subscribe_devx_event_fd(eventc, fd, obj, event_num); 141872f75660SOphir Munk #else 141972f75660SOphir Munk (void)eventc; 142072f75660SOphir Munk (void)fd; 142172f75660SOphir Munk (void)obj; 142272f75660SOphir Munk (void)event_num; 142372f75660SOphir Munk return -ENOTSUP; 142472f75660SOphir Munk #endif 142572f75660SOphir Munk } 142672f75660SOphir Munk 142772f75660SOphir Munk static ssize_t 142872f75660SOphir Munk mlx5_glue_devx_get_event(struct mlx5dv_devx_event_channel *eventc, 142972f75660SOphir Munk struct mlx5dv_devx_async_event_hdr *event_data, 143072f75660SOphir Munk size_t event_resp_len) 143172f75660SOphir Munk { 143272f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 143372f75660SOphir Munk return mlx5dv_devx_get_event(eventc, event_data, event_resp_len); 143472f75660SOphir Munk #else 143572f75660SOphir Munk (void)eventc; 143672f75660SOphir Munk (void)event_data; 143772f75660SOphir Munk (void)event_resp_len; 143872f75660SOphir Munk errno = ENOTSUP; 143972f75660SOphir Munk return -1; 144072f75660SOphir Munk #endif 144172f75660SOphir Munk } 144272f75660SOphir Munk 144372f75660SOphir Munk static struct mlx5dv_devx_uar * 144472f75660SOphir Munk mlx5_glue_devx_alloc_uar(struct ibv_context *context, uint32_t flags) 144572f75660SOphir Munk { 144672f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 144772f75660SOphir Munk return mlx5dv_devx_alloc_uar(context, flags); 144872f75660SOphir Munk #else 144972f75660SOphir Munk (void)context; 145072f75660SOphir Munk (void)flags; 145172f75660SOphir Munk errno = ENOTSUP; 145272f75660SOphir Munk return NULL; 145372f75660SOphir Munk #endif 145472f75660SOphir Munk } 145572f75660SOphir Munk 145672f75660SOphir Munk static void 145772f75660SOphir Munk mlx5_glue_devx_free_uar(struct mlx5dv_devx_uar *devx_uar) 145872f75660SOphir Munk { 145972f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 146072f75660SOphir Munk mlx5dv_devx_free_uar(devx_uar); 146172f75660SOphir Munk #else 146272f75660SOphir Munk (void)devx_uar; 146372f75660SOphir Munk #endif 146472f75660SOphir Munk } 146572f75660SOphir Munk 146672f75660SOphir Munk static struct mlx5dv_var * 146772f75660SOphir Munk mlx5_glue_dv_alloc_var(struct ibv_context *context, uint32_t flags) 146872f75660SOphir Munk { 146972f75660SOphir Munk #ifdef HAVE_IBV_VAR 147072f75660SOphir Munk return mlx5dv_alloc_var(context, flags); 147172f75660SOphir Munk #else 147272f75660SOphir Munk (void)context; 147372f75660SOphir Munk (void)flags; 147472f75660SOphir Munk errno = ENOTSUP; 147572f75660SOphir Munk return NULL; 147672f75660SOphir Munk #endif 147772f75660SOphir Munk } 147872f75660SOphir Munk 147972f75660SOphir Munk static void 148072f75660SOphir Munk mlx5_glue_dv_free_var(struct mlx5dv_var *var) 148172f75660SOphir Munk { 148272f75660SOphir Munk #ifdef HAVE_IBV_VAR 148372f75660SOphir Munk mlx5dv_free_var(var); 148472f75660SOphir Munk #else 148572f75660SOphir Munk (void)var; 148672f75660SOphir Munk errno = ENOTSUP; 148772f75660SOphir Munk #endif 148872f75660SOphir Munk } 148972f75660SOphir Munk 1490bebee850SSuanming Mou static void 1491bebee850SSuanming Mou mlx5_glue_dr_reclaim_domain_memory(void *domain, uint32_t enable) 1492bebee850SSuanming Mou { 1493bebee850SSuanming Mou #ifdef HAVE_MLX5DV_DR_MEM_RECLAIM 1494bebee850SSuanming Mou mlx5dv_dr_domain_set_reclaim_device_memory(domain, enable); 1495bebee850SSuanming Mou #else 1496bebee850SSuanming Mou (void)(enable); 1497bebee850SSuanming Mou (void)(domain); 1498bebee850SSuanming Mou #endif 1499bebee850SSuanming Mou } 1500bebee850SSuanming Mou 150179a7e409SViacheslav Ovsiienko static struct mlx5dv_pp * 150279a7e409SViacheslav Ovsiienko mlx5_glue_dv_alloc_pp(struct ibv_context *context, 150379a7e409SViacheslav Ovsiienko size_t pp_context_sz, 150479a7e409SViacheslav Ovsiienko const void *pp_context, 150579a7e409SViacheslav Ovsiienko uint32_t flags) 150679a7e409SViacheslav Ovsiienko { 150779a7e409SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_PP_ALLOC 150879a7e409SViacheslav Ovsiienko return mlx5dv_pp_alloc(context, pp_context_sz, pp_context, flags); 150979a7e409SViacheslav Ovsiienko #else 151079a7e409SViacheslav Ovsiienko RTE_SET_USED(context); 151179a7e409SViacheslav Ovsiienko RTE_SET_USED(pp_context_sz); 151279a7e409SViacheslav Ovsiienko RTE_SET_USED(pp_context); 151379a7e409SViacheslav Ovsiienko RTE_SET_USED(flags); 151479a7e409SViacheslav Ovsiienko errno = ENOTSUP; 151579a7e409SViacheslav Ovsiienko return NULL; 151679a7e409SViacheslav Ovsiienko #endif 151779a7e409SViacheslav Ovsiienko } 151879a7e409SViacheslav Ovsiienko 151979a7e409SViacheslav Ovsiienko static void 1520e39226bdSJiawei Wang mlx5_glue_dr_allow_duplicate_rules(void *domain, uint32_t allow) 1521e39226bdSJiawei Wang { 1522e39226bdSJiawei Wang #ifdef HAVE_MLX5_DR_ALLOW_DUPLICATE 1523e39226bdSJiawei Wang mlx5dv_dr_domain_allow_duplicate_rules(domain, allow); 1524e39226bdSJiawei Wang #else 1525e39226bdSJiawei Wang (void)(allow); 1526e39226bdSJiawei Wang (void)(domain); 1527e39226bdSJiawei Wang #endif 1528e39226bdSJiawei Wang } 1529e39226bdSJiawei Wang 1530e39226bdSJiawei Wang static void 153179a7e409SViacheslav Ovsiienko mlx5_glue_dv_free_pp(struct mlx5dv_pp *pp) 153279a7e409SViacheslav Ovsiienko { 153379a7e409SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_PP_ALLOC 153479a7e409SViacheslav Ovsiienko mlx5dv_pp_free(pp); 153579a7e409SViacheslav Ovsiienko #else 153679a7e409SViacheslav Ovsiienko RTE_SET_USED(pp); 153779a7e409SViacheslav Ovsiienko #endif 153879a7e409SViacheslav Ovsiienko } 153979a7e409SViacheslav Ovsiienko 154080f998daSMichael Savisko static void * 154180f998daSMichael Savisko mlx5_glue_dr_create_flow_action_send_to_kernel(void *tbl, uint16_t priority) 154280f998daSMichael Savisko { 154380f998daSMichael Savisko #ifdef HAVE_MLX5DV_DR_ACTION_CREATE_DEST_ROOT_TABLE 154480f998daSMichael Savisko struct mlx5dv_dr_table *table = (struct mlx5dv_dr_table *)tbl; 154580f998daSMichael Savisko 154680f998daSMichael Savisko return mlx5dv_dr_action_create_dest_root_table(table, priority); 154780f998daSMichael Savisko #else 154880f998daSMichael Savisko RTE_SET_USED(tbl); 154980f998daSMichael Savisko RTE_SET_USED(priority); 155080f998daSMichael Savisko errno = ENOTSUP; 155180f998daSMichael Savisko return NULL; 155280f998daSMichael Savisko #endif 155380f998daSMichael Savisko } 155480f998daSMichael Savisko 1555be8476ddSHamdan Igbaria static struct mlx5dv_steering_anchor * 1556be8476ddSHamdan Igbaria mlx5_glue_dv_create_steering_anchor(struct ibv_context *context, 1557be8476ddSHamdan Igbaria struct mlx5dv_steering_anchor_attr *attr) 1558be8476ddSHamdan Igbaria { 1559be8476ddSHamdan Igbaria #ifdef HAVE_MLX5DV_CREATE_STEERING_ANCHOR 1560be8476ddSHamdan Igbaria return mlx5dv_create_steering_anchor(context, attr); 1561be8476ddSHamdan Igbaria #else 1562be8476ddSHamdan Igbaria (void)context; 1563be8476ddSHamdan Igbaria (void)attr; 1564be8476ddSHamdan Igbaria errno = ENOTSUP; 1565be8476ddSHamdan Igbaria return NULL; 1566be8476ddSHamdan Igbaria #endif 1567be8476ddSHamdan Igbaria } 1568be8476ddSHamdan Igbaria 1569be8476ddSHamdan Igbaria static int 1570be8476ddSHamdan Igbaria mlx5_glue_dv_destroy_steering_anchor(struct mlx5dv_steering_anchor *sa) 1571be8476ddSHamdan Igbaria { 1572be8476ddSHamdan Igbaria #ifdef HAVE_MLX5DV_CREATE_STEERING_ANCHOR 1573be8476ddSHamdan Igbaria return mlx5dv_destroy_steering_anchor(sa); 1574be8476ddSHamdan Igbaria #else 1575be8476ddSHamdan Igbaria (void)sa; 1576be8476ddSHamdan Igbaria errno = ENOTSUP; 1577be8476ddSHamdan Igbaria return -ENOTSUP; 1578be8476ddSHamdan Igbaria #endif 1579be8476ddSHamdan Igbaria } 1580be8476ddSHamdan Igbaria 158172f75660SOphir Munk __rte_cache_aligned 158272f75660SOphir Munk const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue) { 158372f75660SOphir Munk .version = MLX5_GLUE_VERSION, 158472f75660SOphir Munk .fork_init = mlx5_glue_fork_init, 158572f75660SOphir Munk .alloc_pd = mlx5_glue_alloc_pd, 158672f75660SOphir Munk .dealloc_pd = mlx5_glue_dealloc_pd, 15870777921aSMichael Baum .import_pd = mlx5_glue_import_pd, 15880777921aSMichael Baum .unimport_pd = mlx5_glue_unimport_pd, 158972f75660SOphir Munk .get_device_list = mlx5_glue_get_device_list, 159072f75660SOphir Munk .free_device_list = mlx5_glue_free_device_list, 159172f75660SOphir Munk .open_device = mlx5_glue_open_device, 15920777921aSMichael Baum .import_device = mlx5_glue_import_device, 159372f75660SOphir Munk .close_device = mlx5_glue_close_device, 159472f75660SOphir Munk .query_device = mlx5_glue_query_device, 159572f75660SOphir Munk .query_device_ex = mlx5_glue_query_device_ex, 1596dfceca7eSAlex Vesker .get_device_name = mlx5_glue_get_device_name, 159772f75660SOphir Munk .query_rt_values_ex = mlx5_glue_query_rt_values_ex, 159872f75660SOphir Munk .query_port = mlx5_glue_query_port, 159972f75660SOphir Munk .create_comp_channel = mlx5_glue_create_comp_channel, 160072f75660SOphir Munk .destroy_comp_channel = mlx5_glue_destroy_comp_channel, 160172f75660SOphir Munk .create_cq = mlx5_glue_create_cq, 160272f75660SOphir Munk .destroy_cq = mlx5_glue_destroy_cq, 160372f75660SOphir Munk .get_cq_event = mlx5_glue_get_cq_event, 160472f75660SOphir Munk .ack_cq_events = mlx5_glue_ack_cq_events, 160572f75660SOphir Munk .create_rwq_ind_table = mlx5_glue_create_rwq_ind_table, 160672f75660SOphir Munk .destroy_rwq_ind_table = mlx5_glue_destroy_rwq_ind_table, 160772f75660SOphir Munk .create_wq = mlx5_glue_create_wq, 160872f75660SOphir Munk .destroy_wq = mlx5_glue_destroy_wq, 160972f75660SOphir Munk .modify_wq = mlx5_glue_modify_wq, 161072f75660SOphir Munk .create_flow = mlx5_glue_create_flow, 161172f75660SOphir Munk .destroy_flow = mlx5_glue_destroy_flow, 161272f75660SOphir Munk .destroy_flow_action = mlx5_glue_destroy_flow_action, 161372f75660SOphir Munk .create_qp = mlx5_glue_create_qp, 161472f75660SOphir Munk .create_qp_ex = mlx5_glue_create_qp_ex, 161572f75660SOphir Munk .destroy_qp = mlx5_glue_destroy_qp, 161672f75660SOphir Munk .modify_qp = mlx5_glue_modify_qp, 161772f75660SOphir Munk .reg_mr = mlx5_glue_reg_mr, 16186ebd062eSMichael Baum .reg_mr_iova = mlx5_glue_reg_mr_iova, 161972f75660SOphir Munk .alloc_null_mr = mlx5_glue_alloc_null_mr, 162072f75660SOphir Munk .dereg_mr = mlx5_glue_dereg_mr, 162172f75660SOphir Munk .create_counter_set = mlx5_glue_create_counter_set, 162272f75660SOphir Munk .destroy_counter_set = mlx5_glue_destroy_counter_set, 162372f75660SOphir Munk .describe_counter_set = mlx5_glue_describe_counter_set, 162472f75660SOphir Munk .query_counter_set = mlx5_glue_query_counter_set, 162572f75660SOphir Munk .create_counters = mlx5_glue_create_counters, 162672f75660SOphir Munk .destroy_counters = mlx5_glue_destroy_counters, 162772f75660SOphir Munk .attach_counters = mlx5_glue_attach_counters, 162872f75660SOphir Munk .query_counters = mlx5_glue_query_counters, 162972f75660SOphir Munk .ack_async_event = mlx5_glue_ack_async_event, 163072f75660SOphir Munk .get_async_event = mlx5_glue_get_async_event, 163172f75660SOphir Munk .port_state_str = mlx5_glue_port_state_str, 163272f75660SOphir Munk .cq_ex_to_cq = mlx5_glue_cq_ex_to_cq, 163372f75660SOphir Munk .dr_create_flow_action_dest_flow_tbl = 163472f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_flow_tbl, 163572f75660SOphir Munk .dr_create_flow_action_dest_port = 163672f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_port, 163772f75660SOphir Munk .dr_create_flow_action_drop = 163872f75660SOphir Munk mlx5_glue_dr_create_flow_action_drop, 163972f75660SOphir Munk .dr_create_flow_action_push_vlan = 164072f75660SOphir Munk mlx5_glue_dr_create_flow_action_push_vlan, 164172f75660SOphir Munk .dr_create_flow_action_pop_vlan = 164272f75660SOphir Munk mlx5_glue_dr_create_flow_action_pop_vlan, 164372f75660SOphir Munk .dr_create_flow_tbl = mlx5_glue_dr_create_flow_tbl, 164472f75660SOphir Munk .dr_destroy_flow_tbl = mlx5_glue_dr_destroy_flow_tbl, 164572f75660SOphir Munk .dr_create_domain = mlx5_glue_dr_create_domain, 164672f75660SOphir Munk .dr_destroy_domain = mlx5_glue_dr_destroy_domain, 16476e0cd74aSBing Zhao .dr_sync_domain = mlx5_glue_dr_sync_domain, 164872f75660SOphir Munk .dv_create_cq = mlx5_glue_dv_create_cq, 164972f75660SOphir Munk .dv_create_wq = mlx5_glue_dv_create_wq, 165072f75660SOphir Munk .dv_query_device = mlx5_glue_dv_query_device, 165172f75660SOphir Munk .dv_set_context_attr = mlx5_glue_dv_set_context_attr, 165272f75660SOphir Munk .dv_init_obj = mlx5_glue_dv_init_obj, 165372f75660SOphir Munk .dv_create_qp = mlx5_glue_dv_create_qp, 165472f75660SOphir Munk .dv_create_flow_matcher = mlx5_glue_dv_create_flow_matcher, 1655dfceca7eSAlex Vesker .dv_create_flow_matcher_root = __mlx5_glue_dv_create_flow_matcher, 165672f75660SOphir Munk .dv_create_flow = mlx5_glue_dv_create_flow, 1657dfceca7eSAlex Vesker .dv_create_flow_root = __mlx5_glue_dv_create_flow, 165872f75660SOphir Munk .dv_create_flow_action_counter = 165972f75660SOphir Munk mlx5_glue_dv_create_flow_action_counter, 166072f75660SOphir Munk .dv_create_flow_action_dest_ibv_qp = 166172f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_ibv_qp, 166272f75660SOphir Munk .dv_create_flow_action_dest_devx_tir = 166372f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_devx_tir, 166472f75660SOphir Munk .dv_create_flow_action_modify_header = 166572f75660SOphir Munk mlx5_glue_dv_create_flow_action_modify_header, 1666dfceca7eSAlex Vesker .dv_create_flow_action_modify_header_root = 1667dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow_action_modify_header, 166872f75660SOphir Munk .dv_create_flow_action_packet_reformat = 166972f75660SOphir Munk mlx5_glue_dv_create_flow_action_packet_reformat, 1670dfceca7eSAlex Vesker .dv_create_flow_action_packet_reformat_root = 1671dfceca7eSAlex Vesker __mlx5_glue_dv_create_flow_action_packet_reformat, 167272f75660SOphir Munk .dv_create_flow_action_tag = mlx5_glue_dv_create_flow_action_tag, 167372f75660SOphir Munk .dv_create_flow_action_meter = mlx5_glue_dv_create_flow_action_meter, 167472f75660SOphir Munk .dv_modify_flow_action_meter = mlx5_glue_dv_modify_flow_action_meter, 1675a2999c7bSDekel Peled .dv_create_flow_action_aso = mlx5_glue_dv_create_flow_action_aso, 1676d4d85aa6SShiri Kuzin .dr_create_flow_action_default_miss = 1677d4d85aa6SShiri Kuzin mlx5_glue_dr_create_flow_action_default_miss, 167872f75660SOphir Munk .dv_destroy_flow = mlx5_glue_dv_destroy_flow, 167972f75660SOphir Munk .dv_destroy_flow_matcher = mlx5_glue_dv_destroy_flow_matcher, 1680dfceca7eSAlex Vesker .dv_destroy_flow_matcher_root = __mlx5_glue_dv_destroy_flow_matcher, 168172f75660SOphir Munk .dv_open_device = mlx5_glue_dv_open_device, 168272f75660SOphir Munk .devx_obj_create = mlx5_glue_devx_obj_create, 168372f75660SOphir Munk .devx_obj_destroy = mlx5_glue_devx_obj_destroy, 168472f75660SOphir Munk .devx_obj_query = mlx5_glue_devx_obj_query, 168572f75660SOphir Munk .devx_obj_modify = mlx5_glue_devx_obj_modify, 168672f75660SOphir Munk .devx_general_cmd = mlx5_glue_devx_general_cmd, 168772f75660SOphir Munk .devx_create_cmd_comp = mlx5_glue_devx_create_cmd_comp, 168872f75660SOphir Munk .devx_destroy_cmd_comp = mlx5_glue_devx_destroy_cmd_comp, 168972f75660SOphir Munk .devx_obj_query_async = mlx5_glue_devx_obj_query_async, 169072f75660SOphir Munk .devx_get_async_cmd_comp = mlx5_glue_devx_get_async_cmd_comp, 169172f75660SOphir Munk .devx_umem_reg = mlx5_glue_devx_umem_reg, 169272f75660SOphir Munk .devx_umem_dereg = mlx5_glue_devx_umem_dereg, 169372f75660SOphir Munk .devx_qp_query = mlx5_glue_devx_qp_query, 169475a9a73dSMatan Azrad .devx_wq_query = mlx5_glue_devx_wq_query, 169572f75660SOphir Munk .devx_port_query = mlx5_glue_devx_port_query, 169672f75660SOphir Munk .dr_dump_domain = mlx5_glue_dr_dump_domain, 1697a38d22edSHaifei Luo .dr_dump_rule = mlx5_glue_dr_dump_single_rule, 1698bebee850SSuanming Mou .dr_reclaim_domain_memory = mlx5_glue_dr_reclaim_domain_memory, 1699a3def854SJiawei Wang .dr_create_flow_action_sampler = 1700a3def854SJiawei Wang mlx5_glue_dr_create_flow_action_sampler, 17014d23dd35SJiawei Wang .dr_create_flow_action_dest_array = 17024d23dd35SJiawei Wang mlx5_glue_dr_action_create_dest_array, 1703e39226bdSJiawei Wang .dr_allow_duplicate_rules = mlx5_glue_dr_allow_duplicate_rules, 170472f75660SOphir Munk .devx_query_eqn = mlx5_glue_devx_query_eqn, 170572f75660SOphir Munk .devx_create_event_channel = mlx5_glue_devx_create_event_channel, 170672f75660SOphir Munk .devx_destroy_event_channel = mlx5_glue_devx_destroy_event_channel, 170772f75660SOphir Munk .devx_subscribe_devx_event = mlx5_glue_devx_subscribe_devx_event, 170872f75660SOphir Munk .devx_subscribe_devx_event_fd = mlx5_glue_devx_subscribe_devx_event_fd, 170972f75660SOphir Munk .devx_get_event = mlx5_glue_devx_get_event, 171072f75660SOphir Munk .devx_alloc_uar = mlx5_glue_devx_alloc_uar, 171172f75660SOphir Munk .devx_free_uar = mlx5_glue_devx_free_uar, 171272f75660SOphir Munk .dv_alloc_var = mlx5_glue_dv_alloc_var, 171372f75660SOphir Munk .dv_free_var = mlx5_glue_dv_free_var, 171479a7e409SViacheslav Ovsiienko .dv_alloc_pp = mlx5_glue_dv_alloc_pp, 171579a7e409SViacheslav Ovsiienko .dv_free_pp = mlx5_glue_dv_free_pp, 171680f998daSMichael Savisko .dr_create_flow_action_send_to_kernel = 171780f998daSMichael Savisko mlx5_glue_dr_create_flow_action_send_to_kernel, 1718be8476ddSHamdan Igbaria .create_steering_anchor = mlx5_glue_dv_create_steering_anchor, 1719be8476ddSHamdan Igbaria .destroy_steering_anchor = mlx5_glue_dv_destroy_steering_anchor, 172072f75660SOphir Munk }; 1721