mlxsw: spectrum: Add support for port identification
authorIdo Schimmel <idosch@mellanox.com>
Fri, 27 Nov 2015 12:45:55 +0000 (13:45 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 30 Nov 2015 20:05:40 +0000 (15:05 -0500)
Allow a user to flash the port's LED in order to identify it. This is
achieved by setting the Management LED Control Register (MLCR).

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum.c

index 3be4a23..14a9a9f 100644 (file)
@@ -859,6 +859,29 @@ static void mlxsw_sp_port_get_strings(struct net_device *dev,
        }
 }
 
+static int mlxsw_sp_port_set_phys_id(struct net_device *dev,
+                                    enum ethtool_phys_id_state state)
+{
+       struct mlxsw_sp_port *mlxsw_sp_port = netdev_priv(dev);
+       struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
+       char mlcr_pl[MLXSW_REG_MLCR_LEN];
+       bool active;
+
+       switch (state) {
+       case ETHTOOL_ID_ACTIVE:
+               active = true;
+               break;
+       case ETHTOOL_ID_INACTIVE:
+               active = false;
+               break;
+       default:
+               return -EOPNOTSUPP;
+       }
+
+       mlxsw_reg_mlcr_pack(mlcr_pl, mlxsw_sp_port->local_port, active);
+       return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(mlcr), mlcr_pl);
+}
+
 static void mlxsw_sp_port_get_stats(struct net_device *dev,
                                    struct ethtool_stats *stats, u64 *data)
 {
@@ -1205,6 +1228,7 @@ static const struct ethtool_ops mlxsw_sp_port_ethtool_ops = {
        .get_drvinfo            = mlxsw_sp_port_get_drvinfo,
        .get_link               = ethtool_op_get_link,
        .get_strings            = mlxsw_sp_port_get_strings,
+       .set_phys_id            = mlxsw_sp_port_set_phys_id,
        .get_ethtool_stats      = mlxsw_sp_port_get_stats,
        .get_sset_count         = mlxsw_sp_port_get_sset_count,
        .get_settings           = mlxsw_sp_port_get_settings,