qeth: provide get ethtool settings
Load balancing bonding queries the speed of the slave interfaces. To support a bond consisting of different slave speeds we have to report the speed by ethtool settings. Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
213298f862
commit
3f9975aa4d
@ -880,6 +880,7 @@ void qeth_core_get_ethtool_stats(struct net_device *,
|
|||||||
void qeth_core_get_strings(struct net_device *, u32, u8 *);
|
void qeth_core_get_strings(struct net_device *, u32, u8 *);
|
||||||
void qeth_core_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
|
void qeth_core_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
|
||||||
void qeth_dbf_longtext(enum qeth_dbf_names dbf_nix, int level, char *text, ...);
|
void qeth_dbf_longtext(enum qeth_dbf_names dbf_nix, int level, char *text, ...);
|
||||||
|
int qeth_core_ethtool_get_settings(struct net_device *, struct ethtool_cmd *);
|
||||||
|
|
||||||
/* exports for OSN */
|
/* exports for OSN */
|
||||||
int qeth_osn_assist(struct net_device *, void *, int);
|
int qeth_osn_assist(struct net_device *, void *, int);
|
||||||
|
@ -4423,6 +4423,96 @@ void qeth_core_get_drvinfo(struct net_device *dev,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(qeth_core_get_drvinfo);
|
EXPORT_SYMBOL_GPL(qeth_core_get_drvinfo);
|
||||||
|
|
||||||
|
int qeth_core_ethtool_get_settings(struct net_device *netdev,
|
||||||
|
struct ethtool_cmd *ecmd)
|
||||||
|
{
|
||||||
|
struct qeth_card *card = netdev_priv(netdev);
|
||||||
|
enum qeth_link_types link_type;
|
||||||
|
|
||||||
|
if ((card->info.type == QETH_CARD_TYPE_IQD) || (card->info.guestlan))
|
||||||
|
link_type = QETH_LINK_TYPE_10GBIT_ETH;
|
||||||
|
else
|
||||||
|
link_type = card->info.link_type;
|
||||||
|
|
||||||
|
ecmd->transceiver = XCVR_INTERNAL;
|
||||||
|
ecmd->supported = SUPPORTED_Autoneg;
|
||||||
|
ecmd->advertising = ADVERTISED_Autoneg;
|
||||||
|
ecmd->duplex = DUPLEX_FULL;
|
||||||
|
ecmd->autoneg = AUTONEG_ENABLE;
|
||||||
|
|
||||||
|
switch (link_type) {
|
||||||
|
case QETH_LINK_TYPE_FAST_ETH:
|
||||||
|
case QETH_LINK_TYPE_LANE_ETH100:
|
||||||
|
ecmd->supported |= SUPPORTED_10baseT_Half |
|
||||||
|
SUPPORTED_10baseT_Full |
|
||||||
|
SUPPORTED_100baseT_Half |
|
||||||
|
SUPPORTED_100baseT_Full |
|
||||||
|
SUPPORTED_TP;
|
||||||
|
ecmd->advertising |= ADVERTISED_10baseT_Half |
|
||||||
|
ADVERTISED_10baseT_Full |
|
||||||
|
ADVERTISED_100baseT_Half |
|
||||||
|
ADVERTISED_100baseT_Full |
|
||||||
|
ADVERTISED_TP;
|
||||||
|
ecmd->speed = SPEED_100;
|
||||||
|
ecmd->port = PORT_TP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case QETH_LINK_TYPE_GBIT_ETH:
|
||||||
|
case QETH_LINK_TYPE_LANE_ETH1000:
|
||||||
|
ecmd->supported |= SUPPORTED_10baseT_Half |
|
||||||
|
SUPPORTED_10baseT_Full |
|
||||||
|
SUPPORTED_100baseT_Half |
|
||||||
|
SUPPORTED_100baseT_Full |
|
||||||
|
SUPPORTED_1000baseT_Half |
|
||||||
|
SUPPORTED_1000baseT_Full |
|
||||||
|
SUPPORTED_FIBRE;
|
||||||
|
ecmd->advertising |= ADVERTISED_10baseT_Half |
|
||||||
|
ADVERTISED_10baseT_Full |
|
||||||
|
ADVERTISED_100baseT_Half |
|
||||||
|
ADVERTISED_100baseT_Full |
|
||||||
|
ADVERTISED_1000baseT_Half |
|
||||||
|
ADVERTISED_1000baseT_Full |
|
||||||
|
ADVERTISED_FIBRE;
|
||||||
|
ecmd->speed = SPEED_1000;
|
||||||
|
ecmd->port = PORT_FIBRE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case QETH_LINK_TYPE_10GBIT_ETH:
|
||||||
|
ecmd->supported |= SUPPORTED_10baseT_Half |
|
||||||
|
SUPPORTED_10baseT_Full |
|
||||||
|
SUPPORTED_100baseT_Half |
|
||||||
|
SUPPORTED_100baseT_Full |
|
||||||
|
SUPPORTED_1000baseT_Half |
|
||||||
|
SUPPORTED_1000baseT_Full |
|
||||||
|
SUPPORTED_10000baseT_Full |
|
||||||
|
SUPPORTED_FIBRE;
|
||||||
|
ecmd->advertising |= ADVERTISED_10baseT_Half |
|
||||||
|
ADVERTISED_10baseT_Full |
|
||||||
|
ADVERTISED_100baseT_Half |
|
||||||
|
ADVERTISED_100baseT_Full |
|
||||||
|
ADVERTISED_1000baseT_Half |
|
||||||
|
ADVERTISED_1000baseT_Full |
|
||||||
|
ADVERTISED_10000baseT_Full |
|
||||||
|
ADVERTISED_FIBRE;
|
||||||
|
ecmd->speed = SPEED_10000;
|
||||||
|
ecmd->port = PORT_FIBRE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ecmd->supported |= SUPPORTED_10baseT_Half |
|
||||||
|
SUPPORTED_10baseT_Full |
|
||||||
|
SUPPORTED_TP;
|
||||||
|
ecmd->advertising |= ADVERTISED_10baseT_Half |
|
||||||
|
ADVERTISED_10baseT_Full |
|
||||||
|
ADVERTISED_TP;
|
||||||
|
ecmd->speed = SPEED_10;
|
||||||
|
ecmd->port = PORT_TP;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(qeth_core_ethtool_get_settings);
|
||||||
|
|
||||||
static int __init qeth_core_init(void)
|
static int __init qeth_core_init(void)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -861,6 +861,7 @@ static struct ethtool_ops qeth_l2_ethtool_ops = {
|
|||||||
.get_ethtool_stats = qeth_core_get_ethtool_stats,
|
.get_ethtool_stats = qeth_core_get_ethtool_stats,
|
||||||
.get_stats_count = qeth_core_get_stats_count,
|
.get_stats_count = qeth_core_get_stats_count,
|
||||||
.get_drvinfo = qeth_core_get_drvinfo,
|
.get_drvinfo = qeth_core_get_drvinfo,
|
||||||
|
.get_settings = qeth_core_ethtool_get_settings,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ethtool_ops qeth_l2_osn_ops = {
|
static struct ethtool_ops qeth_l2_osn_ops = {
|
||||||
|
@ -2889,6 +2889,7 @@ static struct ethtool_ops qeth_l3_ethtool_ops = {
|
|||||||
.get_ethtool_stats = qeth_core_get_ethtool_stats,
|
.get_ethtool_stats = qeth_core_get_ethtool_stats,
|
||||||
.get_stats_count = qeth_core_get_stats_count,
|
.get_stats_count = qeth_core_get_stats_count,
|
||||||
.get_drvinfo = qeth_core_get_drvinfo,
|
.get_drvinfo = qeth_core_get_drvinfo,
|
||||||
|
.get_settings = qeth_core_ethtool_get_settings,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user