aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRony Efraim <ronye@mellanox.com>2013-04-25 01:22:30 -0400
committerDavid S. Miller <davem@davemloft.net>2013-04-26 23:29:14 -0400
commit2cccb9e4f3476da916146c2ec571c4f3eff738b1 (patch)
tree79524a1d906c0ab14331dea45e364f600c42b355
parente6b6a2316379feebebacec0979b3ebc5743e7502 (diff)
net/mlx4: Add support to get VF config
Support getting VF config. Signed-off-by: Rony Efraim <ronye@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/cmd.c33
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_netdev.c8
-rw-r--r--include/linux/mlx4/cmd.h2
3 files changed, 43 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c
index eda347eeb5dc..1df56cc50ee9 100644
--- a/drivers/net/ethernet/mellanox/mlx4/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c
@@ -2151,3 +2151,36 @@ int mlx4_set_vf_spoofchk(struct mlx4_dev *dev, int port, int vf, bool setting)
2151 return 0; 2151 return 0;
2152} 2152}
2153EXPORT_SYMBOL_GPL(mlx4_set_vf_spoofchk); 2153EXPORT_SYMBOL_GPL(mlx4_set_vf_spoofchk);
2154
2155int mlx4_get_vf_config(struct mlx4_dev *dev, int port, int vf, struct ifla_vf_info *ivf)
2156{
2157 struct mlx4_priv *priv = mlx4_priv(dev);
2158 struct mlx4_vport_state *s_info;
2159 int slave;
2160
2161 if (!mlx4_is_master(dev))
2162 return -EPROTONOSUPPORT;
2163
2164 slave = mlx4_get_slave_indx(dev, vf);
2165 if (slave < 0)
2166 return -EINVAL;
2167
2168 s_info = &priv->mfunc.master.vf_admin[slave].vport[port];
2169 ivf->vf = vf;
2170
2171 /* need to convert it to a func */
2172 ivf->mac[0] = ((s_info->mac >> (5*8)) & 0xff);
2173 ivf->mac[1] = ((s_info->mac >> (4*8)) & 0xff);
2174 ivf->mac[2] = ((s_info->mac >> (3*8)) & 0xff);
2175 ivf->mac[3] = ((s_info->mac >> (2*8)) & 0xff);
2176 ivf->mac[4] = ((s_info->mac >> (1*8)) & 0xff);
2177 ivf->mac[5] = ((s_info->mac) & 0xff);
2178
2179 ivf->vlan = s_info->default_vlan;
2180 ivf->qos = s_info->default_qos;
2181 ivf->tx_rate = s_info->tx_rate;
2182 ivf->spoofchk = s_info->spoofchk;
2183
2184 return 0;
2185}
2186EXPORT_SYMBOL_GPL(mlx4_get_vf_config);
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index 8d197b41242e..a69a908614e6 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -2052,6 +2052,13 @@ static int mlx4_en_set_vf_spoofchk(struct net_device *dev, int vf, bool setting)
2052 return mlx4_set_vf_spoofchk(mdev->dev, en_priv->port, vf, setting); 2052 return mlx4_set_vf_spoofchk(mdev->dev, en_priv->port, vf, setting);
2053} 2053}
2054 2054
2055static int mlx4_en_get_vf_config(struct net_device *dev, int vf, struct ifla_vf_info *ivf)
2056{
2057 struct mlx4_en_priv *en_priv = netdev_priv(dev);
2058 struct mlx4_en_dev *mdev = en_priv->mdev;
2059
2060 return mlx4_get_vf_config(mdev->dev, en_priv->port, vf, ivf);
2061}
2055 2062
2056static const struct net_device_ops mlx4_netdev_ops = { 2063static const struct net_device_ops mlx4_netdev_ops = {
2057 .ndo_open = mlx4_en_open, 2064 .ndo_open = mlx4_en_open,
@@ -2093,6 +2100,7 @@ static const struct net_device_ops mlx4_netdev_ops_master = {
2093 .ndo_set_vf_mac = mlx4_en_set_vf_mac, 2100 .ndo_set_vf_mac = mlx4_en_set_vf_mac,
2094 .ndo_set_vf_vlan = mlx4_en_set_vf_vlan, 2101 .ndo_set_vf_vlan = mlx4_en_set_vf_vlan,
2095 .ndo_set_vf_spoofchk = mlx4_en_set_vf_spoofchk, 2102 .ndo_set_vf_spoofchk = mlx4_en_set_vf_spoofchk,
2103 .ndo_get_vf_config = mlx4_en_get_vf_config,
2096#ifdef CONFIG_NET_POLL_CONTROLLER 2104#ifdef CONFIG_NET_POLL_CONTROLLER
2097 .ndo_poll_controller = mlx4_en_netpoll, 2105 .ndo_poll_controller = mlx4_en_netpoll,
2098#endif 2106#endif
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h
index 95c3223719fa..adf6e0648f20 100644
--- a/include/linux/mlx4/cmd.h
+++ b/include/linux/mlx4/cmd.h
@@ -34,6 +34,7 @@
34#define MLX4_CMD_H 34#define MLX4_CMD_H
35 35
36#include <linux/dma-mapping.h> 36#include <linux/dma-mapping.h>
37#include <linux/if_link.h>
37 38
38enum { 39enum {
39 /* initialization and general commands */ 40 /* initialization and general commands */
@@ -235,6 +236,7 @@ u32 mlx4_comm_get_version(void);
235int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac); 236int mlx4_set_vf_mac(struct mlx4_dev *dev, int port, int vf, u64 mac);
236int mlx4_set_vf_vlan(struct mlx4_dev *dev, int port, int vf, u16 vlan, u8 qos); 237int mlx4_set_vf_vlan(struct mlx4_dev *dev, int port, int vf, u16 vlan, u8 qos);
237int mlx4_set_vf_spoofchk(struct mlx4_dev *dev, int port, int vf, bool setting); 238int mlx4_set_vf_spoofchk(struct mlx4_dev *dev, int port, int vf, bool setting);
239int mlx4_get_vf_config(struct mlx4_dev *dev, int port, int vf, struct ifla_vf_info *ivf);
238 240
239 241
240#define MLX4_COMM_GET_IF_REV(cmd_chan_ver) (u8)((cmd_chan_ver) >> 8) 242#define MLX4_COMM_GET_IF_REV(cmd_chan_ver) (u8)((cmd_chan_ver) >> 8)