X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx5%2Fmlx5_glue.c;h=9ee37f4c8b639dfd2137448f435a4a7ca9709b31;hb=8de0c42019260813b71699748a08bc94b608b5d9;hp=a508faafeb4176e462c5c6f089ecc390a107a2fd;hpb=bbda883ca068d430f289190e49ecbdf6ab2a0761;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_glue.c b/drivers/net/mlx5/mlx5_glue.c index a508faafeb..9ee37f4c8b 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) @@ -180,7 +187,7 @@ mlx5_glue_destroy_flow_action(void *action) { #ifdef HAVE_IBV_FLOW_DV_SUPPORT #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_destroy_action(action); + return mlx5dv_dr_action_destroy(action); #else struct mlx5dv_flow_action_attr *attr = action; int res = 0; @@ -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); @@ -374,21 +382,72 @@ static void * mlx5_glue_dr_create_flow_action_dest_flow_tbl(void *tbl) { #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_create_action_dest_flow_table(tbl); + return mlx5dv_dr_action_create_dest_table(tbl); #else (void)tbl; + errno = ENOTSUP; + return NULL; +#endif +} + +static void * +mlx5_glue_dr_create_flow_action_dest_vport(void *domain, uint32_t vport) +{ +#ifdef HAVE_MLX5DV_DR_ESWITCH + return mlx5dv_dr_action_create_dest_vport(domain, vport); +#else + (void)domain; + (void)vport; + errno = ENOTSUP; + return NULL; +#endif +} + +static void * +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_tbl(void *ns, uint32_t level) +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 +} + +static void * +mlx5_glue_dr_create_flow_tbl(void *domain, uint32_t level) { #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_create_ft(ns, level); + return mlx5dv_dr_table_create(domain, level); #else - (void)ns; + (void)domain; (void)level; + errno = ENOTSUP; return NULL; #endif } @@ -397,34 +456,37 @@ static int mlx5_glue_dr_destroy_flow_tbl(void *tbl) { #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_destroy_ft(tbl); + return mlx5dv_dr_table_destroy(tbl); #else (void)tbl; - return 0; + errno = ENOTSUP; + return errno; #endif } static void * -mlx5_glue_dr_create_ns(struct ibv_context *ctx, - enum mlx5dv_dr_ns_domain domain) +mlx5_glue_dr_create_domain(struct ibv_context *ctx, + enum mlx5dv_dr_domain_type domain) { #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_create_ns(ctx, domain); + return mlx5dv_dr_domain_create(ctx, domain); #else (void)ctx; (void)domain; + errno = ENOTSUP; return NULL; #endif } static int -mlx5_glue_dr_destroy_ns(void *ns) +mlx5_glue_dr_destroy_domain(void *domain) { #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_destroy_ns(ns); + return mlx5dv_dr_domain_destroy(domain); #else - (void)ns; - return 0; + (void)domain; + errno = ENOTSUP; + return errno; #endif } @@ -445,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); @@ -482,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 } @@ -494,9 +558,9 @@ mlx5_glue_dv_create_flow_matcher(struct ibv_context *context, #ifdef HAVE_IBV_FLOW_DV_SUPPORT #ifdef HAVE_MLX5DV_DR (void)context; - return mlx5dv_dr_create_matcher(tbl, matcher_attr->priority, - matcher_attr->match_criteria_enable, - matcher_attr->match_mask); + return mlx5dv_dr_matcher_create(tbl, matcher_attr->priority, + matcher_attr->match_criteria_enable, + matcher_attr->match_mask); #else (void)tbl; return mlx5dv_create_flow_matcher(context, matcher_attr); @@ -505,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 } @@ -517,7 +582,7 @@ mlx5_glue_dv_create_flow(void *matcher, { #ifdef HAVE_IBV_FLOW_DV_SUPPORT #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_create_rule(matcher, match_value, num_actions, + return mlx5dv_dr_rule_create(matcher, match_value, num_actions, (struct mlx5dv_dr_action **)actions); #else struct mlx5dv_flow_action_attr actions_attr[8]; @@ -544,7 +609,7 @@ mlx5_glue_dv_create_flow_action_counter(void *counter_obj, uint32_t offset) { #ifdef HAVE_IBV_FLOW_DV_SUPPORT #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_create_action_devx_counter(counter_obj, offset); + return mlx5dv_dr_action_create_flow_counter(counter_obj, offset); #else struct mlx5dv_flow_action_attr *action; @@ -559,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 } @@ -568,7 +634,7 @@ mlx5_glue_dv_create_flow_action_dest_ibv_qp(void *qp) { #ifdef HAVE_IBV_FLOW_DV_SUPPORT #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_create_action_dest_ibv_qp(qp); + return mlx5dv_dr_action_create_dest_ibv_qp(qp); #else struct mlx5dv_flow_action_attr *action; @@ -581,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 } @@ -589,7 +668,7 @@ static void * mlx5_glue_dv_create_flow_action_modify_header (struct ibv_context *ctx, enum mlx5dv_flow_table_type ft_type, - void *ns, uint64_t flags, + void *domain, uint64_t flags, size_t actions_sz, uint64_t actions[]) { @@ -597,12 +676,12 @@ mlx5_glue_dv_create_flow_action_modify_header #ifdef HAVE_MLX5DV_DR (void)ctx; (void)ft_type; - return mlx5dv_dr_create_action_modify_header(ns, flags, actions_sz, - actions); + return mlx5dv_dr_action_create_modify_header(domain, flags, actions_sz, + (__be64 *)actions); #else struct mlx5dv_flow_action_attr *action; - (void)ns; + (void)domain; (void)flags; action = malloc(sizeof(*action)); if (!action) @@ -615,10 +694,11 @@ mlx5_glue_dv_create_flow_action_modify_header #else (void)ctx; (void)ft_type; - (void)ns; + (void)domain; (void)flags; (void)actions_sz; (void)actions; + errno = ENOTSUP; return NULL; #endif } @@ -627,18 +707,19 @@ static void * mlx5_glue_dv_create_flow_action_packet_reformat (struct ibv_context *ctx, enum mlx5dv_flow_action_packet_reformat_type reformat_type, - enum mlx5dv_flow_table_type ft_type, struct mlx5dv_dr_ns *ns, + enum mlx5dv_flow_table_type ft_type, + struct mlx5dv_dr_domain *domain, uint32_t flags, size_t data_sz, void *data) { #ifdef HAVE_IBV_FLOW_DV_SUPPORT #ifdef HAVE_MLX5DV_DR (void)ctx; (void)ft_type; - return mlx5dv_dr_create_action_packet_reformat(ns, flags, + return mlx5dv_dr_action_create_packet_reformat(domain, flags, reformat_type, data_sz, data); #else - (void)ns; + (void)domain; (void)flags; struct mlx5dv_flow_action_attr *action; @@ -654,10 +735,11 @@ mlx5_glue_dv_create_flow_action_packet_reformat (void)ctx; (void)reformat_type; (void)ft_type; - (void)ns; + (void)domain; (void)flags; (void)data_sz; (void)data; + errno = ENOTSUP; return NULL; #endif } @@ -667,7 +749,7 @@ mlx5_glue_dv_create_flow_action_tag(uint32_t tag) { #ifdef HAVE_IBV_FLOW_DV_SUPPORT #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_create_action_tag(tag); + return mlx5dv_dr_action_create_tag(tag); #else struct mlx5dv_flow_action_attr *action; action = malloc(sizeof(*action)); @@ -679,6 +761,7 @@ mlx5_glue_dv_create_flow_action_tag(uint32_t tag) #endif #endif (void)tag; + errno = ENOTSUP; return NULL; } @@ -686,7 +769,7 @@ static int mlx5_glue_dv_destroy_flow(void *flow_id) { #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_destroy_rule(flow_id); + return mlx5dv_dr_rule_destroy(flow_id); #else return ibv_destroy_flow(flow_id); #endif @@ -697,13 +780,14 @@ mlx5_glue_dv_destroy_flow_matcher(void *matcher) { #ifdef HAVE_IBV_FLOW_DV_SUPPORT #ifdef HAVE_MLX5DV_DR - return mlx5dv_dr_destroy_matcher(matcher); + return mlx5dv_dr_matcher_destroy(matcher); #else return mlx5dv_destroy_flow_matcher(matcher); #endif #else (void)matcher; - return 0; + errno = ENOTSUP; + return errno; #endif } @@ -717,6 +801,7 @@ mlx5_glue_dv_open_device(struct ibv_device *device) }); #else (void)device; + errno = ENOTSUP; return NULL; #endif } @@ -734,6 +819,7 @@ mlx5_glue_devx_obj_create(struct ibv_context *ctx, (void)inlen; (void)out; (void)outlen; + errno = ENOTSUP; return NULL; #endif } @@ -800,6 +886,109 @@ 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 +} + alignas(RTE_CACHE_LINE_SIZE) const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){ .version = MLX5_GLUE_VERSION, @@ -812,6 +1001,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, @@ -847,10 +1037,18 @@ const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){ .cq_ex_to_cq = mlx5_glue_cq_ex_to_cq, .dr_create_flow_action_dest_flow_tbl = mlx5_glue_dr_create_flow_action_dest_flow_tbl, + .dr_create_flow_action_dest_vport = + 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_ns = mlx5_glue_dr_create_ns, - .dr_destroy_ns = mlx5_glue_dr_destroy_ns, + .dr_create_domain = mlx5_glue_dr_create_domain, + .dr_destroy_domain = mlx5_glue_dr_destroy_domain, .dv_create_cq = mlx5_glue_dv_create_cq, .dv_create_wq = mlx5_glue_dv_create_wq, .dv_query_device = mlx5_glue_dv_query_device, @@ -863,6 +1061,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 = @@ -876,4 +1076,11 @@ 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, };