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 { 2272f75660SOphir Munk return ibv_fork_init(); 2372f75660SOphir Munk } 2472f75660SOphir Munk 2572f75660SOphir Munk static struct ibv_pd * 2672f75660SOphir Munk mlx5_glue_alloc_pd(struct ibv_context *context) 2772f75660SOphir Munk { 2872f75660SOphir Munk return ibv_alloc_pd(context); 2972f75660SOphir Munk } 3072f75660SOphir Munk 3172f75660SOphir Munk static int 3272f75660SOphir Munk mlx5_glue_dealloc_pd(struct ibv_pd *pd) 3372f75660SOphir Munk { 3472f75660SOphir Munk return ibv_dealloc_pd(pd); 3572f75660SOphir Munk } 3672f75660SOphir Munk 3772f75660SOphir Munk static struct ibv_device ** 3872f75660SOphir Munk mlx5_glue_get_device_list(int *num_devices) 3972f75660SOphir Munk { 4072f75660SOphir Munk return ibv_get_device_list(num_devices); 4172f75660SOphir Munk } 4272f75660SOphir Munk 4372f75660SOphir Munk static void 4472f75660SOphir Munk mlx5_glue_free_device_list(struct ibv_device **list) 4572f75660SOphir Munk { 4672f75660SOphir Munk ibv_free_device_list(list); 4772f75660SOphir Munk } 4872f75660SOphir Munk 4972f75660SOphir Munk static struct ibv_context * 5072f75660SOphir Munk mlx5_glue_open_device(struct ibv_device *device) 5172f75660SOphir Munk { 5272f75660SOphir Munk return ibv_open_device(device); 5372f75660SOphir Munk } 5472f75660SOphir Munk 5572f75660SOphir Munk static int 5672f75660SOphir Munk mlx5_glue_close_device(struct ibv_context *context) 5772f75660SOphir Munk { 5872f75660SOphir Munk return ibv_close_device(context); 5972f75660SOphir Munk } 6072f75660SOphir Munk 6172f75660SOphir Munk static int 6272f75660SOphir Munk mlx5_glue_query_device(struct ibv_context *context, 6372f75660SOphir Munk struct ibv_device_attr *device_attr) 6472f75660SOphir Munk { 6572f75660SOphir Munk return ibv_query_device(context, device_attr); 6672f75660SOphir Munk } 6772f75660SOphir Munk 6872f75660SOphir Munk static int 6972f75660SOphir Munk mlx5_glue_query_device_ex(struct ibv_context *context, 7072f75660SOphir Munk const struct ibv_query_device_ex_input *input, 7172f75660SOphir Munk struct ibv_device_attr_ex *attr) 7272f75660SOphir Munk { 7372f75660SOphir Munk return ibv_query_device_ex(context, input, attr); 7472f75660SOphir Munk } 7572f75660SOphir Munk 7672f75660SOphir Munk static int 7772f75660SOphir Munk mlx5_glue_query_rt_values_ex(struct ibv_context *context, 7872f75660SOphir Munk struct ibv_values_ex *values) 7972f75660SOphir Munk { 8072f75660SOphir Munk return ibv_query_rt_values_ex(context, values); 8172f75660SOphir Munk } 8272f75660SOphir Munk 8372f75660SOphir Munk static int 8472f75660SOphir Munk mlx5_glue_query_port(struct ibv_context *context, uint8_t port_num, 8572f75660SOphir Munk struct ibv_port_attr *port_attr) 8672f75660SOphir Munk { 8772f75660SOphir Munk return ibv_query_port(context, port_num, port_attr); 8872f75660SOphir Munk } 8972f75660SOphir Munk 9072f75660SOphir Munk static struct ibv_comp_channel * 9172f75660SOphir Munk mlx5_glue_create_comp_channel(struct ibv_context *context) 9272f75660SOphir Munk { 9372f75660SOphir Munk return ibv_create_comp_channel(context); 9472f75660SOphir Munk } 9572f75660SOphir Munk 9672f75660SOphir Munk static int 9772f75660SOphir Munk mlx5_glue_destroy_comp_channel(struct ibv_comp_channel *channel) 9872f75660SOphir Munk { 9972f75660SOphir Munk return ibv_destroy_comp_channel(channel); 10072f75660SOphir Munk } 10172f75660SOphir Munk 10272f75660SOphir Munk static struct ibv_cq * 10372f75660SOphir Munk mlx5_glue_create_cq(struct ibv_context *context, int cqe, void *cq_context, 10472f75660SOphir Munk struct ibv_comp_channel *channel, int comp_vector) 10572f75660SOphir Munk { 10672f75660SOphir Munk return ibv_create_cq(context, cqe, cq_context, channel, comp_vector); 10772f75660SOphir Munk } 10872f75660SOphir Munk 10972f75660SOphir Munk static int 11072f75660SOphir Munk mlx5_glue_destroy_cq(struct ibv_cq *cq) 11172f75660SOphir Munk { 11272f75660SOphir Munk return ibv_destroy_cq(cq); 11372f75660SOphir Munk } 11472f75660SOphir Munk 11572f75660SOphir Munk static int 11672f75660SOphir Munk mlx5_glue_get_cq_event(struct ibv_comp_channel *channel, struct ibv_cq **cq, 11772f75660SOphir Munk void **cq_context) 11872f75660SOphir Munk { 11972f75660SOphir Munk return ibv_get_cq_event(channel, cq, cq_context); 12072f75660SOphir Munk } 12172f75660SOphir Munk 12272f75660SOphir Munk static void 12372f75660SOphir Munk mlx5_glue_ack_cq_events(struct ibv_cq *cq, unsigned int nevents) 12472f75660SOphir Munk { 12572f75660SOphir Munk ibv_ack_cq_events(cq, nevents); 12672f75660SOphir Munk } 12772f75660SOphir Munk 12872f75660SOphir Munk static struct ibv_rwq_ind_table * 12972f75660SOphir Munk mlx5_glue_create_rwq_ind_table(struct ibv_context *context, 13072f75660SOphir Munk struct ibv_rwq_ind_table_init_attr *init_attr) 13172f75660SOphir Munk { 13272f75660SOphir Munk return ibv_create_rwq_ind_table(context, init_attr); 13372f75660SOphir Munk } 13472f75660SOphir Munk 13572f75660SOphir Munk static int 13672f75660SOphir Munk mlx5_glue_destroy_rwq_ind_table(struct ibv_rwq_ind_table *rwq_ind_table) 13772f75660SOphir Munk { 13872f75660SOphir Munk return ibv_destroy_rwq_ind_table(rwq_ind_table); 13972f75660SOphir Munk } 14072f75660SOphir Munk 14172f75660SOphir Munk static struct ibv_wq * 14272f75660SOphir Munk mlx5_glue_create_wq(struct ibv_context *context, 14372f75660SOphir Munk struct ibv_wq_init_attr *wq_init_attr) 14472f75660SOphir Munk { 14572f75660SOphir Munk return ibv_create_wq(context, wq_init_attr); 14672f75660SOphir Munk } 14772f75660SOphir Munk 14872f75660SOphir Munk static int 14972f75660SOphir Munk mlx5_glue_destroy_wq(struct ibv_wq *wq) 15072f75660SOphir Munk { 15172f75660SOphir Munk return ibv_destroy_wq(wq); 15272f75660SOphir Munk } 15372f75660SOphir Munk static int 15472f75660SOphir Munk mlx5_glue_modify_wq(struct ibv_wq *wq, struct ibv_wq_attr *wq_attr) 15572f75660SOphir Munk { 15672f75660SOphir Munk return ibv_modify_wq(wq, wq_attr); 15772f75660SOphir Munk } 15872f75660SOphir Munk 15972f75660SOphir Munk static struct ibv_flow * 16072f75660SOphir Munk mlx5_glue_create_flow(struct ibv_qp *qp, struct ibv_flow_attr *flow) 16172f75660SOphir Munk { 16272f75660SOphir Munk return ibv_create_flow(qp, flow); 16372f75660SOphir Munk } 16472f75660SOphir Munk 16572f75660SOphir Munk static int 16672f75660SOphir Munk mlx5_glue_destroy_flow(struct ibv_flow *flow_id) 16772f75660SOphir Munk { 16872f75660SOphir Munk return ibv_destroy_flow(flow_id); 16972f75660SOphir Munk } 17072f75660SOphir Munk 17172f75660SOphir Munk static int 17272f75660SOphir Munk mlx5_glue_destroy_flow_action(void *action) 17372f75660SOphir Munk { 17472f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 17572f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 17672f75660SOphir Munk return mlx5dv_dr_action_destroy(action); 17772f75660SOphir Munk #else 17872f75660SOphir Munk struct mlx5dv_flow_action_attr *attr = action; 17972f75660SOphir Munk int res = 0; 18072f75660SOphir Munk switch (attr->type) { 18172f75660SOphir Munk case MLX5DV_FLOW_ACTION_TAG: 18272f75660SOphir Munk break; 18372f75660SOphir Munk default: 18472f75660SOphir Munk res = ibv_destroy_flow_action(attr->action); 18572f75660SOphir Munk break; 18672f75660SOphir Munk } 187cdb034a8SOphir Munk free(action); 18872f75660SOphir Munk return res; 18972f75660SOphir Munk #endif 19072f75660SOphir Munk #else 19172f75660SOphir Munk (void)action; 19272f75660SOphir Munk return -ENOTSUP; 19372f75660SOphir Munk #endif 19472f75660SOphir Munk } 19572f75660SOphir Munk 19672f75660SOphir Munk static struct ibv_qp * 19772f75660SOphir Munk mlx5_glue_create_qp(struct ibv_pd *pd, struct ibv_qp_init_attr *qp_init_attr) 19872f75660SOphir Munk { 19972f75660SOphir Munk return ibv_create_qp(pd, qp_init_attr); 20072f75660SOphir Munk } 20172f75660SOphir Munk 20272f75660SOphir Munk static struct ibv_qp * 20372f75660SOphir Munk mlx5_glue_create_qp_ex(struct ibv_context *context, 20472f75660SOphir Munk struct ibv_qp_init_attr_ex *qp_init_attr_ex) 20572f75660SOphir Munk { 20672f75660SOphir Munk return ibv_create_qp_ex(context, qp_init_attr_ex); 20772f75660SOphir Munk } 20872f75660SOphir Munk 20972f75660SOphir Munk static int 21072f75660SOphir Munk mlx5_glue_destroy_qp(struct ibv_qp *qp) 21172f75660SOphir Munk { 21272f75660SOphir Munk return ibv_destroy_qp(qp); 21372f75660SOphir Munk } 21472f75660SOphir Munk 21572f75660SOphir Munk static int 21672f75660SOphir Munk mlx5_glue_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr, int attr_mask) 21772f75660SOphir Munk { 21872f75660SOphir Munk return ibv_modify_qp(qp, attr, attr_mask); 21972f75660SOphir Munk } 22072f75660SOphir Munk 22172f75660SOphir Munk static struct ibv_mr * 22272f75660SOphir Munk mlx5_glue_reg_mr(struct ibv_pd *pd, void *addr, size_t length, int access) 22372f75660SOphir Munk { 22472f75660SOphir Munk return ibv_reg_mr(pd, addr, length, access); 22572f75660SOphir Munk } 22672f75660SOphir Munk 22772f75660SOphir Munk static struct ibv_mr * 228*6ebd062eSMichael Baum mlx5_glue_reg_mr_iova(struct ibv_pd *pd, void *addr, size_t length, 229*6ebd062eSMichael Baum uint64_t iova, int access) 230*6ebd062eSMichael Baum { 231*6ebd062eSMichael Baum #ifdef HAVE_MLX5_IBV_REG_MR_IOVA 232*6ebd062eSMichael Baum return ibv_reg_mr_iova(pd, addr, length, iova, access); 233*6ebd062eSMichael Baum #else 234*6ebd062eSMichael Baum (void)pd; 235*6ebd062eSMichael Baum (void)addr; 236*6ebd062eSMichael Baum (void)length; 237*6ebd062eSMichael Baum (void)iova; 238*6ebd062eSMichael Baum (void)access; 239*6ebd062eSMichael Baum errno = ENOTSUP; 240*6ebd062eSMichael Baum return NULL; 241*6ebd062eSMichael Baum #endif 242*6ebd062eSMichael Baum } 243*6ebd062eSMichael Baum 244*6ebd062eSMichael Baum static struct ibv_mr * 24572f75660SOphir Munk mlx5_glue_alloc_null_mr(struct ibv_pd *pd) 24672f75660SOphir Munk { 24772f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 24872f75660SOphir Munk return ibv_alloc_null_mr(pd); 24972f75660SOphir Munk #else 25072f75660SOphir Munk (void)pd; 25172f75660SOphir Munk errno = ENOTSUP; 25272f75660SOphir Munk return NULL; 25372f75660SOphir Munk #endif 25472f75660SOphir Munk } 25572f75660SOphir Munk 25672f75660SOphir Munk static int 25772f75660SOphir Munk mlx5_glue_dereg_mr(struct ibv_mr *mr) 25872f75660SOphir Munk { 25972f75660SOphir Munk return ibv_dereg_mr(mr); 26072f75660SOphir Munk } 26172f75660SOphir Munk 26272f75660SOphir Munk static struct ibv_counter_set * 26372f75660SOphir Munk mlx5_glue_create_counter_set(struct ibv_context *context, 26472f75660SOphir Munk struct ibv_counter_set_init_attr *init_attr) 26572f75660SOphir Munk { 26672f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42 26772f75660SOphir Munk (void)context; 26872f75660SOphir Munk (void)init_attr; 26972f75660SOphir Munk return NULL; 27072f75660SOphir Munk #else 27172f75660SOphir Munk return ibv_create_counter_set(context, init_attr); 27272f75660SOphir Munk #endif 27372f75660SOphir Munk } 27472f75660SOphir Munk 27572f75660SOphir Munk static int 27672f75660SOphir Munk mlx5_glue_destroy_counter_set(struct ibv_counter_set *cs) 27772f75660SOphir Munk { 27872f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42 27972f75660SOphir Munk (void)cs; 28072f75660SOphir Munk return -ENOTSUP; 28172f75660SOphir Munk #else 28272f75660SOphir Munk return ibv_destroy_counter_set(cs); 28372f75660SOphir Munk #endif 28472f75660SOphir Munk } 28572f75660SOphir Munk 28672f75660SOphir Munk static int 28772f75660SOphir Munk mlx5_glue_describe_counter_set(struct ibv_context *context, 28872f75660SOphir Munk uint16_t counter_set_id, 28972f75660SOphir Munk struct ibv_counter_set_description *cs_desc) 29072f75660SOphir Munk { 29172f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42 29272f75660SOphir Munk (void)context; 29372f75660SOphir Munk (void)counter_set_id; 29472f75660SOphir Munk (void)cs_desc; 29572f75660SOphir Munk return -ENOTSUP; 29672f75660SOphir Munk #else 29772f75660SOphir Munk return ibv_describe_counter_set(context, counter_set_id, cs_desc); 29872f75660SOphir Munk #endif 29972f75660SOphir Munk } 30072f75660SOphir Munk 30172f75660SOphir Munk static int 30272f75660SOphir Munk mlx5_glue_query_counter_set(struct ibv_query_counter_set_attr *query_attr, 30372f75660SOphir Munk struct ibv_counter_set_data *cs_data) 30472f75660SOphir Munk { 30572f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V42 30672f75660SOphir Munk (void)query_attr; 30772f75660SOphir Munk (void)cs_data; 30872f75660SOphir Munk return -ENOTSUP; 30972f75660SOphir Munk #else 31072f75660SOphir Munk return ibv_query_counter_set(query_attr, cs_data); 31172f75660SOphir Munk #endif 31272f75660SOphir Munk } 31372f75660SOphir Munk 31472f75660SOphir Munk static struct ibv_counters * 31572f75660SOphir Munk mlx5_glue_create_counters(struct ibv_context *context, 31672f75660SOphir Munk struct ibv_counters_init_attr *init_attr) 31772f75660SOphir Munk { 31872f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 31972f75660SOphir Munk (void)context; 32072f75660SOphir Munk (void)init_attr; 32172f75660SOphir Munk errno = ENOTSUP; 32272f75660SOphir Munk return NULL; 32372f75660SOphir Munk #else 32472f75660SOphir Munk return ibv_create_counters(context, init_attr); 32572f75660SOphir Munk #endif 32672f75660SOphir Munk } 32772f75660SOphir Munk 32872f75660SOphir Munk static int 32972f75660SOphir Munk mlx5_glue_destroy_counters(struct ibv_counters *counters) 33072f75660SOphir Munk { 33172f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 33272f75660SOphir Munk (void)counters; 33372f75660SOphir Munk return -ENOTSUP; 33472f75660SOphir Munk #else 33572f75660SOphir Munk return ibv_destroy_counters(counters); 33672f75660SOphir Munk #endif 33772f75660SOphir Munk } 33872f75660SOphir Munk 33972f75660SOphir Munk static int 34072f75660SOphir Munk mlx5_glue_attach_counters(struct ibv_counters *counters, 34172f75660SOphir Munk struct ibv_counter_attach_attr *attr, 34272f75660SOphir Munk struct ibv_flow *flow) 34372f75660SOphir Munk { 34472f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 34572f75660SOphir Munk (void)counters; 34672f75660SOphir Munk (void)attr; 34772f75660SOphir Munk (void)flow; 34872f75660SOphir Munk return -ENOTSUP; 34972f75660SOphir Munk #else 35072f75660SOphir Munk return ibv_attach_counters_point_flow(counters, attr, flow); 35172f75660SOphir Munk #endif 35272f75660SOphir Munk } 35372f75660SOphir Munk 35472f75660SOphir Munk static int 35572f75660SOphir Munk mlx5_glue_query_counters(struct ibv_counters *counters, 35672f75660SOphir Munk uint64_t *counters_value, 35772f75660SOphir Munk uint32_t ncounters, 35872f75660SOphir Munk uint32_t flags) 35972f75660SOphir Munk { 36072f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 36172f75660SOphir Munk (void)counters; 36272f75660SOphir Munk (void)counters_value; 36372f75660SOphir Munk (void)ncounters; 36472f75660SOphir Munk (void)flags; 36572f75660SOphir Munk return -ENOTSUP; 36672f75660SOphir Munk #else 36772f75660SOphir Munk return ibv_read_counters(counters, counters_value, ncounters, flags); 36872f75660SOphir Munk #endif 36972f75660SOphir Munk } 37072f75660SOphir Munk 37172f75660SOphir Munk static void 37272f75660SOphir Munk mlx5_glue_ack_async_event(struct ibv_async_event *event) 37372f75660SOphir Munk { 37472f75660SOphir Munk ibv_ack_async_event(event); 37572f75660SOphir Munk } 37672f75660SOphir Munk 37772f75660SOphir Munk static int 37872f75660SOphir Munk mlx5_glue_get_async_event(struct ibv_context *context, 37972f75660SOphir Munk struct ibv_async_event *event) 38072f75660SOphir Munk { 38172f75660SOphir Munk return ibv_get_async_event(context, event); 38272f75660SOphir Munk } 38372f75660SOphir Munk 38472f75660SOphir Munk static const char * 38572f75660SOphir Munk mlx5_glue_port_state_str(enum ibv_port_state port_state) 38672f75660SOphir Munk { 38772f75660SOphir Munk return ibv_port_state_str(port_state); 38872f75660SOphir Munk } 38972f75660SOphir Munk 39072f75660SOphir Munk static struct ibv_cq * 39172f75660SOphir Munk mlx5_glue_cq_ex_to_cq(struct ibv_cq_ex *cq) 39272f75660SOphir Munk { 39372f75660SOphir Munk return ibv_cq_ex_to_cq(cq); 39472f75660SOphir Munk } 39572f75660SOphir Munk 39672f75660SOphir Munk static void * 39772f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_flow_tbl(void *tbl) 39872f75660SOphir Munk { 39972f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 40072f75660SOphir Munk return mlx5dv_dr_action_create_dest_table(tbl); 40172f75660SOphir Munk #else 40272f75660SOphir Munk (void)tbl; 40372f75660SOphir Munk errno = ENOTSUP; 40472f75660SOphir Munk return NULL; 40572f75660SOphir Munk #endif 40672f75660SOphir Munk } 40772f75660SOphir Munk 40872f75660SOphir Munk static void * 40972f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_port(void *domain, uint32_t port) 41072f75660SOphir Munk { 4110fd928bbSViacheslav Ovsiienko #ifdef HAVE_MLX5DV_DR_CREATE_DEST_IB_PORT 41272f75660SOphir Munk return mlx5dv_dr_action_create_dest_ib_port(domain, port); 41372f75660SOphir Munk #else 41472f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_ESWITCH 41572f75660SOphir Munk return mlx5dv_dr_action_create_dest_vport(domain, port); 41672f75660SOphir Munk #else 41772f75660SOphir Munk (void)domain; 41872f75660SOphir Munk (void)port; 41972f75660SOphir Munk errno = ENOTSUP; 42072f75660SOphir Munk return NULL; 42172f75660SOphir Munk #endif 42272f75660SOphir Munk #endif 42372f75660SOphir Munk } 42472f75660SOphir Munk 42572f75660SOphir Munk static void * 42672f75660SOphir Munk mlx5_glue_dr_create_flow_action_drop(void) 42772f75660SOphir Munk { 42872f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_ESWITCH 42972f75660SOphir Munk return mlx5dv_dr_action_create_drop(); 43072f75660SOphir Munk #else 43172f75660SOphir Munk errno = ENOTSUP; 43272f75660SOphir Munk return NULL; 43372f75660SOphir Munk #endif 43472f75660SOphir Munk } 43572f75660SOphir Munk 43672f75660SOphir Munk static void * 43772f75660SOphir Munk mlx5_glue_dr_create_flow_action_push_vlan(struct mlx5dv_dr_domain *domain, 43872f75660SOphir Munk rte_be32_t vlan_tag) 43972f75660SOphir Munk { 44072f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_VLAN 44172f75660SOphir Munk return mlx5dv_dr_action_create_push_vlan(domain, vlan_tag); 44272f75660SOphir Munk #else 44372f75660SOphir Munk (void)domain; 44472f75660SOphir Munk (void)vlan_tag; 44572f75660SOphir Munk errno = ENOTSUP; 44672f75660SOphir Munk return NULL; 44772f75660SOphir Munk #endif 44872f75660SOphir Munk } 44972f75660SOphir Munk 45072f75660SOphir Munk static void * 45172f75660SOphir Munk mlx5_glue_dr_create_flow_action_pop_vlan(void) 45272f75660SOphir Munk { 45372f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_VLAN 45472f75660SOphir Munk return mlx5dv_dr_action_create_pop_vlan(); 45572f75660SOphir Munk #else 45672f75660SOphir Munk errno = ENOTSUP; 45772f75660SOphir Munk return NULL; 45872f75660SOphir Munk #endif 45972f75660SOphir Munk } 46072f75660SOphir Munk 46172f75660SOphir Munk static void * 46272f75660SOphir Munk mlx5_glue_dr_create_flow_tbl(void *domain, uint32_t level) 46372f75660SOphir Munk { 46472f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 46572f75660SOphir Munk return mlx5dv_dr_table_create(domain, level); 46672f75660SOphir Munk #else 46772f75660SOphir Munk (void)domain; 46872f75660SOphir Munk (void)level; 46972f75660SOphir Munk errno = ENOTSUP; 47072f75660SOphir Munk return NULL; 47172f75660SOphir Munk #endif 47272f75660SOphir Munk } 47372f75660SOphir Munk 47472f75660SOphir Munk static int 47572f75660SOphir Munk mlx5_glue_dr_destroy_flow_tbl(void *tbl) 47672f75660SOphir Munk { 47772f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 47872f75660SOphir Munk return mlx5dv_dr_table_destroy(tbl); 47972f75660SOphir Munk #else 48072f75660SOphir Munk (void)tbl; 48172f75660SOphir Munk errno = ENOTSUP; 48272f75660SOphir Munk return errno; 48372f75660SOphir Munk #endif 48472f75660SOphir Munk } 48572f75660SOphir Munk 48672f75660SOphir Munk static void * 48772f75660SOphir Munk mlx5_glue_dr_create_domain(struct ibv_context *ctx, 48872f75660SOphir Munk enum mlx5dv_dr_domain_type domain) 48972f75660SOphir Munk { 49072f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 49172f75660SOphir Munk return mlx5dv_dr_domain_create(ctx, domain); 49272f75660SOphir Munk #else 49372f75660SOphir Munk (void)ctx; 49472f75660SOphir Munk (void)domain; 49572f75660SOphir Munk errno = ENOTSUP; 49672f75660SOphir Munk return NULL; 49772f75660SOphir Munk #endif 49872f75660SOphir Munk } 49972f75660SOphir Munk 50072f75660SOphir Munk static int 50172f75660SOphir Munk mlx5_glue_dr_destroy_domain(void *domain) 50272f75660SOphir Munk { 50372f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 50472f75660SOphir Munk return mlx5dv_dr_domain_destroy(domain); 50572f75660SOphir Munk #else 50672f75660SOphir Munk (void)domain; 50772f75660SOphir Munk errno = ENOTSUP; 50872f75660SOphir Munk return errno; 50972f75660SOphir Munk #endif 51072f75660SOphir Munk } 51172f75660SOphir Munk 5126e0cd74aSBing Zhao static int 5136e0cd74aSBing Zhao mlx5_glue_dr_sync_domain(void *domain, uint32_t flags) 5146e0cd74aSBing Zhao { 5156e0cd74aSBing Zhao #ifdef HAVE_MLX5DV_DR 5166e0cd74aSBing Zhao return mlx5dv_dr_domain_sync(domain, flags); 5176e0cd74aSBing Zhao #else 5186e0cd74aSBing Zhao (void)domain; 5196e0cd74aSBing Zhao (void)flags; 5206e0cd74aSBing Zhao errno = ENOTSUP; 5216e0cd74aSBing Zhao return errno; 5226e0cd74aSBing Zhao #endif 5236e0cd74aSBing Zhao } 5246e0cd74aSBing Zhao 52572f75660SOphir Munk static struct ibv_cq_ex * 52672f75660SOphir Munk mlx5_glue_dv_create_cq(struct ibv_context *context, 52772f75660SOphir Munk struct ibv_cq_init_attr_ex *cq_attr, 52872f75660SOphir Munk struct mlx5dv_cq_init_attr *mlx5_cq_attr) 52972f75660SOphir Munk { 53072f75660SOphir Munk return mlx5dv_create_cq(context, cq_attr, mlx5_cq_attr); 53172f75660SOphir Munk } 53272f75660SOphir Munk 53372f75660SOphir Munk static struct ibv_wq * 53472f75660SOphir Munk mlx5_glue_dv_create_wq(struct ibv_context *context, 53572f75660SOphir Munk struct ibv_wq_init_attr *wq_attr, 53672f75660SOphir Munk struct mlx5dv_wq_init_attr *mlx5_wq_attr) 53772f75660SOphir Munk { 53872f75660SOphir Munk #ifndef HAVE_IBV_DEVICE_STRIDING_RQ_SUPPORT 53972f75660SOphir Munk (void)context; 54072f75660SOphir Munk (void)wq_attr; 54172f75660SOphir Munk (void)mlx5_wq_attr; 54272f75660SOphir Munk errno = ENOTSUP; 54372f75660SOphir Munk return NULL; 54472f75660SOphir Munk #else 54572f75660SOphir Munk return mlx5dv_create_wq(context, wq_attr, mlx5_wq_attr); 54672f75660SOphir Munk #endif 54772f75660SOphir Munk } 54872f75660SOphir Munk 54972f75660SOphir Munk static int 55072f75660SOphir Munk mlx5_glue_dv_query_device(struct ibv_context *ctx, 55172f75660SOphir Munk struct mlx5dv_context *attrs_out) 55272f75660SOphir Munk { 55372f75660SOphir Munk return mlx5dv_query_device(ctx, attrs_out); 55472f75660SOphir Munk } 55572f75660SOphir Munk 55672f75660SOphir Munk static int 55772f75660SOphir Munk mlx5_glue_dv_set_context_attr(struct ibv_context *ibv_ctx, 55872f75660SOphir Munk enum mlx5dv_set_ctx_attr_type type, void *attr) 55972f75660SOphir Munk { 56072f75660SOphir Munk return mlx5dv_set_context_attr(ibv_ctx, type, attr); 56172f75660SOphir Munk } 56272f75660SOphir Munk 56372f75660SOphir Munk static int 56472f75660SOphir Munk mlx5_glue_dv_init_obj(struct mlx5dv_obj *obj, uint64_t obj_type) 56572f75660SOphir Munk { 56672f75660SOphir Munk return mlx5dv_init_obj(obj, obj_type); 56772f75660SOphir Munk } 56872f75660SOphir Munk 56972f75660SOphir Munk static struct ibv_qp * 57072f75660SOphir Munk mlx5_glue_dv_create_qp(struct ibv_context *context, 57172f75660SOphir Munk struct ibv_qp_init_attr_ex *qp_init_attr_ex, 57272f75660SOphir Munk struct mlx5dv_qp_init_attr *dv_qp_init_attr) 57372f75660SOphir Munk { 57472f75660SOphir Munk #ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT 57572f75660SOphir Munk return mlx5dv_create_qp(context, qp_init_attr_ex, dv_qp_init_attr); 57672f75660SOphir Munk #else 57772f75660SOphir Munk (void)context; 57872f75660SOphir Munk (void)qp_init_attr_ex; 57972f75660SOphir Munk (void)dv_qp_init_attr; 58072f75660SOphir Munk errno = ENOTSUP; 58172f75660SOphir Munk return NULL; 58272f75660SOphir Munk #endif 58372f75660SOphir Munk } 58472f75660SOphir Munk 58572f75660SOphir Munk static void * 58672f75660SOphir Munk mlx5_glue_dv_create_flow_matcher(struct ibv_context *context, 58772f75660SOphir Munk struct mlx5dv_flow_matcher_attr *matcher_attr, 58872f75660SOphir Munk void *tbl) 58972f75660SOphir Munk { 59072f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 59172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 59272f75660SOphir Munk (void)context; 59372f75660SOphir Munk return mlx5dv_dr_matcher_create(tbl, matcher_attr->priority, 59472f75660SOphir Munk matcher_attr->match_criteria_enable, 59572f75660SOphir Munk matcher_attr->match_mask); 59672f75660SOphir Munk #else 59772f75660SOphir Munk (void)tbl; 59872f75660SOphir Munk return mlx5dv_create_flow_matcher(context, matcher_attr); 59972f75660SOphir Munk #endif 60072f75660SOphir Munk #else 60172f75660SOphir Munk (void)context; 60272f75660SOphir Munk (void)matcher_attr; 60372f75660SOphir Munk (void)tbl; 60472f75660SOphir Munk errno = ENOTSUP; 60572f75660SOphir Munk return NULL; 60672f75660SOphir Munk #endif 60772f75660SOphir Munk } 60872f75660SOphir Munk 60972f75660SOphir Munk static void * 61072f75660SOphir Munk mlx5_glue_dv_create_flow(void *matcher, 61172f75660SOphir Munk void *match_value, 61272f75660SOphir Munk size_t num_actions, 61372f75660SOphir Munk void *actions[]) 61472f75660SOphir Munk { 61572f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 61672f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 61772f75660SOphir Munk return mlx5dv_dr_rule_create(matcher, match_value, num_actions, 61872f75660SOphir Munk (struct mlx5dv_dr_action **)actions); 61972f75660SOphir Munk #else 62043e73483SThomas Monjalon size_t i; 62172f75660SOphir Munk struct mlx5dv_flow_action_attr actions_attr[8]; 62272f75660SOphir Munk 62372f75660SOphir Munk if (num_actions > 8) 62472f75660SOphir Munk return NULL; 62543e73483SThomas Monjalon for (i = 0; i < num_actions; i++) 62672f75660SOphir Munk actions_attr[i] = 62772f75660SOphir Munk *((struct mlx5dv_flow_action_attr *)(actions[i])); 62872f75660SOphir Munk return mlx5dv_create_flow(matcher, match_value, 62972f75660SOphir Munk num_actions, actions_attr); 63072f75660SOphir Munk #endif 63172f75660SOphir Munk #else 63272f75660SOphir Munk (void)matcher; 63372f75660SOphir Munk (void)match_value; 63472f75660SOphir Munk (void)num_actions; 63572f75660SOphir Munk (void)actions; 63672f75660SOphir Munk return NULL; 63772f75660SOphir Munk #endif 63872f75660SOphir Munk } 63972f75660SOphir Munk 64072f75660SOphir Munk static void * 64172f75660SOphir Munk mlx5_glue_dv_create_flow_action_counter(void *counter_obj, uint32_t offset) 64272f75660SOphir Munk { 64372f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 64472f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 64572f75660SOphir Munk return mlx5dv_dr_action_create_flow_counter(counter_obj, offset); 64672f75660SOphir Munk #else 64772f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 64872f75660SOphir Munk 64972f75660SOphir Munk (void)offset; 650cdb034a8SOphir Munk action = malloc(sizeof(*action)); 65172f75660SOphir Munk if (!action) 65272f75660SOphir Munk return NULL; 65372f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_COUNTERS_DEVX; 65472f75660SOphir Munk action->obj = counter_obj; 65572f75660SOphir Munk return action; 65672f75660SOphir Munk #endif 65772f75660SOphir Munk #else 65872f75660SOphir Munk (void)counter_obj; 65972f75660SOphir Munk (void)offset; 66072f75660SOphir Munk errno = ENOTSUP; 66172f75660SOphir Munk return NULL; 66272f75660SOphir Munk #endif 66372f75660SOphir Munk } 66472f75660SOphir Munk 66572f75660SOphir Munk static void * 66672f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_ibv_qp(void *qp) 66772f75660SOphir Munk { 66872f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 66972f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 67072f75660SOphir Munk return mlx5dv_dr_action_create_dest_ibv_qp(qp); 67172f75660SOphir Munk #else 67272f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 67372f75660SOphir Munk 674cdb034a8SOphir Munk action = malloc(sizeof(*action)); 67572f75660SOphir Munk if (!action) 67672f75660SOphir Munk return NULL; 67772f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_DEST_IBV_QP; 67872f75660SOphir Munk action->obj = qp; 67972f75660SOphir Munk return action; 68072f75660SOphir Munk #endif 68172f75660SOphir Munk #else 68272f75660SOphir Munk (void)qp; 68372f75660SOphir Munk errno = ENOTSUP; 68472f75660SOphir Munk return NULL; 68572f75660SOphir Munk #endif 68672f75660SOphir Munk } 68772f75660SOphir Munk 68872f75660SOphir Munk static void * 68972f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_devx_tir(void *tir) 69072f75660SOphir Munk { 69172f75660SOphir Munk #ifdef HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR 69272f75660SOphir Munk return mlx5dv_dr_action_create_dest_devx_tir(tir); 69372f75660SOphir Munk #else 69472f75660SOphir Munk (void)tir; 69572f75660SOphir Munk errno = ENOTSUP; 69672f75660SOphir Munk return NULL; 69772f75660SOphir Munk #endif 69872f75660SOphir Munk } 69972f75660SOphir Munk 70072f75660SOphir Munk static void * 70172f75660SOphir Munk mlx5_glue_dv_create_flow_action_modify_header 70272f75660SOphir Munk (struct ibv_context *ctx, 70372f75660SOphir Munk enum mlx5dv_flow_table_type ft_type, 70472f75660SOphir Munk void *domain, uint64_t flags, 70572f75660SOphir Munk size_t actions_sz, 70672f75660SOphir Munk uint64_t actions[]) 70772f75660SOphir Munk { 70872f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 70972f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 71072f75660SOphir Munk (void)ctx; 71172f75660SOphir Munk (void)ft_type; 71272f75660SOphir Munk return mlx5dv_dr_action_create_modify_header(domain, flags, actions_sz, 71372f75660SOphir Munk (__be64 *)actions); 71472f75660SOphir Munk #else 71572f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 71672f75660SOphir Munk 71772f75660SOphir Munk (void)domain; 71872f75660SOphir Munk (void)flags; 719cdb034a8SOphir Munk action = malloc(sizeof(*action)); 72072f75660SOphir Munk if (!action) 72172f75660SOphir Munk return NULL; 72272f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION; 72372f75660SOphir Munk action->action = mlx5dv_create_flow_action_modify_header 72472f75660SOphir Munk (ctx, actions_sz, actions, ft_type); 72572f75660SOphir Munk return action; 72672f75660SOphir Munk #endif 72772f75660SOphir Munk #else 72872f75660SOphir Munk (void)ctx; 72972f75660SOphir Munk (void)ft_type; 73072f75660SOphir Munk (void)domain; 73172f75660SOphir Munk (void)flags; 73272f75660SOphir Munk (void)actions_sz; 73372f75660SOphir Munk (void)actions; 73472f75660SOphir Munk errno = ENOTSUP; 73572f75660SOphir Munk return NULL; 73672f75660SOphir Munk #endif 73772f75660SOphir Munk } 73872f75660SOphir Munk 73972f75660SOphir Munk static void * 74072f75660SOphir Munk mlx5_glue_dv_create_flow_action_packet_reformat 74172f75660SOphir Munk (struct ibv_context *ctx, 74272f75660SOphir Munk enum mlx5dv_flow_action_packet_reformat_type reformat_type, 74372f75660SOphir Munk enum mlx5dv_flow_table_type ft_type, 74472f75660SOphir Munk struct mlx5dv_dr_domain *domain, 74572f75660SOphir Munk uint32_t flags, size_t data_sz, void *data) 74672f75660SOphir Munk { 74772f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 74872f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 74972f75660SOphir Munk (void)ctx; 75072f75660SOphir Munk (void)ft_type; 75172f75660SOphir Munk return mlx5dv_dr_action_create_packet_reformat(domain, flags, 75272f75660SOphir Munk reformat_type, data_sz, 75372f75660SOphir Munk data); 75472f75660SOphir Munk #else 75572f75660SOphir Munk (void)domain; 75672f75660SOphir Munk (void)flags; 75772f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 75872f75660SOphir Munk 759cdb034a8SOphir Munk action = malloc(sizeof(*action)); 76072f75660SOphir Munk if (!action) 76172f75660SOphir Munk return NULL; 76272f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_IBV_FLOW_ACTION; 76372f75660SOphir Munk action->action = mlx5dv_create_flow_action_packet_reformat 76472f75660SOphir Munk (ctx, data_sz, data, reformat_type, ft_type); 76572f75660SOphir Munk return action; 76672f75660SOphir Munk #endif 76772f75660SOphir Munk #else 76872f75660SOphir Munk (void)ctx; 76972f75660SOphir Munk (void)reformat_type; 77072f75660SOphir Munk (void)ft_type; 77172f75660SOphir Munk (void)domain; 77272f75660SOphir Munk (void)flags; 77372f75660SOphir Munk (void)data_sz; 77472f75660SOphir Munk (void)data; 77572f75660SOphir Munk errno = ENOTSUP; 77672f75660SOphir Munk return NULL; 77772f75660SOphir Munk #endif 77872f75660SOphir Munk } 77972f75660SOphir Munk 78072f75660SOphir Munk static void * 78172f75660SOphir Munk mlx5_glue_dv_create_flow_action_tag(uint32_t tag) 78272f75660SOphir Munk { 78372f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 78472f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 78572f75660SOphir Munk return mlx5dv_dr_action_create_tag(tag); 786ed5d2365SMichael Baum #else /* HAVE_MLX5DV_DR */ 78772f75660SOphir Munk struct mlx5dv_flow_action_attr *action; 78866914d19SSuanming Mou 789cdb034a8SOphir Munk action = malloc(sizeof(*action)); 79072f75660SOphir Munk if (!action) 79172f75660SOphir Munk return NULL; 79272f75660SOphir Munk action->type = MLX5DV_FLOW_ACTION_TAG; 79372f75660SOphir Munk action->tag_value = tag; 79472f75660SOphir Munk return action; 795ed5d2365SMichael Baum #endif /* HAVE_MLX5DV_DR */ 796ed5d2365SMichael Baum #else /* HAVE_IBV_FLOW_DV_SUPPORT */ 79772f75660SOphir Munk (void)tag; 79872f75660SOphir Munk errno = ENOTSUP; 79972f75660SOphir Munk return NULL; 800ed5d2365SMichael Baum #endif /* HAVE_IBV_FLOW_DV_SUPPORT */ 80172f75660SOphir Munk } 80272f75660SOphir Munk 80372f75660SOphir Munk static void * 80472f75660SOphir Munk mlx5_glue_dv_create_flow_action_meter(struct mlx5dv_dr_flow_meter_attr *attr) 80572f75660SOphir Munk { 80672f75660SOphir Munk #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_FLOW_METER) 80772f75660SOphir Munk return mlx5dv_dr_action_create_flow_meter(attr); 80872f75660SOphir Munk #else 80972f75660SOphir Munk (void)attr; 81072f75660SOphir Munk errno = ENOTSUP; 81172f75660SOphir Munk return NULL; 81272f75660SOphir Munk #endif 81372f75660SOphir Munk } 81472f75660SOphir Munk 81572f75660SOphir Munk static int 81672f75660SOphir Munk mlx5_glue_dv_modify_flow_action_meter(void *action, 81772f75660SOphir Munk struct mlx5dv_dr_flow_meter_attr *attr, 81872f75660SOphir Munk uint64_t modify_bits) 81972f75660SOphir Munk { 82072f75660SOphir Munk #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_FLOW_METER) 82172f75660SOphir Munk return mlx5dv_dr_action_modify_flow_meter(action, attr, modify_bits); 82272f75660SOphir Munk #else 82372f75660SOphir Munk (void)action; 82472f75660SOphir Munk (void)attr; 82572f75660SOphir Munk (void)modify_bits; 82672f75660SOphir Munk errno = ENOTSUP; 82772f75660SOphir Munk return errno; 82872f75660SOphir Munk #endif 82972f75660SOphir Munk } 83072f75660SOphir Munk 831d4d85aa6SShiri Kuzin static void * 832a2999c7bSDekel Peled mlx5_glue_dv_create_flow_action_aso(struct mlx5dv_dr_domain *domain, 833a2999c7bSDekel Peled void *aso_obj, 834a2999c7bSDekel Peled uint32_t offset, 835a2999c7bSDekel Peled uint32_t flags, 836a2999c7bSDekel Peled uint8_t return_reg_c) 837a2999c7bSDekel Peled { 838a2999c7bSDekel Peled #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_ASO) 839a2999c7bSDekel Peled return mlx5dv_dr_action_create_aso(domain, aso_obj, offset, 840a2999c7bSDekel Peled flags, return_reg_c); 841a2999c7bSDekel Peled #else 842a2999c7bSDekel Peled (void)domain; 843a2999c7bSDekel Peled (void)aso_obj; 844a2999c7bSDekel Peled (void)offset; 845a2999c7bSDekel Peled (void)flags; 846a2999c7bSDekel Peled (void)return_reg_c; 847a2999c7bSDekel Peled errno = ENOTSUP; 848a2999c7bSDekel Peled return NULL; 849a2999c7bSDekel Peled #endif 850a2999c7bSDekel Peled } 851a2999c7bSDekel Peled 852a2999c7bSDekel Peled static void * 853d4d85aa6SShiri Kuzin mlx5_glue_dr_create_flow_action_default_miss(void) 854d4d85aa6SShiri Kuzin { 855d4d85aa6SShiri Kuzin #if defined(HAVE_MLX5DV_DR) && defined(HAVE_MLX5_DR_CREATE_ACTION_DEFAULT_MISS) 856d4d85aa6SShiri Kuzin return mlx5dv_dr_action_create_default_miss(); 857d4d85aa6SShiri Kuzin #else 858d4d85aa6SShiri Kuzin errno = ENOTSUP; 859d4d85aa6SShiri Kuzin return NULL; 860d4d85aa6SShiri Kuzin #endif 861d4d85aa6SShiri Kuzin } 862d4d85aa6SShiri Kuzin 86372f75660SOphir Munk static int 86472f75660SOphir Munk mlx5_glue_dv_destroy_flow(void *flow_id) 86572f75660SOphir Munk { 86672f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 86772f75660SOphir Munk return mlx5dv_dr_rule_destroy(flow_id); 86872f75660SOphir Munk #else 86972f75660SOphir Munk return ibv_destroy_flow(flow_id); 87072f75660SOphir Munk #endif 87172f75660SOphir Munk } 87272f75660SOphir Munk 87372f75660SOphir Munk static int 87472f75660SOphir Munk mlx5_glue_dv_destroy_flow_matcher(void *matcher) 87572f75660SOphir Munk { 87672f75660SOphir Munk #ifdef HAVE_IBV_FLOW_DV_SUPPORT 87772f75660SOphir Munk #ifdef HAVE_MLX5DV_DR 87872f75660SOphir Munk return mlx5dv_dr_matcher_destroy(matcher); 87972f75660SOphir Munk #else 88072f75660SOphir Munk return mlx5dv_destroy_flow_matcher(matcher); 88172f75660SOphir Munk #endif 88272f75660SOphir Munk #else 88372f75660SOphir Munk (void)matcher; 88472f75660SOphir Munk errno = ENOTSUP; 88572f75660SOphir Munk return errno; 88672f75660SOphir Munk #endif 88772f75660SOphir Munk } 88872f75660SOphir Munk 88972f75660SOphir Munk static struct ibv_context * 89072f75660SOphir Munk mlx5_glue_dv_open_device(struct ibv_device *device) 89172f75660SOphir Munk { 89272f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 89372f75660SOphir Munk return mlx5dv_open_device(device, 89472f75660SOphir Munk &(struct mlx5dv_context_attr){ 89572f75660SOphir Munk .flags = MLX5DV_CONTEXT_FLAGS_DEVX, 89672f75660SOphir Munk }); 89772f75660SOphir Munk #else 89872f75660SOphir Munk (void)device; 89972f75660SOphir Munk errno = ENOTSUP; 90072f75660SOphir Munk return NULL; 90172f75660SOphir Munk #endif 90272f75660SOphir Munk } 90372f75660SOphir Munk 90472f75660SOphir Munk static struct mlx5dv_devx_obj * 90572f75660SOphir Munk mlx5_glue_devx_obj_create(struct ibv_context *ctx, 90672f75660SOphir Munk const void *in, size_t inlen, 90772f75660SOphir Munk void *out, size_t outlen) 90872f75660SOphir Munk { 90972f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 91072f75660SOphir Munk return mlx5dv_devx_obj_create(ctx, in, inlen, out, outlen); 91172f75660SOphir Munk #else 91272f75660SOphir Munk (void)ctx; 91372f75660SOphir Munk (void)in; 91472f75660SOphir Munk (void)inlen; 91572f75660SOphir Munk (void)out; 91672f75660SOphir Munk (void)outlen; 91772f75660SOphir Munk errno = ENOTSUP; 91872f75660SOphir Munk return NULL; 91972f75660SOphir Munk #endif 92072f75660SOphir Munk } 92172f75660SOphir Munk 92272f75660SOphir Munk static int 92372f75660SOphir Munk mlx5_glue_devx_obj_destroy(struct mlx5dv_devx_obj *obj) 92472f75660SOphir Munk { 92572f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 92672f75660SOphir Munk return mlx5dv_devx_obj_destroy(obj); 92772f75660SOphir Munk #else 92872f75660SOphir Munk (void)obj; 92972f75660SOphir Munk return -ENOTSUP; 93072f75660SOphir Munk #endif 93172f75660SOphir Munk } 93272f75660SOphir Munk 93372f75660SOphir Munk static int 93472f75660SOphir Munk mlx5_glue_devx_obj_query(struct mlx5dv_devx_obj *obj, 93572f75660SOphir Munk const void *in, size_t inlen, 93672f75660SOphir Munk void *out, size_t outlen) 93772f75660SOphir Munk { 93872f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 93972f75660SOphir Munk return mlx5dv_devx_obj_query(obj, in, inlen, out, outlen); 94072f75660SOphir Munk #else 94172f75660SOphir Munk (void)obj; 94272f75660SOphir Munk (void)in; 94372f75660SOphir Munk (void)inlen; 94472f75660SOphir Munk (void)out; 94572f75660SOphir Munk (void)outlen; 94672f75660SOphir Munk return -ENOTSUP; 94772f75660SOphir Munk #endif 94872f75660SOphir Munk } 94972f75660SOphir Munk 95072f75660SOphir Munk static int 95172f75660SOphir Munk mlx5_glue_devx_obj_modify(struct mlx5dv_devx_obj *obj, 95272f75660SOphir Munk const void *in, size_t inlen, 95372f75660SOphir Munk void *out, size_t outlen) 95472f75660SOphir Munk { 95572f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 95672f75660SOphir Munk return mlx5dv_devx_obj_modify(obj, in, inlen, out, outlen); 95772f75660SOphir Munk #else 95872f75660SOphir Munk (void)obj; 95972f75660SOphir Munk (void)in; 96072f75660SOphir Munk (void)inlen; 96172f75660SOphir Munk (void)out; 96272f75660SOphir Munk (void)outlen; 96372f75660SOphir Munk return -ENOTSUP; 96472f75660SOphir Munk #endif 96572f75660SOphir Munk } 96672f75660SOphir Munk 96772f75660SOphir Munk static int 96872f75660SOphir Munk mlx5_glue_devx_general_cmd(struct ibv_context *ctx, 96972f75660SOphir Munk const void *in, size_t inlen, 97072f75660SOphir Munk void *out, size_t outlen) 97172f75660SOphir Munk { 97272f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 97372f75660SOphir Munk return mlx5dv_devx_general_cmd(ctx, in, inlen, out, outlen); 97472f75660SOphir Munk #else 97572f75660SOphir Munk (void)ctx; 97672f75660SOphir Munk (void)in; 97772f75660SOphir Munk (void)inlen; 97872f75660SOphir Munk (void)out; 97972f75660SOphir Munk (void)outlen; 98072f75660SOphir Munk return -ENOTSUP; 98172f75660SOphir Munk #endif 98272f75660SOphir Munk } 98372f75660SOphir Munk 98472f75660SOphir Munk static struct mlx5dv_devx_cmd_comp * 98572f75660SOphir Munk mlx5_glue_devx_create_cmd_comp(struct ibv_context *ctx) 98672f75660SOphir Munk { 98772f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC 98872f75660SOphir Munk return mlx5dv_devx_create_cmd_comp(ctx); 98972f75660SOphir Munk #else 99072f75660SOphir Munk (void)ctx; 99172f75660SOphir Munk errno = -ENOTSUP; 99272f75660SOphir Munk return NULL; 99372f75660SOphir Munk #endif 99472f75660SOphir Munk } 99572f75660SOphir Munk 99672f75660SOphir Munk static void 99772f75660SOphir Munk mlx5_glue_devx_destroy_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp) 99872f75660SOphir Munk { 99972f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC 100072f75660SOphir Munk mlx5dv_devx_destroy_cmd_comp(cmd_comp); 100172f75660SOphir Munk #else 100272f75660SOphir Munk (void)cmd_comp; 100372f75660SOphir Munk errno = -ENOTSUP; 100472f75660SOphir Munk #endif 100572f75660SOphir Munk } 100672f75660SOphir Munk 100772f75660SOphir Munk static int 100872f75660SOphir Munk mlx5_glue_devx_obj_query_async(struct mlx5dv_devx_obj *obj, const void *in, 100972f75660SOphir Munk size_t inlen, size_t outlen, uint64_t wr_id, 101072f75660SOphir Munk struct mlx5dv_devx_cmd_comp *cmd_comp) 101172f75660SOphir Munk { 101272f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC 101372f75660SOphir Munk return mlx5dv_devx_obj_query_async(obj, in, inlen, outlen, wr_id, 101472f75660SOphir Munk cmd_comp); 101572f75660SOphir Munk #else 101672f75660SOphir Munk (void)obj; 101772f75660SOphir Munk (void)in; 101872f75660SOphir Munk (void)inlen; 101972f75660SOphir Munk (void)outlen; 102072f75660SOphir Munk (void)wr_id; 102172f75660SOphir Munk (void)cmd_comp; 102272f75660SOphir Munk return -ENOTSUP; 102372f75660SOphir Munk #endif 102472f75660SOphir Munk } 102572f75660SOphir Munk 102672f75660SOphir Munk static int 102772f75660SOphir Munk mlx5_glue_devx_get_async_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp, 102872f75660SOphir Munk struct mlx5dv_devx_async_cmd_hdr *cmd_resp, 102972f75660SOphir Munk size_t cmd_resp_len) 103072f75660SOphir Munk { 103172f75660SOphir Munk #ifdef HAVE_IBV_DEVX_ASYNC 103272f75660SOphir Munk return mlx5dv_devx_get_async_cmd_comp(cmd_comp, cmd_resp, 103372f75660SOphir Munk cmd_resp_len); 103472f75660SOphir Munk #else 103572f75660SOphir Munk (void)cmd_comp; 103672f75660SOphir Munk (void)cmd_resp; 103772f75660SOphir Munk (void)cmd_resp_len; 103872f75660SOphir Munk return -ENOTSUP; 103972f75660SOphir Munk #endif 104072f75660SOphir Munk } 104172f75660SOphir Munk 104272f75660SOphir Munk static struct mlx5dv_devx_umem * 104372f75660SOphir Munk mlx5_glue_devx_umem_reg(struct ibv_context *context, void *addr, size_t size, 104472f75660SOphir Munk uint32_t access) 104572f75660SOphir Munk { 104672f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 104772f75660SOphir Munk return mlx5dv_devx_umem_reg(context, addr, size, access); 104872f75660SOphir Munk #else 104972f75660SOphir Munk (void)context; 105072f75660SOphir Munk (void)addr; 105172f75660SOphir Munk (void)size; 105272f75660SOphir Munk (void)access; 105372f75660SOphir Munk errno = -ENOTSUP; 105472f75660SOphir Munk return NULL; 105572f75660SOphir Munk #endif 105672f75660SOphir Munk } 105772f75660SOphir Munk 105872f75660SOphir Munk static int 105972f75660SOphir Munk mlx5_glue_devx_umem_dereg(struct mlx5dv_devx_umem *dv_devx_umem) 106072f75660SOphir Munk { 106172f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 106272f75660SOphir Munk return mlx5dv_devx_umem_dereg(dv_devx_umem); 106372f75660SOphir Munk #else 106472f75660SOphir Munk (void)dv_devx_umem; 106572f75660SOphir Munk return -ENOTSUP; 106672f75660SOphir Munk #endif 106772f75660SOphir Munk } 106872f75660SOphir Munk 106972f75660SOphir Munk static int 107072f75660SOphir Munk mlx5_glue_devx_qp_query(struct ibv_qp *qp, 107172f75660SOphir Munk const void *in, size_t inlen, 107272f75660SOphir Munk void *out, size_t outlen) 107372f75660SOphir Munk { 107472f75660SOphir Munk #ifdef HAVE_IBV_DEVX_QP 107572f75660SOphir Munk return mlx5dv_devx_qp_query(qp, in, inlen, out, outlen); 107672f75660SOphir Munk #else 107772f75660SOphir Munk (void)qp; 107872f75660SOphir Munk (void)in; 107972f75660SOphir Munk (void)inlen; 108072f75660SOphir Munk (void)out; 108172f75660SOphir Munk (void)outlen; 108272f75660SOphir Munk errno = ENOTSUP; 108372f75660SOphir Munk return errno; 108472f75660SOphir Munk #endif 108572f75660SOphir Munk } 108672f75660SOphir Munk 108772f75660SOphir Munk static int 108875a9a73dSMatan Azrad mlx5_glue_devx_wq_query(struct ibv_wq *wq, const void *in, size_t inlen, 108975a9a73dSMatan Azrad void *out, size_t outlen) 109075a9a73dSMatan Azrad { 109175a9a73dSMatan Azrad #ifdef HAVE_IBV_DEVX_QP 109275a9a73dSMatan Azrad return mlx5dv_devx_wq_query(wq, in, inlen, out, outlen); 109375a9a73dSMatan Azrad #else 109475a9a73dSMatan Azrad (void)wq; 109575a9a73dSMatan Azrad (void)in; 109675a9a73dSMatan Azrad (void)inlen; 109775a9a73dSMatan Azrad (void)out; 109875a9a73dSMatan Azrad (void)outlen; 109975a9a73dSMatan Azrad errno = ENOTSUP; 110075a9a73dSMatan Azrad return errno; 110175a9a73dSMatan Azrad #endif 110275a9a73dSMatan Azrad } 110375a9a73dSMatan Azrad 110475a9a73dSMatan Azrad static int 110572f75660SOphir Munk mlx5_glue_devx_port_query(struct ibv_context *ctx, 110672f75660SOphir Munk uint32_t port_num, 1107d0cf77e8SViacheslav Ovsiienko struct mlx5_port_info *info) 110872f75660SOphir Munk { 1109d0cf77e8SViacheslav Ovsiienko int err = 0; 1110d0cf77e8SViacheslav Ovsiienko 1111d0cf77e8SViacheslav Ovsiienko info->query_flags = 0; 1112d0cf77e8SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_DR_DEVX_PORT_V35 1113d0cf77e8SViacheslav Ovsiienko /* The DevX port query API is implemented (rdma-core v35 and above). */ 1114d0cf77e8SViacheslav Ovsiienko struct mlx5_ib_uapi_query_port devx_port; 1115d0cf77e8SViacheslav Ovsiienko 1116d0cf77e8SViacheslav Ovsiienko memset(&devx_port, 0, sizeof(devx_port)); 1117d0cf77e8SViacheslav Ovsiienko err = mlx5dv_query_port(ctx, port_num, &devx_port); 1118d0cf77e8SViacheslav Ovsiienko if (err) 1119d0cf77e8SViacheslav Ovsiienko return err; 1120d0cf77e8SViacheslav Ovsiienko if (devx_port.flags & MLX5DV_QUERY_PORT_VPORT_REG_C0) { 1121d0cf77e8SViacheslav Ovsiienko info->vport_meta_tag = devx_port.reg_c0.value; 1122d0cf77e8SViacheslav Ovsiienko info->vport_meta_mask = devx_port.reg_c0.mask; 1123d0cf77e8SViacheslav Ovsiienko info->query_flags |= MLX5_PORT_QUERY_REG_C0; 1124d0cf77e8SViacheslav Ovsiienko } 1125d0cf77e8SViacheslav Ovsiienko if (devx_port.flags & MLX5DV_QUERY_PORT_VPORT) { 1126d0cf77e8SViacheslav Ovsiienko info->vport_id = devx_port.vport; 1127d0cf77e8SViacheslav Ovsiienko info->query_flags |= MLX5_PORT_QUERY_VPORT; 1128d0cf77e8SViacheslav Ovsiienko } 112972f75660SOphir Munk #else 1130d0cf77e8SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_DR_DEVX_PORT 1131d0cf77e8SViacheslav Ovsiienko /* The legacy DevX port query API is implemented (prior v35). */ 1132d0cf77e8SViacheslav Ovsiienko struct mlx5dv_devx_port devx_port = { 1133d0cf77e8SViacheslav Ovsiienko .comp_mask = MLX5DV_DEVX_PORT_VPORT | 1134d0cf77e8SViacheslav Ovsiienko MLX5DV_DEVX_PORT_MATCH_REG_C_0 1135d0cf77e8SViacheslav Ovsiienko }; 1136d0cf77e8SViacheslav Ovsiienko 1137d0cf77e8SViacheslav Ovsiienko err = mlx5dv_query_devx_port(ctx, port_num, &devx_port); 1138d0cf77e8SViacheslav Ovsiienko if (err) 1139d0cf77e8SViacheslav Ovsiienko return err; 1140d0cf77e8SViacheslav Ovsiienko if (devx_port.comp_mask & MLX5DV_DEVX_PORT_MATCH_REG_C_0) { 1141d0cf77e8SViacheslav Ovsiienko info->vport_meta_tag = devx_port.reg_c_0.value; 1142d0cf77e8SViacheslav Ovsiienko info->vport_meta_mask = devx_port.reg_c_0.mask; 1143d0cf77e8SViacheslav Ovsiienko info->query_flags |= MLX5_PORT_QUERY_REG_C0; 1144d0cf77e8SViacheslav Ovsiienko } 1145d0cf77e8SViacheslav Ovsiienko if (devx_port.comp_mask & MLX5DV_DEVX_PORT_VPORT) { 1146d0cf77e8SViacheslav Ovsiienko info->vport_id = devx_port.vport_num; 1147d0cf77e8SViacheslav Ovsiienko info->query_flags |= MLX5_PORT_QUERY_VPORT; 1148d0cf77e8SViacheslav Ovsiienko } 1149d0cf77e8SViacheslav Ovsiienko #else 1150d0cf77e8SViacheslav Ovsiienko RTE_SET_USED(ctx); 1151d0cf77e8SViacheslav Ovsiienko RTE_SET_USED(port_num); 1152d0cf77e8SViacheslav Ovsiienko #endif /* HAVE_MLX5DV_DR_DEVX_PORT */ 1153d0cf77e8SViacheslav Ovsiienko #endif /* HAVE_MLX5DV_DR_DEVX_PORT_V35 */ 1154d0cf77e8SViacheslav Ovsiienko return err; 115572f75660SOphir Munk } 115672f75660SOphir Munk 115772f75660SOphir Munk static int 1158a38d22edSHaifei Luo mlx5_glue_dr_dump_single_rule(FILE *file, void *rule) 1159a38d22edSHaifei Luo { 1160a38d22edSHaifei Luo #ifdef HAVE_MLX5_DR_FLOW_DUMP_RULE 1161a38d22edSHaifei Luo return mlx5dv_dump_dr_rule(file, rule); 1162a38d22edSHaifei Luo #else 1163a38d22edSHaifei Luo RTE_SET_USED(file); 1164a38d22edSHaifei Luo RTE_SET_USED(rule); 1165a38d22edSHaifei Luo return -ENOTSUP; 1166a38d22edSHaifei Luo #endif 1167a38d22edSHaifei Luo } 1168a38d22edSHaifei Luo 1169a38d22edSHaifei Luo static int 117072f75660SOphir Munk mlx5_glue_dr_dump_domain(FILE *file, void *domain) 117172f75660SOphir Munk { 117272f75660SOphir Munk #ifdef HAVE_MLX5_DR_FLOW_DUMP 117372f75660SOphir Munk return mlx5dv_dump_dr_domain(file, domain); 117472f75660SOphir Munk #else 117572f75660SOphir Munk RTE_SET_USED(file); 117672f75660SOphir Munk RTE_SET_USED(domain); 117772f75660SOphir Munk return -ENOTSUP; 117872f75660SOphir Munk #endif 117972f75660SOphir Munk } 118072f75660SOphir Munk 1181a3def854SJiawei Wang static void * 11824d23dd35SJiawei Wang mlx5_glue_dr_create_flow_action_sampler 11834d23dd35SJiawei Wang (struct mlx5dv_dr_flow_sampler_attr *attr) 1184a3def854SJiawei Wang { 1185a3def854SJiawei Wang #ifdef HAVE_MLX5_DR_CREATE_ACTION_FLOW_SAMPLE 1186a3def854SJiawei Wang return mlx5dv_dr_action_create_flow_sampler(attr); 1187a3def854SJiawei Wang #else 1188a3def854SJiawei Wang (void)attr; 1189a3def854SJiawei Wang errno = ENOTSUP; 1190a3def854SJiawei Wang return NULL; 1191a3def854SJiawei Wang #endif 1192a3def854SJiawei Wang } 1193a3def854SJiawei Wang 11944d23dd35SJiawei Wang static void * 11954d23dd35SJiawei Wang mlx5_glue_dr_action_create_dest_array 11964d23dd35SJiawei Wang (void *domain, 11974d23dd35SJiawei Wang size_t num_dest, 11984d23dd35SJiawei Wang struct mlx5dv_dr_action_dest_attr *dests[]) 11994d23dd35SJiawei Wang { 12004d23dd35SJiawei Wang #ifdef HAVE_MLX5_DR_CREATE_ACTION_DEST_ARRAY 12014d23dd35SJiawei Wang return mlx5dv_dr_action_create_dest_array 12024d23dd35SJiawei Wang (domain, 12034d23dd35SJiawei Wang num_dest, 12044d23dd35SJiawei Wang dests); 12054d23dd35SJiawei Wang #else 12064d23dd35SJiawei Wang (void)domain; 12074d23dd35SJiawei Wang (void)num_dest; 12084d23dd35SJiawei Wang (void)dests; 12094d23dd35SJiawei Wang errno = ENOTSUP; 12104d23dd35SJiawei Wang return NULL; 12114d23dd35SJiawei Wang #endif 12124d23dd35SJiawei Wang } 12134d23dd35SJiawei Wang 121472f75660SOphir Munk static int 121572f75660SOphir Munk mlx5_glue_devx_query_eqn(struct ibv_context *ctx, uint32_t cpus, 121672f75660SOphir Munk uint32_t *eqn) 121772f75660SOphir Munk { 121872f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 121972f75660SOphir Munk return mlx5dv_devx_query_eqn(ctx, cpus, eqn); 122072f75660SOphir Munk #else 122172f75660SOphir Munk (void)ctx; 122272f75660SOphir Munk (void)cpus; 122372f75660SOphir Munk (void)eqn; 122472f75660SOphir Munk return -ENOTSUP; 122572f75660SOphir Munk #endif 122672f75660SOphir Munk } 122772f75660SOphir Munk 122872f75660SOphir Munk static struct mlx5dv_devx_event_channel * 122972f75660SOphir Munk mlx5_glue_devx_create_event_channel(struct ibv_context *ctx, int flags) 123072f75660SOphir Munk { 123172f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 123272f75660SOphir Munk return mlx5dv_devx_create_event_channel(ctx, flags); 123372f75660SOphir Munk #else 123472f75660SOphir Munk (void)ctx; 123572f75660SOphir Munk (void)flags; 123672f75660SOphir Munk errno = ENOTSUP; 123772f75660SOphir Munk return NULL; 123872f75660SOphir Munk #endif 123972f75660SOphir Munk } 124072f75660SOphir Munk 124172f75660SOphir Munk static void 124272f75660SOphir Munk mlx5_glue_devx_destroy_event_channel(struct mlx5dv_devx_event_channel *eventc) 124372f75660SOphir Munk { 124472f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 124572f75660SOphir Munk mlx5dv_devx_destroy_event_channel(eventc); 124672f75660SOphir Munk #else 124772f75660SOphir Munk (void)eventc; 124872f75660SOphir Munk #endif 124972f75660SOphir Munk } 125072f75660SOphir Munk 125172f75660SOphir Munk static int 125272f75660SOphir Munk mlx5_glue_devx_subscribe_devx_event(struct mlx5dv_devx_event_channel *eventc, 125372f75660SOphir Munk struct mlx5dv_devx_obj *obj, 125472f75660SOphir Munk uint16_t events_sz, uint16_t events_num[], 125572f75660SOphir Munk uint64_t cookie) 125672f75660SOphir Munk { 125772f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 125872f75660SOphir Munk return mlx5dv_devx_subscribe_devx_event(eventc, obj, events_sz, 125972f75660SOphir Munk events_num, cookie); 126072f75660SOphir Munk #else 126172f75660SOphir Munk (void)eventc; 126272f75660SOphir Munk (void)obj; 126372f75660SOphir Munk (void)events_sz; 126472f75660SOphir Munk (void)events_num; 126572f75660SOphir Munk (void)cookie; 126672f75660SOphir Munk return -ENOTSUP; 126772f75660SOphir Munk #endif 126872f75660SOphir Munk } 126972f75660SOphir Munk 127072f75660SOphir Munk static int 127172f75660SOphir Munk mlx5_glue_devx_subscribe_devx_event_fd(struct mlx5dv_devx_event_channel *eventc, 127272f75660SOphir Munk int fd, struct mlx5dv_devx_obj *obj, 127372f75660SOphir Munk uint16_t event_num) 127472f75660SOphir Munk { 127572f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 127672f75660SOphir Munk return mlx5dv_devx_subscribe_devx_event_fd(eventc, fd, obj, event_num); 127772f75660SOphir Munk #else 127872f75660SOphir Munk (void)eventc; 127972f75660SOphir Munk (void)fd; 128072f75660SOphir Munk (void)obj; 128172f75660SOphir Munk (void)event_num; 128272f75660SOphir Munk return -ENOTSUP; 128372f75660SOphir Munk #endif 128472f75660SOphir Munk } 128572f75660SOphir Munk 128672f75660SOphir Munk static ssize_t 128772f75660SOphir Munk mlx5_glue_devx_get_event(struct mlx5dv_devx_event_channel *eventc, 128872f75660SOphir Munk struct mlx5dv_devx_async_event_hdr *event_data, 128972f75660SOphir Munk size_t event_resp_len) 129072f75660SOphir Munk { 129172f75660SOphir Munk #ifdef HAVE_IBV_DEVX_EVENT 129272f75660SOphir Munk return mlx5dv_devx_get_event(eventc, event_data, event_resp_len); 129372f75660SOphir Munk #else 129472f75660SOphir Munk (void)eventc; 129572f75660SOphir Munk (void)event_data; 129672f75660SOphir Munk (void)event_resp_len; 129772f75660SOphir Munk errno = ENOTSUP; 129872f75660SOphir Munk return -1; 129972f75660SOphir Munk #endif 130072f75660SOphir Munk } 130172f75660SOphir Munk 130272f75660SOphir Munk static struct mlx5dv_devx_uar * 130372f75660SOphir Munk mlx5_glue_devx_alloc_uar(struct ibv_context *context, uint32_t flags) 130472f75660SOphir Munk { 130572f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 130672f75660SOphir Munk return mlx5dv_devx_alloc_uar(context, flags); 130772f75660SOphir Munk #else 130872f75660SOphir Munk (void)context; 130972f75660SOphir Munk (void)flags; 131072f75660SOphir Munk errno = ENOTSUP; 131172f75660SOphir Munk return NULL; 131272f75660SOphir Munk #endif 131372f75660SOphir Munk } 131472f75660SOphir Munk 131572f75660SOphir Munk static void 131672f75660SOphir Munk mlx5_glue_devx_free_uar(struct mlx5dv_devx_uar *devx_uar) 131772f75660SOphir Munk { 131872f75660SOphir Munk #ifdef HAVE_IBV_DEVX_OBJ 131972f75660SOphir Munk mlx5dv_devx_free_uar(devx_uar); 132072f75660SOphir Munk #else 132172f75660SOphir Munk (void)devx_uar; 132272f75660SOphir Munk #endif 132372f75660SOphir Munk } 132472f75660SOphir Munk 132572f75660SOphir Munk static struct mlx5dv_var * 132672f75660SOphir Munk mlx5_glue_dv_alloc_var(struct ibv_context *context, uint32_t flags) 132772f75660SOphir Munk { 132872f75660SOphir Munk #ifdef HAVE_IBV_VAR 132972f75660SOphir Munk return mlx5dv_alloc_var(context, flags); 133072f75660SOphir Munk #else 133172f75660SOphir Munk (void)context; 133272f75660SOphir Munk (void)flags; 133372f75660SOphir Munk errno = ENOTSUP; 133472f75660SOphir Munk return NULL; 133572f75660SOphir Munk #endif 133672f75660SOphir Munk } 133772f75660SOphir Munk 133872f75660SOphir Munk static void 133972f75660SOphir Munk mlx5_glue_dv_free_var(struct mlx5dv_var *var) 134072f75660SOphir Munk { 134172f75660SOphir Munk #ifdef HAVE_IBV_VAR 134272f75660SOphir Munk mlx5dv_free_var(var); 134372f75660SOphir Munk #else 134472f75660SOphir Munk (void)var; 134572f75660SOphir Munk errno = ENOTSUP; 134672f75660SOphir Munk #endif 134772f75660SOphir Munk } 134872f75660SOphir Munk 1349bebee850SSuanming Mou static void 1350bebee850SSuanming Mou mlx5_glue_dr_reclaim_domain_memory(void *domain, uint32_t enable) 1351bebee850SSuanming Mou { 1352bebee850SSuanming Mou #ifdef HAVE_MLX5DV_DR_MEM_RECLAIM 1353bebee850SSuanming Mou mlx5dv_dr_domain_set_reclaim_device_memory(domain, enable); 1354bebee850SSuanming Mou #else 1355bebee850SSuanming Mou (void)(enable); 1356bebee850SSuanming Mou (void)(domain); 1357bebee850SSuanming Mou #endif 1358bebee850SSuanming Mou } 1359bebee850SSuanming Mou 136079a7e409SViacheslav Ovsiienko static struct mlx5dv_pp * 136179a7e409SViacheslav Ovsiienko mlx5_glue_dv_alloc_pp(struct ibv_context *context, 136279a7e409SViacheslav Ovsiienko size_t pp_context_sz, 136379a7e409SViacheslav Ovsiienko const void *pp_context, 136479a7e409SViacheslav Ovsiienko uint32_t flags) 136579a7e409SViacheslav Ovsiienko { 136679a7e409SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_PP_ALLOC 136779a7e409SViacheslav Ovsiienko return mlx5dv_pp_alloc(context, pp_context_sz, pp_context, flags); 136879a7e409SViacheslav Ovsiienko #else 136979a7e409SViacheslav Ovsiienko RTE_SET_USED(context); 137079a7e409SViacheslav Ovsiienko RTE_SET_USED(pp_context_sz); 137179a7e409SViacheslav Ovsiienko RTE_SET_USED(pp_context); 137279a7e409SViacheslav Ovsiienko RTE_SET_USED(flags); 137379a7e409SViacheslav Ovsiienko errno = ENOTSUP; 137479a7e409SViacheslav Ovsiienko return NULL; 137579a7e409SViacheslav Ovsiienko #endif 137679a7e409SViacheslav Ovsiienko } 137779a7e409SViacheslav Ovsiienko 137879a7e409SViacheslav Ovsiienko static void 1379e39226bdSJiawei Wang mlx5_glue_dr_allow_duplicate_rules(void *domain, uint32_t allow) 1380e39226bdSJiawei Wang { 1381e39226bdSJiawei Wang #ifdef HAVE_MLX5_DR_ALLOW_DUPLICATE 1382e39226bdSJiawei Wang mlx5dv_dr_domain_allow_duplicate_rules(domain, allow); 1383e39226bdSJiawei Wang #else 1384e39226bdSJiawei Wang (void)(allow); 1385e39226bdSJiawei Wang (void)(domain); 1386e39226bdSJiawei Wang #endif 1387e39226bdSJiawei Wang } 1388e39226bdSJiawei Wang 1389e39226bdSJiawei Wang static void 139079a7e409SViacheslav Ovsiienko mlx5_glue_dv_free_pp(struct mlx5dv_pp *pp) 139179a7e409SViacheslav Ovsiienko { 139279a7e409SViacheslav Ovsiienko #ifdef HAVE_MLX5DV_PP_ALLOC 139379a7e409SViacheslav Ovsiienko mlx5dv_pp_free(pp); 139479a7e409SViacheslav Ovsiienko #else 139579a7e409SViacheslav Ovsiienko RTE_SET_USED(pp); 139679a7e409SViacheslav Ovsiienko #endif 139779a7e409SViacheslav Ovsiienko } 139879a7e409SViacheslav Ovsiienko 139972f75660SOphir Munk __rte_cache_aligned 140072f75660SOphir Munk const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue) { 140172f75660SOphir Munk .version = MLX5_GLUE_VERSION, 140272f75660SOphir Munk .fork_init = mlx5_glue_fork_init, 140372f75660SOphir Munk .alloc_pd = mlx5_glue_alloc_pd, 140472f75660SOphir Munk .dealloc_pd = mlx5_glue_dealloc_pd, 140572f75660SOphir Munk .get_device_list = mlx5_glue_get_device_list, 140672f75660SOphir Munk .free_device_list = mlx5_glue_free_device_list, 140772f75660SOphir Munk .open_device = mlx5_glue_open_device, 140872f75660SOphir Munk .close_device = mlx5_glue_close_device, 140972f75660SOphir Munk .query_device = mlx5_glue_query_device, 141072f75660SOphir Munk .query_device_ex = mlx5_glue_query_device_ex, 141172f75660SOphir Munk .query_rt_values_ex = mlx5_glue_query_rt_values_ex, 141272f75660SOphir Munk .query_port = mlx5_glue_query_port, 141372f75660SOphir Munk .create_comp_channel = mlx5_glue_create_comp_channel, 141472f75660SOphir Munk .destroy_comp_channel = mlx5_glue_destroy_comp_channel, 141572f75660SOphir Munk .create_cq = mlx5_glue_create_cq, 141672f75660SOphir Munk .destroy_cq = mlx5_glue_destroy_cq, 141772f75660SOphir Munk .get_cq_event = mlx5_glue_get_cq_event, 141872f75660SOphir Munk .ack_cq_events = mlx5_glue_ack_cq_events, 141972f75660SOphir Munk .create_rwq_ind_table = mlx5_glue_create_rwq_ind_table, 142072f75660SOphir Munk .destroy_rwq_ind_table = mlx5_glue_destroy_rwq_ind_table, 142172f75660SOphir Munk .create_wq = mlx5_glue_create_wq, 142272f75660SOphir Munk .destroy_wq = mlx5_glue_destroy_wq, 142372f75660SOphir Munk .modify_wq = mlx5_glue_modify_wq, 142472f75660SOphir Munk .create_flow = mlx5_glue_create_flow, 142572f75660SOphir Munk .destroy_flow = mlx5_glue_destroy_flow, 142672f75660SOphir Munk .destroy_flow_action = mlx5_glue_destroy_flow_action, 142772f75660SOphir Munk .create_qp = mlx5_glue_create_qp, 142872f75660SOphir Munk .create_qp_ex = mlx5_glue_create_qp_ex, 142972f75660SOphir Munk .destroy_qp = mlx5_glue_destroy_qp, 143072f75660SOphir Munk .modify_qp = mlx5_glue_modify_qp, 143172f75660SOphir Munk .reg_mr = mlx5_glue_reg_mr, 1432*6ebd062eSMichael Baum .reg_mr_iova = mlx5_glue_reg_mr_iova, 143372f75660SOphir Munk .alloc_null_mr = mlx5_glue_alloc_null_mr, 143472f75660SOphir Munk .dereg_mr = mlx5_glue_dereg_mr, 143572f75660SOphir Munk .create_counter_set = mlx5_glue_create_counter_set, 143672f75660SOphir Munk .destroy_counter_set = mlx5_glue_destroy_counter_set, 143772f75660SOphir Munk .describe_counter_set = mlx5_glue_describe_counter_set, 143872f75660SOphir Munk .query_counter_set = mlx5_glue_query_counter_set, 143972f75660SOphir Munk .create_counters = mlx5_glue_create_counters, 144072f75660SOphir Munk .destroy_counters = mlx5_glue_destroy_counters, 144172f75660SOphir Munk .attach_counters = mlx5_glue_attach_counters, 144272f75660SOphir Munk .query_counters = mlx5_glue_query_counters, 144372f75660SOphir Munk .ack_async_event = mlx5_glue_ack_async_event, 144472f75660SOphir Munk .get_async_event = mlx5_glue_get_async_event, 144572f75660SOphir Munk .port_state_str = mlx5_glue_port_state_str, 144672f75660SOphir Munk .cq_ex_to_cq = mlx5_glue_cq_ex_to_cq, 144772f75660SOphir Munk .dr_create_flow_action_dest_flow_tbl = 144872f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_flow_tbl, 144972f75660SOphir Munk .dr_create_flow_action_dest_port = 145072f75660SOphir Munk mlx5_glue_dr_create_flow_action_dest_port, 145172f75660SOphir Munk .dr_create_flow_action_drop = 145272f75660SOphir Munk mlx5_glue_dr_create_flow_action_drop, 145372f75660SOphir Munk .dr_create_flow_action_push_vlan = 145472f75660SOphir Munk mlx5_glue_dr_create_flow_action_push_vlan, 145572f75660SOphir Munk .dr_create_flow_action_pop_vlan = 145672f75660SOphir Munk mlx5_glue_dr_create_flow_action_pop_vlan, 145772f75660SOphir Munk .dr_create_flow_tbl = mlx5_glue_dr_create_flow_tbl, 145872f75660SOphir Munk .dr_destroy_flow_tbl = mlx5_glue_dr_destroy_flow_tbl, 145972f75660SOphir Munk .dr_create_domain = mlx5_glue_dr_create_domain, 146072f75660SOphir Munk .dr_destroy_domain = mlx5_glue_dr_destroy_domain, 14616e0cd74aSBing Zhao .dr_sync_domain = mlx5_glue_dr_sync_domain, 146272f75660SOphir Munk .dv_create_cq = mlx5_glue_dv_create_cq, 146372f75660SOphir Munk .dv_create_wq = mlx5_glue_dv_create_wq, 146472f75660SOphir Munk .dv_query_device = mlx5_glue_dv_query_device, 146572f75660SOphir Munk .dv_set_context_attr = mlx5_glue_dv_set_context_attr, 146672f75660SOphir Munk .dv_init_obj = mlx5_glue_dv_init_obj, 146772f75660SOphir Munk .dv_create_qp = mlx5_glue_dv_create_qp, 146872f75660SOphir Munk .dv_create_flow_matcher = mlx5_glue_dv_create_flow_matcher, 146972f75660SOphir Munk .dv_create_flow = mlx5_glue_dv_create_flow, 147072f75660SOphir Munk .dv_create_flow_action_counter = 147172f75660SOphir Munk mlx5_glue_dv_create_flow_action_counter, 147272f75660SOphir Munk .dv_create_flow_action_dest_ibv_qp = 147372f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_ibv_qp, 147472f75660SOphir Munk .dv_create_flow_action_dest_devx_tir = 147572f75660SOphir Munk mlx5_glue_dv_create_flow_action_dest_devx_tir, 147672f75660SOphir Munk .dv_create_flow_action_modify_header = 147772f75660SOphir Munk mlx5_glue_dv_create_flow_action_modify_header, 147872f75660SOphir Munk .dv_create_flow_action_packet_reformat = 147972f75660SOphir Munk mlx5_glue_dv_create_flow_action_packet_reformat, 148072f75660SOphir Munk .dv_create_flow_action_tag = mlx5_glue_dv_create_flow_action_tag, 148172f75660SOphir Munk .dv_create_flow_action_meter = mlx5_glue_dv_create_flow_action_meter, 148272f75660SOphir Munk .dv_modify_flow_action_meter = mlx5_glue_dv_modify_flow_action_meter, 1483a2999c7bSDekel Peled .dv_create_flow_action_aso = mlx5_glue_dv_create_flow_action_aso, 1484d4d85aa6SShiri Kuzin .dr_create_flow_action_default_miss = 1485d4d85aa6SShiri Kuzin mlx5_glue_dr_create_flow_action_default_miss, 148672f75660SOphir Munk .dv_destroy_flow = mlx5_glue_dv_destroy_flow, 148772f75660SOphir Munk .dv_destroy_flow_matcher = mlx5_glue_dv_destroy_flow_matcher, 148872f75660SOphir Munk .dv_open_device = mlx5_glue_dv_open_device, 148972f75660SOphir Munk .devx_obj_create = mlx5_glue_devx_obj_create, 149072f75660SOphir Munk .devx_obj_destroy = mlx5_glue_devx_obj_destroy, 149172f75660SOphir Munk .devx_obj_query = mlx5_glue_devx_obj_query, 149272f75660SOphir Munk .devx_obj_modify = mlx5_glue_devx_obj_modify, 149372f75660SOphir Munk .devx_general_cmd = mlx5_glue_devx_general_cmd, 149472f75660SOphir Munk .devx_create_cmd_comp = mlx5_glue_devx_create_cmd_comp, 149572f75660SOphir Munk .devx_destroy_cmd_comp = mlx5_glue_devx_destroy_cmd_comp, 149672f75660SOphir Munk .devx_obj_query_async = mlx5_glue_devx_obj_query_async, 149772f75660SOphir Munk .devx_get_async_cmd_comp = mlx5_glue_devx_get_async_cmd_comp, 149872f75660SOphir Munk .devx_umem_reg = mlx5_glue_devx_umem_reg, 149972f75660SOphir Munk .devx_umem_dereg = mlx5_glue_devx_umem_dereg, 150072f75660SOphir Munk .devx_qp_query = mlx5_glue_devx_qp_query, 150175a9a73dSMatan Azrad .devx_wq_query = mlx5_glue_devx_wq_query, 150272f75660SOphir Munk .devx_port_query = mlx5_glue_devx_port_query, 150372f75660SOphir Munk .dr_dump_domain = mlx5_glue_dr_dump_domain, 1504a38d22edSHaifei Luo .dr_dump_rule = mlx5_glue_dr_dump_single_rule, 1505bebee850SSuanming Mou .dr_reclaim_domain_memory = mlx5_glue_dr_reclaim_domain_memory, 1506a3def854SJiawei Wang .dr_create_flow_action_sampler = 1507a3def854SJiawei Wang mlx5_glue_dr_create_flow_action_sampler, 15084d23dd35SJiawei Wang .dr_create_flow_action_dest_array = 15094d23dd35SJiawei Wang mlx5_glue_dr_action_create_dest_array, 1510e39226bdSJiawei Wang .dr_allow_duplicate_rules = mlx5_glue_dr_allow_duplicate_rules, 151172f75660SOphir Munk .devx_query_eqn = mlx5_glue_devx_query_eqn, 151272f75660SOphir Munk .devx_create_event_channel = mlx5_glue_devx_create_event_channel, 151372f75660SOphir Munk .devx_destroy_event_channel = mlx5_glue_devx_destroy_event_channel, 151472f75660SOphir Munk .devx_subscribe_devx_event = mlx5_glue_devx_subscribe_devx_event, 151572f75660SOphir Munk .devx_subscribe_devx_event_fd = mlx5_glue_devx_subscribe_devx_event_fd, 151672f75660SOphir Munk .devx_get_event = mlx5_glue_devx_get_event, 151772f75660SOphir Munk .devx_alloc_uar = mlx5_glue_devx_alloc_uar, 151872f75660SOphir Munk .devx_free_uar = mlx5_glue_devx_free_uar, 151972f75660SOphir Munk .dv_alloc_var = mlx5_glue_dv_alloc_var, 152072f75660SOphir Munk .dv_free_var = mlx5_glue_dv_free_var, 152179a7e409SViacheslav Ovsiienko .dv_alloc_pp = mlx5_glue_dv_alloc_pp, 152279a7e409SViacheslav Ovsiienko .dv_free_pp = mlx5_glue_dv_free_pp, 152372f75660SOphir Munk }; 1524