aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Blaschka <frank.blaschka@de.ibm.com>2008-04-24 04:15:23 -0400
committerJeff Garzik <jgarzik@redhat.com>2008-04-29 01:56:31 -0400
commit3f9975aa4d5b3c614eef8785ec63da13fbd55b51 (patch)
treea9c7fa28d5dc83b5911b6d4b86285c3b7558dd4d
parent213298f862d10ade909bdb7d833493d4bdad683d (diff)
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>
-rw-r--r--drivers/s390/net/qeth_core.h1
-rw-r--r--drivers/s390/net/qeth_core_main.c90
-rw-r--r--drivers/s390/net/qeth_l2_main.c1
-rw-r--r--drivers/s390/net/qeth_l3_main.c1
4 files changed, 93 insertions, 0 deletions
diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
index b7bb0ff87c14..8dd83d920981 100644
--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@ -880,6 +880,7 @@ void qeth_core_get_ethtool_stats(struct net_device *,
880void qeth_core_get_strings(struct net_device *, u32, u8 *); 880void qeth_core_get_strings(struct net_device *, u32, u8 *);
881void qeth_core_get_drvinfo(struct net_device *, struct ethtool_drvinfo *); 881void qeth_core_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
882void qeth_dbf_longtext(enum qeth_dbf_names dbf_nix, int level, char *text, ...); 882void qeth_dbf_longtext(enum qeth_dbf_names dbf_nix, int level, char *text, ...);
883int qeth_core_ethtool_get_settings(struct net_device *, struct ethtool_cmd *);
883 884
884/* exports for OSN */ 885/* exports for OSN */
885int qeth_osn_assist(struct net_device *, void *, int); 886int qeth_osn_assist(struct net_device *, void *, int);
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index 18323250a339..23a46340ffaa 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -4423,6 +4423,96 @@ void qeth_core_get_drvinfo(struct net_device *dev,
4423} 4423}
4424EXPORT_SYMBOL_GPL(qeth_core_get_drvinfo); 4424EXPORT_SYMBOL_GPL(qeth_core_get_drvinfo);
4425 4425
4426int qeth_core_ethtool_get_settings(struct net_device *netdev,
4427 struct ethtool_cmd *ecmd)
4428{
4429 struct qeth_card *card = netdev_priv(netdev);
4430 enum qeth_link_types link_type;
4431
4432 if ((card->info.type == QETH_CARD_TYPE_IQD) || (card->info.guestlan))
4433 link_type = QETH_LINK_TYPE_10GBIT_ETH;
4434 else
4435 link_type = card->info.link_type;
4436
4437 ecmd->transceiver = XCVR_INTERNAL;
4438 ecmd->supported = SUPPORTED_Autoneg;
4439 ecmd->advertising = ADVERTISED_Autoneg;
4440 ecmd->duplex = DUPLEX_FULL;
4441 ecmd->autoneg = AUTONEG_ENABLE;
4442
4443 switch (link_type) {
4444 case QETH_LINK_TYPE_FAST_ETH:
4445 case QETH_LINK_TYPE_LANE_ETH100:
4446 ecmd->supported |= SUPPORTED_10baseT_Half |
4447 SUPPORTED_10baseT_Full |
4448 SUPPORTED_100baseT_Half |
4449 SUPPORTED_100baseT_Full |
4450 SUPPORTED_TP;
4451 ecmd->advertising |= ADVERTISED_10baseT_Half |
4452 ADVERTISED_10baseT_Full |
4453 ADVERTISED_100baseT_Half |
4454 ADVERTISED_100baseT_Full |
4455 ADVERTISED_TP;
4456 ecmd->speed = SPEED_100;
4457 ecmd->port = PORT_TP;
4458 break;
4459
4460 case QETH_LINK_TYPE_GBIT_ETH:
4461 case QETH_LINK_TYPE_LANE_ETH1000:
4462 ecmd->supported |= SUPPORTED_10baseT_Half |
4463 SUPPORTED_10baseT_Full |
4464 SUPPORTED_100baseT_Half |
4465 SUPPORTED_100baseT_Full |
4466 SUPPORTED_1000baseT_Half |
4467 SUPPORTED_1000baseT_Full |
4468 SUPPORTED_FIBRE;
4469 ecmd->advertising |= ADVERTISED_10baseT_Half |
4470 ADVERTISED_10baseT_Full |
4471 ADVERTISED_100baseT_Half |
4472 ADVERTISED_100baseT_Full |
4473 ADVERTISED_1000baseT_Half |
4474 ADVERTISED_1000baseT_Full |
4475 ADVERTISED_FIBRE;
4476 ecmd->speed = SPEED_1000;
4477 ecmd->port = PORT_FIBRE;
4478 break;
4479
4480 case QETH_LINK_TYPE_10GBIT_ETH:
4481 ecmd->supported |= SUPPORTED_10baseT_Half |
4482 SUPPORTED_10baseT_Full |
4483 SUPPORTED_100baseT_Half |
4484 SUPPORTED_100baseT_Full |
4485 SUPPORTED_1000baseT_Half |
4486 SUPPORTED_1000baseT_Full |
4487 SUPPORTED_10000baseT_Full |
4488 SUPPORTED_FIBRE;
4489 ecmd->advertising |= ADVERTISED_10baseT_Half |
4490 ADVERTISED_10baseT_Full |
4491 ADVERTISED_100baseT_Half |
4492 ADVERTISED_100baseT_Full |
4493 ADVERTISED_1000baseT_Half |
4494 ADVERTISED_1000baseT_Full |
4495 ADVERTISED_10000baseT_Full |
4496 ADVERTISED_FIBRE;
4497 ecmd->speed = SPEED_10000;
4498 ecmd->port = PORT_FIBRE;
4499 break;
4500
4501 default:
4502 ecmd->supported |= SUPPORTED_10baseT_Half |
4503 SUPPORTED_10baseT_Full |
4504 SUPPORTED_TP;
4505 ecmd->advertising |= ADVERTISED_10baseT_Half |
4506 ADVERTISED_10baseT_Full |
4507 ADVERTISED_TP;
4508 ecmd->speed = SPEED_10;
4509 ecmd->port = PORT_TP;
4510 }
4511
4512 return 0;
4513}
4514EXPORT_SYMBOL_GPL(qeth_core_ethtool_get_settings);
4515
4426static int __init qeth_core_init(void) 4516static int __init qeth_core_init(void)
4427{ 4517{
4428 int rc; 4518 int rc;
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index 7e8f63965098..e6092829a5a9 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -861,6 +861,7 @@ static struct ethtool_ops qeth_l2_ethtool_ops = {
861 .get_ethtool_stats = qeth_core_get_ethtool_stats, 861 .get_ethtool_stats = qeth_core_get_ethtool_stats,
862 .get_stats_count = qeth_core_get_stats_count, 862 .get_stats_count = qeth_core_get_stats_count,
863 .get_drvinfo = qeth_core_get_drvinfo, 863 .get_drvinfo = qeth_core_get_drvinfo,
864 .get_settings = qeth_core_ethtool_get_settings,
864}; 865};
865 866
866static struct ethtool_ops qeth_l2_osn_ops = { 867static struct ethtool_ops qeth_l2_osn_ops = {
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
index f385e93d757a..ce23169587e4 100644
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -2889,6 +2889,7 @@ static struct ethtool_ops qeth_l3_ethtool_ops = {
2889 .get_ethtool_stats = qeth_core_get_ethtool_stats, 2889 .get_ethtool_stats = qeth_core_get_ethtool_stats,
2890 .get_stats_count = qeth_core_get_stats_count, 2890 .get_stats_count = qeth_core_get_stats_count,
2891 .get_drvinfo = qeth_core_get_drvinfo, 2891 .get_drvinfo = qeth_core_get_drvinfo,
2892 .get_settings = qeth_core_ethtool_get_settings,
2892}; 2893};
2893 2894
2894/* 2895/*