Skip to content

Commit

Permalink
net: wangxun: Add the basic ethtool interfaces
Browse files Browse the repository at this point in the history
Add the basic ethtool ops get_drvinfo and get_link for ngbe and txgbe.
Ngbe implements get_link_ksettings, nway_reset and set_link_ksettings
for free using phylib code.
The code related to the physical interface is not yet fully implemented
in txgbe using phylink code. So do not implement get_link_ksettings,
nway_reset and set_link_ksettings in txgbe.

Signed-off-by: Mengyuan Lou <mengyuanlou@net-swift.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20230214091527.69943-1-mengyuanlou@net-swift.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Mengyuan Lou authored and Jakub Kicinski committed Feb 16, 2023
1 parent 14ade6b commit 1b8d1c5
Show file tree
Hide file tree
Showing 12 changed files with 98 additions and 3 deletions.
2 changes: 1 addition & 1 deletion drivers/net/ethernet/wangxun/libwx/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@

obj-$(CONFIG_LIBWX) += libwx.o

libwx-objs := wx_hw.o wx_lib.o
libwx-objs := wx_hw.o wx_lib.o wx_ethtool.o
18 changes: 18 additions & 0 deletions drivers/net/ethernet/wangxun/libwx/wx_ethtool.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// SPDX-License-Identifier: GPL-2.0
/* Copyright (c) 2015 - 2023 Beijing WangXun Technology Co., Ltd. */

#include <linux/pci.h>
#include <linux/phy.h>

#include "wx_type.h"
#include "wx_ethtool.h"

void wx_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *info)
{
struct wx *wx = netdev_priv(netdev);

strscpy(info->driver, wx->driver_name, sizeof(info->driver));
strscpy(info->fw_version, wx->eeprom_id, sizeof(info->fw_version));
strscpy(info->bus_info, pci_name(wx->pdev), sizeof(info->bus_info));
}
EXPORT_SYMBOL(wx_get_drvinfo);
8 changes: 8 additions & 0 deletions drivers/net/ethernet/wangxun/libwx/wx_ethtool.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2015 - 2023 Beijing WangXun Technology Co., Ltd. */

#ifndef _WX_ETHTOOL_H_
#define _WX_ETHTOOL_H_

void wx_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *info);
#endif /* _WX_ETHTOOL_H_ */
1 change: 1 addition & 0 deletions drivers/net/ethernet/wangxun/libwx/wx_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,7 @@ struct wx {
bool adapter_stopped;
u16 tpid[8];
char eeprom_id[32];
char *driver_name;
enum wx_reset_type reset_type;

/* PHY stuff */
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/ethernet/wangxun/ngbe/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@

obj-$(CONFIG_NGBE) += ngbe.o

ngbe-objs := ngbe_main.o ngbe_hw.o ngbe_mdio.o
ngbe-objs := ngbe_main.o ngbe_hw.o ngbe_mdio.o ngbe_ethtool.o
22 changes: 22 additions & 0 deletions drivers/net/ethernet/wangxun/ngbe/ngbe_ethtool.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// SPDX-License-Identifier: GPL-2.0
/* Copyright (c) 2015 - 2023 Beijing WangXun Technology Co., Ltd. */

#include <linux/pci.h>
#include <linux/phy.h>
#include <linux/netdevice.h>

#include "../libwx/wx_ethtool.h"
#include "ngbe_ethtool.h"

static const struct ethtool_ops ngbe_ethtool_ops = {
.get_drvinfo = wx_get_drvinfo,
.get_link = ethtool_op_get_link,
.get_link_ksettings = phy_ethtool_get_link_ksettings,
.set_link_ksettings = phy_ethtool_set_link_ksettings,
.nway_reset = phy_ethtool_nway_reset,
};

void ngbe_set_ethtool_ops(struct net_device *netdev)
{
netdev->ethtool_ops = &ngbe_ethtool_ops;
}
9 changes: 9 additions & 0 deletions drivers/net/ethernet/wangxun/ngbe/ngbe_ethtool.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2015 - 2023 Beijing WangXun Technology Co., Ltd. */

#ifndef _NGBE_ETHTOOL_H_
#define _NGBE_ETHTOOL_H_

void ngbe_set_ethtool_ops(struct net_device *netdev);

#endif /* _NGBE_ETHTOOL_H_ */
5 changes: 5 additions & 0 deletions drivers/net/ethernet/wangxun/ngbe/ngbe_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "ngbe_type.h"
#include "ngbe_mdio.h"
#include "ngbe_hw.h"
#include "ngbe_ethtool.h"

char ngbe_driver_name[] = "ngbe";

Expand Down Expand Up @@ -546,6 +547,8 @@ static int ngbe_probe(struct pci_dev *pdev,
goto err_pci_release_regions;
}

wx->driver_name = ngbe_driver_name;
ngbe_set_ethtool_ops(netdev);
netdev->netdev_ops = &ngbe_netdev_ops;

netdev->features |= NETIF_F_HIGHDMA;
Expand Down Expand Up @@ -631,6 +634,8 @@ static int ngbe_probe(struct pci_dev *pdev,
etrack_id |= e2rom_ver;
wr32(wx, NGBE_EEPROM_VERSION_STORE_REG, etrack_id);
}
snprintf(wx->eeprom_id, sizeof(wx->eeprom_id),
"0x%08x", etrack_id);

eth_hw_addr_set(netdev, wx->mac.perm_addr);
wx_mac_set_default_filter(wx, wx->mac.perm_addr);
Expand Down
3 changes: 2 additions & 1 deletion drivers/net/ethernet/wangxun/txgbe/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@
obj-$(CONFIG_TXGBE) += txgbe.o

txgbe-objs := txgbe_main.o \
txgbe_hw.o
txgbe_hw.o \
txgbe_ethtool.o
19 changes: 19 additions & 0 deletions drivers/net/ethernet/wangxun/txgbe/txgbe_ethtool.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-2.0
/* Copyright (c) 2015 - 2023 Beijing WangXun Technology Co., Ltd. */

#include <linux/pci.h>
#include <linux/phylink.h>
#include <linux/netdevice.h>

#include "../libwx/wx_ethtool.h"
#include "txgbe_ethtool.h"

static const struct ethtool_ops txgbe_ethtool_ops = {
.get_drvinfo = wx_get_drvinfo,
.get_link = ethtool_op_get_link,
};

void txgbe_set_ethtool_ops(struct net_device *netdev)
{
netdev->ethtool_ops = &txgbe_ethtool_ops;
}
9 changes: 9 additions & 0 deletions drivers/net/ethernet/wangxun/txgbe/txgbe_ethtool.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2015 - 2023 Beijing WangXun Technology Co., Ltd. */

#ifndef _TXGBE_ETHTOOL_H_
#define _TXGBE_ETHTOOL_H_

void txgbe_set_ethtool_ops(struct net_device *netdev);

#endif /* _TXGBE_ETHTOOL_H_ */
3 changes: 3 additions & 0 deletions drivers/net/ethernet/wangxun/txgbe/txgbe_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include "../libwx/wx_hw.h"
#include "txgbe_type.h"
#include "txgbe_hw.h"
#include "txgbe_ethtool.h"

char txgbe_driver_name[] = "txgbe";

Expand Down Expand Up @@ -565,6 +566,8 @@ static int txgbe_probe(struct pci_dev *pdev,
goto err_pci_release_regions;
}

wx->driver_name = txgbe_driver_name;
txgbe_set_ethtool_ops(netdev);
netdev->netdev_ops = &txgbe_netdev_ops;

/* setup the private structure */
Expand Down

0 comments on commit 1b8d1c5

Please sign in to comment.