X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx5%2Fmlx5_glue.c;h=b5aab52616b345264d2ed13b26796d3dc67708ec;hb=0e4949639ba4e915e7b799f7764b83e124e73669;hp=6172e0d2ac6d12c0a79c25d37b75230c0edae485;hpb=d1e64fbf6345cc74cd016f8fe152393ed72c39e2;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_glue.c b/drivers/net/mlx5/mlx5_glue.c index 6172e0d2ac..b5aab52616 100644 --- a/drivers/net/mlx5/mlx5_glue.c +++ b/drivers/net/mlx5/mlx5_glue.c @@ -87,6 +87,13 @@ mlx5_glue_query_device_ex(struct ibv_context *context, return ibv_query_device_ex(context, input, attr); } +static int +mlx5_glue_query_rt_values_ex(struct ibv_context *context, + struct ibv_values_ex *values) +{ + return ibv_query_rt_values_ex(context, values); +} + static int mlx5_glue_query_port(struct ibv_context *context, uint8_t port_num, struct ibv_port_attr *port_attr) @@ -296,6 +303,7 @@ mlx5_glue_create_counters(struct ibv_context *context, #ifndef HAVE_IBV_DEVICE_COUNTERS_SET_V45 (void)context; (void)init_attr; + errno = ENOTSUP; return NULL; #else return ibv_create_counters(context, init_attr); @@ -377,6 +385,7 @@ mlx5_glue_dr_create_flow_action_dest_flow_tbl(void *tbl) return mlx5dv_dr_action_create_dest_table(tbl); #else (void)tbl; + errno = ENOTSUP; return NULL; #endif } @@ -389,6 +398,7 @@ mlx5_glue_dr_create_flow_action_dest_vport(void *domain, uint32_t vport) #else (void)domain; (void)vport; + errno = ENOTSUP; return NULL; #endif } @@ -399,6 +409,32 @@ mlx5_glue_dr_create_flow_action_drop(void) #ifdef HAVE_MLX5DV_DR_ESWITCH return mlx5dv_dr_action_create_drop(); #else + errno = ENOTSUP; + return NULL; +#endif +} + +static void * +mlx5_glue_dr_create_flow_action_push_vlan(struct mlx5dv_dr_domain *domain, + rte_be32_t vlan_tag) +{ +#ifdef HAVE_MLX5DV_DR_VLAN + return mlx5dv_dr_action_create_push_vlan(domain, vlan_tag); +#else + (void)domain; + (void)vlan_tag; + errno = ENOTSUP; + return NULL; +#endif +} + +static void * +mlx5_glue_dr_create_flow_action_pop_vlan(void) +{ +#ifdef HAVE_MLX5DV_DR_VLAN + return mlx5dv_dr_action_create_pop_vlan(); +#else + errno = ENOTSUP; return NULL; #endif } @@ -411,6 +447,7 @@ mlx5_glue_dr_create_flow_tbl(void *domain, uint32_t level) #else (void)domain; (void)level; + errno = ENOTSUP; return NULL; #endif } @@ -422,7 +459,8 @@ mlx5_glue_dr_destroy_flow_tbl(void *tbl) return mlx5dv_dr_table_destroy(tbl); #else (void)tbl; - return 0; + errno = ENOTSUP; + return errno; #endif } @@ -435,6 +473,7 @@ mlx5_glue_dr_create_domain(struct ibv_context *ctx, #else (void)ctx; (void)domain; + errno = ENOTSUP; return NULL; #endif } @@ -446,7 +485,8 @@ mlx5_glue_dr_destroy_domain(void *domain) return mlx5dv_dr_domain_destroy(domain); #else (void)domain; - return 0; + errno = ENOTSUP; + return errno; #endif } @@ -467,6 +507,7 @@ mlx5_glue_dv_create_wq(struct ibv_context *context, (void)context; (void)wq_attr; (void)mlx5_wq_attr; + errno = ENOTSUP; return NULL; #else return mlx5dv_create_wq(context, wq_attr, mlx5_wq_attr); @@ -504,6 +545,7 @@ mlx5_glue_dv_create_qp(struct ibv_context *context, (void)context; (void)qp_init_attr_ex; (void)dv_qp_init_attr; + errno = ENOTSUP; return NULL; #endif } @@ -527,6 +569,7 @@ mlx5_glue_dv_create_flow_matcher(struct ibv_context *context, (void)context; (void)matcher_attr; (void)tbl; + errno = ENOTSUP; return NULL; #endif } @@ -581,6 +624,7 @@ mlx5_glue_dv_create_flow_action_counter(void *counter_obj, uint32_t offset) #else (void)counter_obj; (void)offset; + errno = ENOTSUP; return NULL; #endif } @@ -603,6 +647,19 @@ mlx5_glue_dv_create_flow_action_dest_ibv_qp(void *qp) #endif #else (void)qp; + errno = ENOTSUP; + return NULL; +#endif +} + +static void * +mlx5_glue_dv_create_flow_action_dest_devx_tir(void *tir) +{ +#ifdef HAVE_MLX5DV_DR_ACTION_DEST_DEVX_TIR + return mlx5dv_dr_action_create_dest_devx_tir(tir); +#else + (void)tir; + errno = ENOTSUP; return NULL; #endif } @@ -641,6 +698,7 @@ mlx5_glue_dv_create_flow_action_modify_header (void)flags; (void)actions_sz; (void)actions; + errno = ENOTSUP; return NULL; #endif } @@ -681,6 +739,7 @@ mlx5_glue_dv_create_flow_action_packet_reformat (void)flags; (void)data_sz; (void)data; + errno = ENOTSUP; return NULL; #endif } @@ -702,6 +761,7 @@ mlx5_glue_dv_create_flow_action_tag(uint32_t tag) #endif #endif (void)tag; + errno = ENOTSUP; return NULL; } @@ -726,7 +786,8 @@ mlx5_glue_dv_destroy_flow_matcher(void *matcher) #endif #else (void)matcher; - return 0; + errno = ENOTSUP; + return errno; #endif } @@ -740,6 +801,7 @@ mlx5_glue_dv_open_device(struct ibv_device *device) }); #else (void)device; + errno = ENOTSUP; return NULL; #endif } @@ -757,6 +819,7 @@ mlx5_glue_devx_obj_create(struct ibv_context *ctx, (void)inlen; (void)out; (void)outlen; + errno = ENOTSUP; return NULL; #endif } @@ -823,6 +886,125 @@ mlx5_glue_devx_general_cmd(struct ibv_context *ctx, #endif } +static struct mlx5dv_devx_cmd_comp * +mlx5_glue_devx_create_cmd_comp(struct ibv_context *ctx) +{ +#ifdef HAVE_IBV_DEVX_ASYNC + return mlx5dv_devx_create_cmd_comp(ctx); +#else + (void)ctx; + errno = -ENOTSUP; + return NULL; +#endif +} + +static void +mlx5_glue_devx_destroy_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp) +{ +#ifdef HAVE_IBV_DEVX_ASYNC + mlx5dv_devx_destroy_cmd_comp(cmd_comp); +#else + (void)cmd_comp; + errno = -ENOTSUP; +#endif +} + +static int +mlx5_glue_devx_obj_query_async(struct mlx5dv_devx_obj *obj, const void *in, + size_t inlen, size_t outlen, uint64_t wr_id, + struct mlx5dv_devx_cmd_comp *cmd_comp) +{ +#ifdef HAVE_IBV_DEVX_ASYNC + return mlx5dv_devx_obj_query_async(obj, in, inlen, outlen, wr_id, + cmd_comp); +#else + (void)obj; + (void)in; + (void)inlen; + (void)outlen; + (void)wr_id; + (void)cmd_comp; + return -ENOTSUP; +#endif +} + +static int +mlx5_glue_devx_get_async_cmd_comp(struct mlx5dv_devx_cmd_comp *cmd_comp, + struct mlx5dv_devx_async_cmd_hdr *cmd_resp, + size_t cmd_resp_len) +{ +#ifdef HAVE_IBV_DEVX_ASYNC + return mlx5dv_devx_get_async_cmd_comp(cmd_comp, cmd_resp, + cmd_resp_len); +#else + (void)cmd_comp; + (void)cmd_resp; + (void)cmd_resp_len; + return -ENOTSUP; +#endif +} + +static struct mlx5dv_devx_umem * +mlx5_glue_devx_umem_reg(struct ibv_context *context, void *addr, size_t size, + uint32_t access) +{ +#ifdef HAVE_IBV_DEVX_OBJ + return mlx5dv_devx_umem_reg(context, addr, size, access); +#else + (void)context; + (void)addr; + (void)size; + (void)access; + errno = -ENOTSUP; + return NULL; +#endif +} + +static int +mlx5_glue_devx_umem_dereg(struct mlx5dv_devx_umem *dv_devx_umem) +{ +#ifdef HAVE_IBV_DEVX_OBJ + return mlx5dv_devx_umem_dereg(dv_devx_umem); +#else + (void)dv_devx_umem; + return -ENOTSUP; +#endif +} + +static int +mlx5_glue_devx_qp_query(struct ibv_qp *qp, + const void *in, size_t inlen, + void *out, size_t outlen) +{ +#ifdef HAVE_IBV_DEVX_ASYNC + return mlx5dv_devx_qp_query(qp, in, inlen, out, outlen); +#else + (void)qp; + (void)in; + (void)inlen; + (void)out; + (void)outlen; + errno = ENOTSUP; + return errno; +#endif +} + +static int +mlx5_glue_devx_port_query(struct ibv_context *ctx, + uint32_t port_num, + struct mlx5dv_devx_port *mlx5_devx_port) +{ +#ifdef HAVE_MLX5DV_DR_DEVX_PORT + return mlx5dv_query_devx_port(ctx, port_num, mlx5_devx_port); +#else + (void)ctx; + (void)port_num; + (void)mlx5_devx_port; + errno = ENOTSUP; + return errno; +#endif +} + alignas(RTE_CACHE_LINE_SIZE) const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){ .version = MLX5_GLUE_VERSION, @@ -835,6 +1017,7 @@ const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){ .close_device = mlx5_glue_close_device, .query_device = mlx5_glue_query_device, .query_device_ex = mlx5_glue_query_device_ex, + .query_rt_values_ex = mlx5_glue_query_rt_values_ex, .query_port = mlx5_glue_query_port, .create_comp_channel = mlx5_glue_create_comp_channel, .destroy_comp_channel = mlx5_glue_destroy_comp_channel, @@ -874,6 +1057,10 @@ const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){ mlx5_glue_dr_create_flow_action_dest_vport, .dr_create_flow_action_drop = mlx5_glue_dr_create_flow_action_drop, + .dr_create_flow_action_push_vlan = + mlx5_glue_dr_create_flow_action_push_vlan, + .dr_create_flow_action_pop_vlan = + mlx5_glue_dr_create_flow_action_pop_vlan, .dr_create_flow_tbl = mlx5_glue_dr_create_flow_tbl, .dr_destroy_flow_tbl = mlx5_glue_dr_destroy_flow_tbl, .dr_create_domain = mlx5_glue_dr_create_domain, @@ -890,6 +1077,8 @@ const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){ mlx5_glue_dv_create_flow_action_counter, .dv_create_flow_action_dest_ibv_qp = mlx5_glue_dv_create_flow_action_dest_ibv_qp, + .dv_create_flow_action_dest_devx_tir = + mlx5_glue_dv_create_flow_action_dest_devx_tir, .dv_create_flow_action_modify_header = mlx5_glue_dv_create_flow_action_modify_header, .dv_create_flow_action_packet_reformat = @@ -903,4 +1092,12 @@ const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){ .devx_obj_query = mlx5_glue_devx_obj_query, .devx_obj_modify = mlx5_glue_devx_obj_modify, .devx_general_cmd = mlx5_glue_devx_general_cmd, + .devx_create_cmd_comp = mlx5_glue_devx_create_cmd_comp, + .devx_destroy_cmd_comp = mlx5_glue_devx_destroy_cmd_comp, + .devx_obj_query_async = mlx5_glue_devx_obj_query_async, + .devx_get_async_cmd_comp = mlx5_glue_devx_get_async_cmd_comp, + .devx_umem_reg = mlx5_glue_devx_umem_reg, + .devx_umem_dereg = mlx5_glue_devx_umem_dereg, + .devx_qp_query = mlx5_glue_devx_qp_query, + .devx_port_query = mlx5_glue_devx_port_query, };