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: Hariprasad Shenai <hariprasad@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
7207c0d154
Коммит
897d55df3c
|
@ -163,15 +163,19 @@ void t4vf_os_link_changed(struct adapter *adapter, int pidx, int link_ok)
|
|||
netif_carrier_on(dev);
|
||||
|
||||
switch (pi->link_cfg.speed) {
|
||||
case SPEED_10000:
|
||||
case 40000:
|
||||
s = "40Gbps";
|
||||
break;
|
||||
|
||||
case 10000:
|
||||
s = "10Gbps";
|
||||
break;
|
||||
|
||||
case SPEED_1000:
|
||||
case 1000:
|
||||
s = "1000Mbps";
|
||||
break;
|
||||
|
||||
case SPEED_100:
|
||||
case 100:
|
||||
s = "100Mbps";
|
||||
break;
|
||||
|
||||
|
@ -2351,7 +2355,7 @@ static void cfg_queues(struct adapter *adapter)
|
|||
struct port_info *pi = adap2pinfo(adapter, pidx);
|
||||
|
||||
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;
|
||||
}
|
||||
s->ethqsets = qidx;
|
||||
|
|
|
@ -228,6 +228,12 @@ static inline bool is_10g_port(const struct link_config *lc)
|
|||
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)
|
||||
{
|
||||
return adapter->params.vpd.cclk / 1000;
|
||||
|
|
|
@ -327,6 +327,8 @@ int t4vf_port_init(struct adapter *adapter, int pidx)
|
|||
v |= SUPPORTED_1000baseT_Full;
|
||||
if (word & FW_PORT_CAP_SPEED_10G)
|
||||
v |= SUPPORTED_10000baseT_Full;
|
||||
if (word & FW_PORT_CAP_SPEED_40G)
|
||||
v |= SUPPORTED_40000baseSR4_Full;
|
||||
if (word & FW_PORT_CAP_ANEG)
|
||||
v |= SUPPORTED_Autoneg;
|
||||
init_link_config(&pi->link_cfg, v);
|
||||
|
@ -1352,11 +1354,13 @@ int t4vf_handle_fw_rpl(struct adapter *adapter, const __be64 *rpl)
|
|||
if (word & FW_PORT_CMD_TXPAUSE)
|
||||
fc |= PAUSE_TX;
|
||||
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))
|
||||
speed = SPEED_1000;
|
||||
speed = 1000;
|
||||
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
|
||||
|
|
Загрузка…
Ссылка в новой задаче