1// SPDX-License-Identifier: GPL-2.0-or-later
2 /***************************************************************************
3 *
4 * Copyright (C) 2007-2008 SMSC
5 *
6 *****************************************************************************/
7
8#include <linux/module.h>
9#include <linux/kmod.h>
10#include <linux/netdevice.h>
11#include <linux/etherdevice.h>
12#include <linux/ethtool.h>
13#include <linux/mii.h>
14#include <linux/usb.h>
15#include <linux/bitrev.h>
16#include <linux/crc16.h>
17#include <linux/crc32.h>
18#include <linux/usb/usbnet.h>
19#include <linux/slab.h>
20#include <linux/of_net.h>
21#include <linux/mdio.h>
22#include <linux/phy.h>
23#include "smsc95xx.h"
24
25#define SMSC_CHIPNAME			"smsc95xx"
26#define SMSC_DRIVER_VERSION		"2.0.0"
27#define HS_USB_PKT_SIZE			(512)
28#define FS_USB_PKT_SIZE			(64)
29#define DEFAULT_HS_BURST_CAP_SIZE	(16 * 1024 + 5 * HS_USB_PKT_SIZE)
30#define DEFAULT_FS_BURST_CAP_SIZE	(6 * 1024 + 33 * FS_USB_PKT_SIZE)
31#define DEFAULT_BULK_IN_DELAY		(0x00002000)
32#define MAX_SINGLE_PACKET_SIZE		(2048)
33#define LAN95XX_EEPROM_MAGIC		(0x9500)
34#define EEPROM_MAC_OFFSET		(0x01)
35#define DEFAULT_TX_CSUM_ENABLE		(true)
36#define DEFAULT_RX_CSUM_ENABLE		(true)
37#define SMSC95XX_INTERNAL_PHY_ID	(1)
38#define SMSC95XX_TX_OVERHEAD		(8)
39#define SMSC95XX_TX_OVERHEAD_CSUM	(12)
40#define SUPPORTED_WAKE			(WAKE_PHY | WAKE_UCAST | WAKE_BCAST | \
41					 WAKE_MCAST | WAKE_ARP | WAKE_MAGIC)
42
43#define FEATURE_8_WAKEUP_FILTERS	(0x01)
44#define FEATURE_PHY_NLP_CROSSOVER	(0x02)
45#define FEATURE_REMOTE_WAKEUP		(0x04)
46
47#define SUSPEND_SUSPEND0		(0x01)
48#define SUSPEND_SUSPEND1		(0x02)
49#define SUSPEND_SUSPEND2		(0x04)
50#define SUSPEND_SUSPEND3		(0x08)
51#define SUSPEND_ALLMODES		(SUSPEND_SUSPEND0 | SUSPEND_SUSPEND1 | \
52					 SUSPEND_SUSPEND2 | SUSPEND_SUSPEND3)
53
54struct smsc95xx_priv {
55	u32 mac_cr;
56	u32 hash_hi;
57	u32 hash_lo;
58	u32 wolopts;
59	spinlock_t mac_cr_lock;
60	u8 features;
61	u8 suspend_flags;
62	struct mii_bus *mdiobus;
63	struct phy_device *phydev;
64	struct task_struct *pm_task;
65};
66
67static bool turbo_mode = true;
68module_param(turbo_mode, bool, 0644);
69MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
70
71static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
72					    u32 *data, int in_pm)
73{
74	struct smsc95xx_priv *pdata = dev->driver_priv;
75	u32 buf;
76	int ret;
77	int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16);
78
79	BUG_ON(!dev);
80
81	if (current != pdata->pm_task)
82		fn = usbnet_read_cmd;
83	else
84		fn = usbnet_read_cmd_nopm;
85
86	ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN
87		 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
88		 0, index, &buf, 4);
89	if (ret < 4) {
90		ret = ret < 0 ? ret : -ENODATA;
91
92		if (ret != -ENODEV)
93			netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n",
94				    index, ret);
95		return ret;
96	}
97
98	le32_to_cpus(&buf);
99	*data = buf;
100
101	return ret;
102}
103
104static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index,
105					     u32 data, int in_pm)
106{
107	struct smsc95xx_priv *pdata = dev->driver_priv;
108	u32 buf;
109	int ret;
110	int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16);
111
112	BUG_ON(!dev);
113
114	if (current != pdata->pm_task)
115		fn = usbnet_write_cmd;
116	else
117		fn = usbnet_write_cmd_nopm;
118
119	buf = data;
120	cpu_to_le32s(&buf);
121
122	ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT
123		 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
124		 0, index, &buf, 4);
125	if (ret < 0 && ret != -ENODEV)
126		netdev_warn(dev->net, "Failed to write reg index 0x%08x: %d\n",
127			    index, ret);
128
129	return ret;
130}
131
132static int __must_check smsc95xx_read_reg_nopm(struct usbnet *dev, u32 index,
133					       u32 *data)
134{
135	return __smsc95xx_read_reg(dev, index, data, 1);
136}
137
138static int __must_check smsc95xx_write_reg_nopm(struct usbnet *dev, u32 index,
139						u32 data)
140{
141	return __smsc95xx_write_reg(dev, index, data, 1);
142}
143
144static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
145					  u32 *data)
146{
147	return __smsc95xx_read_reg(dev, index, data, 0);
148}
149
150static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index,
151					   u32 data)
152{
153	return __smsc95xx_write_reg(dev, index, data, 0);
154}
155
156/* Loop until the read is completed with timeout
157 * called with phy_mutex held */
158static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev,
159						     int in_pm)
160{
161	unsigned long start_time = jiffies;
162	u32 val;
163	int ret;
164
165	do {
166		ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm);
167		if (ret < 0) {
168			/* Ignore -ENODEV error during disconnect() */
169			if (ret == -ENODEV)
170				return 0;
171			netdev_warn(dev->net, "Error reading MII_ACCESS\n");
172			return ret;
173		}
174
175		if (!(val & MII_BUSY_))
176			return 0;
177	} while (!time_after(jiffies, start_time + HZ));
178
179	return -EIO;
180}
181
182static u32 mii_address_cmd(int phy_id, int idx, u16 op)
183{
184	return (phy_id & 0x1f) << 11 | (idx & 0x1f) << 6 | op;
185}
186
187static int __smsc95xx_mdio_read(struct usbnet *dev, int phy_id, int idx,
188				int in_pm)
189{
190	u32 val, addr;
191	int ret;
192
193	mutex_lock(&dev->phy_mutex);
194
195	/* confirm MII not busy */
196	ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
197	if (ret < 0) {
198		netdev_warn(dev->net, "%s: MII is busy\n", __func__);
199		goto done;
200	}
201
202	/* set the address, index & direction (read from PHY) */
203	addr = mii_address_cmd(phy_id, idx, MII_READ_ | MII_BUSY_);
204	ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
205	if (ret < 0) {
206		if (ret != -ENODEV)
207			netdev_warn(dev->net, "Error writing MII_ADDR\n");
208		goto done;
209	}
210
211	ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
212	if (ret < 0) {
213		netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx);
214		goto done;
215	}
216
217	ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm);
218	if (ret < 0) {
219		if (ret != -ENODEV)
220			netdev_warn(dev->net, "Error reading MII_DATA\n");
221		goto done;
222	}
223
224	ret = (u16)(val & 0xFFFF);
225
226done:
227	mutex_unlock(&dev->phy_mutex);
228
229	/* Ignore -ENODEV error during disconnect() */
230	if (ret == -ENODEV)
231		return 0;
232	return ret;
233}
234
235static void __smsc95xx_mdio_write(struct usbnet *dev, int phy_id,
236				  int idx, int regval, int in_pm)
237{
238	u32 val, addr;
239	int ret;
240
241	mutex_lock(&dev->phy_mutex);
242
243	/* confirm MII not busy */
244	ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
245	if (ret < 0) {
246		netdev_warn(dev->net, "%s: MII is busy\n", __func__);
247		goto done;
248	}
249
250	val = regval;
251	ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm);
252	if (ret < 0) {
253		if (ret != -ENODEV)
254			netdev_warn(dev->net, "Error writing MII_DATA\n");
255		goto done;
256	}
257
258	/* set the address, index & direction (write to PHY) */
259	addr = mii_address_cmd(phy_id, idx, MII_WRITE_ | MII_BUSY_);
260	ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
261	if (ret < 0) {
262		if (ret != -ENODEV)
263			netdev_warn(dev->net, "Error writing MII_ADDR\n");
264		goto done;
265	}
266
267	ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
268	if (ret < 0) {
269		netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx);
270		goto done;
271	}
272
273done:
274	mutex_unlock(&dev->phy_mutex);
275}
276
277static int smsc95xx_mdio_read_nopm(struct usbnet *dev, int idx)
278{
279	struct smsc95xx_priv *pdata = dev->driver_priv;
280
281	return __smsc95xx_mdio_read(dev, pdata->phydev->mdio.addr, idx, 1);
282}
283
284static void smsc95xx_mdio_write_nopm(struct usbnet *dev, int idx, int regval)
285{
286	struct smsc95xx_priv *pdata = dev->driver_priv;
287
288	__smsc95xx_mdio_write(dev, pdata->phydev->mdio.addr, idx, regval, 1);
289}
290
291static int smsc95xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx)
292{
293	struct usbnet *dev = bus->priv;
294
295	return __smsc95xx_mdio_read(dev, phy_id, idx, 0);
296}
297
298static int smsc95xx_mdiobus_write(struct mii_bus *bus, int phy_id, int idx,
299				  u16 regval)
300{
301	struct usbnet *dev = bus->priv;
302
303	__smsc95xx_mdio_write(dev, phy_id, idx, regval, 0);
304	return 0;
305}
306
307static int __must_check smsc95xx_wait_eeprom(struct usbnet *dev)
308{
309	unsigned long start_time = jiffies;
310	u32 val;
311	int ret;
312
313	do {
314		ret = smsc95xx_read_reg(dev, E2P_CMD, &val);
315		if (ret < 0) {
316			netdev_warn(dev->net, "Error reading E2P_CMD\n");
317			return ret;
318		}
319
320		if (!(val & E2P_CMD_BUSY_) || (val & E2P_CMD_TIMEOUT_))
321			break;
322		udelay(40);
323	} while (!time_after(jiffies, start_time + HZ));
324
325	if (val & (E2P_CMD_TIMEOUT_ | E2P_CMD_BUSY_)) {
326		netdev_warn(dev->net, "EEPROM read operation timeout\n");
327		return -EIO;
328	}
329
330	return 0;
331}
332
333static int __must_check smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev)
334{
335	unsigned long start_time = jiffies;
336	u32 val;
337	int ret;
338
339	do {
340		ret = smsc95xx_read_reg(dev, E2P_CMD, &val);
341		if (ret < 0) {
342			netdev_warn(dev->net, "Error reading E2P_CMD\n");
343			return ret;
344		}
345
346		if (!(val & E2P_CMD_BUSY_))
347			return 0;
348
349		udelay(40);
350	} while (!time_after(jiffies, start_time + HZ));
351
352	netdev_warn(dev->net, "EEPROM is busy\n");
353	return -EIO;
354}
355
356static int smsc95xx_read_eeprom(struct usbnet *dev, u32 offset, u32 length,
357				u8 *data)
358{
359	u32 val;
360	int i, ret;
361
362	BUG_ON(!dev);
363	BUG_ON(!data);
364
365	ret = smsc95xx_eeprom_confirm_not_busy(dev);
366	if (ret)
367		return ret;
368
369	for (i = 0; i < length; i++) {
370		val = E2P_CMD_BUSY_ | E2P_CMD_READ_ | (offset & E2P_CMD_ADDR_);
371		ret = smsc95xx_write_reg(dev, E2P_CMD, val);
372		if (ret < 0) {
373			netdev_warn(dev->net, "Error writing E2P_CMD\n");
374			return ret;
375		}
376
377		ret = smsc95xx_wait_eeprom(dev);
378		if (ret < 0)
379			return ret;
380
381		ret = smsc95xx_read_reg(dev, E2P_DATA, &val);
382		if (ret < 0) {
383			netdev_warn(dev->net, "Error reading E2P_DATA\n");
384			return ret;
385		}
386
387		data[i] = val & 0xFF;
388		offset++;
389	}
390
391	return 0;
392}
393
394static int smsc95xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length,
395				 u8 *data)
396{
397	u32 val;
398	int i, ret;
399
400	BUG_ON(!dev);
401	BUG_ON(!data);
402
403	ret = smsc95xx_eeprom_confirm_not_busy(dev);
404	if (ret)
405		return ret;
406
407	/* Issue write/erase enable command */
408	val = E2P_CMD_BUSY_ | E2P_CMD_EWEN_;
409	ret = smsc95xx_write_reg(dev, E2P_CMD, val);
410	if (ret < 0) {
411		netdev_warn(dev->net, "Error writing E2P_DATA\n");
412		return ret;
413	}
414
415	ret = smsc95xx_wait_eeprom(dev);
416	if (ret < 0)
417		return ret;
418
419	for (i = 0; i < length; i++) {
420
421		/* Fill data register */
422		val = data[i];
423		ret = smsc95xx_write_reg(dev, E2P_DATA, val);
424		if (ret < 0) {
425			netdev_warn(dev->net, "Error writing E2P_DATA\n");
426			return ret;
427		}
428
429		/* Send "write" command */
430		val = E2P_CMD_BUSY_ | E2P_CMD_WRITE_ | (offset & E2P_CMD_ADDR_);
431		ret = smsc95xx_write_reg(dev, E2P_CMD, val);
432		if (ret < 0) {
433			netdev_warn(dev->net, "Error writing E2P_CMD\n");
434			return ret;
435		}
436
437		ret = smsc95xx_wait_eeprom(dev);
438		if (ret < 0)
439			return ret;
440
441		offset++;
442	}
443
444	return 0;
445}
446
447static int __must_check smsc95xx_write_reg_async(struct usbnet *dev, u16 index,
448						 u32 data)
449{
450	const u16 size = 4;
451	u32 buf;
452	int ret;
453
454	buf = data;
455	cpu_to_le32s(&buf);
456
457	ret = usbnet_write_cmd_async(dev, USB_VENDOR_REQUEST_WRITE_REGISTER,
458				     USB_DIR_OUT | USB_TYPE_VENDOR |
459				     USB_RECIP_DEVICE,
460				     0, index, &buf, size);
461	if (ret < 0)
462		netdev_warn(dev->net, "Error write async cmd, sts=%d\n",
463			    ret);
464	return ret;
465}
466
467/* returns hash bit number for given MAC address
468 * example:
469 * 01 00 5E 00 00 01 -> returns bit number 31 */
470static unsigned int smsc95xx_hash(char addr[ETH_ALEN])
471{
472	return (ether_crc(ETH_ALEN, addr) >> 26) & 0x3f;
473}
474
475static void smsc95xx_set_multicast(struct net_device *netdev)
476{
477	struct usbnet *dev = netdev_priv(netdev);
478	struct smsc95xx_priv *pdata = dev->driver_priv;
479	unsigned long flags;
480	int ret;
481
482	pdata->hash_hi = 0;
483	pdata->hash_lo = 0;
484
485	spin_lock_irqsave(&pdata->mac_cr_lock, flags);
486
487	if (dev->net->flags & IFF_PROMISC) {
488		netif_dbg(dev, drv, dev->net, "promiscuous mode enabled\n");
489		pdata->mac_cr |= MAC_CR_PRMS_;
490		pdata->mac_cr &= ~(MAC_CR_MCPAS_ | MAC_CR_HPFILT_);
491	} else if (dev->net->flags & IFF_ALLMULTI) {
492		netif_dbg(dev, drv, dev->net, "receive all multicast enabled\n");
493		pdata->mac_cr |= MAC_CR_MCPAS_;
494		pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_HPFILT_);
495	} else if (!netdev_mc_empty(dev->net)) {
496		struct netdev_hw_addr *ha;
497
498		pdata->mac_cr |= MAC_CR_HPFILT_;
499		pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_);
500
501		netdev_for_each_mc_addr(ha, netdev) {
502			u32 bitnum = smsc95xx_hash(ha->addr);
503			u32 mask = 0x01 << (bitnum & 0x1F);
504			if (bitnum & 0x20)
505				pdata->hash_hi |= mask;
506			else
507				pdata->hash_lo |= mask;
508		}
509
510		netif_dbg(dev, drv, dev->net, "HASHH=0x%08X, HASHL=0x%08X\n",
511				   pdata->hash_hi, pdata->hash_lo);
512	} else {
513		netif_dbg(dev, drv, dev->net, "receive own packets only\n");
514		pdata->mac_cr &=
515			~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_);
516	}
517
518	spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
519
520	/* Initiate async writes, as we can't wait for completion here */
521	ret = smsc95xx_write_reg_async(dev, HASHH, pdata->hash_hi);
522	if (ret < 0)
523		netdev_warn(dev->net, "failed to initiate async write to HASHH\n");
524
525	ret = smsc95xx_write_reg_async(dev, HASHL, pdata->hash_lo);
526	if (ret < 0)
527		netdev_warn(dev->net, "failed to initiate async write to HASHL\n");
528
529	ret = smsc95xx_write_reg_async(dev, MAC_CR, pdata->mac_cr);
530	if (ret < 0)
531		netdev_warn(dev->net, "failed to initiate async write to MAC_CR\n");
532}
533
534static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev)
535{
536	u32 flow = 0, afc_cfg;
537	struct smsc95xx_priv *pdata = dev->driver_priv;
538	bool tx_pause, rx_pause;
539
540	int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg);
541	if (ret < 0)
542		return ret;
543
544	if (pdata->phydev->duplex == DUPLEX_FULL) {
545		phy_get_pause(pdata->phydev, &tx_pause, &rx_pause);
546
547		if (rx_pause)
548			flow = 0xFFFF0002;
549
550		if (tx_pause) {
551			afc_cfg |= 0xF;
552			flow |= 0xFFFF0000;
553		} else {
554			afc_cfg &= ~0xF;
555		}
556
557		netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n",
558			  rx_pause ? "enabled" : "disabled",
559			  tx_pause ? "enabled" : "disabled");
560	} else {
561		netif_dbg(dev, link, dev->net, "half duplex\n");
562		afc_cfg |= 0xF;
563	}
564
565	ret = smsc95xx_write_reg(dev, FLOW, flow);
566	if (ret < 0)
567		return ret;
568
569	return smsc95xx_write_reg(dev, AFC_CFG, afc_cfg);
570}
571
572static void smsc95xx_mac_update_fullduplex(struct usbnet *dev)
573{
574	struct smsc95xx_priv *pdata = dev->driver_priv;
575	unsigned long flags;
576	int ret;
577
578	spin_lock_irqsave(&pdata->mac_cr_lock, flags);
579	if (pdata->phydev->duplex != DUPLEX_FULL) {
580		pdata->mac_cr &= ~MAC_CR_FDPX_;
581		pdata->mac_cr |= MAC_CR_RCVOWN_;
582	} else {
583		pdata->mac_cr &= ~MAC_CR_RCVOWN_;
584		pdata->mac_cr |= MAC_CR_FDPX_;
585	}
586	spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
587
588	ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
589	if (ret < 0) {
590		if (ret != -ENODEV)
591			netdev_warn(dev->net,
592				    "Error updating MAC full duplex mode\n");
593		return;
594	}
595
596	ret = smsc95xx_phy_update_flowcontrol(dev);
597	if (ret < 0)
598		netdev_warn(dev->net, "Error updating PHY flow control\n");
599}
600
601static void smsc95xx_status(struct usbnet *dev, struct urb *urb)
602{
603	u32 intdata;
604
605	if (urb->actual_length != 4) {
606		netdev_warn(dev->net, "unexpected urb length %d\n",
607			    urb->actual_length);
608		return;
609	}
610
611	intdata = get_unaligned_le32(urb->transfer_buffer);
612	netif_dbg(dev, link, dev->net, "intdata: 0x%08X\n", intdata);
613
614	if (intdata & INT_ENP_PHY_INT_)
615		;
616	else
617		netdev_warn(dev->net, "unexpected interrupt, intdata=0x%08X\n",
618			    intdata);
619}
620
621/* Enable or disable Tx & Rx checksum offload engines */
622static int smsc95xx_set_features(struct net_device *netdev,
623	netdev_features_t features)
624{
625	struct usbnet *dev = netdev_priv(netdev);
626	u32 read_buf;
627	int ret;
628
629	ret = smsc95xx_read_reg(dev, COE_CR, &read_buf);
630	if (ret < 0)
631		return ret;
632
633	if (features & NETIF_F_IP_CSUM)
634		read_buf |= Tx_COE_EN_;
635	else
636		read_buf &= ~Tx_COE_EN_;
637
638	if (features & NETIF_F_RXCSUM)
639		read_buf |= Rx_COE_EN_;
640	else
641		read_buf &= ~Rx_COE_EN_;
642
643	ret = smsc95xx_write_reg(dev, COE_CR, read_buf);
644	if (ret < 0)
645		return ret;
646
647	netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf);
648	return 0;
649}
650
651static int smsc95xx_ethtool_get_eeprom_len(struct net_device *net)
652{
653	return MAX_EEPROM_SIZE;
654}
655
656static int smsc95xx_ethtool_get_eeprom(struct net_device *netdev,
657				       struct ethtool_eeprom *ee, u8 *data)
658{
659	struct usbnet *dev = netdev_priv(netdev);
660
661	ee->magic = LAN95XX_EEPROM_MAGIC;
662
663	return smsc95xx_read_eeprom(dev, ee->offset, ee->len, data);
664}
665
666static int smsc95xx_ethtool_set_eeprom(struct net_device *netdev,
667				       struct ethtool_eeprom *ee, u8 *data)
668{
669	struct usbnet *dev = netdev_priv(netdev);
670
671	if (ee->magic != LAN95XX_EEPROM_MAGIC) {
672		netdev_warn(dev->net, "EEPROM: magic value mismatch, magic = 0x%x\n",
673			    ee->magic);
674		return -EINVAL;
675	}
676
677	return smsc95xx_write_eeprom(dev, ee->offset, ee->len, data);
678}
679
680static int smsc95xx_ethtool_getregslen(struct net_device *netdev)
681{
682	/* all smsc95xx registers */
683	return COE_CR - ID_REV + sizeof(u32);
684}
685
686static void
687smsc95xx_ethtool_getregs(struct net_device *netdev, struct ethtool_regs *regs,
688			 void *buf)
689{
690	struct usbnet *dev = netdev_priv(netdev);
691	unsigned int i, j;
692	int retval;
693	u32 *data = buf;
694
695	retval = smsc95xx_read_reg(dev, ID_REV, &regs->version);
696	if (retval < 0) {
697		netdev_warn(netdev, "REGS: cannot read ID_REV\n");
698		return;
699	}
700
701	for (i = ID_REV, j = 0; i <= COE_CR; i += (sizeof(u32)), j++) {
702		retval = smsc95xx_read_reg(dev, i, &data[j]);
703		if (retval < 0) {
704			netdev_warn(netdev, "REGS: cannot read reg[%x]\n", i);
705			return;
706		}
707	}
708}
709
710static void smsc95xx_ethtool_get_wol(struct net_device *net,
711				     struct ethtool_wolinfo *wolinfo)
712{
713	struct usbnet *dev = netdev_priv(net);
714	struct smsc95xx_priv *pdata = dev->driver_priv;
715
716	wolinfo->supported = SUPPORTED_WAKE;
717	wolinfo->wolopts = pdata->wolopts;
718}
719
720static int smsc95xx_ethtool_set_wol(struct net_device *net,
721				    struct ethtool_wolinfo *wolinfo)
722{
723	struct usbnet *dev = netdev_priv(net);
724	struct smsc95xx_priv *pdata = dev->driver_priv;
725	int ret;
726
727	if (wolinfo->wolopts & ~SUPPORTED_WAKE)
728		return -EINVAL;
729
730	pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
731
732	ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
733	if (ret < 0)
734		netdev_warn(dev->net, "device_set_wakeup_enable error %d\n", ret);
735
736	return ret;
737}
738
739static u32 smsc95xx_get_link(struct net_device *net)
740{
741	phy_read_status(net->phydev);
742	return net->phydev->link;
743}
744
745static const struct ethtool_ops smsc95xx_ethtool_ops = {
746	.get_link	= smsc95xx_get_link,
747	.nway_reset	= phy_ethtool_nway_reset,
748	.get_drvinfo	= usbnet_get_drvinfo,
749	.get_msglevel	= usbnet_get_msglevel,
750	.set_msglevel	= usbnet_set_msglevel,
751	.get_eeprom_len	= smsc95xx_ethtool_get_eeprom_len,
752	.get_eeprom	= smsc95xx_ethtool_get_eeprom,
753	.set_eeprom	= smsc95xx_ethtool_set_eeprom,
754	.get_regs_len	= smsc95xx_ethtool_getregslen,
755	.get_regs	= smsc95xx_ethtool_getregs,
756	.get_wol	= smsc95xx_ethtool_get_wol,
757	.set_wol	= smsc95xx_ethtool_set_wol,
758	.get_link_ksettings	= phy_ethtool_get_link_ksettings,
759	.set_link_ksettings	= phy_ethtool_set_link_ksettings,
760	.get_ts_info	= ethtool_op_get_ts_info,
761};
762
763static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
764{
765	if (!netif_running(netdev))
766		return -EINVAL;
767
768	return phy_mii_ioctl(netdev->phydev, rq, cmd);
769}
770
771static void smsc95xx_init_mac_address(struct usbnet *dev)
772{
773	/* maybe the boot loader passed the MAC address in devicetree */
774	if (!eth_platform_get_mac_address(&dev->udev->dev,
775			dev->net->dev_addr)) {
776		if (is_valid_ether_addr(dev->net->dev_addr)) {
777			/* device tree values are valid so use them */
778			netif_dbg(dev, ifup, dev->net, "MAC address read from the device tree\n");
779			return;
780		}
781	}
782
783	/* try reading mac address from EEPROM */
784	if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
785			dev->net->dev_addr) == 0) {
786		if (is_valid_ether_addr(dev->net->dev_addr)) {
787			/* eeprom values are valid so use them */
788			netif_dbg(dev, ifup, dev->net, "MAC address read from EEPROM\n");
789			return;
790		}
791	}
792
793	/* no useful static MAC address found. generate a random one */
794	eth_hw_addr_random(dev->net);
795	netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n");
796}
797
798static int smsc95xx_set_mac_address(struct usbnet *dev)
799{
800	u32 addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 |
801		dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24;
802	u32 addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8;
803	int ret;
804
805	ret = smsc95xx_write_reg(dev, ADDRL, addr_lo);
806	if (ret < 0)
807		return ret;
808
809	return smsc95xx_write_reg(dev, ADDRH, addr_hi);
810}
811
812/* starts the TX path */
813static int smsc95xx_start_tx_path(struct usbnet *dev)
814{
815	struct smsc95xx_priv *pdata = dev->driver_priv;
816	unsigned long flags;
817	int ret;
818
819	/* Enable Tx at MAC */
820	spin_lock_irqsave(&pdata->mac_cr_lock, flags);
821	pdata->mac_cr |= MAC_CR_TXEN_;
822	spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
823
824	ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
825	if (ret < 0)
826		return ret;
827
828	/* Enable Tx at SCSRs */
829	return smsc95xx_write_reg(dev, TX_CFG, TX_CFG_ON_);
830}
831
832/* Starts the Receive path */
833static int smsc95xx_start_rx_path(struct usbnet *dev, int in_pm)
834{
835	struct smsc95xx_priv *pdata = dev->driver_priv;
836	unsigned long flags;
837
838	spin_lock_irqsave(&pdata->mac_cr_lock, flags);
839	pdata->mac_cr |= MAC_CR_RXEN_;
840	spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
841
842	return __smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr, in_pm);
843}
844
845static int smsc95xx_reset(struct usbnet *dev)
846{
847	struct smsc95xx_priv *pdata = dev->driver_priv;
848	u32 read_buf, write_buf, burst_cap;
849	int ret = 0, timeout;
850
851	netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n");
852
853	ret = smsc95xx_write_reg(dev, HW_CFG, HW_CFG_LRST_);
854	if (ret < 0)
855		return ret;
856
857	timeout = 0;
858	do {
859		msleep(10);
860		ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
861		if (ret < 0)
862			return ret;
863		timeout++;
864	} while ((read_buf & HW_CFG_LRST_) && (timeout < 100));
865
866	if (timeout >= 100) {
867		netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n");
868		return -ETIMEDOUT;
869	}
870
871	ret = smsc95xx_write_reg(dev, PM_CTRL, PM_CTL_PHY_RST_);
872	if (ret < 0)
873		return ret;
874
875	timeout = 0;
876	do {
877		msleep(10);
878		ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf);
879		if (ret < 0)
880			return ret;
881		timeout++;
882	} while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100));
883
884	if (timeout >= 100) {
885		netdev_warn(dev->net, "timeout waiting for PHY Reset\n");
886		return ret;
887	}
888
889	ret = smsc95xx_set_mac_address(dev);
890	if (ret < 0)
891		return ret;
892
893	netif_dbg(dev, ifup, dev->net, "MAC Address: %pM\n",
894		  dev->net->dev_addr);
895
896	ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
897	if (ret < 0)
898		return ret;
899
900	netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n",
901		  read_buf);
902
903	read_buf |= HW_CFG_BIR_;
904
905	ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
906	if (ret < 0)
907		return ret;
908
909	ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
910	if (ret < 0)
911		return ret;
912
913	netif_dbg(dev, ifup, dev->net,
914		  "Read Value from HW_CFG after writing HW_CFG_BIR_: 0x%08x\n",
915		  read_buf);
916
917	if (!turbo_mode) {
918		burst_cap = 0;
919		dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE;
920	} else if (dev->udev->speed == USB_SPEED_HIGH) {
921		burst_cap = DEFAULT_HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE;
922		dev->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE;
923	} else {
924		burst_cap = DEFAULT_FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE;
925		dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE;
926	}
927
928	netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n",
929		  (ulong)dev->rx_urb_size);
930
931	ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap);
932	if (ret < 0)
933		return ret;
934
935	ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf);
936	if (ret < 0)
937		return ret;
938
939	netif_dbg(dev, ifup, dev->net,
940		  "Read Value from BURST_CAP after writing: 0x%08x\n",
941		  read_buf);
942
943	ret = smsc95xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY);
944	if (ret < 0)
945		return ret;
946
947	ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf);
948	if (ret < 0)
949		return ret;
950
951	netif_dbg(dev, ifup, dev->net,
952		  "Read Value from BULK_IN_DLY after writing: 0x%08x\n",
953		  read_buf);
954
955	ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
956	if (ret < 0)
957		return ret;
958
959	netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG: 0x%08x\n",
960		  read_buf);
961
962	if (turbo_mode)
963		read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_);
964
965	read_buf &= ~HW_CFG_RXDOFF_;
966
967	/* set Rx data offset=2, Make IP header aligns on word boundary. */
968	read_buf |= NET_IP_ALIGN << 9;
969
970	ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
971	if (ret < 0)
972		return ret;
973
974	ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
975	if (ret < 0)
976		return ret;
977
978	netif_dbg(dev, ifup, dev->net,
979		  "Read Value from HW_CFG after writing: 0x%08x\n", read_buf);
980
981	ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
982	if (ret < 0)
983		return ret;
984
985	ret = smsc95xx_read_reg(dev, ID_REV, &read_buf);
986	if (ret < 0)
987		return ret;
988	netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf);
989
990	/* Configure GPIO pins as LED outputs */
991	write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED |
992		LED_GPIO_CFG_FDX_LED;
993	ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf);
994	if (ret < 0)
995		return ret;
996
997	/* Init Tx */
998	ret = smsc95xx_write_reg(dev, FLOW, 0);
999	if (ret < 0)
1000		return ret;
1001
1002	ret = smsc95xx_write_reg(dev, AFC_CFG, AFC_CFG_DEFAULT);
1003	if (ret < 0)
1004		return ret;
1005
1006	/* Don't need mac_cr_lock during initialisation */
1007	ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr);
1008	if (ret < 0)
1009		return ret;
1010
1011	/* Init Rx */
1012	/* Set Vlan */
1013	ret = smsc95xx_write_reg(dev, VLAN1, (u32)ETH_P_8021Q);
1014	if (ret < 0)
1015		return ret;
1016
1017	/* Enable or disable checksum offload engines */
1018	ret = smsc95xx_set_features(dev->net, dev->net->features);
1019	if (ret < 0) {
1020		netdev_warn(dev->net, "Failed to set checksum offload features\n");
1021		return ret;
1022	}
1023
1024	smsc95xx_set_multicast(dev->net);
1025
1026	ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf);
1027	if (ret < 0)
1028		return ret;
1029
1030	/* enable PHY interrupts */
1031	read_buf |= INT_EP_CTL_PHY_INT_;
1032
1033	ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf);
1034	if (ret < 0)
1035		return ret;
1036
1037	ret = smsc95xx_start_tx_path(dev);
1038	if (ret < 0) {
1039		netdev_warn(dev->net, "Failed to start TX path\n");
1040		return ret;
1041	}
1042
1043	ret = smsc95xx_start_rx_path(dev, 0);
1044	if (ret < 0) {
1045		netdev_warn(dev->net, "Failed to start RX path\n");
1046		return ret;
1047	}
1048
1049	netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n");
1050	return 0;
1051}
1052
1053static const struct net_device_ops smsc95xx_netdev_ops = {
1054	.ndo_open		= usbnet_open,
1055	.ndo_stop		= usbnet_stop,
1056	.ndo_start_xmit		= usbnet_start_xmit,
1057	.ndo_tx_timeout		= usbnet_tx_timeout,
1058	.ndo_change_mtu		= usbnet_change_mtu,
1059	.ndo_get_stats64	= usbnet_get_stats64,
1060	.ndo_set_mac_address 	= eth_mac_addr,
1061	.ndo_validate_addr	= eth_validate_addr,
1062	.ndo_do_ioctl 		= smsc95xx_ioctl,
1063	.ndo_set_rx_mode	= smsc95xx_set_multicast,
1064	.ndo_set_features	= smsc95xx_set_features,
1065};
1066
1067static void smsc95xx_handle_link_change(struct net_device *net)
1068{
1069	struct usbnet *dev = netdev_priv(net);
1070
1071	phy_print_status(net->phydev);
1072	smsc95xx_mac_update_fullduplex(dev);
1073	usbnet_defer_kevent(dev, EVENT_LINK_CHANGE);
1074}
1075
1076static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
1077{
1078	struct smsc95xx_priv *pdata;
1079	bool is_internal_phy;
1080	u32 val;
1081	int ret;
1082
1083	printk(KERN_INFO SMSC_CHIPNAME " v" SMSC_DRIVER_VERSION "\n");
1084
1085	ret = usbnet_get_endpoints(dev, intf);
1086	if (ret < 0) {
1087		netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret);
1088		return ret;
1089	}
1090
1091	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
1092	if (!pdata)
1093		return -ENOMEM;
1094
1095	dev->driver_priv = pdata;
1096
1097	spin_lock_init(&pdata->mac_cr_lock);
1098
1099	/* LAN95xx devices do not alter the computed checksum of 0 to 0xffff.
1100	 * RFC 2460, ipv6 UDP calculated checksum yields a result of zero must
1101	 * be changed to 0xffff. RFC 768, ipv4 UDP computed checksum is zero,
1102	 * it is transmitted as all ones. The zero transmitted checksum means
1103	 * transmitter generated no checksum. Hence, enable csum offload only
1104	 * for ipv4 packets.
1105	 */
1106	if (DEFAULT_TX_CSUM_ENABLE)
1107		dev->net->features |= NETIF_F_IP_CSUM;
1108	if (DEFAULT_RX_CSUM_ENABLE)
1109		dev->net->features |= NETIF_F_RXCSUM;
1110
1111	dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
1112	set_bit(EVENT_NO_IP_ALIGN, &dev->flags);
1113
1114	smsc95xx_init_mac_address(dev);
1115
1116	/* Init all registers */
1117	ret = smsc95xx_reset(dev);
1118	if (ret)
1119		goto free_pdata;
1120
1121	pdata->mdiobus = mdiobus_alloc();
1122	if (!pdata->mdiobus) {
1123		ret = -ENOMEM;
1124		goto free_pdata;
1125	}
1126
1127	ret = smsc95xx_read_reg(dev, HW_CFG, &val);
1128	if (ret < 0)
1129		goto free_mdio;
1130
1131	is_internal_phy = !(val & HW_CFG_PSEL_);
1132	if (is_internal_phy)
1133		pdata->mdiobus->phy_mask = ~(1u << SMSC95XX_INTERNAL_PHY_ID);
1134
1135	pdata->mdiobus->priv = dev;
1136	pdata->mdiobus->read = smsc95xx_mdiobus_read;
1137	pdata->mdiobus->write = smsc95xx_mdiobus_write;
1138	pdata->mdiobus->name = "smsc95xx-mdiobus";
1139	pdata->mdiobus->parent = &dev->udev->dev;
1140
1141	snprintf(pdata->mdiobus->id, ARRAY_SIZE(pdata->mdiobus->id),
1142		 "usb-%03d:%03d", dev->udev->bus->busnum, dev->udev->devnum);
1143
1144	ret = mdiobus_register(pdata->mdiobus);
1145	if (ret) {
1146		netdev_err(dev->net, "Could not register MDIO bus\n");
1147		goto free_mdio;
1148	}
1149
1150	pdata->phydev = phy_find_first(pdata->mdiobus);
1151	if (!pdata->phydev) {
1152		netdev_err(dev->net, "no PHY found\n");
1153		ret = -ENODEV;
1154		goto unregister_mdio;
1155	}
1156
1157	pdata->phydev->is_internal = is_internal_phy;
1158
1159	/* detect device revision as different features may be available */
1160	ret = smsc95xx_read_reg(dev, ID_REV, &val);
1161	if (ret < 0)
1162		goto unregister_mdio;
1163
1164	val >>= 16;
1165	if ((val == ID_REV_CHIP_ID_9500A_) || (val == ID_REV_CHIP_ID_9530_) ||
1166	    (val == ID_REV_CHIP_ID_89530_) || (val == ID_REV_CHIP_ID_9730_))
1167		pdata->features = (FEATURE_8_WAKEUP_FILTERS |
1168			FEATURE_PHY_NLP_CROSSOVER |
1169			FEATURE_REMOTE_WAKEUP);
1170	else if (val == ID_REV_CHIP_ID_9512_)
1171		pdata->features = FEATURE_8_WAKEUP_FILTERS;
1172
1173	dev->net->netdev_ops = &smsc95xx_netdev_ops;
1174	dev->net->ethtool_ops = &smsc95xx_ethtool_ops;
1175	dev->net->flags |= IFF_MULTICAST;
1176	dev->net->hard_header_len += SMSC95XX_TX_OVERHEAD_CSUM;
1177	dev->net->min_mtu = ETH_MIN_MTU;
1178	dev->net->max_mtu = ETH_DATA_LEN;
1179	dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
1180
1181	ret = phy_connect_direct(dev->net, pdata->phydev,
1182				 &smsc95xx_handle_link_change,
1183				 PHY_INTERFACE_MODE_MII);
1184	if (ret) {
1185		netdev_err(dev->net, "can't attach PHY to %s\n", pdata->mdiobus->id);
1186		goto unregister_mdio;
1187	}
1188
1189	phy_attached_info(dev->net->phydev);
1190
1191	return 0;
1192
1193unregister_mdio:
1194	mdiobus_unregister(pdata->mdiobus);
1195
1196free_mdio:
1197	mdiobus_free(pdata->mdiobus);
1198
1199free_pdata:
1200	kfree(pdata);
1201	return ret;
1202}
1203
1204static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf)
1205{
1206	struct smsc95xx_priv *pdata = dev->driver_priv;
1207
1208	phy_disconnect(dev->net->phydev);
1209	mdiobus_unregister(pdata->mdiobus);
1210	mdiobus_free(pdata->mdiobus);
1211	netif_dbg(dev, ifdown, dev->net, "free pdata\n");
1212	kfree(pdata);
1213}
1214
1215static int smsc95xx_start_phy(struct usbnet *dev)
1216{
1217	phy_start(dev->net->phydev);
1218
1219	return 0;
1220}
1221
1222static int smsc95xx_stop(struct usbnet *dev)
1223{
1224	if (dev->net->phydev)
1225		phy_stop(dev->net->phydev);
1226
1227	return 0;
1228}
1229
1230static u32 smsc_crc(const u8 *buffer, size_t len, int filter)
1231{
1232	u32 crc = bitrev16(crc16(0xFFFF, buffer, len));
1233	return crc << ((filter % 2) * 16);
1234}
1235
1236static int smsc95xx_enable_phy_wakeup_interrupts(struct usbnet *dev, u16 mask)
1237{
1238	int ret;
1239
1240	netdev_dbg(dev->net, "enabling PHY wakeup interrupts\n");
1241
1242	/* read to clear */
1243	ret = smsc95xx_mdio_read_nopm(dev, PHY_INT_SRC);
1244	if (ret < 0)
1245		return ret;
1246
1247	/* enable interrupt source */
1248	ret = smsc95xx_mdio_read_nopm(dev, PHY_INT_MASK);
1249	if (ret < 0)
1250		return ret;
1251
1252	ret |= mask;
1253
1254	smsc95xx_mdio_write_nopm(dev, PHY_INT_MASK, ret);
1255
1256	return 0;
1257}
1258
1259static int smsc95xx_link_ok_nopm(struct usbnet *dev)
1260{
1261	int ret;
1262
1263	/* first, a dummy read, needed to latch some MII phys */
1264	ret = smsc95xx_mdio_read_nopm(dev, MII_BMSR);
1265	if (ret < 0)
1266		return ret;
1267
1268	ret = smsc95xx_mdio_read_nopm(dev, MII_BMSR);
1269	if (ret < 0)
1270		return ret;
1271
1272	return !!(ret & BMSR_LSTATUS);
1273}
1274
1275static int smsc95xx_enter_suspend0(struct usbnet *dev)
1276{
1277	struct smsc95xx_priv *pdata = dev->driver_priv;
1278	u32 val;
1279	int ret;
1280
1281	ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1282	if (ret < 0)
1283		return ret;
1284
1285	val &= (~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_));
1286	val |= PM_CTL_SUS_MODE_0;
1287
1288	ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1289	if (ret < 0)
1290		return ret;
1291
1292	/* clear wol status */
1293	val &= ~PM_CTL_WUPS_;
1294	val |= PM_CTL_WUPS_WOL_;
1295
1296	/* enable energy detection */
1297	if (pdata->wolopts & WAKE_PHY)
1298		val |= PM_CTL_WUPS_ED_;
1299
1300	ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1301	if (ret < 0)
1302		return ret;
1303
1304	/* read back PM_CTRL */
1305	ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1306	if (ret < 0)
1307		return ret;
1308
1309	pdata->suspend_flags |= SUSPEND_SUSPEND0;
1310
1311	return 0;
1312}
1313
1314static int smsc95xx_enter_suspend1(struct usbnet *dev)
1315{
1316	struct smsc95xx_priv *pdata = dev->driver_priv;
1317	u32 val;
1318	int ret;
1319
1320	/* reconfigure link pulse detection timing for
1321	 * compatibility with non-standard link partners
1322	 */
1323	if (pdata->features & FEATURE_PHY_NLP_CROSSOVER)
1324		smsc95xx_mdio_write_nopm(dev, PHY_EDPD_CONFIG,
1325					 PHY_EDPD_CONFIG_DEFAULT);
1326
1327	/* enable energy detect power-down mode */
1328	ret = smsc95xx_mdio_read_nopm(dev, PHY_MODE_CTRL_STS);
1329	if (ret < 0)
1330		return ret;
1331
1332	ret |= MODE_CTRL_STS_EDPWRDOWN_;
1333
1334	smsc95xx_mdio_write_nopm(dev, PHY_MODE_CTRL_STS, ret);
1335
1336	/* enter SUSPEND1 mode */
1337	ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1338	if (ret < 0)
1339		return ret;
1340
1341	val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_);
1342	val |= PM_CTL_SUS_MODE_1;
1343
1344	ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1345	if (ret < 0)
1346		return ret;
1347
1348	/* clear wol status, enable energy detection */
1349	val &= ~PM_CTL_WUPS_;
1350	val |= (PM_CTL_WUPS_ED_ | PM_CTL_ED_EN_);
1351
1352	ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1353	if (ret < 0)
1354		return ret;
1355
1356	pdata->suspend_flags |= SUSPEND_SUSPEND1;
1357
1358	return 0;
1359}
1360
1361static int smsc95xx_enter_suspend2(struct usbnet *dev)
1362{
1363	struct smsc95xx_priv *pdata = dev->driver_priv;
1364	u32 val;
1365	int ret;
1366
1367	ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1368	if (ret < 0)
1369		return ret;
1370
1371	val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_);
1372	val |= PM_CTL_SUS_MODE_2;
1373
1374	ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1375	if (ret < 0)
1376		return ret;
1377
1378	pdata->suspend_flags |= SUSPEND_SUSPEND2;
1379
1380	return 0;
1381}
1382
1383static int smsc95xx_enter_suspend3(struct usbnet *dev)
1384{
1385	struct smsc95xx_priv *pdata = dev->driver_priv;
1386	u32 val;
1387	int ret;
1388
1389	ret = smsc95xx_read_reg_nopm(dev, RX_FIFO_INF, &val);
1390	if (ret < 0)
1391		return ret;
1392
1393	if (val & RX_FIFO_INF_USED_) {
1394		netdev_info(dev->net, "rx fifo not empty in autosuspend\n");
1395		return -EBUSY;
1396	}
1397
1398	ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1399	if (ret < 0)
1400		return ret;
1401
1402	val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_);
1403	val |= PM_CTL_SUS_MODE_3 | PM_CTL_RES_CLR_WKP_STS;
1404
1405	ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1406	if (ret < 0)
1407		return ret;
1408
1409	/* clear wol status */
1410	val &= ~PM_CTL_WUPS_;
1411	val |= PM_CTL_WUPS_WOL_;
1412
1413	ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1414	if (ret < 0)
1415		return ret;
1416
1417	pdata->suspend_flags |= SUSPEND_SUSPEND3;
1418
1419	return 0;
1420}
1421
1422static int smsc95xx_autosuspend(struct usbnet *dev, u32 link_up)
1423{
1424	struct smsc95xx_priv *pdata = dev->driver_priv;
1425	int ret;
1426
1427	if (!netif_running(dev->net)) {
1428		/* interface is ifconfig down so fully power down hw */
1429		netdev_dbg(dev->net, "autosuspend entering SUSPEND2\n");
1430		return smsc95xx_enter_suspend2(dev);
1431	}
1432
1433	if (!link_up) {
1434		/* link is down so enter EDPD mode, but only if device can
1435		 * reliably resume from it.  This check should be redundant
1436		 * as current FEATURE_REMOTE_WAKEUP parts also support
1437		 * FEATURE_PHY_NLP_CROSSOVER but it's included for clarity */
1438		if (!(pdata->features & FEATURE_PHY_NLP_CROSSOVER)) {
1439			netdev_warn(dev->net, "EDPD not supported\n");
1440			return -EBUSY;
1441		}
1442
1443		netdev_dbg(dev->net, "autosuspend entering SUSPEND1\n");
1444
1445		/* enable PHY wakeup events for if cable is attached */
1446		ret = smsc95xx_enable_phy_wakeup_interrupts(dev,
1447			PHY_INT_MASK_ANEG_COMP_);
1448		if (ret < 0) {
1449			netdev_warn(dev->net, "error enabling PHY wakeup ints\n");
1450			return ret;
1451		}
1452
1453		netdev_info(dev->net, "entering SUSPEND1 mode\n");
1454		return smsc95xx_enter_suspend1(dev);
1455	}
1456
1457	/* enable PHY wakeup events so we remote wakeup if cable is pulled */
1458	ret = smsc95xx_enable_phy_wakeup_interrupts(dev,
1459		PHY_INT_MASK_LINK_DOWN_);
1460	if (ret < 0) {
1461		netdev_warn(dev->net, "error enabling PHY wakeup ints\n");
1462		return ret;
1463	}
1464
1465	netdev_dbg(dev->net, "autosuspend entering SUSPEND3\n");
1466	return smsc95xx_enter_suspend3(dev);
1467}
1468
1469static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1470{
1471	struct usbnet *dev = usb_get_intfdata(intf);
1472	struct smsc95xx_priv *pdata = dev->driver_priv;
1473	u32 val, link_up;
1474	int ret;
1475
1476	pdata->pm_task = current;
1477
1478	ret = usbnet_suspend(intf, message);
1479	if (ret < 0) {
1480		netdev_warn(dev->net, "usbnet_suspend error\n");
1481		pdata->pm_task = NULL;
1482		return ret;
1483	}
1484
1485	if (pdata->suspend_flags) {
1486		netdev_warn(dev->net, "error during last resume\n");
1487		pdata->suspend_flags = 0;
1488	}
1489
1490	/* determine if link is up using only _nopm functions */
1491	link_up = smsc95xx_link_ok_nopm(dev);
1492
1493	if (message.event == PM_EVENT_AUTO_SUSPEND &&
1494	    (pdata->features & FEATURE_REMOTE_WAKEUP)) {
1495		ret = smsc95xx_autosuspend(dev, link_up);
1496		goto done;
1497	}
1498
1499	/* if we get this far we're not autosuspending */
1500	/* if no wol options set, or if link is down and we're not waking on
1501	 * PHY activity, enter lowest power SUSPEND2 mode
1502	 */
1503	if (!(pdata->wolopts & SUPPORTED_WAKE) ||
1504		!(link_up || (pdata->wolopts & WAKE_PHY))) {
1505		netdev_info(dev->net, "entering SUSPEND2 mode\n");
1506
1507		/* disable energy detect (link up) & wake up events */
1508		ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1509		if (ret < 0)
1510			goto done;
1511
1512		val &= ~(WUCSR_MPEN_ | WUCSR_WAKE_EN_);
1513
1514		ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1515		if (ret < 0)
1516			goto done;
1517
1518		ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1519		if (ret < 0)
1520			goto done;
1521
1522		val &= ~(PM_CTL_ED_EN_ | PM_CTL_WOL_EN_);
1523
1524		ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1525		if (ret < 0)
1526			goto done;
1527
1528		ret = smsc95xx_enter_suspend2(dev);
1529		goto done;
1530	}
1531
1532	if (pdata->wolopts & WAKE_PHY) {
1533		ret = smsc95xx_enable_phy_wakeup_interrupts(dev,
1534			(PHY_INT_MASK_ANEG_COMP_ | PHY_INT_MASK_LINK_DOWN_));
1535		if (ret < 0) {
1536			netdev_warn(dev->net, "error enabling PHY wakeup ints\n");
1537			goto done;
1538		}
1539
1540		/* if link is down then configure EDPD and enter SUSPEND1,
1541		 * otherwise enter SUSPEND0 below
1542		 */
1543		if (!link_up) {
1544			netdev_info(dev->net, "entering SUSPEND1 mode\n");
1545			ret = smsc95xx_enter_suspend1(dev);
1546			goto done;
1547		}
1548	}
1549
1550	if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) {
1551		u32 *filter_mask = kcalloc(32, sizeof(u32), GFP_KERNEL);
1552		u32 command[2];
1553		u32 offset[2];
1554		u32 crc[4];
1555		int wuff_filter_count =
1556			(pdata->features & FEATURE_8_WAKEUP_FILTERS) ?
1557			LAN9500A_WUFF_NUM : LAN9500_WUFF_NUM;
1558		int i, filter = 0;
1559
1560		if (!filter_mask) {
1561			netdev_warn(dev->net, "Unable to allocate filter_mask\n");
1562			ret = -ENOMEM;
1563			goto done;
1564		}
1565
1566		memset(command, 0, sizeof(command));
1567		memset(offset, 0, sizeof(offset));
1568		memset(crc, 0, sizeof(crc));
1569
1570		if (pdata->wolopts & WAKE_BCAST) {
1571			const u8 bcast[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
1572			netdev_info(dev->net, "enabling broadcast detection\n");
1573			filter_mask[filter * 4] = 0x003F;
1574			filter_mask[filter * 4 + 1] = 0x00;
1575			filter_mask[filter * 4 + 2] = 0x00;
1576			filter_mask[filter * 4 + 3] = 0x00;
1577			command[filter/4] |= 0x05UL << ((filter % 4) * 8);
1578			offset[filter/4] |= 0x00 << ((filter % 4) * 8);
1579			crc[filter/2] |= smsc_crc(bcast, 6, filter);
1580			filter++;
1581		}
1582
1583		if (pdata->wolopts & WAKE_MCAST) {
1584			const u8 mcast[] = {0x01, 0x00, 0x5E};
1585			netdev_info(dev->net, "enabling multicast detection\n");
1586			filter_mask[filter * 4] = 0x0007;
1587			filter_mask[filter * 4 + 1] = 0x00;
1588			filter_mask[filter * 4 + 2] = 0x00;
1589			filter_mask[filter * 4 + 3] = 0x00;
1590			command[filter/4] |= 0x09UL << ((filter % 4) * 8);
1591			offset[filter/4] |= 0x00  << ((filter % 4) * 8);
1592			crc[filter/2] |= smsc_crc(mcast, 3, filter);
1593			filter++;
1594		}
1595
1596		if (pdata->wolopts & WAKE_ARP) {
1597			const u8 arp[] = {0x08, 0x06};
1598			netdev_info(dev->net, "enabling ARP detection\n");
1599			filter_mask[filter * 4] = 0x0003;
1600			filter_mask[filter * 4 + 1] = 0x00;
1601			filter_mask[filter * 4 + 2] = 0x00;
1602			filter_mask[filter * 4 + 3] = 0x00;
1603			command[filter/4] |= 0x05UL << ((filter % 4) * 8);
1604			offset[filter/4] |= 0x0C << ((filter % 4) * 8);
1605			crc[filter/2] |= smsc_crc(arp, 2, filter);
1606			filter++;
1607		}
1608
1609		if (pdata->wolopts & WAKE_UCAST) {
1610			netdev_info(dev->net, "enabling unicast detection\n");
1611			filter_mask[filter * 4] = 0x003F;
1612			filter_mask[filter * 4 + 1] = 0x00;
1613			filter_mask[filter * 4 + 2] = 0x00;
1614			filter_mask[filter * 4 + 3] = 0x00;
1615			command[filter/4] |= 0x01UL << ((filter % 4) * 8);
1616			offset[filter/4] |= 0x00 << ((filter % 4) * 8);
1617			crc[filter/2] |= smsc_crc(dev->net->dev_addr, ETH_ALEN, filter);
1618			filter++;
1619		}
1620
1621		for (i = 0; i < (wuff_filter_count * 4); i++) {
1622			ret = smsc95xx_write_reg_nopm(dev, WUFF, filter_mask[i]);
1623			if (ret < 0) {
1624				kfree(filter_mask);
1625				goto done;
1626			}
1627		}
1628		kfree(filter_mask);
1629
1630		for (i = 0; i < (wuff_filter_count / 4); i++) {
1631			ret = smsc95xx_write_reg_nopm(dev, WUFF, command[i]);
1632			if (ret < 0)
1633				goto done;
1634		}
1635
1636		for (i = 0; i < (wuff_filter_count / 4); i++) {
1637			ret = smsc95xx_write_reg_nopm(dev, WUFF, offset[i]);
1638			if (ret < 0)
1639				goto done;
1640		}
1641
1642		for (i = 0; i < (wuff_filter_count / 2); i++) {
1643			ret = smsc95xx_write_reg_nopm(dev, WUFF, crc[i]);
1644			if (ret < 0)
1645				goto done;
1646		}
1647
1648		/* clear any pending pattern match packet status */
1649		ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1650		if (ret < 0)
1651			goto done;
1652
1653		val |= WUCSR_WUFR_;
1654
1655		ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1656		if (ret < 0)
1657			goto done;
1658	}
1659
1660	if (pdata->wolopts & WAKE_MAGIC) {
1661		/* clear any pending magic packet status */
1662		ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1663		if (ret < 0)
1664			goto done;
1665
1666		val |= WUCSR_MPR_;
1667
1668		ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1669		if (ret < 0)
1670			goto done;
1671	}
1672
1673	/* enable/disable wakeup sources */
1674	ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1675	if (ret < 0)
1676		goto done;
1677
1678	if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) {
1679		netdev_info(dev->net, "enabling pattern match wakeup\n");
1680		val |= WUCSR_WAKE_EN_;
1681	} else {
1682		netdev_info(dev->net, "disabling pattern match wakeup\n");
1683		val &= ~WUCSR_WAKE_EN_;
1684	}
1685
1686	if (pdata->wolopts & WAKE_MAGIC) {
1687		netdev_info(dev->net, "enabling magic packet wakeup\n");
1688		val |= WUCSR_MPEN_;
1689	} else {
1690		netdev_info(dev->net, "disabling magic packet wakeup\n");
1691		val &= ~WUCSR_MPEN_;
1692	}
1693
1694	ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1695	if (ret < 0)
1696		goto done;
1697
1698	/* enable wol wakeup source */
1699	ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1700	if (ret < 0)
1701		goto done;
1702
1703	val |= PM_CTL_WOL_EN_;
1704
1705	/* phy energy detect wakeup source */
1706	if (pdata->wolopts & WAKE_PHY)
1707		val |= PM_CTL_ED_EN_;
1708
1709	ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1710	if (ret < 0)
1711		goto done;
1712
1713	/* enable receiver to enable frame reception */
1714	smsc95xx_start_rx_path(dev, 1);
1715
1716	/* some wol options are enabled, so enter SUSPEND0 */
1717	netdev_info(dev->net, "entering SUSPEND0 mode\n");
1718	ret = smsc95xx_enter_suspend0(dev);
1719
1720done:
1721	/*
1722	 * TODO: resume() might need to handle the suspend failure
1723	 * in system sleep
1724	 */
1725	if (ret && PMSG_IS_AUTO(message))
1726		usbnet_resume(intf);
1727
1728	pdata->pm_task = NULL;
1729	return ret;
1730}
1731
1732static int smsc95xx_resume(struct usb_interface *intf)
1733{
1734	struct usbnet *dev = usb_get_intfdata(intf);
1735	struct smsc95xx_priv *pdata;
1736	u8 suspend_flags;
1737	int ret;
1738	u32 val;
1739
1740	BUG_ON(!dev);
1741	pdata = dev->driver_priv;
1742	suspend_flags = pdata->suspend_flags;
1743
1744	netdev_dbg(dev->net, "resume suspend_flags=0x%02x\n", suspend_flags);
1745
1746	/* do this first to ensure it's cleared even in error case */
1747	pdata->suspend_flags = 0;
1748
1749	pdata->pm_task = current;
1750
1751	if (suspend_flags & SUSPEND_ALLMODES) {
1752		/* clear wake-up sources */
1753		ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1754		if (ret < 0)
1755			goto done;
1756
1757		val &= ~(WUCSR_WAKE_EN_ | WUCSR_MPEN_);
1758
1759		ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1760		if (ret < 0)
1761			goto done;
1762
1763		/* clear wake-up status */
1764		ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1765		if (ret < 0)
1766			goto done;
1767
1768		val &= ~PM_CTL_WOL_EN_;
1769		val |= PM_CTL_WUPS_;
1770
1771		ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1772		if (ret < 0)
1773			goto done;
1774	}
1775
1776	ret = usbnet_resume(intf);
1777	if (ret < 0)
1778		netdev_warn(dev->net, "usbnet_resume error\n");
1779
1780	phy_init_hw(pdata->phydev);
1781
1782done:
1783	pdata->pm_task = NULL;
1784	return ret;
1785}
1786
1787static int smsc95xx_reset_resume(struct usb_interface *intf)
1788{
1789	struct usbnet *dev = usb_get_intfdata(intf);
1790	struct smsc95xx_priv *pdata = dev->driver_priv;
1791	int ret;
1792
1793	pdata->pm_task = current;
1794	ret = smsc95xx_reset(dev);
1795	pdata->pm_task = NULL;
1796	if (ret < 0)
1797		return ret;
1798
1799	return smsc95xx_resume(intf);
1800}
1801
1802static void smsc95xx_rx_csum_offload(struct sk_buff *skb)
1803{
1804	skb->csum = *(u16 *)(skb_tail_pointer(skb) - 2);
1805	skb->ip_summed = CHECKSUM_COMPLETE;
1806	skb_trim(skb, skb->len - 2);
1807}
1808
1809static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
1810{
1811	/* This check is no longer done by usbnet */
1812	if (skb->len < dev->net->hard_header_len)
1813		return 0;
1814
1815	while (skb->len > 0) {
1816		u32 header, align_count;
1817		struct sk_buff *ax_skb;
1818		unsigned char *packet;
1819		u16 size;
1820
1821		header = get_unaligned_le32(skb->data);
1822		skb_pull(skb, 4 + NET_IP_ALIGN);
1823		packet = skb->data;
1824
1825		/* get the packet length */
1826		size = (u16)((header & RX_STS_FL_) >> 16);
1827		align_count = (4 - ((size + NET_IP_ALIGN) % 4)) % 4;
1828
1829		if (unlikely(size > skb->len)) {
1830			netif_dbg(dev, rx_err, dev->net,
1831				  "size err header=0x%08x\n", header);
1832			return 0;
1833		}
1834
1835		if (unlikely(header & RX_STS_ES_)) {
1836			netif_dbg(dev, rx_err, dev->net,
1837				  "Error header=0x%08x\n", header);
1838			dev->net->stats.rx_errors++;
1839			dev->net->stats.rx_dropped++;
1840
1841			if (header & RX_STS_CRC_) {
1842				dev->net->stats.rx_crc_errors++;
1843			} else {
1844				if (header & (RX_STS_TL_ | RX_STS_RF_))
1845					dev->net->stats.rx_frame_errors++;
1846
1847				if ((header & RX_STS_LE_) &&
1848					(!(header & RX_STS_FT_)))
1849					dev->net->stats.rx_length_errors++;
1850			}
1851		} else {
1852			/* ETH_FRAME_LEN + 4(CRC) + 2(COE) + 4(Vlan) */
1853			if (unlikely(size > (ETH_FRAME_LEN + 12))) {
1854				netif_dbg(dev, rx_err, dev->net,
1855					  "size err header=0x%08x\n", header);
1856				return 0;
1857			}
1858
1859			/* last frame in this batch */
1860			if (skb->len == size) {
1861				if (dev->net->features & NETIF_F_RXCSUM)
1862					smsc95xx_rx_csum_offload(skb);
1863				skb_trim(skb, skb->len - 4); /* remove fcs */
1864				skb->truesize = size + sizeof(struct sk_buff);
1865
1866				return 1;
1867			}
1868
1869			ax_skb = skb_clone(skb, GFP_ATOMIC);
1870			if (unlikely(!ax_skb)) {
1871				netdev_warn(dev->net, "Error allocating skb\n");
1872				return 0;
1873			}
1874
1875			ax_skb->len = size;
1876			ax_skb->data = packet;
1877			skb_set_tail_pointer(ax_skb, size);
1878
1879			if (dev->net->features & NETIF_F_RXCSUM)
1880				smsc95xx_rx_csum_offload(ax_skb);
1881			skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
1882			ax_skb->truesize = size + sizeof(struct sk_buff);
1883
1884			usbnet_skb_return(dev, ax_skb);
1885		}
1886
1887		skb_pull(skb, size);
1888
1889		/* padding bytes before the next frame starts */
1890		if (skb->len)
1891			skb_pull(skb, align_count);
1892	}
1893
1894	return 1;
1895}
1896
1897static u32 smsc95xx_calc_csum_preamble(struct sk_buff *skb)
1898{
1899	u16 low_16 = (u16)skb_checksum_start_offset(skb);
1900	u16 high_16 = low_16 + skb->csum_offset;
1901	return (high_16 << 16) | low_16;
1902}
1903
1904/* The TX CSUM won't work if the checksum lies in the last 4 bytes of the
1905 * transmission. This is fairly unlikely, only seems to trigger with some
1906 * short TCP ACK packets sent.
1907 *
1908 * Note, this calculation should probably check for the alignment of the
1909 * data as well, but a straight check for csum being in the last four bytes
1910 * of the packet should be ok for now.
1911 */
1912static bool smsc95xx_can_tx_checksum(struct sk_buff *skb)
1913{
1914       unsigned int len = skb->len - skb_checksum_start_offset(skb);
1915
1916       if (skb->len <= 45)
1917	       return false;
1918       return skb->csum_offset < (len - (4 + 1));
1919}
1920
1921static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev,
1922					 struct sk_buff *skb, gfp_t flags)
1923{
1924	bool csum = skb->ip_summed == CHECKSUM_PARTIAL;
1925	int overhead = csum ? SMSC95XX_TX_OVERHEAD_CSUM : SMSC95XX_TX_OVERHEAD;
1926	u32 tx_cmd_a, tx_cmd_b;
1927	void *ptr;
1928
1929	/* We do not advertise SG, so skbs should be already linearized */
1930	BUG_ON(skb_shinfo(skb)->nr_frags);
1931
1932	/* Make writable and expand header space by overhead if required */
1933	if (skb_cow_head(skb, overhead)) {
1934		/* Must deallocate here as returning NULL to indicate error
1935		 * means the skb won't be deallocated in the caller.
1936		 */
1937		dev_kfree_skb_any(skb);
1938		return NULL;
1939	}
1940
1941	tx_cmd_b = (u32)skb->len;
1942	tx_cmd_a = tx_cmd_b | TX_CMD_A_FIRST_SEG_ | TX_CMD_A_LAST_SEG_;
1943
1944	if (csum) {
1945		if (!smsc95xx_can_tx_checksum(skb)) {
1946			/* workaround - hardware tx checksum does not work
1947			 * properly with extremely small packets */
1948			long csstart = skb_checksum_start_offset(skb);
1949			__wsum calc = csum_partial(skb->data + csstart,
1950				skb->len - csstart, 0);
1951			*((__sum16 *)(skb->data + csstart
1952				+ skb->csum_offset)) = csum_fold(calc);
1953
1954			csum = false;
1955		} else {
1956			u32 csum_preamble = smsc95xx_calc_csum_preamble(skb);
1957			ptr = skb_push(skb, 4);
1958			put_unaligned_le32(csum_preamble, ptr);
1959
1960			tx_cmd_a += 4;
1961			tx_cmd_b += 4;
1962			tx_cmd_b |= TX_CMD_B_CSUM_ENABLE;
1963		}
1964	}
1965
1966	ptr = skb_push(skb, 8);
1967	put_unaligned_le32(tx_cmd_a, ptr);
1968	put_unaligned_le32(tx_cmd_b, ptr+4);
1969
1970	return skb;
1971}
1972
1973static int smsc95xx_manage_power(struct usbnet *dev, int on)
1974{
1975	struct smsc95xx_priv *pdata = dev->driver_priv;
1976
1977	dev->intf->needs_remote_wakeup = on;
1978
1979	if (pdata->features & FEATURE_REMOTE_WAKEUP)
1980		return 0;
1981
1982	/* this chip revision isn't capable of remote wakeup */
1983	netdev_info(dev->net, "hardware isn't capable of remote wakeup\n");
1984
1985	if (on)
1986		usb_autopm_get_interface_no_resume(dev->intf);
1987	else
1988		usb_autopm_put_interface(dev->intf);
1989
1990	return 0;
1991}
1992
1993static const struct driver_info smsc95xx_info = {
1994	.description	= "smsc95xx USB 2.0 Ethernet",
1995	.bind		= smsc95xx_bind,
1996	.unbind		= smsc95xx_unbind,
1997	.reset		= smsc95xx_reset,
1998	.check_connect	= smsc95xx_start_phy,
1999	.stop		= smsc95xx_stop,
2000	.rx_fixup	= smsc95xx_rx_fixup,
2001	.tx_fixup	= smsc95xx_tx_fixup,
2002	.status		= smsc95xx_status,
2003	.manage_power	= smsc95xx_manage_power,
2004	.flags		= FLAG_ETHER | FLAG_SEND_ZLP | FLAG_LINK_INTR,
2005};
2006
2007static const struct usb_device_id products[] = {
2008	{
2009		/* SMSC9500 USB Ethernet Device */
2010		USB_DEVICE(0x0424, 0x9500),
2011		.driver_info = (unsigned long) &smsc95xx_info,
2012	},
2013	{
2014		/* SMSC9505 USB Ethernet Device */
2015		USB_DEVICE(0x0424, 0x9505),
2016		.driver_info = (unsigned long) &smsc95xx_info,
2017	},
2018	{
2019		/* SMSC9500A USB Ethernet Device */
2020		USB_DEVICE(0x0424, 0x9E00),
2021		.driver_info = (unsigned long) &smsc95xx_info,
2022	},
2023	{
2024		/* SMSC9505A USB Ethernet Device */
2025		USB_DEVICE(0x0424, 0x9E01),
2026		.driver_info = (unsigned long) &smsc95xx_info,
2027	},
2028	{
2029		/* SMSC9512/9514 USB Hub & Ethernet Device */
2030		USB_DEVICE(0x0424, 0xec00),
2031		.driver_info = (unsigned long) &smsc95xx_info,
2032	},
2033	{
2034		/* SMSC9500 USB Ethernet Device (SAL10) */
2035		USB_DEVICE(0x0424, 0x9900),
2036		.driver_info = (unsigned long) &smsc95xx_info,
2037	},
2038	{
2039		/* SMSC9505 USB Ethernet Device (SAL10) */
2040		USB_DEVICE(0x0424, 0x9901),
2041		.driver_info = (unsigned long) &smsc95xx_info,
2042	},
2043	{
2044		/* SMSC9500A USB Ethernet Device (SAL10) */
2045		USB_DEVICE(0x0424, 0x9902),
2046		.driver_info = (unsigned long) &smsc95xx_info,
2047	},
2048	{
2049		/* SMSC9505A USB Ethernet Device (SAL10) */
2050		USB_DEVICE(0x0424, 0x9903),
2051		.driver_info = (unsigned long) &smsc95xx_info,
2052	},
2053	{
2054		/* SMSC9512/9514 USB Hub & Ethernet Device (SAL10) */
2055		USB_DEVICE(0x0424, 0x9904),
2056		.driver_info = (unsigned long) &smsc95xx_info,
2057	},
2058	{
2059		/* SMSC9500A USB Ethernet Device (HAL) */
2060		USB_DEVICE(0x0424, 0x9905),
2061		.driver_info = (unsigned long) &smsc95xx_info,
2062	},
2063	{
2064		/* SMSC9505A USB Ethernet Device (HAL) */
2065		USB_DEVICE(0x0424, 0x9906),
2066		.driver_info = (unsigned long) &smsc95xx_info,
2067	},
2068	{
2069		/* SMSC9500 USB Ethernet Device (Alternate ID) */
2070		USB_DEVICE(0x0424, 0x9907),
2071		.driver_info = (unsigned long) &smsc95xx_info,
2072	},
2073	{
2074		/* SMSC9500A USB Ethernet Device (Alternate ID) */
2075		USB_DEVICE(0x0424, 0x9908),
2076		.driver_info = (unsigned long) &smsc95xx_info,
2077	},
2078	{
2079		/* SMSC9512/9514 USB Hub & Ethernet Device (Alternate ID) */
2080		USB_DEVICE(0x0424, 0x9909),
2081		.driver_info = (unsigned long) &smsc95xx_info,
2082	},
2083	{
2084		/* SMSC LAN9530 USB Ethernet Device */
2085		USB_DEVICE(0x0424, 0x9530),
2086		.driver_info = (unsigned long) &smsc95xx_info,
2087	},
2088	{
2089		/* SMSC LAN9730 USB Ethernet Device */
2090		USB_DEVICE(0x0424, 0x9730),
2091		.driver_info = (unsigned long) &smsc95xx_info,
2092	},
2093	{
2094		/* SMSC LAN89530 USB Ethernet Device */
2095		USB_DEVICE(0x0424, 0x9E08),
2096		.driver_info = (unsigned long) &smsc95xx_info,
2097	},
2098	{ },		/* END */
2099};
2100MODULE_DEVICE_TABLE(usb, products);
2101
2102static struct usb_driver smsc95xx_driver = {
2103	.name		= "smsc95xx",
2104	.id_table	= products,
2105	.probe		= usbnet_probe,
2106	.suspend	= smsc95xx_suspend,
2107	.resume		= smsc95xx_resume,
2108	.reset_resume	= smsc95xx_reset_resume,
2109	.disconnect	= usbnet_disconnect,
2110	.disable_hub_initiated_lpm = 1,
2111	.supports_autosuspend = 1,
2112};
2113
2114module_usb_driver(smsc95xx_driver);
2115
2116MODULE_AUTHOR("Nancy Lin");
2117MODULE_AUTHOR("Steve Glendinning <steve.glendinning@shawell.net>");
2118MODULE_DESCRIPTION("SMSC95XX USB 2.0 Ethernet Devices");
2119MODULE_LICENSE("GPL");
2120