diff options
author | Arkadi Sharshevsky <arkadis@mellanox.com> | 2018-01-15 02:59:08 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-01-16 14:15:35 -0500 |
commit | c0253a45fde85fa4457867c9021f0750b20117bf (patch) | |
tree | 02d003255a12f49fad1644ecbb0488ac49ada3dc | |
parent | ef3116e5403ecca1653eb5cb8fbd09e239855055 (diff) |
mlxsw: spectrum_dpipe: Connect dpipe tables to resources
Connect current dpipe tables to resources. The tables are connected
in the following fashion:
1. IPv4 host -> KVD hash single
2. IPv6 host -> KVD hash double
3. Adjacency -> KVD linear
Signed-off-by: Arkadi Sharshevsky <arkadis@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c | 81 |
1 files changed, 69 insertions, 12 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c index 96fdba78acab..f56fa18d6b26 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c | |||
@@ -771,14 +771,33 @@ static struct devlink_dpipe_table_ops mlxsw_sp_host4_ops = { | |||
771 | .size_get = mlxsw_sp_dpipe_table_host4_size_get, | 771 | .size_get = mlxsw_sp_dpipe_table_host4_size_get, |
772 | }; | 772 | }; |
773 | 773 | ||
774 | #define MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_HOST4 1 | ||
775 | |||
774 | static int mlxsw_sp_dpipe_host4_table_init(struct mlxsw_sp *mlxsw_sp) | 776 | static int mlxsw_sp_dpipe_host4_table_init(struct mlxsw_sp *mlxsw_sp) |
775 | { | 777 | { |
776 | struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); | 778 | struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); |
779 | int err; | ||
777 | 780 | ||
778 | return devlink_dpipe_table_register(devlink, | 781 | err = devlink_dpipe_table_register(devlink, |
779 | MLXSW_SP_DPIPE_TABLE_NAME_HOST4, | 782 | MLXSW_SP_DPIPE_TABLE_NAME_HOST4, |
780 | &mlxsw_sp_host4_ops, | 783 | &mlxsw_sp_host4_ops, |
781 | mlxsw_sp, false); | 784 | mlxsw_sp, false); |
785 | if (err) | ||
786 | return err; | ||
787 | |||
788 | err = devlink_dpipe_table_resource_set(devlink, | ||
789 | MLXSW_SP_DPIPE_TABLE_NAME_HOST4, | ||
790 | MLXSW_SP_RESOURCE_KVD_HASH_SINGLE, | ||
791 | MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_HOST4); | ||
792 | if (err) | ||
793 | goto err_resource_set; | ||
794 | |||
795 | return 0; | ||
796 | |||
797 | err_resource_set: | ||
798 | devlink_dpipe_table_unregister(devlink, | ||
799 | MLXSW_SP_DPIPE_TABLE_NAME_HOST4); | ||
800 | return err; | ||
782 | } | 801 | } |
783 | 802 | ||
784 | static void mlxsw_sp_dpipe_host4_table_fini(struct mlxsw_sp *mlxsw_sp) | 803 | static void mlxsw_sp_dpipe_host4_table_fini(struct mlxsw_sp *mlxsw_sp) |
@@ -829,14 +848,33 @@ static struct devlink_dpipe_table_ops mlxsw_sp_host6_ops = { | |||
829 | .size_get = mlxsw_sp_dpipe_table_host6_size_get, | 848 | .size_get = mlxsw_sp_dpipe_table_host6_size_get, |
830 | }; | 849 | }; |
831 | 850 | ||
851 | #define MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_HOST6 2 | ||
852 | |||
832 | static int mlxsw_sp_dpipe_host6_table_init(struct mlxsw_sp *mlxsw_sp) | 853 | static int mlxsw_sp_dpipe_host6_table_init(struct mlxsw_sp *mlxsw_sp) |
833 | { | 854 | { |
834 | struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); | 855 | struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); |
856 | int err; | ||
835 | 857 | ||
836 | return devlink_dpipe_table_register(devlink, | 858 | err = devlink_dpipe_table_register(devlink, |
837 | MLXSW_SP_DPIPE_TABLE_NAME_HOST6, | 859 | MLXSW_SP_DPIPE_TABLE_NAME_HOST6, |
838 | &mlxsw_sp_host6_ops, | 860 | &mlxsw_sp_host6_ops, |
839 | mlxsw_sp, false); | 861 | mlxsw_sp, false); |
862 | if (err) | ||
863 | return err; | ||
864 | |||
865 | err = devlink_dpipe_table_resource_set(devlink, | ||
866 | MLXSW_SP_DPIPE_TABLE_NAME_HOST6, | ||
867 | MLXSW_SP_RESOURCE_KVD_HASH_DOUBLE, | ||
868 | MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_HOST6); | ||
869 | if (err) | ||
870 | goto err_resource_set; | ||
871 | |||
872 | return 0; | ||
873 | |||
874 | err_resource_set: | ||
875 | devlink_dpipe_table_unregister(devlink, | ||
876 | MLXSW_SP_DPIPE_TABLE_NAME_HOST6); | ||
877 | return err; | ||
840 | } | 878 | } |
841 | 879 | ||
842 | static void mlxsw_sp_dpipe_host6_table_fini(struct mlxsw_sp *mlxsw_sp) | 880 | static void mlxsw_sp_dpipe_host6_table_fini(struct mlxsw_sp *mlxsw_sp) |
@@ -1213,14 +1251,33 @@ static struct devlink_dpipe_table_ops mlxsw_sp_dpipe_table_adj_ops = { | |||
1213 | .size_get = mlxsw_sp_dpipe_table_adj_size_get, | 1251 | .size_get = mlxsw_sp_dpipe_table_adj_size_get, |
1214 | }; | 1252 | }; |
1215 | 1253 | ||
1254 | #define MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_ADJ 1 | ||
1255 | |||
1216 | static int mlxsw_sp_dpipe_adj_table_init(struct mlxsw_sp *mlxsw_sp) | 1256 | static int mlxsw_sp_dpipe_adj_table_init(struct mlxsw_sp *mlxsw_sp) |
1217 | { | 1257 | { |
1218 | struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); | 1258 | struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); |
1259 | int err; | ||
1219 | 1260 | ||
1220 | return devlink_dpipe_table_register(devlink, | 1261 | err = devlink_dpipe_table_register(devlink, |
1221 | MLXSW_SP_DPIPE_TABLE_NAME_ADJ, | 1262 | MLXSW_SP_DPIPE_TABLE_NAME_ADJ, |
1222 | &mlxsw_sp_dpipe_table_adj_ops, | 1263 | &mlxsw_sp_dpipe_table_adj_ops, |
1223 | mlxsw_sp, false); | 1264 | mlxsw_sp, false); |
1265 | if (err) | ||
1266 | return err; | ||
1267 | |||
1268 | err = devlink_dpipe_table_resource_set(devlink, | ||
1269 | MLXSW_SP_DPIPE_TABLE_NAME_ADJ, | ||
1270 | MLXSW_SP_RESOURCE_KVD_LINEAR, | ||
1271 | MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_ADJ); | ||
1272 | if (err) | ||
1273 | goto err_resource_set; | ||
1274 | |||
1275 | return 0; | ||
1276 | |||
1277 | err_resource_set: | ||
1278 | devlink_dpipe_table_unregister(devlink, | ||
1279 | MLXSW_SP_DPIPE_TABLE_NAME_ADJ); | ||
1280 | return err; | ||
1224 | } | 1281 | } |
1225 | 1282 | ||
1226 | static void mlxsw_sp_dpipe_adj_table_fini(struct mlxsw_sp *mlxsw_sp) | 1283 | static void mlxsw_sp_dpipe_adj_table_fini(struct mlxsw_sp *mlxsw_sp) |