X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx5%2Fmlx5_glue.c;h=58c9a82bdb2cc13a35ba5d3a853ba481d9415ff1;hb=9bf26e1318e3cd7a04115c8201255505e90cab83;hp=f5a6c2e7ddc2fa171d60f4a7ec054d512543c342;hpb=684b9a1b1f5cb2d4de6659627dd65183d4acb881;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_glue.c b/drivers/net/mlx5/mlx5_glue.c index f5a6c2e7dd..58c9a82bdb 100644 --- a/drivers/net/mlx5/mlx5_glue.c +++ b/drivers/net/mlx5/mlx5_glue.c @@ -7,6 +7,7 @@ #include #include #include +#include /* * Not needed by this file; included to work around the lack of off_t @@ -86,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) @@ -179,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; @@ -295,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); @@ -373,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_tbl(void *ns, uint32_t level) +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_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 } @@ -396,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 } @@ -444,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); @@ -481,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 } @@ -493,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); @@ -504,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 } @@ -516,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]; @@ -543,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; @@ -558,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 } @@ -567,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; @@ -580,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 } @@ -588,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[]) { @@ -596,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) @@ -614,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 } @@ -626,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; @@ -653,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 } @@ -666,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)); @@ -678,6 +761,7 @@ mlx5_glue_dv_create_flow_action_tag(uint32_t tag) #endif #endif (void)tag; + errno = ENOTSUP; return NULL; } @@ -685,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 @@ -696,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 } @@ -716,6 +801,7 @@ mlx5_glue_dv_open_device(struct ibv_device *device) }); #else (void)device; + errno = ENOTSUP; return NULL; #endif } @@ -733,6 +819,7 @@ mlx5_glue_devx_obj_create(struct ibv_context *ctx, (void)inlen; (void)out; (void)outlen; + errno = ENOTSUP; return NULL; #endif } @@ -799,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_OBJ + 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, @@ -811,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, @@ -846,10 +1053,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, @@ -862,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 = @@ -875,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, };