net/mlx5: E-Switch, Reorganize and rename fdb flow tables
[sfrench/cifs-2.6.git] / drivers / net / ethernet / mellanox / mlx5 / core / eswitch.c
index 332bc56306bf5cb22b2a7283f80a3b2c1f4e9a10..6cab1dd66d1b7d2932f0d44c22120907fdbc0012 100644 (file)
@@ -192,7 +192,7 @@ __esw_fdb_set_vport_rule(struct mlx5_eswitch *esw, u32 vport, bool rx_rule,
        }
 
        dest.type = MLX5_FLOW_DESTINATION_TYPE_VPORT;
-       dest.vport_num = vport;
+       dest.vport.num = vport;
 
        esw_debug(esw->dev,
                  "\tFDB add rule dmac_v(%pM) dmac_c(%pM) -> vport(%d)\n",
@@ -200,7 +200,7 @@ __esw_fdb_set_vport_rule(struct mlx5_eswitch *esw, u32 vport, bool rx_rule,
        spec->match_criteria_enable = match_header;
        flow_act.action =  MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
        flow_rule =
-               mlx5_add_flow_rules(esw->fdb_table.fdb, spec,
+               mlx5_add_flow_rules(esw->fdb_table.legacy.fdb, spec,
                                    &flow_act, &dest, 1);
        if (IS_ERR(flow_rule)) {
                esw_warn(esw->dev,
@@ -282,7 +282,7 @@ static int esw_create_legacy_fdb_table(struct mlx5_eswitch *esw, int nvports)
                esw_warn(dev, "Failed to create FDB Table err %d\n", err);
                goto out;
        }
-       esw->fdb_table.fdb = fdb;
+       esw->fdb_table.legacy.fdb = fdb;
 
        /* Addresses group : Full match unicast/multicast addresses */
        MLX5_SET(create_flow_group_in, flow_group_in, match_criteria_enable,
@@ -343,9 +343,9 @@ out:
                        mlx5_destroy_flow_group(esw->fdb_table.legacy.addr_grp);
                        esw->fdb_table.legacy.addr_grp = NULL;
                }
-               if (!IS_ERR_OR_NULL(esw->fdb_table.fdb)) {
-                       mlx5_destroy_flow_table(esw->fdb_table.fdb);
-                       esw->fdb_table.fdb = NULL;
+               if (!IS_ERR_OR_NULL(esw->fdb_table.legacy.fdb)) {
+                       mlx5_destroy_flow_table(esw->fdb_table.legacy.fdb);
+                       esw->fdb_table.legacy.fdb = NULL;
                }
        }
 
@@ -355,15 +355,15 @@ out:
 
 static void esw_destroy_legacy_fdb_table(struct mlx5_eswitch *esw)
 {
-       if (!esw->fdb_table.fdb)
+       if (!esw->fdb_table.legacy.fdb)
                return;
 
        esw_debug(esw->dev, "Destroy FDB Table\n");
        mlx5_destroy_flow_group(esw->fdb_table.legacy.promisc_grp);
        mlx5_destroy_flow_group(esw->fdb_table.legacy.allmulti_grp);
        mlx5_destroy_flow_group(esw->fdb_table.legacy.addr_grp);
-       mlx5_destroy_flow_table(esw->fdb_table.fdb);
-       esw->fdb_table.fdb = NULL;
+       mlx5_destroy_flow_table(esw->fdb_table.legacy.fdb);
+       esw->fdb_table.legacy.fdb = NULL;
        esw->fdb_table.legacy.addr_grp = NULL;
        esw->fdb_table.legacy.allmulti_grp = NULL;
        esw->fdb_table.legacy.promisc_grp = NULL;
@@ -396,7 +396,7 @@ static int esw_add_uc_addr(struct mlx5_eswitch *esw, struct vport_addr *vaddr)
 
 fdb_add:
        /* SRIOV is enabled: Forward UC MAC to vport */
-       if (esw->fdb_table.fdb && esw->mode == SRIOV_LEGACY)
+       if (esw->fdb_table.legacy.fdb && esw->mode == SRIOV_LEGACY)
                vaddr->flow_rule = esw_fdb_set_vport_rule(esw, mac, vport);
 
        esw_debug(esw->dev, "\tADDED UC MAC: vport[%d] %pM fr(%p)\n",
@@ -486,7 +486,7 @@ static int esw_add_mc_addr(struct mlx5_eswitch *esw, struct vport_addr *vaddr)
        u8 *mac = vaddr->node.addr;
        u32 vport = vaddr->vport;
 
-       if (!esw->fdb_table.fdb)
+       if (!esw->fdb_table.legacy.fdb)
                return 0;
 
        esw_mc = l2addr_hash_find(hash, mac, struct esw_mc_addr);
@@ -526,7 +526,7 @@ static int esw_del_mc_addr(struct mlx5_eswitch *esw, struct vport_addr *vaddr)
        u8 *mac = vaddr->node.addr;
        u32 vport = vaddr->vport;
 
-       if (!esw->fdb_table.fdb)
+       if (!esw->fdb_table.legacy.fdb)
                return 0;
 
        esw_mc = l2addr_hash_find(hash, mac, struct esw_mc_addr);
@@ -2175,26 +2175,35 @@ int mlx5_eswitch_get_vport_stats(struct mlx5_eswitch *esw,
        memset(vf_stats, 0, sizeof(*vf_stats));
        vf_stats->rx_packets =
                MLX5_GET_CTR(out, received_eth_unicast.packets) +
+               MLX5_GET_CTR(out, received_ib_unicast.packets) +
                MLX5_GET_CTR(out, received_eth_multicast.packets) +
+               MLX5_GET_CTR(out, received_ib_multicast.packets) +
                MLX5_GET_CTR(out, received_eth_broadcast.packets);
 
        vf_stats->rx_bytes =
                MLX5_GET_CTR(out, received_eth_unicast.octets) +
+               MLX5_GET_CTR(out, received_ib_unicast.octets) +
                MLX5_GET_CTR(out, received_eth_multicast.octets) +
+               MLX5_GET_CTR(out, received_ib_multicast.octets) +
                MLX5_GET_CTR(out, received_eth_broadcast.octets);
 
        vf_stats->tx_packets =
                MLX5_GET_CTR(out, transmitted_eth_unicast.packets) +
+               MLX5_GET_CTR(out, transmitted_ib_unicast.packets) +
                MLX5_GET_CTR(out, transmitted_eth_multicast.packets) +
+               MLX5_GET_CTR(out, transmitted_ib_multicast.packets) +
                MLX5_GET_CTR(out, transmitted_eth_broadcast.packets);
 
        vf_stats->tx_bytes =
                MLX5_GET_CTR(out, transmitted_eth_unicast.octets) +
+               MLX5_GET_CTR(out, transmitted_ib_unicast.octets) +
                MLX5_GET_CTR(out, transmitted_eth_multicast.octets) +
+               MLX5_GET_CTR(out, transmitted_ib_multicast.octets) +
                MLX5_GET_CTR(out, transmitted_eth_broadcast.octets);
 
        vf_stats->multicast =
-               MLX5_GET_CTR(out, received_eth_multicast.packets);
+               MLX5_GET_CTR(out, received_eth_multicast.packets) +
+               MLX5_GET_CTR(out, received_ib_multicast.packets);
 
        vf_stats->broadcast =
                MLX5_GET_CTR(out, received_eth_broadcast.packets);