Commit 897d55df authored by Hariprasad Shenai's avatar Hariprasad Shenai Committed by David S. Miller

cxgb4vf: Add 40G support for cxgb4vf driver

Add 40G support for cxgb4vf driver. ethtool speed values are just numbers of
megabits and there is no SPEED_40000 in ethtool speed values. To be consistent,
use integer constants directly for all speeds.

Use is_x_10g_port()("is 10Gb/s or higher") in cfg_queues() instead of
is_10g_port() ("is exactly 10Gb/s"). Else we will end up using a single
"Queue Set" on 40Gb/s adapters.
Signed-off-by: default avatarHariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7207c0d1
...@@ -163,15 +163,19 @@ void t4vf_os_link_changed(struct adapter *adapter, int pidx, int link_ok) ...@@ -163,15 +163,19 @@ void t4vf_os_link_changed(struct adapter *adapter, int pidx, int link_ok)
netif_carrier_on(dev); netif_carrier_on(dev);
switch (pi->link_cfg.speed) { switch (pi->link_cfg.speed) {
case SPEED_10000: case 40000:
s = "40Gbps";
break;
case 10000:
s = "10Gbps"; s = "10Gbps";
break; break;
case SPEED_1000: case 1000:
s = "1000Mbps"; s = "1000Mbps";
break; break;
case SPEED_100: case 100:
s = "100Mbps"; s = "100Mbps";
break; break;
...@@ -2351,7 +2355,7 @@ static void cfg_queues(struct adapter *adapter) ...@@ -2351,7 +2355,7 @@ static void cfg_queues(struct adapter *adapter)
struct port_info *pi = adap2pinfo(adapter, pidx); struct port_info *pi = adap2pinfo(adapter, pidx);
pi->first_qset = qidx; pi->first_qset = qidx;
pi->nqsets = is_10g_port(&pi->link_cfg) ? q10g : 1; pi->nqsets = is_x_10g_port(&pi->link_cfg) ? q10g : 1;
qidx += pi->nqsets; qidx += pi->nqsets;
} }
s->ethqsets = qidx; s->ethqsets = qidx;
......
...@@ -228,6 +228,12 @@ static inline bool is_10g_port(const struct link_config *lc) ...@@ -228,6 +228,12 @@ static inline bool is_10g_port(const struct link_config *lc)
return (lc->supported & SUPPORTED_10000baseT_Full) != 0; return (lc->supported & SUPPORTED_10000baseT_Full) != 0;
} }
static inline bool is_x_10g_port(const struct link_config *lc)
{
return (lc->supported & FW_PORT_CAP_SPEED_10G) != 0 ||
(lc->supported & FW_PORT_CAP_SPEED_40G) != 0;
}
static inline unsigned int core_ticks_per_usec(const struct adapter *adapter) static inline unsigned int core_ticks_per_usec(const struct adapter *adapter)
{ {
return adapter->params.vpd.cclk / 1000; return adapter->params.vpd.cclk / 1000;
......
...@@ -327,6 +327,8 @@ int t4vf_port_init(struct adapter *adapter, int pidx) ...@@ -327,6 +327,8 @@ int t4vf_port_init(struct adapter *adapter, int pidx)
v |= SUPPORTED_1000baseT_Full; v |= SUPPORTED_1000baseT_Full;
if (word & FW_PORT_CAP_SPEED_10G) if (word & FW_PORT_CAP_SPEED_10G)
v |= SUPPORTED_10000baseT_Full; v |= SUPPORTED_10000baseT_Full;
if (word & FW_PORT_CAP_SPEED_40G)
v |= SUPPORTED_40000baseSR4_Full;
if (word & FW_PORT_CAP_ANEG) if (word & FW_PORT_CAP_ANEG)
v |= SUPPORTED_Autoneg; v |= SUPPORTED_Autoneg;
init_link_config(&pi->link_cfg, v); init_link_config(&pi->link_cfg, v);
...@@ -1352,11 +1354,13 @@ int t4vf_handle_fw_rpl(struct adapter *adapter, const __be64 *rpl) ...@@ -1352,11 +1354,13 @@ int t4vf_handle_fw_rpl(struct adapter *adapter, const __be64 *rpl)
if (word & FW_PORT_CMD_TXPAUSE) if (word & FW_PORT_CMD_TXPAUSE)
fc |= PAUSE_TX; fc |= PAUSE_TX;
if (word & FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_100M)) if (word & FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_100M))
speed = SPEED_100; speed = 100;
else if (word & FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_1G)) else if (word & FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_1G))
speed = SPEED_1000; speed = 1000;
else if (word & FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_10G)) else if (word & FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_10G))
speed = SPEED_10000; speed = 10000;
else if (word & FW_PORT_CMD_LSPEED(FW_PORT_CAP_SPEED_40G))
speed = 40000;
/* /*
* Scan all of our "ports" (Virtual Interfaces) looking for * Scan all of our "ports" (Virtual Interfaces) looking for
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment