mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 15:02:40 -04:00
Merge tag 'net-next-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next
Pull networking updates from Jakub Kicinski:
"Core:
- Introduce and use a single page frag cache for allocating small skb
heads, clawing back the 10-20% performance regression in UDP flood
test from previous fixes.
- Run packets which already went thru HW coalescing thru SW GRO. This
significantly improves TCP segment coalescing and simplifies
deployments as different workloads benefit from HW or SW GRO.
- Shrink the size of the base zero-copy send structure.
- Move TCP init under a new slow / sleepable version of DO_ONCE().
BPF:
- Add BPF-specific, any-context-safe memory allocator.
- Add helpers/kfuncs for PKCS#7 signature verification from BPF
programs.
- Define a new map type and related helpers for user space -> kernel
communication over a ring buffer (BPF_MAP_TYPE_USER_RINGBUF).
- Allow targeting BPF iterators to loop through resources of one
task/thread.
- Add ability to call selected destructive functions. Expose
crash_kexec() to allow BPF to trigger a kernel dump. Use
CAP_SYS_BOOT check on the loading process to judge permissions.
- Enable BPF to collect custom hierarchical cgroup stats efficiently
by integrating with the rstat framework.
- Support struct arguments for trampoline based programs. Only
structs with size <= 16B and x86 are supported.
- Invoke cgroup/connect{4,6} programs for unprivileged ICMP ping
sockets (instead of just TCP and UDP sockets).
- Add a helper for accessing CLOCK_TAI for time sensitive network
related programs.
- Support accessing network tunnel metadata's flags.
- Make TCP SYN ACK RTO tunable by BPF programs with TCP Fast Open.
- Add support for writing to Netfilter's nf_conn:mark.
Protocols:
- WiFi: more Extremely High Throughput (EHT) and Multi-Link Operation
(MLO) work (802.11be, WiFi 7).
- vsock: improve support for SO_RCVLOWAT.
- SMC: support SO_REUSEPORT.
- Netlink: define and document how to use netlink in a "modern" way.
Support reporting missing attributes via extended ACK.
- IPSec: support collect metadata mode for xfrm interfaces.
- TCPv6: send consistent autoflowlabel in SYN_RECV state and RST
packets.
- TCP: introduce optional per-netns connection hash table to allow
better isolation between namespaces (opt-in, at the cost of memory
and cache pressure).
- MPTCP: support TCP_FASTOPEN_CONNECT.
- Add NEXT-C-SID support in Segment Routing (SRv6) End behavior.
- Adjust IP_UNICAST_IF sockopt behavior for connected UDP sockets.
- Open vSwitch:
- Allow specifying ifindex of new interfaces.
- Allow conntrack and metering in non-initial user namespace.
- TLS: support the Korean ARIA-GCM crypto algorithm.
- Remove DECnet support.
Driver API:
- Allow selecting the conduit interface used by each port in DSA
switches, at runtime.
- Ethernet Power Sourcing Equipment and Power Device support.
- Add tc-taprio support for queueMaxSDU parameter, i.e. setting per
traffic class max frame size for time-based packet schedules.
- Support PHY rate matching - adapting between differing host-side
and link-side speeds.
- Introduce QUSGMII PHY mode and 1000BASE-KX interface mode.
- Validate OF (device tree) nodes for DSA shared ports; make
phylink-related properties mandatory on DSA and CPU ports.
Enforcing more uniformity should allow transitioning to phylink.
- Require that flash component name used during update matches one of
the components for which version is reported by info_get().
- Remove "weight" argument from driver-facing NAPI API as much as
possible. It's one of those magic knobs which seemed like a good
idea at the time but is too indirect to use in practice.
- Support offload of TLS connections with 256 bit keys.
New hardware / drivers:
- Ethernet:
- Microchip KSZ9896 6-port Gigabit Ethernet Switch
- Renesas Ethernet AVB (EtherAVB-IF) Gen4 SoCs
- Analog Devices ADIN1110 and ADIN2111 industrial single pair
Ethernet (10BASE-T1L) MAC+PHY.
- Rockchip RV1126 Gigabit Ethernet (a version of stmmac IP).
- Ethernet SFPs / modules:
- RollBall / Hilink / Turris 10G copper SFPs
- HALNy GPON module
- WiFi:
- CYW43439 SDIO chipset (brcmfmac)
- CYW89459 PCIe chipset (brcmfmac)
- BCM4378 on Apple platforms (brcmfmac)
Drivers:
- CAN:
- gs_usb: HW timestamp support
- Ethernet PHYs:
- lan8814: cable diagnostics
- Ethernet NICs:
- Intel (100G):
- implement control of FCS/CRC stripping
- port splitting via devlink
- L2TPv3 filtering offload
- nVidia/Mellanox:
- tunnel offload for sub-functions
- MACSec offload, w/ Extended packet number and replay window
offload
- significantly restructure, and optimize the AF_XDP support,
align the behavior with other vendors
- Huawei:
- configuring DSCP map for traffic class selection
- querying standard FEC statistics
- querying SerDes lane number via ethtool
- Marvell/Cavium:
- egress priority flow control
- MACSec offload
- AMD/SolarFlare:
- PTP over IPv6 and raw Ethernet
- small / embedded:
- ax88772: convert to phylink (to support SFP cages)
- altera: tse: convert to phylink
- ftgmac100: support fixed link
- enetc: standard Ethtool counters
- macb: ZynqMP SGMII dynamic configuration support
- tsnep: support multi-queue and use page pool
- lan743x: Rx IP & TCP checksum offload
- igc: add xdp frags support to ndo_xdp_xmit
- Ethernet high-speed switches:
- Marvell (prestera):
- support SPAN port features (traffic mirroring)
- nexthop object offloading
- Microchip (sparx5):
- multicast forwarding offload
- QoS queuing offload (tc-mqprio, tc-tbf, tc-ets)
- Ethernet embedded switches:
- Marvell (mv88e6xxx):
- support RGMII cmode
- NXP (felix):
- standardized ethtool counters
- Microchip (lan966x):
- QoS queuing offload (tc-mqprio, tc-tbf, tc-cbs, tc-ets)
- traffic policing and mirroring
- link aggregation / bonding offload
- QUSGMII PHY mode support
- Qualcomm 802.11ax WiFi (ath11k):
- cold boot calibration support on WCN6750
- support to connect to a non-transmit MBSSID AP profile
- enable remain-on-channel support on WCN6750
- Wake-on-WLAN support for WCN6750
- support to provide transmit power from firmware via nl80211
- support to get power save duration for each client
- spectral scan support for 160 MHz
- MediaTek WiFi (mt76):
- WiFi-to-Ethernet bridging offload for MT7986 chips
- RealTek WiFi (rtw89):
- P2P support"
* tag 'net-next-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next: (1864 commits)
eth: pse: add missing static inlines
once: rename _SLOW to _SLEEPABLE
net: pse-pd: add regulator based PSE driver
dt-bindings: net: pse-dt: add bindings for regulator based PoDL PSE controller
ethtool: add interface to interact with Ethernet Power Equipment
net: mdiobus: search for PSE nodes by parsing PHY nodes.
net: mdiobus: fwnode_mdiobus_register_phy() rework error handling
net: add framework to support Ethernet PSE and PDs devices
dt-bindings: net: phy: add PoDL PSE property
net: marvell: prestera: Propagate nh state from hw to kernel
net: marvell: prestera: Add neighbour cache accounting
net: marvell: prestera: add stub handler neighbour events
net: marvell: prestera: Add heplers to interact with fib_notifier_info
net: marvell: prestera: Add length macros for prestera_ip_addr
net: marvell: prestera: add delayed wq and flush wq on deinit
net: marvell: prestera: Add strict cleanup of fib arbiter
net: marvell: prestera: Add cleanup of allocated fib_nodes
net: marvell: prestera: Add router nexthops ABI
eth: octeon: fix build after netif_napi_add() changes
net/mlx5: E-Switch, Return EBUSY if can't get mode lock
...
This commit is contained in:
@@ -1135,7 +1135,7 @@ el3_netdev_set_ecmd(struct net_device *dev,
|
||||
|
||||
static void el3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
}
|
||||
|
||||
static int el3_get_link_ksettings(struct net_device *dev,
|
||||
|
||||
@@ -1527,7 +1527,7 @@ static void set_rx_mode(struct net_device *dev)
|
||||
static void netdev_get_drvinfo(struct net_device *dev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
snprintf(info->bus_info, sizeof(info->bus_info), "ISA 0x%lx",
|
||||
dev->base_addr);
|
||||
}
|
||||
|
||||
@@ -480,7 +480,7 @@ static void tc589_reset(struct net_device *dev)
|
||||
static void netdev_get_drvinfo(struct net_device *dev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
snprintf(info->bus_info, sizeof(info->bus_info),
|
||||
"PCMCIA 0x%lx", dev->base_addr);
|
||||
}
|
||||
|
||||
@@ -2959,13 +2959,13 @@ static void vortex_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
if (VORTEX_PCI(vp)) {
|
||||
strlcpy(info->bus_info, pci_name(VORTEX_PCI(vp)),
|
||||
strscpy(info->bus_info, pci_name(VORTEX_PCI(vp)),
|
||||
sizeof(info->bus_info));
|
||||
} else {
|
||||
if (VORTEX_EISA(vp))
|
||||
strlcpy(info->bus_info, dev_name(vp->gendev),
|
||||
strscpy(info->bus_info, dev_name(vp->gendev),
|
||||
sizeof(info->bus_info));
|
||||
else
|
||||
snprintf(info->bus_info, sizeof(info->bus_info),
|
||||
|
||||
@@ -969,12 +969,12 @@ typhoon_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
|
||||
smp_rmb();
|
||||
if (tp->card_state == Sleeping) {
|
||||
strlcpy(info->fw_version, "Sleep image",
|
||||
strscpy(info->fw_version, "Sleep image",
|
||||
sizeof(info->fw_version));
|
||||
} else {
|
||||
INIT_COMMAND_WITH_RESPONSE(&xp_cmd, TYPHOON_CMD_READ_VERSIONS);
|
||||
if (typhoon_issue_command(tp, 1, &xp_cmd, 3, xp_resp) < 0) {
|
||||
strlcpy(info->fw_version, "Unknown runtime",
|
||||
strscpy(info->fw_version, "Unknown runtime",
|
||||
sizeof(info->fw_version));
|
||||
} else {
|
||||
u32 sleep_ver = le32_to_cpu(xp_resp[0].parm2);
|
||||
@@ -984,8 +984,8 @@ typhoon_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
}
|
||||
}
|
||||
|
||||
strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(pci_dev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(pci_dev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
@@ -579,9 +579,9 @@ static void ax_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev->dev.parent);
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->version, DRV_VERSION, sizeof(info->version));
|
||||
strlcpy(info->bus_info, pdev->name, sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->version, DRV_VERSION, sizeof(info->version));
|
||||
strscpy(info->bus_info, pdev->name, sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static u32 ax_get_msglevel(struct net_device *dev)
|
||||
|
||||
@@ -555,9 +555,9 @@ static int __init etherm_addr(char *addr)
|
||||
|
||||
static void etherh_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->version, DRV_VERSION, sizeof(info->version));
|
||||
strlcpy(info->bus_info, dev_name(dev->dev.parent),
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->version, DRV_VERSION, sizeof(info->version));
|
||||
strscpy(info->bus_info, dev_name(dev->dev.parent),
|
||||
sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -450,8 +450,7 @@ static int mcf8390_remove(struct platform_device *pdev)
|
||||
|
||||
unregister_netdev(dev);
|
||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (mem)
|
||||
release_mem_region(mem->start, resource_size(mem));
|
||||
release_mem_region(mem->start, resource_size(mem));
|
||||
free_netdev(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -121,6 +121,7 @@ config LANTIQ_XRX200
|
||||
Support for the PMAC of the Gigabit switch (GSWIP) inside the
|
||||
Lantiq / Intel VRX200 VDSL SoC
|
||||
|
||||
source "drivers/net/ethernet/adi/Kconfig"
|
||||
source "drivers/net/ethernet/litex/Kconfig"
|
||||
source "drivers/net/ethernet/marvell/Kconfig"
|
||||
source "drivers/net/ethernet/mediatek/Kconfig"
|
||||
|
||||
@@ -8,6 +8,7 @@ obj-$(CONFIG_NET_VENDOR_8390) += 8390/
|
||||
obj-$(CONFIG_NET_VENDOR_ACTIONS) += actions/
|
||||
obj-$(CONFIG_NET_VENDOR_ADAPTEC) += adaptec/
|
||||
obj-$(CONFIG_GRETH) += aeroflex/
|
||||
obj-$(CONFIG_NET_VENDOR_ADI) += adi/
|
||||
obj-$(CONFIG_NET_VENDOR_AGERE) += agere/
|
||||
obj-$(CONFIG_NET_VENDOR_ALACRITECH) += alacritech/
|
||||
obj-$(CONFIG_NET_VENDOR_ALLWINNER) += allwinner/
|
||||
|
||||
@@ -1576,7 +1576,7 @@ static int owl_emac_probe(struct platform_device *pdev)
|
||||
netdev->watchdog_timeo = OWL_EMAC_TX_TIMEOUT;
|
||||
netdev->netdev_ops = &owl_emac_netdev_ops;
|
||||
netdev->ethtool_ops = &owl_emac_ethtool_ops;
|
||||
netif_napi_add(netdev, &priv->napi, owl_emac_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(netdev, &priv->napi, owl_emac_poll);
|
||||
|
||||
ret = devm_register_netdev(dev, netdev);
|
||||
if (ret) {
|
||||
|
||||
@@ -1844,8 +1844,8 @@ static int check_if_running(struct net_device *dev)
|
||||
static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
{
|
||||
struct netdev_private *np = netdev_priv(dev);
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(np->pci_dev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(np->pci_dev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static int get_link_ksettings(struct net_device *dev,
|
||||
|
||||
28
drivers/net/ethernet/adi/Kconfig
Normal file
28
drivers/net/ethernet/adi/Kconfig
Normal file
@@ -0,0 +1,28 @@
|
||||
# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
|
||||
#
|
||||
# Analog Devices device configuration
|
||||
#
|
||||
|
||||
config NET_VENDOR_ADI
|
||||
bool "Analog Devices devices"
|
||||
default y
|
||||
depends on SPI
|
||||
help
|
||||
If you have a network (Ethernet) card belonging to this class, say Y.
|
||||
|
||||
Note that the answer to this question doesn't directly affect the
|
||||
kernel: saying N will just cause the configurator to skip all
|
||||
the questions about ADI devices. If you say Y, you will be asked
|
||||
for your specific card in the following questions.
|
||||
|
||||
if NET_VENDOR_ADI
|
||||
|
||||
config ADIN1110
|
||||
tristate "Analog Devices ADIN1110 MAC-PHY"
|
||||
depends on SPI && NET_SWITCHDEV
|
||||
select CRC8
|
||||
help
|
||||
Say yes here to build support for Analog Devices ADIN1110
|
||||
Low Power 10BASE-T1L Ethernet MAC-PHY.
|
||||
|
||||
endif # NET_VENDOR_ADI
|
||||
6
drivers/net/ethernet/adi/Makefile
Normal file
6
drivers/net/ethernet/adi/Makefile
Normal file
@@ -0,0 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
|
||||
#
|
||||
# Makefile for the Analog Devices network device drivers.
|
||||
#
|
||||
|
||||
obj-$(CONFIG_ADIN1110) += adin1110.o
|
||||
1697
drivers/net/ethernet/adi/adin1110.c
Normal file
1697
drivers/net/ethernet/adi/adin1110.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1112,9 +1112,9 @@ static void greth_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *in
|
||||
{
|
||||
struct greth_private *greth = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, dev_driver_string(greth->dev),
|
||||
strscpy(info->driver, dev_driver_string(greth->dev),
|
||||
sizeof(info->driver));
|
||||
strlcpy(info->bus_info, greth->dev->bus->name, sizeof(info->bus_info));
|
||||
strscpy(info->bus_info, greth->dev->bus->name, sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static void greth_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p)
|
||||
@@ -1507,7 +1507,7 @@ static int greth_of_probe(struct platform_device *ofdev)
|
||||
}
|
||||
|
||||
/* setup NAPI */
|
||||
netif_napi_add(dev, &greth->napi, greth_poll, 64);
|
||||
netif_napi_add(dev, &greth->napi, greth_poll);
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -2952,8 +2952,8 @@ static void et131x_get_drvinfo(struct net_device *netdev,
|
||||
{
|
||||
struct et131x_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
strlcpy(info->driver, DRIVER_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(info->driver, DRIVER_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
@@ -3969,7 +3969,7 @@ static int et131x_pci_setup(struct pci_dev *pdev,
|
||||
|
||||
et131x_init_send(adapter);
|
||||
|
||||
netif_napi_add(netdev, &adapter->napi, et131x_poll, 64);
|
||||
netif_napi_add(netdev, &adapter->napi, et131x_poll);
|
||||
|
||||
eth_hw_addr_set(netdev, adapter->addr);
|
||||
|
||||
|
||||
@@ -1531,8 +1531,8 @@ static void slic_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct slic_device *sdev = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(sdev->pdev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(sdev->pdev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static const struct ethtool_ops slic_ethtool_ops = {
|
||||
@@ -1803,7 +1803,7 @@ static int slic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
goto unmap;
|
||||
}
|
||||
|
||||
netif_napi_add(dev, &sdev->napi, slic_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(dev, &sdev->napi, slic_poll);
|
||||
netif_carrier_off(dev);
|
||||
|
||||
err = register_netdev(dev);
|
||||
|
||||
@@ -331,8 +331,8 @@ prepare_err:
|
||||
static void emac_get_drvinfo(struct net_device *dev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, dev_name(&dev->dev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, dev_name(&dev->dev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static u32 emac_get_msglevel(struct net_device *dev)
|
||||
|
||||
@@ -2691,12 +2691,12 @@ static void ace_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct ace_private *ap = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, "acenic", sizeof(info->driver));
|
||||
strscpy(info->driver, "acenic", sizeof(info->driver));
|
||||
snprintf(info->fw_version, sizeof(info->version), "%i.%i.%i",
|
||||
ap->firmware_major, ap->firmware_minor, ap->firmware_fix);
|
||||
|
||||
if (ap->pdev)
|
||||
strlcpy(info->bus_info, pci_name(ap->pdev),
|
||||
strscpy(info->bus_info, pci_name(ap->pdev),
|
||||
sizeof(info->bus_info));
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ config ALTERA_TSE
|
||||
tristate "Altera Triple-Speed Ethernet MAC support"
|
||||
depends on HAS_DMA
|
||||
select PHYLIB
|
||||
select PHYLINK
|
||||
select PCS_ALTERA_TSE
|
||||
help
|
||||
This driver supports the Altera Triple-Speed (TSE) Ethernet MAC.
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/phylink.h>
|
||||
|
||||
#define ALTERA_TSE_SW_RESET_WATCHDOG_CNTR 10000
|
||||
#define ALTERA_TSE_MAC_FIFO_WIDTH 4 /* TX/RX FIFO width in
|
||||
@@ -109,17 +110,6 @@
|
||||
#define MAC_CMDCFG_DISABLE_READ_TIMEOUT_GET(v) GET_BIT_VALUE(v, 27)
|
||||
#define MAC_CMDCFG_CNT_RESET_GET(v) GET_BIT_VALUE(v, 31)
|
||||
|
||||
/* SGMII PCS register addresses
|
||||
*/
|
||||
#define SGMII_PCS_SCRATCH 0x10
|
||||
#define SGMII_PCS_REV 0x11
|
||||
#define SGMII_PCS_LINK_TIMER_0 0x12
|
||||
#define SGMII_PCS_LINK_TIMER_1 0x13
|
||||
#define SGMII_PCS_IF_MODE 0x14
|
||||
#define SGMII_PCS_DIS_READ_TO 0x15
|
||||
#define SGMII_PCS_READ_TO 0x16
|
||||
#define SGMII_PCS_SW_RESET_TIMEOUT 100 /* usecs */
|
||||
|
||||
/* MDIO registers within MAC register Space
|
||||
*/
|
||||
struct altera_tse_mdio {
|
||||
@@ -423,6 +413,9 @@ struct altera_tse_private {
|
||||
void __iomem *tx_dma_csr;
|
||||
void __iomem *tx_dma_desc;
|
||||
|
||||
/* SGMII PCS address space */
|
||||
void __iomem *pcs_base;
|
||||
|
||||
/* Rx buffers queue */
|
||||
struct tse_buffer *rx_ring;
|
||||
u32 rx_cons;
|
||||
@@ -480,6 +473,10 @@ struct altera_tse_private {
|
||||
u32 msg_enable;
|
||||
|
||||
struct altera_dmaops *dmaops;
|
||||
|
||||
struct phylink *phylink;
|
||||
struct phylink_config phylink_config;
|
||||
struct phylink_pcs *pcs;
|
||||
};
|
||||
|
||||
/* Function prototypes
|
||||
|
||||
@@ -199,9 +199,9 @@ static int tse_reglen(struct net_device *dev)
|
||||
static void tse_get_regs(struct net_device *dev, struct ethtool_regs *regs,
|
||||
void *regbuf)
|
||||
{
|
||||
int i;
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
u32 *buf = regbuf;
|
||||
int i;
|
||||
|
||||
/* Set version to a known value, so ethtool knows
|
||||
* how to do any special formatting of this data.
|
||||
@@ -221,6 +221,22 @@ static void tse_get_regs(struct net_device *dev, struct ethtool_regs *regs,
|
||||
buf[i] = csrrd32(priv->mac_dev, i * 4);
|
||||
}
|
||||
|
||||
static int tse_ethtool_set_link_ksettings(struct net_device *dev,
|
||||
const struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
|
||||
return phylink_ethtool_ksettings_set(priv->phylink, cmd);
|
||||
}
|
||||
|
||||
static int tse_ethtool_get_link_ksettings(struct net_device *dev,
|
||||
struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
|
||||
return phylink_ethtool_ksettings_get(priv->phylink, cmd);
|
||||
}
|
||||
|
||||
static const struct ethtool_ops tse_ethtool_ops = {
|
||||
.get_drvinfo = tse_get_drvinfo,
|
||||
.get_regs_len = tse_reglen,
|
||||
@@ -231,8 +247,9 @@ static const struct ethtool_ops tse_ethtool_ops = {
|
||||
.get_ethtool_stats = tse_fill_stats,
|
||||
.get_msglevel = tse_get_msglevel,
|
||||
.set_msglevel = tse_set_msglevel,
|
||||
.get_link_ksettings = phy_ethtool_get_link_ksettings,
|
||||
.set_link_ksettings = phy_ethtool_set_link_ksettings,
|
||||
.get_link_ksettings = tse_ethtool_get_link_ksettings,
|
||||
.set_link_ksettings = tse_ethtool_set_link_ksettings,
|
||||
.get_ts_info = ethtool_op_get_ts_info,
|
||||
};
|
||||
|
||||
void altera_tse_set_ethtool_ops(struct net_device *netdev)
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <linux/of_mdio.h>
|
||||
#include <linux/of_net.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/pcs-altera-tse.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/skbuff.h>
|
||||
@@ -86,27 +87,6 @@ static inline u32 tse_tx_avail(struct altera_tse_private *priv)
|
||||
return priv->tx_cons + priv->tx_ring_size - priv->tx_prod - 1;
|
||||
}
|
||||
|
||||
/* PCS Register read/write functions
|
||||
*/
|
||||
static u16 sgmii_pcs_read(struct altera_tse_private *priv, int regnum)
|
||||
{
|
||||
return csrrd32(priv->mac_dev,
|
||||
tse_csroffs(mdio_phy0) + regnum * 4) & 0xffff;
|
||||
}
|
||||
|
||||
static void sgmii_pcs_write(struct altera_tse_private *priv, int regnum,
|
||||
u16 value)
|
||||
{
|
||||
csrwr32(value, priv->mac_dev, tse_csroffs(mdio_phy0) + regnum * 4);
|
||||
}
|
||||
|
||||
/* Check PCS scratch memory */
|
||||
static int sgmii_pcs_scratch_test(struct altera_tse_private *priv, u16 value)
|
||||
{
|
||||
sgmii_pcs_write(priv, SGMII_PCS_SCRATCH, value);
|
||||
return (sgmii_pcs_read(priv, SGMII_PCS_SCRATCH) == value);
|
||||
}
|
||||
|
||||
/* MDIO specific functions
|
||||
*/
|
||||
static int altera_tse_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
|
||||
@@ -141,10 +121,10 @@ static int altera_tse_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
|
||||
static int altera_tse_mdio_create(struct net_device *dev, unsigned int id)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
int ret;
|
||||
struct device_node *mdio_node = NULL;
|
||||
struct mii_bus *mdio = NULL;
|
||||
struct device_node *child_node = NULL;
|
||||
struct mii_bus *mdio = NULL;
|
||||
int ret;
|
||||
|
||||
for_each_child_of_node(priv->device->of_node, child_node) {
|
||||
if (of_device_is_compatible(child_node, "altr,tse-mdio")) {
|
||||
@@ -236,8 +216,8 @@ static int tse_init_rx_buffer(struct altera_tse_private *priv,
|
||||
static void tse_free_rx_buffer(struct altera_tse_private *priv,
|
||||
struct tse_buffer *rxbuffer)
|
||||
{
|
||||
struct sk_buff *skb = rxbuffer->skb;
|
||||
dma_addr_t dma_addr = rxbuffer->dma_addr;
|
||||
struct sk_buff *skb = rxbuffer->skb;
|
||||
|
||||
if (skb != NULL) {
|
||||
if (dma_addr)
|
||||
@@ -358,6 +338,7 @@ static inline void tse_rx_vlan(struct net_device *dev, struct sk_buff *skb)
|
||||
{
|
||||
struct ethhdr *eth_hdr;
|
||||
u16 vid;
|
||||
|
||||
if ((dev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
|
||||
!__vlan_get_tag(skb, &vid)) {
|
||||
eth_hdr = (struct ethhdr *)skb->data;
|
||||
@@ -371,10 +352,10 @@ static inline void tse_rx_vlan(struct net_device *dev, struct sk_buff *skb)
|
||||
*/
|
||||
static int tse_rx(struct altera_tse_private *priv, int limit)
|
||||
{
|
||||
unsigned int count = 0;
|
||||
unsigned int next_entry;
|
||||
struct sk_buff *skb;
|
||||
unsigned int entry = priv->rx_cons % priv->rx_ring_size;
|
||||
unsigned int next_entry;
|
||||
unsigned int count = 0;
|
||||
struct sk_buff *skb;
|
||||
u32 rxstatus;
|
||||
u16 pktlength;
|
||||
u16 pktstatus;
|
||||
@@ -448,10 +429,10 @@ static int tse_rx(struct altera_tse_private *priv, int limit)
|
||||
static int tse_tx_complete(struct altera_tse_private *priv)
|
||||
{
|
||||
unsigned int txsize = priv->tx_ring_size;
|
||||
u32 ready;
|
||||
unsigned int entry;
|
||||
struct tse_buffer *tx_buff;
|
||||
unsigned int entry;
|
||||
int txcomplete = 0;
|
||||
u32 ready;
|
||||
|
||||
spin_lock(&priv->tx_lock);
|
||||
|
||||
@@ -497,8 +478,8 @@ static int tse_poll(struct napi_struct *napi, int budget)
|
||||
{
|
||||
struct altera_tse_private *priv =
|
||||
container_of(napi, struct altera_tse_private, napi);
|
||||
int rxcomplete = 0;
|
||||
unsigned long int flags;
|
||||
int rxcomplete = 0;
|
||||
|
||||
tse_tx_complete(priv);
|
||||
|
||||
@@ -561,13 +542,13 @@ static irqreturn_t altera_isr(int irq, void *dev_id)
|
||||
static netdev_tx_t tse_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
unsigned int txsize = priv->tx_ring_size;
|
||||
unsigned int entry;
|
||||
struct tse_buffer *buffer = NULL;
|
||||
int nfrags = skb_shinfo(skb)->nr_frags;
|
||||
unsigned int nopaged_len = skb_headlen(skb);
|
||||
unsigned int txsize = priv->tx_ring_size;
|
||||
int nfrags = skb_shinfo(skb)->nr_frags;
|
||||
struct tse_buffer *buffer = NULL;
|
||||
netdev_tx_t ret = NETDEV_TX_OK;
|
||||
dma_addr_t dma_addr;
|
||||
unsigned int entry;
|
||||
|
||||
spin_lock_bh(&priv->tx_lock);
|
||||
|
||||
@@ -619,117 +600,6 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Called every time the controller might need to be made
|
||||
* aware of new link state. The PHY code conveys this
|
||||
* information through variables in the phydev structure, and this
|
||||
* function converts those variables into the appropriate
|
||||
* register values, and can bring down the device if needed.
|
||||
*/
|
||||
static void altera_tse_adjust_link(struct net_device *dev)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
struct phy_device *phydev = dev->phydev;
|
||||
int new_state = 0;
|
||||
|
||||
/* only change config if there is a link */
|
||||
spin_lock(&priv->mac_cfg_lock);
|
||||
if (phydev->link) {
|
||||
/* Read old config */
|
||||
u32 cfg_reg = ioread32(&priv->mac_dev->command_config);
|
||||
|
||||
/* Check duplex */
|
||||
if (phydev->duplex != priv->oldduplex) {
|
||||
new_state = 1;
|
||||
if (!(phydev->duplex))
|
||||
cfg_reg |= MAC_CMDCFG_HD_ENA;
|
||||
else
|
||||
cfg_reg &= ~MAC_CMDCFG_HD_ENA;
|
||||
|
||||
netdev_dbg(priv->dev, "%s: Link duplex = 0x%x\n",
|
||||
dev->name, phydev->duplex);
|
||||
|
||||
priv->oldduplex = phydev->duplex;
|
||||
}
|
||||
|
||||
/* Check speed */
|
||||
if (phydev->speed != priv->oldspeed) {
|
||||
new_state = 1;
|
||||
switch (phydev->speed) {
|
||||
case 1000:
|
||||
cfg_reg |= MAC_CMDCFG_ETH_SPEED;
|
||||
cfg_reg &= ~MAC_CMDCFG_ENA_10;
|
||||
break;
|
||||
case 100:
|
||||
cfg_reg &= ~MAC_CMDCFG_ETH_SPEED;
|
||||
cfg_reg &= ~MAC_CMDCFG_ENA_10;
|
||||
break;
|
||||
case 10:
|
||||
cfg_reg &= ~MAC_CMDCFG_ETH_SPEED;
|
||||
cfg_reg |= MAC_CMDCFG_ENA_10;
|
||||
break;
|
||||
default:
|
||||
if (netif_msg_link(priv))
|
||||
netdev_warn(dev, "Speed (%d) is not 10/100/1000!\n",
|
||||
phydev->speed);
|
||||
break;
|
||||
}
|
||||
priv->oldspeed = phydev->speed;
|
||||
}
|
||||
iowrite32(cfg_reg, &priv->mac_dev->command_config);
|
||||
|
||||
if (!priv->oldlink) {
|
||||
new_state = 1;
|
||||
priv->oldlink = 1;
|
||||
}
|
||||
} else if (priv->oldlink) {
|
||||
new_state = 1;
|
||||
priv->oldlink = 0;
|
||||
priv->oldspeed = 0;
|
||||
priv->oldduplex = -1;
|
||||
}
|
||||
|
||||
if (new_state && netif_msg_link(priv))
|
||||
phy_print_status(phydev);
|
||||
|
||||
spin_unlock(&priv->mac_cfg_lock);
|
||||
}
|
||||
static struct phy_device *connect_local_phy(struct net_device *dev)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
struct phy_device *phydev = NULL;
|
||||
char phy_id_fmt[MII_BUS_ID_SIZE + 3];
|
||||
|
||||
if (priv->phy_addr != POLL_PHY) {
|
||||
snprintf(phy_id_fmt, MII_BUS_ID_SIZE + 3, PHY_ID_FMT,
|
||||
priv->mdio->id, priv->phy_addr);
|
||||
|
||||
netdev_dbg(dev, "trying to attach to %s\n", phy_id_fmt);
|
||||
|
||||
phydev = phy_connect(dev, phy_id_fmt, &altera_tse_adjust_link,
|
||||
priv->phy_iface);
|
||||
if (IS_ERR(phydev)) {
|
||||
netdev_err(dev, "Could not attach to PHY\n");
|
||||
phydev = NULL;
|
||||
}
|
||||
|
||||
} else {
|
||||
int ret;
|
||||
phydev = phy_find_first(priv->mdio);
|
||||
if (phydev == NULL) {
|
||||
netdev_err(dev, "No PHY found\n");
|
||||
return phydev;
|
||||
}
|
||||
|
||||
ret = phy_connect_direct(dev, phydev, &altera_tse_adjust_link,
|
||||
priv->phy_iface);
|
||||
if (ret != 0) {
|
||||
netdev_err(dev, "Could not attach to PHY\n");
|
||||
phydev = NULL;
|
||||
}
|
||||
}
|
||||
return phydev;
|
||||
}
|
||||
|
||||
static int altera_tse_phy_get_addr_mdio_create(struct net_device *dev)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
@@ -768,91 +638,6 @@ static int altera_tse_phy_get_addr_mdio_create(struct net_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Initialize driver's PHY state, and attach to the PHY
|
||||
*/
|
||||
static int init_phy(struct net_device *dev)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
struct phy_device *phydev;
|
||||
struct device_node *phynode;
|
||||
bool fixed_link = false;
|
||||
int rc = 0;
|
||||
|
||||
/* Avoid init phy in case of no phy present */
|
||||
if (!priv->phy_iface)
|
||||
return 0;
|
||||
|
||||
priv->oldlink = 0;
|
||||
priv->oldspeed = 0;
|
||||
priv->oldduplex = -1;
|
||||
|
||||
phynode = of_parse_phandle(priv->device->of_node, "phy-handle", 0);
|
||||
|
||||
if (!phynode) {
|
||||
/* check if a fixed-link is defined in device-tree */
|
||||
if (of_phy_is_fixed_link(priv->device->of_node)) {
|
||||
rc = of_phy_register_fixed_link(priv->device->of_node);
|
||||
if (rc < 0) {
|
||||
netdev_err(dev, "cannot register fixed PHY\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* In the case of a fixed PHY, the DT node associated
|
||||
* to the PHY is the Ethernet MAC DT node.
|
||||
*/
|
||||
phynode = of_node_get(priv->device->of_node);
|
||||
fixed_link = true;
|
||||
|
||||
netdev_dbg(dev, "fixed-link detected\n");
|
||||
phydev = of_phy_connect(dev, phynode,
|
||||
&altera_tse_adjust_link,
|
||||
0, priv->phy_iface);
|
||||
} else {
|
||||
netdev_dbg(dev, "no phy-handle found\n");
|
||||
if (!priv->mdio) {
|
||||
netdev_err(dev, "No phy-handle nor local mdio specified\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
phydev = connect_local_phy(dev);
|
||||
}
|
||||
} else {
|
||||
netdev_dbg(dev, "phy-handle found\n");
|
||||
phydev = of_phy_connect(dev, phynode,
|
||||
&altera_tse_adjust_link, 0, priv->phy_iface);
|
||||
}
|
||||
of_node_put(phynode);
|
||||
|
||||
if (!phydev) {
|
||||
netdev_err(dev, "Could not find the PHY\n");
|
||||
if (fixed_link)
|
||||
of_phy_deregister_fixed_link(priv->device->of_node);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Stop Advertising 1000BASE Capability if interface is not GMII
|
||||
*/
|
||||
if ((priv->phy_iface == PHY_INTERFACE_MODE_MII) ||
|
||||
(priv->phy_iface == PHY_INTERFACE_MODE_RMII))
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
|
||||
/* Broken HW is sometimes missing the pull-up resistor on the
|
||||
* MDIO line, which results in reads to non-existent devices returning
|
||||
* 0 rather than 0xffff. Catch this here and treat 0 as a non-existent
|
||||
* device as well. If a fixed-link is used the phy_id is always 0.
|
||||
* Note: phydev->phy_id is the result of reading the UID PHY registers.
|
||||
*/
|
||||
if ((phydev->phy_id == 0) && !fixed_link) {
|
||||
netdev_err(dev, "Bad PHY UID 0x%08x\n", phydev->phy_id);
|
||||
phy_disconnect(phydev);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
netdev_dbg(dev, "attached to PHY %d UID 0x%08x Link = %d\n",
|
||||
phydev->mdio.addr, phydev->phy_id, phydev->link);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void tse_update_mac_addr(struct altera_tse_private *priv, const u8 *addr)
|
||||
{
|
||||
u32 msb;
|
||||
@@ -1012,8 +797,8 @@ static int tse_change_mtu(struct net_device *dev, int new_mtu)
|
||||
static void altera_tse_set_mcfilter(struct net_device *dev)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
int i;
|
||||
struct netdev_hw_addr *ha;
|
||||
int i;
|
||||
|
||||
/* clear the hash filter */
|
||||
for (i = 0; i < 64; i++)
|
||||
@@ -1087,74 +872,14 @@ static void tse_set_rx_mode(struct net_device *dev)
|
||||
spin_unlock(&priv->mac_cfg_lock);
|
||||
}
|
||||
|
||||
/* Initialise (if necessary) the SGMII PCS component
|
||||
*/
|
||||
static int init_sgmii_pcs(struct net_device *dev)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
int n;
|
||||
unsigned int tmp_reg = 0;
|
||||
|
||||
if (priv->phy_iface != PHY_INTERFACE_MODE_SGMII)
|
||||
return 0; /* Nothing to do, not in SGMII mode */
|
||||
|
||||
/* The TSE SGMII PCS block looks a little like a PHY, it is
|
||||
* mapped into the zeroth MDIO space of the MAC and it has
|
||||
* ID registers like a PHY would. Sadly this is often
|
||||
* configured to zeroes, so don't be surprised if it does
|
||||
* show 0x00000000.
|
||||
*/
|
||||
|
||||
if (sgmii_pcs_scratch_test(priv, 0x0000) &&
|
||||
sgmii_pcs_scratch_test(priv, 0xffff) &&
|
||||
sgmii_pcs_scratch_test(priv, 0xa5a5) &&
|
||||
sgmii_pcs_scratch_test(priv, 0x5a5a)) {
|
||||
netdev_info(dev, "PCS PHY ID: 0x%04x%04x\n",
|
||||
sgmii_pcs_read(priv, MII_PHYSID1),
|
||||
sgmii_pcs_read(priv, MII_PHYSID2));
|
||||
} else {
|
||||
netdev_err(dev, "SGMII PCS Scratch memory test failed.\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Starting on page 5-29 of the MegaCore Function User Guide
|
||||
* Set SGMII Link timer to 1.6ms
|
||||
*/
|
||||
sgmii_pcs_write(priv, SGMII_PCS_LINK_TIMER_0, 0x0D40);
|
||||
sgmii_pcs_write(priv, SGMII_PCS_LINK_TIMER_1, 0x03);
|
||||
|
||||
/* Enable SGMII Interface and Enable SGMII Auto Negotiation */
|
||||
sgmii_pcs_write(priv, SGMII_PCS_IF_MODE, 0x3);
|
||||
|
||||
/* Enable Autonegotiation */
|
||||
tmp_reg = sgmii_pcs_read(priv, MII_BMCR);
|
||||
tmp_reg |= (BMCR_SPEED1000 | BMCR_FULLDPLX | BMCR_ANENABLE);
|
||||
sgmii_pcs_write(priv, MII_BMCR, tmp_reg);
|
||||
|
||||
/* Reset PCS block */
|
||||
tmp_reg |= BMCR_RESET;
|
||||
sgmii_pcs_write(priv, MII_BMCR, tmp_reg);
|
||||
for (n = 0; n < SGMII_PCS_SW_RESET_TIMEOUT; n++) {
|
||||
if (!(sgmii_pcs_read(priv, MII_BMCR) & BMCR_RESET)) {
|
||||
netdev_info(dev, "SGMII PCS block initialised OK\n");
|
||||
return 0;
|
||||
}
|
||||
udelay(1);
|
||||
}
|
||||
|
||||
/* We failed to reset the block, return a timeout */
|
||||
netdev_err(dev, "SGMII PCS block reset failed.\n");
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
/* Open and initialize the interface
|
||||
*/
|
||||
static int tse_open(struct net_device *dev)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
unsigned long flags;
|
||||
int ret = 0;
|
||||
int i;
|
||||
unsigned long int flags;
|
||||
|
||||
/* Reset and configure TSE MAC and probe associated PHY */
|
||||
ret = priv->dmaops->init_dma(priv);
|
||||
@@ -1171,14 +896,6 @@ static int tse_open(struct net_device *dev)
|
||||
netdev_warn(dev, "TSE revision %x\n", priv->revision);
|
||||
|
||||
spin_lock(&priv->mac_cfg_lock);
|
||||
/* no-op if MAC not operating in SGMII mode*/
|
||||
ret = init_sgmii_pcs(dev);
|
||||
if (ret) {
|
||||
netdev_err(dev,
|
||||
"Cannot init the SGMII PCS (error: %d)\n", ret);
|
||||
spin_unlock(&priv->mac_cfg_lock);
|
||||
goto phy_error;
|
||||
}
|
||||
|
||||
ret = reset_mac(priv);
|
||||
/* Note that reset_mac will fail if the clocks are gated by the PHY
|
||||
@@ -1236,8 +953,12 @@ static int tse_open(struct net_device *dev)
|
||||
|
||||
spin_unlock_irqrestore(&priv->rxdma_irq_lock, flags);
|
||||
|
||||
if (dev->phydev)
|
||||
phy_start(dev->phydev);
|
||||
ret = phylink_of_phy_connect(priv->phylink, priv->device->of_node, 0);
|
||||
if (ret) {
|
||||
netdev_err(dev, "could not connect phylink (%d)\n", ret);
|
||||
goto tx_request_irq_error;
|
||||
}
|
||||
phylink_start(priv->phylink);
|
||||
|
||||
napi_enable(&priv->napi);
|
||||
netif_start_queue(dev);
|
||||
@@ -1265,13 +986,10 @@ phy_error:
|
||||
static int tse_shutdown(struct net_device *dev)
|
||||
{
|
||||
struct altera_tse_private *priv = netdev_priv(dev);
|
||||
int ret;
|
||||
unsigned long int flags;
|
||||
int ret;
|
||||
|
||||
/* Stop the PHY */
|
||||
if (dev->phydev)
|
||||
phy_stop(dev->phydev);
|
||||
|
||||
phylink_stop(priv->phylink);
|
||||
netif_stop_queue(dev);
|
||||
napi_disable(&priv->napi);
|
||||
|
||||
@@ -1317,11 +1035,79 @@ static struct net_device_ops altera_tse_netdev_ops = {
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
};
|
||||
|
||||
static void alt_tse_mac_an_restart(struct phylink_config *config)
|
||||
{
|
||||
}
|
||||
|
||||
static void alt_tse_mac_config(struct phylink_config *config, unsigned int mode,
|
||||
const struct phylink_link_state *state)
|
||||
{
|
||||
struct net_device *ndev = to_net_dev(config->dev);
|
||||
struct altera_tse_private *priv = netdev_priv(ndev);
|
||||
|
||||
spin_lock(&priv->mac_cfg_lock);
|
||||
reset_mac(priv);
|
||||
tse_set_mac(priv, true);
|
||||
spin_unlock(&priv->mac_cfg_lock);
|
||||
}
|
||||
|
||||
static void alt_tse_mac_link_down(struct phylink_config *config,
|
||||
unsigned int mode, phy_interface_t interface)
|
||||
{
|
||||
}
|
||||
|
||||
static void alt_tse_mac_link_up(struct phylink_config *config,
|
||||
struct phy_device *phy, unsigned int mode,
|
||||
phy_interface_t interface, int speed,
|
||||
int duplex, bool tx_pause, bool rx_pause)
|
||||
{
|
||||
struct net_device *ndev = to_net_dev(config->dev);
|
||||
struct altera_tse_private *priv = netdev_priv(ndev);
|
||||
u32 ctrl;
|
||||
|
||||
ctrl = csrrd32(priv->mac_dev, tse_csroffs(command_config));
|
||||
ctrl &= ~(MAC_CMDCFG_ENA_10 | MAC_CMDCFG_ETH_SPEED | MAC_CMDCFG_HD_ENA);
|
||||
|
||||
if (duplex == DUPLEX_HALF)
|
||||
ctrl |= MAC_CMDCFG_HD_ENA;
|
||||
|
||||
if (speed == SPEED_1000)
|
||||
ctrl |= MAC_CMDCFG_ETH_SPEED;
|
||||
else if (speed == SPEED_10)
|
||||
ctrl |= MAC_CMDCFG_ENA_10;
|
||||
|
||||
spin_lock(&priv->mac_cfg_lock);
|
||||
csrwr32(ctrl, priv->mac_dev, tse_csroffs(command_config));
|
||||
spin_unlock(&priv->mac_cfg_lock);
|
||||
}
|
||||
|
||||
static struct phylink_pcs *alt_tse_select_pcs(struct phylink_config *config,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
struct net_device *ndev = to_net_dev(config->dev);
|
||||
struct altera_tse_private *priv = netdev_priv(ndev);
|
||||
|
||||
if (interface == PHY_INTERFACE_MODE_SGMII ||
|
||||
interface == PHY_INTERFACE_MODE_1000BASEX)
|
||||
return priv->pcs;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const struct phylink_mac_ops alt_tse_phylink_ops = {
|
||||
.validate = phylink_generic_validate,
|
||||
.mac_an_restart = alt_tse_mac_an_restart,
|
||||
.mac_config = alt_tse_mac_config,
|
||||
.mac_link_down = alt_tse_mac_link_down,
|
||||
.mac_link_up = alt_tse_mac_link_up,
|
||||
.mac_select_pcs = alt_tse_select_pcs,
|
||||
};
|
||||
|
||||
static int request_and_map(struct platform_device *pdev, const char *name,
|
||||
struct resource **res, void __iomem **ptr)
|
||||
{
|
||||
struct resource *region;
|
||||
struct device *device = &pdev->dev;
|
||||
struct resource *region;
|
||||
|
||||
*res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name);
|
||||
if (*res == NULL) {
|
||||
@@ -1350,13 +1136,15 @@ static int request_and_map(struct platform_device *pdev, const char *name,
|
||||
*/
|
||||
static int altera_tse_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct net_device *ndev;
|
||||
int ret = -ENODEV;
|
||||
const struct of_device_id *of_id = NULL;
|
||||
struct altera_tse_private *priv;
|
||||
struct resource *control_port;
|
||||
struct resource *dma_res;
|
||||
struct altera_tse_private *priv;
|
||||
struct resource *pcs_res;
|
||||
struct net_device *ndev;
|
||||
void __iomem *descmap;
|
||||
const struct of_device_id *of_id = NULL;
|
||||
int pcs_reg_width = 2;
|
||||
int ret = -ENODEV;
|
||||
|
||||
ndev = alloc_etherdev(sizeof(struct altera_tse_private));
|
||||
if (!ndev) {
|
||||
@@ -1467,6 +1255,17 @@ static int altera_tse_probe(struct platform_device *pdev)
|
||||
if (ret)
|
||||
goto err_free_netdev;
|
||||
|
||||
/* SGMII PCS address space. The location can vary depending on how the
|
||||
* IP is integrated. We can have a resource dedicated to it at a specific
|
||||
* address space, but if it's not the case, we fallback to the mdiophy0
|
||||
* from the MAC's address space
|
||||
*/
|
||||
ret = request_and_map(pdev, "pcs", &pcs_res,
|
||||
&priv->pcs_base);
|
||||
if (ret) {
|
||||
priv->pcs_base = priv->mac_dev + tse_csroffs(mdio_phy0);
|
||||
pcs_reg_width = 4;
|
||||
}
|
||||
|
||||
/* Rx IRQ */
|
||||
priv->rx_irq = platform_get_irq_byname(pdev, "rx_irq");
|
||||
@@ -1566,7 +1365,7 @@ static int altera_tse_probe(struct platform_device *pdev)
|
||||
ndev->features |= NETIF_F_HW_VLAN_CTAG_RX;
|
||||
|
||||
/* setup NAPI interface */
|
||||
netif_napi_add(ndev, &priv->napi, tse_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(ndev, &priv->napi, tse_poll);
|
||||
|
||||
spin_lock_init(&priv->mac_cfg_lock);
|
||||
spin_lock_init(&priv->tx_lock);
|
||||
@@ -1590,11 +1389,32 @@ static int altera_tse_probe(struct platform_device *pdev)
|
||||
(unsigned long) control_port->start, priv->rx_irq,
|
||||
priv->tx_irq);
|
||||
|
||||
ret = init_phy(ndev);
|
||||
if (ret != 0) {
|
||||
netdev_err(ndev, "Cannot attach to PHY (error: %d)\n", ret);
|
||||
priv->pcs = alt_tse_pcs_create(ndev, priv->pcs_base, pcs_reg_width);
|
||||
|
||||
priv->phylink_config.dev = &ndev->dev;
|
||||
priv->phylink_config.type = PHYLINK_NETDEV;
|
||||
priv->phylink_config.mac_capabilities = MAC_SYM_PAUSE | MAC_10 |
|
||||
MAC_100 | MAC_1000FD;
|
||||
|
||||
phy_interface_set_rgmii(priv->phylink_config.supported_interfaces);
|
||||
__set_bit(PHY_INTERFACE_MODE_MII,
|
||||
priv->phylink_config.supported_interfaces);
|
||||
__set_bit(PHY_INTERFACE_MODE_GMII,
|
||||
priv->phylink_config.supported_interfaces);
|
||||
__set_bit(PHY_INTERFACE_MODE_SGMII,
|
||||
priv->phylink_config.supported_interfaces);
|
||||
__set_bit(PHY_INTERFACE_MODE_1000BASEX,
|
||||
priv->phylink_config.supported_interfaces);
|
||||
|
||||
priv->phylink = phylink_create(&priv->phylink_config,
|
||||
of_fwnode_handle(priv->device->of_node),
|
||||
priv->phy_iface, &alt_tse_phylink_ops);
|
||||
if (IS_ERR(priv->phylink)) {
|
||||
dev_err(&pdev->dev, "failed to create phylink\n");
|
||||
ret = PTR_ERR(priv->phylink);
|
||||
goto err_init_phy;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_init_phy:
|
||||
@@ -1614,16 +1434,10 @@ static int altera_tse_remove(struct platform_device *pdev)
|
||||
struct net_device *ndev = platform_get_drvdata(pdev);
|
||||
struct altera_tse_private *priv = netdev_priv(ndev);
|
||||
|
||||
if (ndev->phydev) {
|
||||
phy_disconnect(ndev->phydev);
|
||||
|
||||
if (of_phy_is_fixed_link(priv->device->of_node))
|
||||
of_phy_deregister_fixed_link(priv->device->of_node);
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
altera_tse_mdio_destroy(ndev);
|
||||
unregister_netdev(ndev);
|
||||
phylink_destroy(priv->phylink);
|
||||
free_netdev(ndev);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -462,8 +462,8 @@ static void ena_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct ena_adapter *adapter = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -2265,10 +2265,8 @@ static void ena_init_napi_in_range(struct ena_adapter *adapter,
|
||||
for (i = first_index; i < first_index + count; i++) {
|
||||
struct ena_napi *napi = &adapter->ena_napi[i];
|
||||
|
||||
netif_napi_add(adapter->netdev,
|
||||
&napi->napi,
|
||||
ENA_IS_XDP_INDEX(adapter, i) ? ena_xdp_io_poll : ena_io_poll,
|
||||
NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(adapter->netdev, &napi->napi,
|
||||
ENA_IS_XDP_INDEX(adapter, i) ? ena_xdp_io_poll : ena_io_poll);
|
||||
|
||||
if (!ENA_IS_XDP_INDEX(adapter, i)) {
|
||||
napi->rx_ring = &adapter->rx_ring[i];
|
||||
@@ -3166,7 +3164,7 @@ static void ena_config_host_info(struct ena_com_dev *ena_dev, struct pci_dev *pd
|
||||
host_info->bdf = (pdev->bus->number << 8) | pdev->devfn;
|
||||
host_info->os_type = ENA_ADMIN_OS_LINUX;
|
||||
host_info->kernel_ver = LINUX_VERSION_CODE;
|
||||
strlcpy(host_info->kernel_ver_str, utsname()->version,
|
||||
strscpy(host_info->kernel_ver_str, utsname()->version,
|
||||
sizeof(host_info->kernel_ver_str) - 1);
|
||||
host_info->os_dist = 0;
|
||||
strncpy(host_info->os_dist_str, utsname()->release,
|
||||
|
||||
@@ -695,7 +695,7 @@ static int a2065_init_one(struct zorro_dev *z,
|
||||
}
|
||||
|
||||
dev = alloc_etherdev(sizeof(struct lance_private));
|
||||
if (dev == NULL) {
|
||||
if (!dev) {
|
||||
release_mem_region(base_addr, sizeof(struct lance_regs));
|
||||
release_mem_region(mem_start, A2065_RAM_SIZE);
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -43,7 +43,7 @@ Revision History:
|
||||
3.0.4 12/09/2003
|
||||
1. Added set_mac_address routine for bonding driver support.
|
||||
2. Tested the driver for bonding support
|
||||
3. Bug fix: Fixed mismach in actual receive buffer lenth and lenth
|
||||
3. Bug fix: Fixed mismach in actual receive buffer length and length
|
||||
indicated to the h/w.
|
||||
4. Modified amd8111e_rx() routine to receive all the received packets
|
||||
in the first interrupt.
|
||||
@@ -185,24 +185,23 @@ static void amd8111e_set_ext_phy(struct net_device *dev)
|
||||
advert = amd8111e_mdio_read(dev, lp->ext_phy_addr, MII_ADVERTISE);
|
||||
tmp = advert & ~(ADVERTISE_ALL | ADVERTISE_100BASE4);
|
||||
switch (lp->ext_phy_option) {
|
||||
|
||||
default:
|
||||
case SPEED_AUTONEG: /* advertise all values */
|
||||
tmp |= (ADVERTISE_10HALF | ADVERTISE_10FULL |
|
||||
ADVERTISE_100HALF | ADVERTISE_100FULL);
|
||||
break;
|
||||
case SPEED10_HALF:
|
||||
tmp |= ADVERTISE_10HALF;
|
||||
break;
|
||||
case SPEED10_FULL:
|
||||
tmp |= ADVERTISE_10FULL;
|
||||
break;
|
||||
case SPEED100_HALF:
|
||||
tmp |= ADVERTISE_100HALF;
|
||||
break;
|
||||
case SPEED100_FULL:
|
||||
tmp |= ADVERTISE_100FULL;
|
||||
break;
|
||||
default:
|
||||
case SPEED_AUTONEG: /* advertise all values */
|
||||
tmp |= (ADVERTISE_10HALF | ADVERTISE_10FULL |
|
||||
ADVERTISE_100HALF | ADVERTISE_100FULL);
|
||||
break;
|
||||
case SPEED10_HALF:
|
||||
tmp |= ADVERTISE_10HALF;
|
||||
break;
|
||||
case SPEED10_FULL:
|
||||
tmp |= ADVERTISE_10FULL;
|
||||
break;
|
||||
case SPEED100_HALF:
|
||||
tmp |= ADVERTISE_100HALF;
|
||||
break;
|
||||
case SPEED100_FULL:
|
||||
tmp |= ADVERTISE_100FULL;
|
||||
break;
|
||||
}
|
||||
|
||||
if(advert != tmp)
|
||||
@@ -237,7 +236,7 @@ static int amd8111e_free_skbs(struct net_device *dev)
|
||||
/* Freeing previously allocated receive buffers */
|
||||
for (i = 0; i < NUM_RX_BUFFERS; i++) {
|
||||
rx_skbuff = lp->rx_skbuff[i];
|
||||
if (rx_skbuff != NULL) {
|
||||
if (rx_skbuff) {
|
||||
dma_unmap_single(&lp->pci_dev->dev,
|
||||
lp->rx_dma_addr[i],
|
||||
lp->rx_buff_len - 2, DMA_FROM_DEVICE);
|
||||
@@ -1084,7 +1083,7 @@ static irqreturn_t amd8111e_interrupt(int irq, void *dev_id)
|
||||
unsigned int intr0, intren0;
|
||||
unsigned int handled = 1;
|
||||
|
||||
if (unlikely(dev == NULL))
|
||||
if (unlikely(!dev))
|
||||
return IRQ_NONE;
|
||||
|
||||
spin_lock(&lp->lock);
|
||||
@@ -1109,7 +1108,7 @@ static irqreturn_t amd8111e_interrupt(int irq, void *dev_id)
|
||||
/* Check if Receive Interrupt has occurred. */
|
||||
if (intr0 & RINT0) {
|
||||
if (napi_schedule_prep(&lp->napi)) {
|
||||
/* Disable receive interupts */
|
||||
/* Disable receive interrupts */
|
||||
writel(RINTEN0, mmio + INTEN0);
|
||||
/* Schedule a polling routine */
|
||||
__napi_schedule(&lp->napi);
|
||||
@@ -1364,10 +1363,10 @@ static void amd8111e_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct amd8111e_priv *lp = netdev_priv(dev);
|
||||
struct pci_dev *pci_dev = lp->pci_dev;
|
||||
strlcpy(info->driver, MODULE_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, MODULE_NAME, sizeof(info->driver));
|
||||
snprintf(info->fw_version, sizeof(info->fw_version),
|
||||
"%u", chip_version);
|
||||
strlcpy(info->bus_info, pci_name(pci_dev), sizeof(info->bus_info));
|
||||
strscpy(info->bus_info, pci_name(pci_dev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static int amd8111e_get_regs_len(struct net_device *dev)
|
||||
@@ -1554,7 +1553,7 @@ static int amd8111e_enable_magicpkt(struct amd8111e_priv *lp)
|
||||
static int amd8111e_enable_link_change(struct amd8111e_priv *lp)
|
||||
{
|
||||
|
||||
/* Adapter is already stoped/suspended/interrupt-disabled */
|
||||
/* Adapter is already stopped/suspended/interrupt-disabled */
|
||||
writel(VAL0 | LCMODE_SW, lp->mmio + CMD7);
|
||||
|
||||
/* To eliminate PCI posting bug */
|
||||
|
||||
@@ -600,7 +600,7 @@ typedef enum {
|
||||
#define CSTATE 1
|
||||
#define SSTATE 2
|
||||
|
||||
/* Assume contoller gets data 10 times the maximum processing time */
|
||||
/* Assume controller gets data 10 times the maximum processing time */
|
||||
#define REPEAT_CNT 10
|
||||
|
||||
/* amd8111e descriptor flag definitions */
|
||||
|
||||
@@ -193,7 +193,7 @@ static int ariadne_rx(struct net_device *dev)
|
||||
struct sk_buff *skb;
|
||||
|
||||
skb = netdev_alloc_skb(dev, pkt_len + 2);
|
||||
if (skb == NULL) {
|
||||
if (!skb) {
|
||||
for (i = 0; i < RX_RING_SIZE; i++)
|
||||
if (lowb(priv->rx_ring[(entry + i) % RX_RING_SIZE]->RMD1) & RF_OWN)
|
||||
break;
|
||||
@@ -731,7 +731,7 @@ static int ariadne_init_one(struct zorro_dev *z,
|
||||
}
|
||||
|
||||
dev = alloc_etherdev(sizeof(struct ariadne_private));
|
||||
if (dev == NULL) {
|
||||
if (!dev) {
|
||||
release_mem_region(base_addr, sizeof(struct Am79C960));
|
||||
release_mem_region(mem_start, ARIADNE_RAM_SIZE);
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -581,15 +581,15 @@ static unsigned long __init lance_probe1( struct net_device *dev,
|
||||
|
||||
/* Get the ethernet address */
|
||||
switch( lp->cardtype ) {
|
||||
case OLD_RIEBL:
|
||||
case OLD_RIEBL:
|
||||
/* No ethernet address! (Set some default address) */
|
||||
eth_hw_addr_set(dev, OldRieblDefHwaddr);
|
||||
break;
|
||||
case NEW_RIEBL:
|
||||
case NEW_RIEBL:
|
||||
lp->memcpy_f(addr, RIEBL_HWADDR_ADDR, ETH_ALEN);
|
||||
eth_hw_addr_set(dev, addr);
|
||||
break;
|
||||
case PAM_CARD:
|
||||
case PAM_CARD:
|
||||
i = IO->eeprom;
|
||||
for( i = 0; i < 6; ++i )
|
||||
addr[i] =
|
||||
@@ -854,7 +854,7 @@ static irqreturn_t lance_interrupt( int irq, void *dev_id )
|
||||
int csr0, boguscnt = 10;
|
||||
int handled = 0;
|
||||
|
||||
if (dev == NULL) {
|
||||
if (!dev) {
|
||||
DPRINTK( 1, ( "lance_interrupt(): interrupt for unknown device.\n" ));
|
||||
return IRQ_NONE;
|
||||
}
|
||||
@@ -995,7 +995,7 @@ static int lance_rx( struct net_device *dev )
|
||||
}
|
||||
else {
|
||||
skb = netdev_alloc_skb(dev, pkt_len + 2);
|
||||
if (skb == NULL) {
|
||||
if (!skb) {
|
||||
for( i = 0; i < RX_RING_SIZE; i++ )
|
||||
if (MEM->rx_head[(entry+i) & RX_RING_MOD_MASK].flag &
|
||||
RMD1_OWN_CHIP)
|
||||
|
||||
@@ -650,7 +650,7 @@ au1000_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
{
|
||||
struct au1000_private *aup = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
snprintf(info->bus_info, sizeof(info->bus_info), "%s %d", DRV_NAME,
|
||||
aup->mac_id);
|
||||
}
|
||||
@@ -786,7 +786,7 @@ static int au1000_rx(struct net_device *dev)
|
||||
frmlen = (status & RX_FRAME_LEN_MASK);
|
||||
frmlen -= 4; /* Remove FCS */
|
||||
skb = netdev_alloc_skb(dev, frmlen + 2);
|
||||
if (skb == NULL) {
|
||||
if (!skb) {
|
||||
dev->stats.rx_dropped++;
|
||||
continue;
|
||||
}
|
||||
@@ -1199,7 +1199,7 @@ static int au1000_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
aup->mii_bus = mdiobus_alloc();
|
||||
if (aup->mii_bus == NULL) {
|
||||
if (!aup->mii_bus) {
|
||||
dev_err(&pdev->dev, "failed to allocate mdiobus structure\n");
|
||||
err = -ENOMEM;
|
||||
goto err_mdiobus_alloc;
|
||||
@@ -1284,7 +1284,7 @@ static int au1000_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
|
||||
err_out:
|
||||
if (aup->mii_bus != NULL)
|
||||
if (aup->mii_bus)
|
||||
mdiobus_unregister(aup->mii_bus);
|
||||
|
||||
/* here we should have a valid dev plus aup-> register addresses
|
||||
|
||||
@@ -880,7 +880,7 @@ lance_init_ring(struct net_device *dev, gfp_t gfp)
|
||||
rx_buff = skb->data;
|
||||
else
|
||||
rx_buff = kmalloc(PKT_BUF_SZ, GFP_DMA | gfp);
|
||||
if (rx_buff == NULL)
|
||||
if (!rx_buff)
|
||||
lp->rx_ring[i].base = 0;
|
||||
else
|
||||
lp->rx_ring[i].base = (u32)isa_virt_to_bus(rx_buff) | 0x80000000;
|
||||
@@ -1186,7 +1186,7 @@ lance_rx(struct net_device *dev)
|
||||
else
|
||||
{
|
||||
skb = dev_alloc_skb(pkt_len+2);
|
||||
if (skb == NULL)
|
||||
if (!skb)
|
||||
{
|
||||
printk("%s: Memory squeeze, deferring packet.\n", dev->name);
|
||||
for (i=0; i < RX_RING_SIZE; i++)
|
||||
|
||||
@@ -485,10 +485,10 @@ static int mace_read(mace_private *lp, unsigned int ioaddr, int reg)
|
||||
unsigned long flags;
|
||||
|
||||
switch (reg >> 4) {
|
||||
case 0: /* register 0-15 */
|
||||
case 0: /* register 0-15 */
|
||||
data = inb(ioaddr + AM2150_MACE_BASE + reg);
|
||||
break;
|
||||
case 1: /* register 16-31 */
|
||||
case 1: /* register 16-31 */
|
||||
spin_lock_irqsave(&lp->bank_lock, flags);
|
||||
MACEBANK(1);
|
||||
data = inb(ioaddr + AM2150_MACE_BASE + (reg & 0x0F));
|
||||
@@ -512,10 +512,10 @@ static void mace_write(mace_private *lp, unsigned int ioaddr, int reg,
|
||||
unsigned long flags;
|
||||
|
||||
switch (reg >> 4) {
|
||||
case 0: /* register 0-15 */
|
||||
case 0: /* register 0-15 */
|
||||
outb(data & 0xFF, ioaddr + AM2150_MACE_BASE + reg);
|
||||
break;
|
||||
case 1: /* register 16-31 */
|
||||
case 1: /* register 16-31 */
|
||||
spin_lock_irqsave(&lp->bank_lock, flags);
|
||||
MACEBANK(1);
|
||||
outb(data & 0xFF, ioaddr + AM2150_MACE_BASE + (reg & 0x0F));
|
||||
@@ -567,13 +567,13 @@ static int mace_init(mace_private *lp, unsigned int ioaddr,
|
||||
* Or just set ASEL in PHYCC below!
|
||||
*/
|
||||
switch (if_port) {
|
||||
case 1:
|
||||
case 1:
|
||||
mace_write(lp, ioaddr, MACE_PLSCC, 0x02);
|
||||
break;
|
||||
case 2:
|
||||
case 2:
|
||||
mace_write(lp, ioaddr, MACE_PLSCC, 0x00);
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
mace_write(lp, ioaddr, MACE_PHYCC, /* ASEL */ 4);
|
||||
/* ASEL Auto Select. When set, the PORTSEL[1-0] bits are overridden,
|
||||
and the MACE device will automatically select the operating media
|
||||
@@ -815,7 +815,7 @@ static int mace_close(struct net_device *dev)
|
||||
static void netdev_get_drvinfo(struct net_device *dev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
snprintf(info->bus_info, sizeof(info->bus_info),
|
||||
"PCMCIA 0x%lx", dev->base_addr);
|
||||
}
|
||||
@@ -918,7 +918,7 @@ static irqreturn_t mace_interrupt(int irq, void *dev_id)
|
||||
int status;
|
||||
int IntrCnt = MACE_MAX_IR_ITERATIONS;
|
||||
|
||||
if (dev == NULL) {
|
||||
if (!dev) {
|
||||
pr_debug("mace_interrupt(): irq 0x%X for unknown device.\n",
|
||||
irq);
|
||||
return IRQ_NONE;
|
||||
@@ -1102,7 +1102,7 @@ static int mace_rx(struct net_device *dev, unsigned char RxCnt)
|
||||
|
||||
skb = netdev_alloc_skb(dev, pkt_len + 2);
|
||||
|
||||
if (skb != NULL) {
|
||||
if (skb) {
|
||||
skb_reserve(skb, 2);
|
||||
insw(ioaddr + AM2150_RCV, skb_put(skb, pkt_len), pkt_len>>1);
|
||||
if (pkt_len & 1)
|
||||
|
||||
@@ -488,7 +488,7 @@ static void pcnet32_realloc_tx_ring(struct net_device *dev,
|
||||
dma_alloc_coherent(&lp->pci_dev->dev,
|
||||
sizeof(struct pcnet32_tx_head) * entries,
|
||||
&new_ring_dma_addr, GFP_ATOMIC);
|
||||
if (new_tx_ring == NULL)
|
||||
if (!new_tx_ring)
|
||||
return;
|
||||
|
||||
new_dma_addr_list = kcalloc(entries, sizeof(dma_addr_t), GFP_ATOMIC);
|
||||
@@ -547,7 +547,7 @@ static void pcnet32_realloc_rx_ring(struct net_device *dev,
|
||||
dma_alloc_coherent(&lp->pci_dev->dev,
|
||||
sizeof(struct pcnet32_rx_head) * entries,
|
||||
&new_ring_dma_addr, GFP_ATOMIC);
|
||||
if (new_rx_ring == NULL)
|
||||
if (!new_rx_ring)
|
||||
return;
|
||||
|
||||
new_dma_addr_list = kcalloc(entries, sizeof(dma_addr_t), GFP_ATOMIC);
|
||||
@@ -797,9 +797,9 @@ static void pcnet32_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct pcnet32_private *lp = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
if (lp->pci_dev)
|
||||
strlcpy(info->bus_info, pci_name(lp->pci_dev),
|
||||
strscpy(info->bus_info, pci_name(lp->pci_dev),
|
||||
sizeof(info->bus_info));
|
||||
else
|
||||
snprintf(info->bus_info, sizeof(info->bus_info),
|
||||
@@ -1249,7 +1249,7 @@ static void pcnet32_rx_entry(struct net_device *dev,
|
||||
} else
|
||||
skb = netdev_alloc_skb(dev, pkt_len + NET_IP_ALIGN);
|
||||
|
||||
if (skb == NULL) {
|
||||
if (!skb) {
|
||||
dev->stats.rx_dropped++;
|
||||
return;
|
||||
}
|
||||
@@ -2018,7 +2018,7 @@ static int pcnet32_alloc_ring(struct net_device *dev, const char *name)
|
||||
lp->tx_ring = dma_alloc_coherent(&lp->pci_dev->dev,
|
||||
sizeof(struct pcnet32_tx_head) * lp->tx_ring_size,
|
||||
&lp->tx_ring_dma_addr, GFP_KERNEL);
|
||||
if (lp->tx_ring == NULL) {
|
||||
if (!lp->tx_ring) {
|
||||
netif_err(lp, drv, dev, "Coherent memory allocation failed\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -2026,7 +2026,7 @@ static int pcnet32_alloc_ring(struct net_device *dev, const char *name)
|
||||
lp->rx_ring = dma_alloc_coherent(&lp->pci_dev->dev,
|
||||
sizeof(struct pcnet32_rx_head) * lp->rx_ring_size,
|
||||
&lp->rx_ring_dma_addr, GFP_KERNEL);
|
||||
if (lp->rx_ring == NULL) {
|
||||
if (!lp->rx_ring) {
|
||||
netif_err(lp, drv, dev, "Coherent memory allocation failed\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -2365,7 +2365,7 @@ static int pcnet32_init_ring(struct net_device *dev)
|
||||
|
||||
for (i = 0; i < lp->rx_ring_size; i++) {
|
||||
struct sk_buff *rx_skbuff = lp->rx_skbuff[i];
|
||||
if (rx_skbuff == NULL) {
|
||||
if (!rx_skbuff) {
|
||||
lp->rx_skbuff[i] = netdev_alloc_skb(dev, PKT_BUF_SKB);
|
||||
rx_skbuff = lp->rx_skbuff[i];
|
||||
if (!rx_skbuff) {
|
||||
|
||||
@@ -341,7 +341,7 @@ static int __init lance_probe( struct net_device *dev)
|
||||
|
||||
/* XXX - leak? */
|
||||
MEM = dvma_malloc_align(sizeof(struct lance_memory), 0x10000);
|
||||
if (MEM == NULL) {
|
||||
if (!MEM) {
|
||||
#ifdef CONFIG_SUN3
|
||||
iounmap((void __iomem *)ioaddr);
|
||||
#endif
|
||||
@@ -796,7 +796,7 @@ static int lance_rx( struct net_device *dev )
|
||||
}
|
||||
else {
|
||||
skb = netdev_alloc_skb(dev, pkt_len + 2);
|
||||
if (skb == NULL) {
|
||||
if (!skb) {
|
||||
dev->stats.rx_dropped++;
|
||||
head->msg_length = 0;
|
||||
head->flag |= RMD1_OWN_CHIP;
|
||||
|
||||
@@ -530,7 +530,7 @@ static void lance_rx_dvma(struct net_device *dev)
|
||||
len = (rd->mblength & 0xfff) - 4;
|
||||
skb = netdev_alloc_skb(dev, len + 2);
|
||||
|
||||
if (skb == NULL) {
|
||||
if (!skb) {
|
||||
dev->stats.rx_dropped++;
|
||||
rd->mblength = 0;
|
||||
rd->rmd1_bits = LE_R1_OWN;
|
||||
@@ -700,7 +700,7 @@ static void lance_rx_pio(struct net_device *dev)
|
||||
len = (sbus_readw(&rd->mblength) & 0xfff) - 4;
|
||||
skb = netdev_alloc_skb(dev, len + 2);
|
||||
|
||||
if (skb == NULL) {
|
||||
if (!skb) {
|
||||
dev->stats.rx_dropped++;
|
||||
sbus_writew(0, &rd->mblength);
|
||||
sbus_writeb(LE_R1_OWN, &rd->rmd1_bits);
|
||||
@@ -1276,7 +1276,7 @@ static void lance_free_hwresources(struct lance_private *lp)
|
||||
/* Ethtool support... */
|
||||
static void sparc_lance_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, "sunlance", sizeof(info->driver));
|
||||
strscpy(info->driver, "sunlance", sizeof(info->driver));
|
||||
}
|
||||
|
||||
static const struct ethtool_ops sparc_lance_ethtool_ops = {
|
||||
|
||||
@@ -952,14 +952,14 @@ static void xgbe_napi_enable(struct xgbe_prv_data *pdata, unsigned int add)
|
||||
channel = pdata->channel[i];
|
||||
if (add)
|
||||
netif_napi_add(pdata->netdev, &channel->napi,
|
||||
xgbe_one_poll, NAPI_POLL_WEIGHT);
|
||||
xgbe_one_poll);
|
||||
|
||||
napi_enable(&channel->napi);
|
||||
}
|
||||
} else {
|
||||
if (add)
|
||||
netif_napi_add(pdata->netdev, &pdata->napi,
|
||||
xgbe_all_poll, NAPI_POLL_WEIGHT);
|
||||
xgbe_all_poll);
|
||||
|
||||
napi_enable(&pdata->napi);
|
||||
}
|
||||
|
||||
@@ -402,8 +402,8 @@ static void xgbe_get_drvinfo(struct net_device *netdev,
|
||||
struct xgbe_prv_data *pdata = netdev_priv(netdev);
|
||||
struct xgbe_hw_features *hw_feat = &pdata->hw_feat;
|
||||
|
||||
strlcpy(drvinfo->driver, XGBE_DRV_NAME, sizeof(drvinfo->driver));
|
||||
strlcpy(drvinfo->bus_info, dev_name(pdata->dev),
|
||||
strscpy(drvinfo->driver, XGBE_DRV_NAME, sizeof(drvinfo->driver));
|
||||
strscpy(drvinfo->bus_info, dev_name(pdata->dev),
|
||||
sizeof(drvinfo->bus_info));
|
||||
snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), "%d.%d.%d",
|
||||
XGMAC_GET_BITS(hw_feat->version, MAC_VR, USERVER),
|
||||
|
||||
@@ -672,7 +672,7 @@ static int xge_probe(struct platform_device *pdev)
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
netif_napi_add(ndev, &pdata->napi, xge_napi, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(ndev, &pdata->napi, xge_napi);
|
||||
|
||||
ret = register_netdev(ndev);
|
||||
if (ret) {
|
||||
|
||||
@@ -1977,14 +1977,12 @@ static void xgene_enet_napi_add(struct xgene_enet_pdata *pdata)
|
||||
|
||||
for (i = 0; i < pdata->rxq_cnt; i++) {
|
||||
napi = &pdata->rx_ring[i]->napi;
|
||||
netif_napi_add(pdata->ndev, napi, xgene_enet_napi,
|
||||
NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(pdata->ndev, napi, xgene_enet_napi);
|
||||
}
|
||||
|
||||
for (i = 0; i < pdata->cq_cnt; i++) {
|
||||
napi = &pdata->tx_ring[i]->cp_ring->napi;
|
||||
netif_napi_add(pdata->ndev, napi, xgene_enet_napi,
|
||||
NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(pdata->ndev, napi, xgene_enet_napi);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -238,7 +238,7 @@ static void aq_ethtool_get_drvinfo(struct net_device *ndev,
|
||||
"%u.%u.%u", firmware_version >> 24,
|
||||
(firmware_version >> 16) & 0xFFU, firmware_version & 0xFFFFU);
|
||||
|
||||
strlcpy(drvinfo->bus_info, pdev ? pci_name(pdev) : "",
|
||||
strscpy(drvinfo->bus_info, pdev ? pci_name(pdev) : "",
|
||||
sizeof(drvinfo->bus_info));
|
||||
drvinfo->n_stats = aq_ethtool_n_stats(ndev);
|
||||
drvinfo->testinfo_len = 0;
|
||||
|
||||
@@ -292,9 +292,6 @@ static int aq_mdo_dev_open(struct macsec_context *ctx)
|
||||
struct aq_nic_s *nic = netdev_priv(ctx->netdev);
|
||||
int ret = 0;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
if (netif_carrier_ok(nic->ndev))
|
||||
ret = aq_apply_secy_cfg(nic, ctx->secy);
|
||||
|
||||
@@ -306,9 +303,6 @@ static int aq_mdo_dev_stop(struct macsec_context *ctx)
|
||||
struct aq_nic_s *nic = netdev_priv(ctx->netdev);
|
||||
int i;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < AQ_MACSEC_MAX_SC; i++) {
|
||||
if (nic->macsec_cfg->txsc_idx_busy & BIT(i))
|
||||
aq_clear_secy(nic, nic->macsec_cfg->aq_txsc[i].sw_secy,
|
||||
@@ -466,9 +460,6 @@ static int aq_mdo_add_secy(struct macsec_context *ctx)
|
||||
if (txsc_idx == AQ_MACSEC_MAX_SC)
|
||||
return -ENOSPC;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
cfg->sc_sa = sc_sa;
|
||||
cfg->aq_txsc[txsc_idx].hw_sc_idx = aq_to_hw_sc_idx(txsc_idx, sc_sa);
|
||||
cfg->aq_txsc[txsc_idx].sw_secy = secy;
|
||||
@@ -492,9 +483,6 @@ static int aq_mdo_upd_secy(struct macsec_context *ctx)
|
||||
if (txsc_idx < 0)
|
||||
return -ENOENT;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
if (netif_carrier_ok(nic->ndev) && netif_running(secy->netdev))
|
||||
ret = aq_set_txsc(nic, txsc_idx);
|
||||
|
||||
@@ -543,9 +531,6 @@ static int aq_mdo_del_secy(struct macsec_context *ctx)
|
||||
struct aq_nic_s *nic = netdev_priv(ctx->netdev);
|
||||
int ret = 0;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
if (!nic->macsec_cfg)
|
||||
return 0;
|
||||
|
||||
@@ -601,9 +586,6 @@ static int aq_mdo_add_txsa(struct macsec_context *ctx)
|
||||
if (txsc_idx < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
aq_txsc = &cfg->aq_txsc[txsc_idx];
|
||||
set_bit(ctx->sa.assoc_num, &aq_txsc->tx_sa_idx_busy);
|
||||
|
||||
@@ -631,9 +613,6 @@ static int aq_mdo_upd_txsa(struct macsec_context *ctx)
|
||||
if (txsc_idx < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
aq_txsc = &cfg->aq_txsc[txsc_idx];
|
||||
if (netif_carrier_ok(nic->ndev) && netif_running(secy->netdev))
|
||||
ret = aq_update_txsa(nic, aq_txsc->hw_sc_idx, secy,
|
||||
@@ -681,9 +660,6 @@ static int aq_mdo_del_txsa(struct macsec_context *ctx)
|
||||
if (txsc_idx < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
ret = aq_clear_txsa(nic, &cfg->aq_txsc[txsc_idx], ctx->sa.assoc_num,
|
||||
AQ_CLEAR_ALL);
|
||||
|
||||
@@ -780,9 +756,6 @@ static int aq_mdo_add_rxsc(struct macsec_context *ctx)
|
||||
if (rxsc_idx >= rxsc_idx_max)
|
||||
return -ENOSPC;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
cfg->aq_rxsc[rxsc_idx].hw_sc_idx = aq_to_hw_sc_idx(rxsc_idx,
|
||||
cfg->sc_sa);
|
||||
cfg->aq_rxsc[rxsc_idx].sw_secy = ctx->secy;
|
||||
@@ -809,9 +782,6 @@ static int aq_mdo_upd_rxsc(struct macsec_context *ctx)
|
||||
if (rxsc_idx < 0)
|
||||
return -ENOENT;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
if (netif_carrier_ok(nic->ndev) && netif_running(ctx->secy->netdev))
|
||||
ret = aq_set_rxsc(nic, rxsc_idx);
|
||||
|
||||
@@ -876,9 +846,6 @@ static int aq_mdo_del_rxsc(struct macsec_context *ctx)
|
||||
if (rxsc_idx < 0)
|
||||
return -ENOENT;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
if (netif_carrier_ok(nic->ndev))
|
||||
clear_type = AQ_CLEAR_ALL;
|
||||
|
||||
@@ -948,9 +915,6 @@ static int aq_mdo_add_rxsa(struct macsec_context *ctx)
|
||||
if (rxsc_idx < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
aq_rxsc = &nic->macsec_cfg->aq_rxsc[rxsc_idx];
|
||||
set_bit(ctx->sa.assoc_num, &aq_rxsc->rx_sa_idx_busy);
|
||||
|
||||
@@ -978,9 +942,6 @@ static int aq_mdo_upd_rxsa(struct macsec_context *ctx)
|
||||
if (rxsc_idx < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
if (netif_carrier_ok(nic->ndev) && netif_running(secy->netdev))
|
||||
ret = aq_update_rxsa(nic, cfg->aq_rxsc[rxsc_idx].hw_sc_idx,
|
||||
secy, ctx->sa.rx_sa, NULL,
|
||||
@@ -1029,9 +990,6 @@ static int aq_mdo_del_rxsa(struct macsec_context *ctx)
|
||||
if (rxsc_idx < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
ret = aq_clear_rxsa(nic, &cfg->aq_rxsc[rxsc_idx], ctx->sa.assoc_num,
|
||||
AQ_CLEAR_ALL);
|
||||
|
||||
@@ -1044,9 +1002,6 @@ static int aq_mdo_get_dev_stats(struct macsec_context *ctx)
|
||||
struct aq_macsec_common_stats *stats = &nic->macsec_cfg->stats;
|
||||
struct aq_hw_s *hw = nic->aq_hw;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
aq_get_macsec_common_stats(hw, stats);
|
||||
|
||||
ctx->stats.dev_stats->OutPktsUntagged = stats->out.untagged_pkts;
|
||||
@@ -1073,9 +1028,6 @@ static int aq_mdo_get_tx_sc_stats(struct macsec_context *ctx)
|
||||
if (txsc_idx < 0)
|
||||
return -ENOENT;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
aq_txsc = &nic->macsec_cfg->aq_txsc[txsc_idx];
|
||||
stats = &aq_txsc->stats;
|
||||
aq_get_txsc_stats(hw, aq_txsc->hw_sc_idx, stats);
|
||||
@@ -1106,9 +1058,6 @@ static int aq_mdo_get_tx_sa_stats(struct macsec_context *ctx)
|
||||
if (txsc_idx < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
aq_txsc = &cfg->aq_txsc[txsc_idx];
|
||||
sa_idx = aq_txsc->hw_sc_idx | ctx->sa.assoc_num;
|
||||
stats = &aq_txsc->tx_sa_stats[ctx->sa.assoc_num];
|
||||
@@ -1147,9 +1096,6 @@ static int aq_mdo_get_rx_sc_stats(struct macsec_context *ctx)
|
||||
if (rxsc_idx < 0)
|
||||
return -ENOENT;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
aq_rxsc = &cfg->aq_rxsc[rxsc_idx];
|
||||
for (i = 0; i < MACSEC_NUM_AN; i++) {
|
||||
if (!test_bit(i, &aq_rxsc->rx_sa_idx_busy))
|
||||
@@ -1196,9 +1142,6 @@ static int aq_mdo_get_rx_sa_stats(struct macsec_context *ctx)
|
||||
if (rxsc_idx < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ctx->prepare)
|
||||
return 0;
|
||||
|
||||
aq_rxsc = &cfg->aq_rxsc[rxsc_idx];
|
||||
stats = &aq_rxsc->rx_sa_stats[ctx->sa.assoc_num];
|
||||
sa_idx = aq_rxsc->hw_sc_idx | ctx->sa.assoc_num;
|
||||
|
||||
@@ -1217,8 +1217,7 @@ int aq_ptp_init(struct aq_nic_s *aq_nic, unsigned int idx_vec)
|
||||
atomic_set(&aq_ptp->offset_egress, 0);
|
||||
atomic_set(&aq_ptp->offset_ingress, 0);
|
||||
|
||||
netif_napi_add(aq_nic_get_ndev(aq_nic), &aq_ptp->napi,
|
||||
aq_ptp_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(aq_nic_get_ndev(aq_nic), &aq_ptp->napi, aq_ptp_poll);
|
||||
|
||||
aq_ptp->idx_vector = idx_vec;
|
||||
|
||||
|
||||
@@ -119,8 +119,7 @@ struct aq_vec_s *aq_vec_alloc(struct aq_nic_s *aq_nic, unsigned int idx,
|
||||
self->tx_rings = 0;
|
||||
self->rx_rings = 0;
|
||||
|
||||
netif_napi_add(aq_nic_get_ndev(aq_nic), &self->napi,
|
||||
aq_vec_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(aq_nic_get_ndev(aq_nic), &self->napi, aq_vec_poll);
|
||||
|
||||
err_exit:
|
||||
return self;
|
||||
|
||||
@@ -91,7 +91,7 @@ static void arc_emac_get_drvinfo(struct net_device *ndev,
|
||||
{
|
||||
struct arc_emac_priv *priv = netdev_priv(ndev);
|
||||
|
||||
strlcpy(info->driver, priv->drv_name, sizeof(info->driver));
|
||||
strscpy(info->driver, priv->drv_name, sizeof(info->driver));
|
||||
}
|
||||
|
||||
static const struct ethtool_ops arc_emac_ethtool_ops = {
|
||||
|
||||
@@ -293,7 +293,7 @@ ax88796c_tx_fixup(struct net_device *ndev, struct sk_buff_head *q)
|
||||
skb_put(skb, padlen);
|
||||
|
||||
/* EOP header */
|
||||
memcpy(skb_put(skb, TX_EOP_SIZE), &info.eop, TX_EOP_SIZE);
|
||||
skb_put_data(skb, &info.eop, TX_EOP_SIZE);
|
||||
|
||||
skb_unlink(skb, q);
|
||||
|
||||
@@ -381,7 +381,7 @@ static int ax88796c_hard_xmit(struct ax88796c_device *ax_local)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
static netdev_tx_t
|
||||
ax88796c_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||
{
|
||||
struct ax88796c_device *ax_local = to_ax88796c_device(ndev);
|
||||
|
||||
@@ -451,8 +451,8 @@ static void ag71xx_get_drvinfo(struct net_device *ndev,
|
||||
{
|
||||
struct ag71xx *ag = netdev_priv(ndev);
|
||||
|
||||
strlcpy(info->driver, "ag71xx", sizeof(info->driver));
|
||||
strlcpy(info->bus_info, of_node_full_name(ag->pdev->dev.of_node),
|
||||
strscpy(info->driver, "ag71xx", sizeof(info->driver));
|
||||
strscpy(info->bus_info, of_node_full_name(ag->pdev->dev.of_node),
|
||||
sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -752,7 +752,7 @@ static int alx_alloc_napis(struct alx_priv *alx)
|
||||
goto err_out;
|
||||
|
||||
np->alx = alx;
|
||||
netif_napi_add(alx->dev, &np->napi, alx_poll, 64);
|
||||
netif_napi_add(alx->dev, &np->napi, alx_poll);
|
||||
alx->qnapi[i] = np;
|
||||
}
|
||||
|
||||
@@ -1912,11 +1912,14 @@ static int alx_suspend(struct device *dev)
|
||||
|
||||
if (!netif_running(alx->dev))
|
||||
return 0;
|
||||
|
||||
rtnl_lock();
|
||||
netif_device_detach(alx->dev);
|
||||
|
||||
mutex_lock(&alx->mtx);
|
||||
__alx_stop(alx);
|
||||
mutex_unlock(&alx->mtx);
|
||||
rtnl_unlock();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1927,6 +1930,7 @@ static int alx_resume(struct device *dev)
|
||||
struct alx_hw *hw = &alx->hw;
|
||||
int err;
|
||||
|
||||
rtnl_lock();
|
||||
mutex_lock(&alx->mtx);
|
||||
alx_reset_phy(hw);
|
||||
|
||||
@@ -1943,6 +1947,7 @@ static int alx_resume(struct device *dev)
|
||||
|
||||
unlock:
|
||||
mutex_unlock(&alx->mtx);
|
||||
rtnl_unlock();
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
@@ -220,8 +220,8 @@ static void atl1c_get_drvinfo(struct net_device *netdev,
|
||||
{
|
||||
struct atl1c_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
strlcpy(drvinfo->driver, atl1c_driver_name, sizeof(drvinfo->driver));
|
||||
strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(drvinfo->driver, atl1c_driver_name, sizeof(drvinfo->driver));
|
||||
strscpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(drvinfo->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -2732,7 +2732,7 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
dev_set_threaded(netdev, true);
|
||||
for (i = 0; i < adapter->rx_queue_count; ++i)
|
||||
netif_napi_add(netdev, &adapter->rrd_ring[i].napi,
|
||||
atl1c_clean_rx, 64);
|
||||
atl1c_clean_rx);
|
||||
for (i = 0; i < adapter->tx_queue_count; ++i)
|
||||
netif_napi_add_tx(netdev, &adapter->tpd_ring[i].napi,
|
||||
atl1c_clean_tx);
|
||||
|
||||
@@ -306,9 +306,9 @@ static void atl1e_get_drvinfo(struct net_device *netdev,
|
||||
{
|
||||
struct atl1e_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
strlcpy(drvinfo->driver, atl1e_driver_name, sizeof(drvinfo->driver));
|
||||
strlcpy(drvinfo->fw_version, "L1e", sizeof(drvinfo->fw_version));
|
||||
strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(drvinfo->driver, atl1e_driver_name, sizeof(drvinfo->driver));
|
||||
strscpy(drvinfo->fw_version, "L1e", sizeof(drvinfo->fw_version));
|
||||
strscpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(drvinfo->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -2354,7 +2354,7 @@ static int atl1e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
adapter->mii.phy_id_mask = 0x1f;
|
||||
adapter->mii.reg_num_mask = MDIO_REG_ADDR_MASK;
|
||||
|
||||
netif_napi_add(netdev, &adapter->napi, atl1e_clean, 64);
|
||||
netif_napi_add(netdev, &adapter->napi, atl1e_clean);
|
||||
|
||||
timer_setup(&adapter->phy_config_timer, atl1e_phy_config, 0);
|
||||
|
||||
|
||||
@@ -2977,7 +2977,7 @@ static int atl1_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
netdev->netdev_ops = &atl1_netdev_ops;
|
||||
netdev->watchdog_timeo = 5 * HZ;
|
||||
netif_napi_add(netdev, &adapter->napi, atl1_rings_clean, 64);
|
||||
netif_napi_add(netdev, &adapter->napi, atl1_rings_clean);
|
||||
|
||||
netdev->ethtool_ops = &atl1_ethtool_ops;
|
||||
adapter->bd_number = cards_found;
|
||||
@@ -3340,8 +3340,8 @@ static void atl1_get_drvinfo(struct net_device *netdev,
|
||||
{
|
||||
struct atl1_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
strlcpy(drvinfo->driver, ATLX_DRIVER_NAME, sizeof(drvinfo->driver));
|
||||
strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(drvinfo->driver, ATLX_DRIVER_NAME, sizeof(drvinfo->driver));
|
||||
strscpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(drvinfo->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -1980,9 +1980,9 @@ static void atl2_get_drvinfo(struct net_device *netdev,
|
||||
{
|
||||
struct atl2_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
strlcpy(drvinfo->driver, atl2_driver_name, sizeof(drvinfo->driver));
|
||||
strlcpy(drvinfo->fw_version, "L2", sizeof(drvinfo->fw_version));
|
||||
strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(drvinfo->driver, atl2_driver_name, sizeof(drvinfo->driver));
|
||||
strscpy(drvinfo->fw_version, "L2", sizeof(drvinfo->fw_version));
|
||||
strscpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(drvinfo->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -1790,13 +1790,13 @@ static void b44_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *inf
|
||||
struct b44 *bp = netdev_priv(dev);
|
||||
struct ssb_bus *bus = bp->sdev->bus;
|
||||
|
||||
strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
switch (bus->bustype) {
|
||||
case SSB_BUSTYPE_PCI:
|
||||
strlcpy(info->bus_info, pci_name(bus->host_pci), sizeof(info->bus_info));
|
||||
strscpy(info->bus_info, pci_name(bus->host_pci), sizeof(info->bus_info));
|
||||
break;
|
||||
case SSB_BUSTYPE_SSB:
|
||||
strlcpy(info->bus_info, "SSB", sizeof(info->bus_info));
|
||||
strscpy(info->bus_info, "SSB", sizeof(info->bus_info));
|
||||
break;
|
||||
case SSB_BUSTYPE_PCMCIA:
|
||||
case SSB_BUSTYPE_SDIO:
|
||||
@@ -2375,7 +2375,7 @@ static int b44_init_one(struct ssb_device *sdev,
|
||||
bp->tx_pending = B44_DEF_TX_RING_PENDING;
|
||||
|
||||
dev->netdev_ops = &b44_netdev_ops;
|
||||
netif_napi_add(dev, &bp->napi, b44_poll, 64);
|
||||
netif_napi_add(dev, &bp->napi, b44_poll);
|
||||
dev->watchdog_timeo = B44_TX_TIMEOUT;
|
||||
dev->min_mtu = B44_MIN_MTU;
|
||||
dev->max_mtu = B44_MAX_MTU;
|
||||
|
||||
@@ -507,7 +507,7 @@ static int bcm4908_enet_stop(struct net_device *netdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bcm4908_enet_start_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
static netdev_tx_t bcm4908_enet_start_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
{
|
||||
struct bcm4908_enet *enet = netdev_priv(netdev);
|
||||
struct bcm4908_enet_dma_ring *ring = &enet->tx_ring;
|
||||
@@ -716,6 +716,8 @@ static int bcm4908_enet_probe(struct platform_device *pdev)
|
||||
|
||||
SET_NETDEV_DEV(netdev, &pdev->dev);
|
||||
err = of_get_ethdev_address(dev->of_node, netdev);
|
||||
if (err == -EPROBE_DEFER)
|
||||
goto err_dma_free;
|
||||
if (err)
|
||||
eth_hw_addr_random(netdev);
|
||||
netdev->netdev_ops = &bcm4908_enet_netdev_ops;
|
||||
@@ -723,17 +725,20 @@ static int bcm4908_enet_probe(struct platform_device *pdev)
|
||||
netdev->mtu = ETH_DATA_LEN;
|
||||
netdev->max_mtu = ENET_MTU_MAX;
|
||||
netif_napi_add_tx(netdev, &enet->tx_ring.napi, bcm4908_enet_poll_tx);
|
||||
netif_napi_add(netdev, &enet->rx_ring.napi, bcm4908_enet_poll_rx, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(netdev, &enet->rx_ring.napi, bcm4908_enet_poll_rx);
|
||||
|
||||
err = register_netdev(netdev);
|
||||
if (err) {
|
||||
bcm4908_enet_dma_free(enet);
|
||||
return err;
|
||||
}
|
||||
if (err)
|
||||
goto err_dma_free;
|
||||
|
||||
platform_set_drvdata(pdev, enet);
|
||||
|
||||
return 0;
|
||||
|
||||
err_dma_free:
|
||||
bcm4908_enet_dma_free(enet);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int bcm4908_enet_remove(struct platform_device *pdev)
|
||||
|
||||
@@ -1321,8 +1321,8 @@ static const u32 unused_mib_regs[] = {
|
||||
static void bcm_enet_get_drvinfo(struct net_device *netdev,
|
||||
struct ethtool_drvinfo *drvinfo)
|
||||
{
|
||||
strlcpy(drvinfo->driver, bcm_enet_driver_name, sizeof(drvinfo->driver));
|
||||
strlcpy(drvinfo->bus_info, "bcm63xx", sizeof(drvinfo->bus_info));
|
||||
strscpy(drvinfo->driver, bcm_enet_driver_name, sizeof(drvinfo->driver));
|
||||
strscpy(drvinfo->bus_info, "bcm63xx", sizeof(drvinfo->bus_info));
|
||||
}
|
||||
|
||||
static int bcm_enet_get_sset_count(struct net_device *netdev,
|
||||
|
||||
@@ -308,8 +308,8 @@ static const struct bcm_sysport_stats bcm_sysport_gstrings_stats[] = {
|
||||
static void bcm_sysport_get_drvinfo(struct net_device *dev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, "platform", sizeof(info->bus_info));
|
||||
strscpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, "platform", sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static u32 bcm_sysport_get_msglvl(struct net_device *dev)
|
||||
@@ -2564,7 +2564,7 @@ static int bcm_sysport_probe(struct platform_device *pdev)
|
||||
dev_set_drvdata(&pdev->dev, dev);
|
||||
dev->ethtool_ops = &bcm_sysport_ethtool_ops;
|
||||
dev->netdev_ops = &bcm_sysport_netdev_ops;
|
||||
netif_napi_add(dev, &priv->napi, bcm_sysport_poll, 64);
|
||||
netif_napi_add(dev, &priv->napi, bcm_sysport_poll);
|
||||
|
||||
dev->features |= NETIF_F_RXCSUM | NETIF_F_HIGHDMA |
|
||||
NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
|
||||
|
||||
@@ -1367,7 +1367,7 @@ static void bgmac_get_strings(struct net_device *dev, u32 stringset,
|
||||
return;
|
||||
|
||||
for (i = 0; i < BGMAC_STATS_LEN; i++)
|
||||
strlcpy(data + i * ETH_GSTRING_LEN,
|
||||
strscpy(data + i * ETH_GSTRING_LEN,
|
||||
bgmac_get_strings_stats[i].name, ETH_GSTRING_LEN);
|
||||
}
|
||||
|
||||
@@ -1395,8 +1395,8 @@ static void bgmac_get_ethtool_stats(struct net_device *dev,
|
||||
static void bgmac_get_drvinfo(struct net_device *net_dev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, "AXI", sizeof(info->bus_info));
|
||||
strscpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, "AXI", sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static const struct ethtool_ops bgmac_ethtool_ops = {
|
||||
@@ -1527,7 +1527,7 @@ int bgmac_enet_probe(struct bgmac *bgmac)
|
||||
if (bcm47xx_nvram_getenv("et0_no_txint", NULL, 0) == 0)
|
||||
bgmac->int_mask &= ~BGMAC_IS_TX_MASK;
|
||||
|
||||
netif_napi_add(net_dev, &bgmac->napi, bgmac_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(net_dev, &bgmac->napi, bgmac_poll);
|
||||
|
||||
err = bgmac_phy_connect(bgmac);
|
||||
if (err) {
|
||||
|
||||
@@ -176,12 +176,12 @@ static const struct flash_spec flash_table[] =
|
||||
{0x19000002, 0x5b808201, 0x000500db, 0x03840253, 0xaf020406,
|
||||
NONBUFFERED_FLAGS, ST_MICRO_FLASH_PAGE_BITS, ST_MICRO_FLASH_PAGE_SIZE,
|
||||
ST_MICRO_FLASH_BYTE_ADDR_MASK, ST_MICRO_FLASH_BASE_TOTAL_SIZE*2,
|
||||
"Entry 0101: ST M45PE10 (128kB non-bufferred)"},
|
||||
"Entry 0101: ST M45PE10 (128kB non-buffered)"},
|
||||
/* Entry 0110: ST M45PE20 (non-buffered flash)*/
|
||||
{0x15000001, 0x57808201, 0x000500db, 0x03840253, 0xaf020406,
|
||||
NONBUFFERED_FLAGS, ST_MICRO_FLASH_PAGE_BITS, ST_MICRO_FLASH_PAGE_SIZE,
|
||||
ST_MICRO_FLASH_BYTE_ADDR_MASK, ST_MICRO_FLASH_BASE_TOTAL_SIZE*4,
|
||||
"Entry 0110: ST M45PE20 (256kB non-bufferred)"},
|
||||
"Entry 0110: ST M45PE20 (256kB non-buffered)"},
|
||||
/* Saifun SA25F005 (non-buffered flash) */
|
||||
/* strap, cfg1, & write1 need updates */
|
||||
{0x1d000003, 0x5f808201, 0x00050081, 0x03840253, 0xaf020406,
|
||||
@@ -7042,9 +7042,9 @@ bnx2_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
{
|
||||
struct bnx2 *bp = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info));
|
||||
strlcpy(info->fw_version, bp->fw_version, sizeof(info->fw_version));
|
||||
strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info));
|
||||
strscpy(info->fw_version, bp->fw_version, sizeof(info->fw_version));
|
||||
}
|
||||
|
||||
#define BNX2_REGDUMP_LEN (32 * 1024)
|
||||
@@ -8522,7 +8522,7 @@ bnx2_init_napi(struct bnx2 *bp)
|
||||
else
|
||||
poll = bnx2_poll_msix;
|
||||
|
||||
netif_napi_add(bp->dev, &bp->bnx2_napi[i].napi, poll, 64);
|
||||
netif_napi_add(bp->dev, &bp->bnx2_napi[i].napi, poll);
|
||||
bnapi->bp = bp;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,8 +44,7 @@ static void bnx2x_add_all_napi_cnic(struct bnx2x *bp)
|
||||
|
||||
/* Add NAPI objects */
|
||||
for_each_rx_queue_cnic(bp, i) {
|
||||
netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi),
|
||||
bnx2x_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi), bnx2x_poll);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,8 +54,7 @@ static void bnx2x_add_all_napi(struct bnx2x *bp)
|
||||
|
||||
/* Add NAPI objects */
|
||||
for_each_eth_queue(bp, i) {
|
||||
netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi),
|
||||
bnx2x_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi), bnx2x_poll);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,7 +148,7 @@ void bnx2x_fill_fw_str(struct bnx2x *bp, char *buf, size_t buf_len)
|
||||
phy_fw_ver[0] = '\0';
|
||||
bnx2x_get_ext_phy_fw_version(&bp->link_params,
|
||||
phy_fw_ver, PHY_FW_VER_LEN);
|
||||
strlcpy(buf, bp->fw_ver, buf_len);
|
||||
strscpy(buf, bp->fw_ver, buf_len);
|
||||
snprintf(buf + strlen(bp->fw_ver), 32 - strlen(bp->fw_ver),
|
||||
"bc %d.%d.%d%s%s",
|
||||
(bp->common.bc_ver & 0xff0000) >> 16,
|
||||
@@ -789,6 +787,7 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,
|
||||
BNX2X_ERR("skb_put is about to fail... pad %d len %d rx_buf_size %d\n",
|
||||
pad, len, fp->rx_buf_size);
|
||||
bnx2x_panic();
|
||||
bnx2x_frag_free(fp, new_data);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1112,7 +1112,7 @@ static void bnx2x_get_drvinfo(struct net_device *dev,
|
||||
int ext_dev_info_offset;
|
||||
u32 mbi;
|
||||
|
||||
strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
|
||||
if (SHMEM2_HAS(bp, extended_dev_info_shared_addr)) {
|
||||
ext_dev_info_offset = SHMEM2_RD(bp,
|
||||
@@ -1126,7 +1126,7 @@ static void bnx2x_get_drvinfo(struct net_device *dev,
|
||||
(mbi & 0xff000000) >> 24,
|
||||
(mbi & 0x00ff0000) >> 16,
|
||||
(mbi & 0x0000ff00) >> 8);
|
||||
strlcpy(info->fw_version, version,
|
||||
strscpy(info->fw_version, version,
|
||||
sizeof(info->fw_version));
|
||||
}
|
||||
}
|
||||
@@ -1135,7 +1135,7 @@ static void bnx2x_get_drvinfo(struct net_device *dev,
|
||||
bnx2x_fill_fw_str(bp, version, ETHTOOL_FWVERS_LEN);
|
||||
strlcat(info->fw_version, version, sizeof(info->fw_version));
|
||||
|
||||
strlcpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info));
|
||||
strscpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static void bnx2x_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
||||
|
||||
@@ -3385,7 +3385,7 @@ static void bnx2x_drv_info_ether_stat(struct bnx2x *bp)
|
||||
&bp->sp_objs->mac_obj;
|
||||
int i;
|
||||
|
||||
strlcpy(ether_stat->version, DRV_MODULE_VERSION,
|
||||
strscpy(ether_stat->version, DRV_MODULE_VERSION,
|
||||
ETH_STAT_INFO_VERSION_LEN);
|
||||
|
||||
/* get DRV_INFO_ETH_STAT_NUM_MACS_REQUIRED macs, placing them in the
|
||||
|
||||
@@ -518,7 +518,7 @@ int bnx2x_vfpf_storm_rx_mode(struct bnx2x *bp);
|
||||
static inline void bnx2x_vf_fill_fw_str(struct bnx2x *bp, char *buf,
|
||||
size_t buf_len)
|
||||
{
|
||||
strlcpy(buf, bp->acquire_resp.pfdev_info.fw_ver, buf_len);
|
||||
strscpy(buf, bp->acquire_resp.pfdev_info.fw_ver, buf_len);
|
||||
}
|
||||
|
||||
static inline int bnx2x_vf_ustorm_prods_offset(struct bnx2x *bp,
|
||||
|
||||
@@ -380,7 +380,7 @@ int bnx2x_vfpf_acquire(struct bnx2x *bp, u8 tx_count, u8 rx_count)
|
||||
bp->igu_base_sb = bp->acquire_resp.resc.hw_sbs[0].hw_sb_id;
|
||||
bp->vlan_credit = bp->acquire_resp.resc.num_vlan_filters;
|
||||
|
||||
strlcpy(bp->fw_ver, bp->acquire_resp.pfdev_info.fw_ver,
|
||||
strscpy(bp->fw_ver, bp->acquire_resp.pfdev_info.fw_ver,
|
||||
sizeof(bp->fw_ver));
|
||||
|
||||
if (is_valid_ether_addr(bp->acquire_resp.resc.current_mac_addr))
|
||||
|
||||
@@ -9366,16 +9366,16 @@ static void bnxt_init_napi(struct bnxt *bp)
|
||||
cp_nr_rings--;
|
||||
for (i = 0; i < cp_nr_rings; i++) {
|
||||
bnapi = bp->bnapi[i];
|
||||
netif_napi_add(bp->dev, &bnapi->napi, poll_fn, 64);
|
||||
netif_napi_add(bp->dev, &bnapi->napi, poll_fn);
|
||||
}
|
||||
if (BNXT_CHIP_TYPE_NITRO_A0(bp)) {
|
||||
bnapi = bp->bnapi[cp_nr_rings];
|
||||
netif_napi_add(bp->dev, &bnapi->napi,
|
||||
bnxt_poll_nitroa0, 64);
|
||||
bnxt_poll_nitroa0);
|
||||
}
|
||||
} else {
|
||||
bnapi = bp->bnapi[0];
|
||||
netif_napi_add(bp->dev, &bnapi->napi, bnxt_poll, 64);
|
||||
netif_napi_add(bp->dev, &bnapi->napi, bnxt_poll);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1371,9 +1371,9 @@ static void bnxt_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strlcpy(info->fw_version, bp->fw_ver_str, sizeof(info->fw_version));
|
||||
strlcpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strscpy(info->fw_version, bp->fw_ver_str, sizeof(info->fw_version));
|
||||
strscpy(info->bus_info, pci_name(bp->pdev), sizeof(info->bus_info));
|
||||
info->n_stats = bnxt_get_num_stats(bp);
|
||||
info->testinfo_len = bp->num_tests;
|
||||
/* TODO CHIMP_FW: eeprom dump details */
|
||||
@@ -3876,7 +3876,7 @@ void bnxt_ethtool_init(struct bnxt *bp)
|
||||
} else if (i == BNXT_IRQ_TEST_IDX) {
|
||||
strcpy(str, "Interrupt_test (offline)");
|
||||
} else {
|
||||
strlcpy(str, fw_str, ETH_GSTRING_LEN);
|
||||
strscpy(str, fw_str, ETH_GSTRING_LEN);
|
||||
strncat(str, " test", ETH_GSTRING_LEN - strlen(str));
|
||||
if (test_info->offline_mask & (1 << i))
|
||||
strncat(str, " (offline)",
|
||||
|
||||
@@ -505,9 +505,13 @@ static int bnxt_hwrm_ptp_cfg(struct bnxt *bp)
|
||||
ptp->tstamp_filters = flags;
|
||||
|
||||
if (netif_running(bp->dev)) {
|
||||
rc = bnxt_close_nic(bp, false, false);
|
||||
if (!rc)
|
||||
rc = bnxt_open_nic(bp, false, false);
|
||||
if (ptp->rx_filter == HWTSTAMP_FILTER_ALL) {
|
||||
rc = bnxt_close_nic(bp, false, false);
|
||||
if (!rc)
|
||||
rc = bnxt_open_nic(bp, false, false);
|
||||
} else {
|
||||
bnxt_ptp_cfg_tstamp_filters(bp);
|
||||
}
|
||||
if (!rc && !ptp->tstamp_filters)
|
||||
rc = -EIO;
|
||||
}
|
||||
|
||||
@@ -222,7 +222,7 @@ static int bnxt_vf_rep_get_phys_port_name(struct net_device *dev, char *buf,
|
||||
static void bnxt_vf_rep_get_drvinfo(struct net_device *dev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
}
|
||||
|
||||
static int bnxt_vf_rep_get_port_parent_id(struct net_device *dev,
|
||||
|
||||
@@ -1146,7 +1146,7 @@ static const struct bcmgenet_stats bcmgenet_gstrings_stats[] = {
|
||||
static void bcmgenet_get_drvinfo(struct net_device *dev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, "bcmgenet", sizeof(info->driver));
|
||||
strscpy(info->driver, "bcmgenet", sizeof(info->driver));
|
||||
}
|
||||
|
||||
static int bcmgenet_get_sset_count(struct net_device *dev, int string_set)
|
||||
@@ -2707,8 +2707,7 @@ static int bcmgenet_init_rx_ring(struct bcmgenet_priv *priv,
|
||||
bcmgenet_init_rx_coalesce(ring);
|
||||
|
||||
/* Initialize Rx NAPI */
|
||||
netif_napi_add(priv->dev, &ring->napi, bcmgenet_rx_poll,
|
||||
NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(priv->dev, &ring->napi, bcmgenet_rx_poll);
|
||||
|
||||
bcmgenet_rdma_ring_writel(priv, index, 0, RDMA_PROD_INDEX);
|
||||
bcmgenet_rdma_ring_writel(priv, index, 0, RDMA_CONS_INDEX);
|
||||
|
||||
@@ -7380,9 +7380,9 @@ static void tg3_napi_init(struct tg3 *tp)
|
||||
{
|
||||
int i;
|
||||
|
||||
netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
|
||||
netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll);
|
||||
for (i = 1; i < tp->irq_cnt; i++)
|
||||
netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
|
||||
netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix);
|
||||
}
|
||||
|
||||
static void tg3_napi_fini(struct tg3 *tp)
|
||||
@@ -12302,9 +12302,9 @@ static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info
|
||||
{
|
||||
struct tg3 *tp = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
|
||||
strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strscpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
|
||||
strscpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
||||
|
||||
@@ -1891,7 +1891,7 @@ bnad_napi_add(struct bnad *bnad, u32 rx_id)
|
||||
for (i = 0; i < bnad->num_rxp_per_rx; i++) {
|
||||
rx_ctrl = &bnad->rx_info[rx_id].rx_ctrl[i];
|
||||
netif_napi_add(bnad->netdev, &rx_ctrl->napi,
|
||||
bnad_napi_poll_rx, NAPI_POLL_WEIGHT);
|
||||
bnad_napi_poll_rx);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ static const char *bnad_net_stats_strings[] = {
|
||||
"mac_tx_deferral",
|
||||
"mac_tx_excessive_deferral",
|
||||
"mac_tx_single_collision",
|
||||
"mac_tx_muliple_collision",
|
||||
"mac_tx_multiple_collision",
|
||||
"mac_tx_late_collision",
|
||||
"mac_tx_excessive_collision",
|
||||
"mac_tx_total_collision",
|
||||
@@ -283,7 +283,7 @@ bnad_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo)
|
||||
struct bfa_ioc_attr *ioc_attr;
|
||||
unsigned long flags;
|
||||
|
||||
strlcpy(drvinfo->driver, BNAD_NAME, sizeof(drvinfo->driver));
|
||||
strscpy(drvinfo->driver, BNAD_NAME, sizeof(drvinfo->driver));
|
||||
|
||||
ioc_attr = kzalloc(sizeof(*ioc_attr), GFP_KERNEL);
|
||||
if (ioc_attr) {
|
||||
@@ -291,12 +291,12 @@ bnad_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo)
|
||||
bfa_nw_ioc_get_attr(&bnad->bna.ioceth.ioc, ioc_attr);
|
||||
spin_unlock_irqrestore(&bnad->bna_lock, flags);
|
||||
|
||||
strlcpy(drvinfo->fw_version, ioc_attr->adapter_attr.fw_ver,
|
||||
strscpy(drvinfo->fw_version, ioc_attr->adapter_attr.fw_ver,
|
||||
sizeof(drvinfo->fw_version));
|
||||
kfree(ioc_attr);
|
||||
}
|
||||
|
||||
strlcpy(drvinfo->bus_info, pci_name(bnad->pcidev),
|
||||
strscpy(drvinfo->bus_info, pci_name(bnad->pcidev),
|
||||
sizeof(drvinfo->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/ptp_classify.h>
|
||||
#include <linux/reset.h>
|
||||
#include <linux/firmware/xlnx-zynqmp.h>
|
||||
#include "macb.h"
|
||||
|
||||
/* This structure is only used for MACB on SiFive FU540 devices */
|
||||
@@ -3977,8 +3978,8 @@ static int macb_init(struct platform_device *pdev)
|
||||
queue = &bp->queues[q];
|
||||
queue->bp = bp;
|
||||
spin_lock_init(&queue->tx_ptr_lock);
|
||||
netif_napi_add(dev, &queue->napi_rx, macb_rx_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(dev, &queue->napi_tx, macb_tx_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(dev, &queue->napi_rx, macb_rx_poll);
|
||||
netif_napi_add(dev, &queue->napi_tx, macb_tx_poll);
|
||||
if (hw_q) {
|
||||
queue->ISR = GEM_ISR(hw_q - 1);
|
||||
queue->IER = GEM_IER(hw_q - 1);
|
||||
@@ -4621,6 +4622,25 @@ static int init_reset_optional(struct platform_device *pdev)
|
||||
"failed to init SGMII PHY\n");
|
||||
}
|
||||
|
||||
ret = zynqmp_pm_is_function_supported(PM_IOCTL, IOCTL_SET_GEM_CONFIG);
|
||||
if (!ret) {
|
||||
u32 pm_info[2];
|
||||
|
||||
ret = of_property_read_u32_array(pdev->dev.of_node, "power-domains",
|
||||
pm_info, ARRAY_SIZE(pm_info));
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to read power management information\n");
|
||||
goto err_out_phy_exit;
|
||||
}
|
||||
ret = zynqmp_pm_set_gem_config(pm_info[1], GEM_CONFIG_FIXED, 0);
|
||||
if (ret)
|
||||
goto err_out_phy_exit;
|
||||
|
||||
ret = zynqmp_pm_set_gem_config(pm_info[1], GEM_CONFIG_SGMII_MODE, 1);
|
||||
if (ret)
|
||||
goto err_out_phy_exit;
|
||||
}
|
||||
|
||||
/* Fully reset controller at hardware level if mapped in device tree */
|
||||
ret = device_reset_optional(&pdev->dev);
|
||||
if (ret) {
|
||||
@@ -4629,6 +4649,8 @@ static int init_reset_optional(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
ret = macb_init(pdev);
|
||||
|
||||
err_out_phy_exit:
|
||||
if (ret)
|
||||
phy_exit(bp->sgmii_phy);
|
||||
|
||||
|
||||
@@ -1792,7 +1792,7 @@ static int xgmac_probe(struct platform_device *pdev)
|
||||
netdev_warn(ndev, "MAC address %pM not valid",
|
||||
ndev->dev_addr);
|
||||
|
||||
netif_napi_add(ndev, &priv->napi, xgmac_poll, 64);
|
||||
netif_napi_add(ndev, &priv->napi, xgmac_poll);
|
||||
ret = register_netdev(ndev);
|
||||
if (ret)
|
||||
goto err_reg;
|
||||
|
||||
@@ -87,8 +87,8 @@
|
||||
*/
|
||||
#define CN23XX_SLI_PKT_IN_JABBER 0x29170
|
||||
/* The input jabber is used to determine the TSO max size.
|
||||
* Due to H/W limitation, this need to be reduced to 60000
|
||||
* in order to to H/W TSO and avoid the WQE malfarmation
|
||||
* Due to H/W limitation, this needs to be reduced to 60000
|
||||
* in order to use H/W TSO and avoid the WQE malformation
|
||||
* PKO_BUG_24989_WQE_LEN
|
||||
*/
|
||||
#define CN23XX_DEFAULT_INPUT_JABBER 0xEA60 /*60000*/
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
#define CN23XX_CONFIG_PCIE_FLTMSK 0x720
|
||||
|
||||
/* The input jabber is used to determine the TSO max size.
|
||||
* Due to H/W limitation, this need to be reduced to 60000
|
||||
* in order to to H/W TSO and avoid the WQE malfarmation
|
||||
* Due to H/W limitation, this needs to be reduced to 60000
|
||||
* in order to use H/W TSO and avoid the WQE malformation
|
||||
* PKO_BUG_24989_WQE_LEN
|
||||
*/
|
||||
#define CN23XX_DEFAULT_INPUT_JABBER 0xEA60 /*60000*/
|
||||
|
||||
@@ -851,7 +851,7 @@ int liquidio_setup_io_queues(struct octeon_device *octeon_dev, int ifidx,
|
||||
napi = &droq->napi;
|
||||
dev_dbg(&octeon_dev->pci_dev->dev, "netif_napi_add netdev:%llx oct:%llx\n",
|
||||
(u64)netdev, (u64)octeon_dev);
|
||||
netif_napi_add(netdev, napi, liquidio_napi_poll, 64);
|
||||
netif_napi_add(netdev, napi, liquidio_napi_poll);
|
||||
|
||||
/* designate a CPU for this droq */
|
||||
droq->cpu_id = cpu_id;
|
||||
|
||||
@@ -92,11 +92,6 @@ static int octeon_console_debug_enabled(u32 console)
|
||||
/* time to wait for possible in-flight requests in milliseconds */
|
||||
#define WAIT_INFLIGHT_REQUEST msecs_to_jiffies(1000)
|
||||
|
||||
struct lio_trusted_vf_ctx {
|
||||
struct completion complete;
|
||||
int status;
|
||||
};
|
||||
|
||||
struct oct_link_status_resp {
|
||||
u64 rh;
|
||||
struct oct_link_info link_info;
|
||||
|
||||
@@ -1342,7 +1342,7 @@ static void octeon_mgmt_poll_controller(struct net_device *netdev)
|
||||
static void octeon_mgmt_get_drvinfo(struct net_device *netdev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
}
|
||||
|
||||
static int octeon_mgmt_nway_reset(struct net_device *dev)
|
||||
@@ -1396,8 +1396,8 @@ static int octeon_mgmt_probe(struct platform_device *pdev)
|
||||
|
||||
platform_set_drvdata(pdev, netdev);
|
||||
p = netdev_priv(netdev);
|
||||
netif_napi_add(netdev, &p->napi, octeon_mgmt_napi_poll,
|
||||
OCTEON_MGMT_NAPI_WEIGHT);
|
||||
netif_napi_add_weight(netdev, &p->napi, octeon_mgmt_napi_poll,
|
||||
OCTEON_MGMT_NAPI_WEIGHT);
|
||||
|
||||
p->netdev = netdev;
|
||||
p->dev = &pdev->dev;
|
||||
|
||||
@@ -191,8 +191,8 @@ static void nicvf_get_drvinfo(struct net_device *netdev,
|
||||
{
|
||||
struct nicvf *nic = netdev_priv(netdev);
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(nic->pdev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(nic->pdev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static u32 nicvf_get_msglevel(struct net_device *netdev)
|
||||
|
||||
@@ -1472,8 +1472,7 @@ int nicvf_open(struct net_device *netdev)
|
||||
}
|
||||
cq_poll->cq_idx = qidx;
|
||||
cq_poll->nicvf = nic;
|
||||
netif_napi_add(netdev, &cq_poll->napi, nicvf_poll,
|
||||
NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(netdev, &cq_poll->napi, nicvf_poll);
|
||||
napi_enable(&cq_poll->napi);
|
||||
nic->napi[qidx] = cq_poll;
|
||||
}
|
||||
|
||||
@@ -429,8 +429,8 @@ static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
{
|
||||
struct adapter *adapter = dev->ml_priv;
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
@@ -1053,7 +1053,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
netdev->hard_header_len += (netdev->hw_features & NETIF_F_TSO) ?
|
||||
sizeof(struct cpl_tx_pkt_lso) : sizeof(struct cpl_tx_pkt);
|
||||
|
||||
netif_napi_add(netdev, &adapter->napi, t1_poll, 64);
|
||||
netif_napi_add(netdev, &adapter->napi, t1_poll);
|
||||
|
||||
netdev->ethtool_ops = &t1_ethtool_ops;
|
||||
|
||||
|
||||
@@ -609,8 +609,7 @@ static void init_napi(struct adapter *adap)
|
||||
struct sge_qset *qs = &adap->sge.qs[i];
|
||||
|
||||
if (qs->adap)
|
||||
netif_napi_add(qs->netdev, &qs->napi, qs->napi.poll,
|
||||
64);
|
||||
netif_napi_add(qs->netdev, &qs->napi, qs->napi.poll);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1627,8 +1626,8 @@ static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
t3_get_tp_version(adapter, &tp_vers);
|
||||
spin_unlock(&adapter->stats_lock);
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(info->bus_info));
|
||||
if (fw_vers)
|
||||
snprintf(info->fw_version, sizeof(info->fw_version),
|
||||
|
||||
@@ -199,8 +199,8 @@ static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
struct adapter *adapter = netdev2adap(dev);
|
||||
u32 exprom_vers;
|
||||
|
||||
strlcpy(info->driver, cxgb4_driver_name, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(info->driver, cxgb4_driver_name, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(info->bus_info));
|
||||
info->regdump_len = get_regs_len(dev);
|
||||
|
||||
|
||||
@@ -3903,8 +3903,8 @@ static void cxgb4_mgmt_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct adapter *adapter = netdev2adap(dev);
|
||||
|
||||
strlcpy(info->driver, cxgb4_driver_name, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(adapter->pdev),
|
||||
strscpy(info->driver, cxgb4_driver_name, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(adapter->pdev),
|
||||
sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -4467,7 +4467,7 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq,
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
netif_napi_add(dev, &iq->napi, napi_rx_handler, 64);
|
||||
netif_napi_add(dev, &iq->napi, napi_rx_handler);
|
||||
iq->cur_desc = iq->desc;
|
||||
iq->cidx = 0;
|
||||
iq->gen = 1;
|
||||
|
||||
@@ -1553,8 +1553,8 @@ static void cxgb4vf_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct adapter *adapter = netdev2adap(dev);
|
||||
|
||||
strlcpy(drvinfo->driver, KBUILD_MODNAME, sizeof(drvinfo->driver));
|
||||
strlcpy(drvinfo->bus_info, pci_name(to_pci_dev(dev->dev.parent)),
|
||||
strscpy(drvinfo->driver, KBUILD_MODNAME, sizeof(drvinfo->driver));
|
||||
strscpy(drvinfo->bus_info, pci_name(to_pci_dev(dev->dev.parent)),
|
||||
sizeof(drvinfo->bus_info));
|
||||
snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version),
|
||||
"%u.%u.%u.%u, TP %u.%u.%u.%u",
|
||||
|
||||
@@ -2336,7 +2336,7 @@ int t4vf_sge_alloc_rxq(struct adapter *adapter, struct sge_rspq *rspq,
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
netif_napi_add(dev, &rspq->napi, napi_rx_handler, 64);
|
||||
netif_napi_add(dev, &rspq->napi, napi_rx_handler);
|
||||
rspq->cur_desc = rspq->desc;
|
||||
rspq->cidx = 0;
|
||||
rspq->gen = 1;
|
||||
|
||||
@@ -1069,8 +1069,7 @@ static void chtls_pass_accept_rpl(struct sk_buff *skb,
|
||||
cxgb4_l2t_send(csk->egress_dev, skb, csk->l2t_entry);
|
||||
}
|
||||
|
||||
static void inet_inherit_port(struct inet_hashinfo *hash_info,
|
||||
struct sock *lsk, struct sock *newsk)
|
||||
static void inet_inherit_port(struct sock *lsk, struct sock *newsk)
|
||||
{
|
||||
local_bh_disable();
|
||||
__inet_inherit_port(lsk, newsk);
|
||||
@@ -1240,7 +1239,7 @@ static struct sock *chtls_recv_sock(struct sock *lsk,
|
||||
ipv4.sysctl_tcp_window_scaling),
|
||||
tp->window_clamp);
|
||||
neigh_release(n);
|
||||
inet_inherit_port(&tcp_hashinfo, lsk, newsk);
|
||||
inet_inherit_port(lsk, newsk);
|
||||
csk_set_flag(csk, CSK_CONN_INLINE);
|
||||
bh_unlock_sock(newsk); /* tcp_create_openreq_child ->sk_clone_lock */
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@ static void chtls_register_dev(struct chtls_dev *cdev)
|
||||
{
|
||||
struct tls_toe_device *tlsdev = &cdev->tlsdev;
|
||||
|
||||
strlcpy(tlsdev->name, "chtls", TLS_TOE_DEVICE_NAME_MAX);
|
||||
strscpy(tlsdev->name, "chtls", TLS_TOE_DEVICE_NAME_MAX);
|
||||
strlcat(tlsdev->name, cdev->lldi->ports[0]->name,
|
||||
TLS_TOE_DEVICE_NAME_MAX);
|
||||
tlsdev->feature = chtls_inline_feature;
|
||||
|
||||
@@ -689,7 +689,7 @@ static int ep93xx_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||
|
||||
static void ep93xx_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
{
|
||||
strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
|
||||
}
|
||||
|
||||
static int ep93xx_get_link_ksettings(struct net_device *dev,
|
||||
@@ -812,7 +812,7 @@ static int ep93xx_eth_probe(struct platform_device *pdev)
|
||||
ep = netdev_priv(dev);
|
||||
ep->dev = dev;
|
||||
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||
netif_napi_add(dev, &ep->napi, ep93xx_poll, 64);
|
||||
netif_napi_add(dev, &ep->napi, ep93xx_poll);
|
||||
|
||||
platform_set_drvdata(pdev, dev);
|
||||
|
||||
|
||||
@@ -131,10 +131,10 @@ static void enic_get_drvinfo(struct net_device *netdev,
|
||||
if (err == -ENOMEM)
|
||||
return;
|
||||
|
||||
strlcpy(drvinfo->driver, DRV_NAME, sizeof(drvinfo->driver));
|
||||
strlcpy(drvinfo->fw_version, fw_info->fw_version,
|
||||
strscpy(drvinfo->driver, DRV_NAME, sizeof(drvinfo->driver));
|
||||
strscpy(drvinfo->fw_version, fw_info->fw_version,
|
||||
sizeof(drvinfo->fw_version));
|
||||
strlcpy(drvinfo->bus_info, pci_name(enic->pdev),
|
||||
strscpy(drvinfo->bus_info, pci_name(enic->pdev),
|
||||
sizeof(drvinfo->bus_info));
|
||||
}
|
||||
|
||||
|
||||
@@ -2633,16 +2633,17 @@ static int enic_dev_init(struct enic *enic)
|
||||
|
||||
switch (vnic_dev_get_intr_mode(enic->vdev)) {
|
||||
default:
|
||||
netif_napi_add(netdev, &enic->napi[0], enic_poll, 64);
|
||||
netif_napi_add(netdev, &enic->napi[0], enic_poll);
|
||||
break;
|
||||
case VNIC_DEV_INTR_MODE_MSIX:
|
||||
for (i = 0; i < enic->rq_count; i++) {
|
||||
netif_napi_add(netdev, &enic->napi[i],
|
||||
enic_poll_msix_rq, NAPI_POLL_WEIGHT);
|
||||
enic_poll_msix_rq);
|
||||
}
|
||||
for (i = 0; i < enic->wq_count; i++)
|
||||
netif_napi_add(netdev, &enic->napi[enic_cq_wq(enic, i)],
|
||||
enic_poll_msix_wq, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(netdev,
|
||||
&enic->napi[enic_cq_wq(enic, i)],
|
||||
enic_poll_msix_wq);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -2471,7 +2471,7 @@ static int gemini_ethernet_port_probe(struct platform_device *pdev)
|
||||
netdev->max_mtu = 10236 - VLAN_ETH_HLEN;
|
||||
|
||||
port->freeq_refill = 0;
|
||||
netif_napi_add(netdev, &port->napi, gmac_napi_poll, NAPI_POLL_WEIGHT);
|
||||
netif_napi_add(netdev, &port->napi, gmac_napi_poll);
|
||||
|
||||
ret = of_get_mac_address(np, mac);
|
||||
if (!ret) {
|
||||
|
||||
@@ -28,8 +28,7 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
||||
#include <asm/delay.h>
|
||||
#include <asm/irq.h>
|
||||
@@ -540,8 +539,8 @@ static void dm9000_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct board_info *dm = to_dm9000_board(dev);
|
||||
|
||||
strlcpy(info->driver, CARDNAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, to_platform_device(dm->dev)->name,
|
||||
strscpy(info->driver, CARDNAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, to_platform_device(dm->dev)->name,
|
||||
sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
@@ -1012,7 +1011,7 @@ static void dm9000_send_packet(struct net_device *dev,
|
||||
* Hardware start transmission.
|
||||
* Send a packet to media from the upper layer.
|
||||
*/
|
||||
static int
|
||||
static netdev_tx_t
|
||||
dm9000_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
unsigned long flags;
|
||||
@@ -1421,8 +1420,7 @@ dm9000_probe(struct platform_device *pdev)
|
||||
int iosize;
|
||||
int i;
|
||||
u32 id_val;
|
||||
int reset_gpios;
|
||||
enum of_gpio_flags flags;
|
||||
struct gpio_desc *reset_gpio;
|
||||
struct regulator *power;
|
||||
bool inv_mac_addr = false;
|
||||
u8 addr[ETH_ALEN];
|
||||
@@ -1442,20 +1440,24 @@ dm9000_probe(struct platform_device *pdev)
|
||||
dev_dbg(dev, "regulator enabled\n");
|
||||
}
|
||||
|
||||
reset_gpios = of_get_named_gpio_flags(dev->of_node, "reset-gpios", 0,
|
||||
&flags);
|
||||
if (gpio_is_valid(reset_gpios)) {
|
||||
ret = devm_gpio_request_one(dev, reset_gpios, flags,
|
||||
"dm9000_reset");
|
||||
reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
|
||||
ret = PTR_ERR_OR_ZERO(reset_gpio);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to request reset gpio: %d\n", ret);
|
||||
goto out_regulator_disable;
|
||||
}
|
||||
|
||||
if (reset_gpio) {
|
||||
ret = gpiod_set_consumer_name(reset_gpio, "dm9000_reset");
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to request reset gpio %d: %d\n",
|
||||
reset_gpios, ret);
|
||||
dev_err(dev, "failed to set reset gpio name: %d\n",
|
||||
ret);
|
||||
goto out_regulator_disable;
|
||||
}
|
||||
|
||||
/* According to manual PWRST# Low Period Min 1ms */
|
||||
msleep(2);
|
||||
gpio_set_value(reset_gpios, 1);
|
||||
gpiod_set_value_cansleep(reset_gpio, 0);
|
||||
/* Needs 3ms to read eeprom when PWRST is deasserted */
|
||||
msleep(4);
|
||||
}
|
||||
|
||||
@@ -1606,8 +1606,8 @@ static void de_get_drvinfo (struct net_device *dev,struct ethtool_drvinfo *info)
|
||||
{
|
||||
struct de_private *de = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(de->pdev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(de->pdev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static int de_get_regs_len(struct net_device *dev)
|
||||
|
||||
@@ -1074,8 +1074,8 @@ static void dmfe_ethtool_get_drvinfo(struct net_device *dev,
|
||||
{
|
||||
struct dmfe_board_info *np = netdev_priv(dev);
|
||||
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
static int dmfe_ethtool_set_wol(struct net_device *dev,
|
||||
|
||||
@@ -858,8 +858,8 @@ static struct net_device_stats *tulip_get_stats(struct net_device *dev)
|
||||
static void tulip_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||
{
|
||||
struct tulip_private *np = netdev_priv(dev);
|
||||
strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
|
||||
strscpy(info->driver, DRV_NAME, sizeof(info->driver));
|
||||
strscpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user