From patchwork Fri Aug 5 20:01:07 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 108728 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 612B6B6F77 for ; Sat, 6 Aug 2011 06:01:51 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756295Ab1HEUBl (ORCPT ); Fri, 5 Aug 2011 16:01:41 -0400 Received: from exht1.emulex.com ([138.239.113.183]:2949 "EHLO exht1.ad.emulex.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756287Ab1HEUBj (ORCPT ); Fri, 5 Aug 2011 16:01:39 -0400 Received: from akhaparde-VBox (138.239.155.102) by exht1.ad.emulex.com (138.239.113.183) with Microsoft SMTP Server (TLS) id 8.3.159.2; Fri, 5 Aug 2011 12:59:34 -0700 Date: Fri, 5 Aug 2011 15:01:07 -0500 From: Ajit Khaparde To: CC: Subject: [PATCH net-next 6/6] be2net: fix to set ecmd->autoneg correctly Message-ID: <20110805200107.GA13631@akhaparde-VBox> Reply-To: Ajit Khaparde MIME-Version: 1.0 Content-Disposition: inline X-URL: http://www.emulex.com Organization: Emulex Corp User-Agent: "Ajit's Mutt" X-OS: Linux i686 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Set the autonegotation settings correctly based on the port speed. Signed-off-by: Suresh Reddy Signed-off-by: Ajit Khaparde --- drivers/net/benet/be_ethtool.c | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-) diff --git a/drivers/net/benet/be_ethtool.c b/drivers/net/benet/be_ethtool.c index 5dd3ed6..2177c8c 100644 --- a/drivers/net/benet/be_ethtool.c +++ b/drivers/net/benet/be_ethtool.c @@ -353,6 +353,8 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) u8 mac_speed = 0; u16 link_speed = 0; int status; + u16 port_speed = 0; + u16 dac_cable_len = 0; if ((adapter->link_speed < 0) || (!(netdev->flags & IFF_UP))) { status = be_cmd_link_status_query(adapter, &mac_speed, @@ -397,11 +399,9 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) switch (phy_info.interface_type) { case PHY_TYPE_KR_10GB: case PHY_TYPE_KX4_10GB: - ecmd->autoneg = AUTONEG_ENABLE; ecmd->transceiver = XCVR_INTERNAL; break; default: - ecmd->autoneg = AUTONEG_DISABLE; ecmd->transceiver = XCVR_EXTERNAL; break; } @@ -411,12 +411,25 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) adapter->link_speed = ethtool_cmd_speed(ecmd); adapter->port_type = ecmd->port; adapter->transceiver = ecmd->transceiver; - adapter->autoneg = ecmd->autoneg; } else { ethtool_cmd_speed_set(ecmd, adapter->link_speed); ecmd->port = adapter->port_type; ecmd->transceiver = adapter->transceiver; - ecmd->autoneg = adapter->autoneg; + } + + be_cmd_get_port_speed(adapter, adapter->port_num, + &dac_cable_len, &port_speed); + switch (port_speed) { + case SPEED_FORCED_10GB: + case SPEED_FORCED_1GB: + case SPEED_FORCED_100MB: + case SPEED_FORCED_10MB: + case SPEED_DEFAULT: + ecmd->autoneg = AUTONEG_DISABLE; + break; + default: + ecmd->autoneg = AUTONEG_ENABLE; + break; } ecmd->duplex = DUPLEX_FULL;