smsc95xx.c (1a1494def7eacbd25db05185aa2e81ef90892460) smsc95xx.c (9624531701ea84f4b7eb966284b53b34b1c52365)
1 /***************************************************************************
2 *
3 * Copyright (C) 2007-2008 SMSC
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.

--- 12 unchanged lines hidden (view full) ---

21#include <linux/module.h>
22#include <linux/kmod.h>
23#include <linux/init.h>
24#include <linux/netdevice.h>
25#include <linux/etherdevice.h>
26#include <linux/ethtool.h>
27#include <linux/mii.h>
28#include <linux/usb.h>
1 /***************************************************************************
2 *
3 * Copyright (C) 2007-2008 SMSC
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.

--- 12 unchanged lines hidden (view full) ---

21#include <linux/module.h>
22#include <linux/kmod.h>
23#include <linux/init.h>
24#include <linux/netdevice.h>
25#include <linux/etherdevice.h>
26#include <linux/ethtool.h>
27#include <linux/mii.h>
28#include <linux/usb.h>
29#include <linux/bitrev.h>
30#include <linux/crc16.h>
29#include <linux/crc32.h>
30#include <linux/usb/usbnet.h>
31#include <linux/slab.h>
32#include "smsc95xx.h"
33
34#define SMSC_CHIPNAME "smsc95xx"
35#define SMSC_DRIVER_VERSION "1.0.4"
36#define HS_USB_PKT_SIZE (512)

--- 4 unchanged lines hidden (view full) ---

41#define MAX_SINGLE_PACKET_SIZE (2048)
42#define LAN95XX_EEPROM_MAGIC (0x9500)
43#define EEPROM_MAC_OFFSET (0x01)
44#define DEFAULT_TX_CSUM_ENABLE (true)
45#define DEFAULT_RX_CSUM_ENABLE (true)
46#define SMSC95XX_INTERNAL_PHY_ID (1)
47#define SMSC95XX_TX_OVERHEAD (8)
48#define SMSC95XX_TX_OVERHEAD_CSUM (12)
31#include <linux/crc32.h>
32#include <linux/usb/usbnet.h>
33#include <linux/slab.h>
34#include "smsc95xx.h"
35
36#define SMSC_CHIPNAME "smsc95xx"
37#define SMSC_DRIVER_VERSION "1.0.4"
38#define HS_USB_PKT_SIZE (512)

--- 4 unchanged lines hidden (view full) ---

43#define MAX_SINGLE_PACKET_SIZE (2048)
44#define LAN95XX_EEPROM_MAGIC (0x9500)
45#define EEPROM_MAC_OFFSET (0x01)
46#define DEFAULT_TX_CSUM_ENABLE (true)
47#define DEFAULT_RX_CSUM_ENABLE (true)
48#define SMSC95XX_INTERNAL_PHY_ID (1)
49#define SMSC95XX_TX_OVERHEAD (8)
50#define SMSC95XX_TX_OVERHEAD_CSUM (12)
49#define SUPPORTED_WAKE (WAKE_MAGIC)
51#define SUPPORTED_WAKE (WAKE_PHY | WAKE_UCAST | WAKE_BCAST | \
52 WAKE_MCAST | WAKE_ARP | WAKE_MAGIC)
50
53
51#define check_warn(ret, fmt, args...) \
52 ({ if (ret < 0) netdev_warn(dev->net, fmt, ##args); })
54#define FEATURE_8_WAKEUP_FILTERS (0x01)
55#define FEATURE_PHY_NLP_CROSSOVER (0x02)
56#define FEATURE_AUTOSUSPEND (0x04)
53
57
54#define check_warn_return(ret, fmt, args...) \
55 ({ if (ret < 0) { netdev_warn(dev->net, fmt, ##args); return ret; } })
56
57#define check_warn_goto_done(ret, fmt, args...) \
58 ({ if (ret < 0) { netdev_warn(dev->net, fmt, ##args); goto done; } })
59
60struct smsc95xx_priv {
61 u32 mac_cr;
62 u32 hash_hi;
63 u32 hash_lo;
64 u32 wolopts;
65 spinlock_t mac_cr_lock;
58struct smsc95xx_priv {
59 u32 mac_cr;
60 u32 hash_hi;
61 u32 hash_lo;
62 u32 wolopts;
63 spinlock_t mac_cr_lock;
64 u8 features;
66};
67
65};
66
68struct usb_context {
69 struct usb_ctrlrequest req;
70 struct usbnet *dev;
71};
72
73static bool turbo_mode = true;
74module_param(turbo_mode, bool, 0644);
75MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
76
67static bool turbo_mode = true;
68module_param(turbo_mode, bool, 0644);
69MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
70
77static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
78 u32 *data)
71static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
72 u32 *data, int in_pm)
79{
73{
80 u32 *buf = kmalloc(4, GFP_KERNEL);
74 u32 buf;
81 int ret;
75 int ret;
76 int (*fn)(struct usbnet *, u8, u8, u16, u16, void *, u16);
82
83 BUG_ON(!dev);
84
77
78 BUG_ON(!dev);
79
85 if (!buf)
86 return -ENOMEM;
80 if (!in_pm)
81 fn = usbnet_read_cmd;
82 else
83 fn = usbnet_read_cmd_nopm;
87
84
88 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0),
89 USB_VENDOR_REQUEST_READ_REGISTER,
90 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
91 00, index, buf, 4, USB_CTRL_GET_TIMEOUT);
92
85 ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN
86 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
87 0, index, &buf, 4);
93 if (unlikely(ret < 0))
88 if (unlikely(ret < 0))
94 netdev_warn(dev->net, "Failed to read register index 0x%08x\n", index);
89 netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n",
90 index, ret);
95
91
96 le32_to_cpus(buf);
97 *data = *buf;
98 kfree(buf);
92 le32_to_cpus(&buf);
93 *data = buf;
99
100 return ret;
101}
102
94
95 return ret;
96}
97
103static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index,
104 u32 data)
98static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index,
99 u32 data, int in_pm)
105{
100{
106 u32 *buf = kmalloc(4, GFP_KERNEL);
101 u32 buf;
107 int ret;
102 int ret;
103 int (*fn)(struct usbnet *, u8, u8, u16, u16, const void *, u16);
108
109 BUG_ON(!dev);
110
104
105 BUG_ON(!dev);
106
111 if (!buf)
112 return -ENOMEM;
107 if (!in_pm)
108 fn = usbnet_write_cmd;
109 else
110 fn = usbnet_write_cmd_nopm;
113
111
114 *buf = data;
115 cpu_to_le32s(buf);
112 buf = data;
113 cpu_to_le32s(&buf);
116
114
117 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
118 USB_VENDOR_REQUEST_WRITE_REGISTER,
119 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
120 00, index, buf, 4, USB_CTRL_SET_TIMEOUT);
121
115 ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT
116 | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
117 0, index, &buf, 4);
122 if (unlikely(ret < 0))
118 if (unlikely(ret < 0))
123 netdev_warn(dev->net, "Failed to write register index 0x%08x\n", index);
119 netdev_warn(dev->net, "Failed to write reg index 0x%08x: %d\n",
120 index, ret);
124
121
125 kfree(buf);
126
127 return ret;
128}
129
122 return ret;
123}
124
130static int smsc95xx_set_feature(struct usbnet *dev, u32 feature)
125static int __must_check smsc95xx_read_reg_nopm(struct usbnet *dev, u32 index,
126 u32 *data)
131{
127{
132 if (WARN_ON_ONCE(!dev))
133 return -EINVAL;
128 return __smsc95xx_read_reg(dev, index, data, 1);
129}
134
130
135 cpu_to_le32s(&feature);
136
137 return usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
138 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE, feature, 0, NULL, 0,
139 USB_CTRL_SET_TIMEOUT);
131static int __must_check smsc95xx_write_reg_nopm(struct usbnet *dev, u32 index,
132 u32 data)
133{
134 return __smsc95xx_write_reg(dev, index, data, 1);
140}
141
135}
136
142static int smsc95xx_clear_feature(struct usbnet *dev, u32 feature)
137static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index,
138 u32 *data)
143{
139{
144 if (WARN_ON_ONCE(!dev))
145 return -EINVAL;
140 return __smsc95xx_read_reg(dev, index, data, 0);
141}
146
142
147 cpu_to_le32s(&feature);
148
149 return usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
150 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE, feature, 0, NULL, 0,
151 USB_CTRL_SET_TIMEOUT);
143static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index,
144 u32 data)
145{
146 return __smsc95xx_write_reg(dev, index, data, 0);
152}
153
154/* Loop until the read is completed with timeout
155 * called with phy_mutex held */
147}
148
149/* Loop until the read is completed with timeout
150 * called with phy_mutex held */
156static int __must_check smsc95xx_phy_wait_not_busy(struct usbnet *dev)
151static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev,
152 int in_pm)
157{
158 unsigned long start_time = jiffies;
159 u32 val;
160 int ret;
161
162 do {
153{
154 unsigned long start_time = jiffies;
155 u32 val;
156 int ret;
157
158 do {
163 ret = smsc95xx_read_reg(dev, MII_ADDR, &val);
164 check_warn_return(ret, "Error reading MII_ACCESS");
159 ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm);
160 if (ret < 0) {
161 netdev_warn(dev->net, "Error reading MII_ACCESS\n");
162 return ret;
163 }
164
165 if (!(val & MII_BUSY_))
166 return 0;
167 } while (!time_after(jiffies, start_time + HZ));
168
169 return -EIO;
170}
171
165 if (!(val & MII_BUSY_))
166 return 0;
167 } while (!time_after(jiffies, start_time + HZ));
168
169 return -EIO;
170}
171
172static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx)
172static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx,
173 int in_pm)
173{
174 struct usbnet *dev = netdev_priv(netdev);
175 u32 val, addr;
176 int ret;
177
178 mutex_lock(&dev->phy_mutex);
179
180 /* confirm MII not busy */
174{
175 struct usbnet *dev = netdev_priv(netdev);
176 u32 val, addr;
177 int ret;
178
179 mutex_lock(&dev->phy_mutex);
180
181 /* confirm MII not busy */
181 ret = smsc95xx_phy_wait_not_busy(dev);
182 check_warn_goto_done(ret, "MII is busy in smsc95xx_mdio_read");
182 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
183 if (ret < 0) {
184 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_read\n");
185 goto done;
186 }
183
184 /* set the address, index & direction (read from PHY) */
185 phy_id &= dev->mii.phy_id_mask;
186 idx &= dev->mii.reg_num_mask;
187 addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_;
187
188 /* set the address, index & direction (read from PHY) */
189 phy_id &= dev->mii.phy_id_mask;
190 idx &= dev->mii.reg_num_mask;
191 addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_;
188 ret = smsc95xx_write_reg(dev, MII_ADDR, addr);
189 check_warn_goto_done(ret, "Error writing MII_ADDR");
192 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
193 if (ret < 0) {
194 netdev_warn(dev->net, "Error writing MII_ADDR\n");
195 goto done;
196 }
190
197
191 ret = smsc95xx_phy_wait_not_busy(dev);
192 check_warn_goto_done(ret, "Timed out reading MII reg %02X", idx);
198 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
199 if (ret < 0) {
200 netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx);
201 goto done;
202 }
193
203
194 ret = smsc95xx_read_reg(dev, MII_DATA, &val);
195 check_warn_goto_done(ret, "Error reading MII_DATA");
204 ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm);
205 if (ret < 0) {
206 netdev_warn(dev->net, "Error reading MII_DATA\n");
207 goto done;
208 }
196
197 ret = (u16)(val & 0xFFFF);
198
199done:
200 mutex_unlock(&dev->phy_mutex);
201 return ret;
202}
203
209
210 ret = (u16)(val & 0xFFFF);
211
212done:
213 mutex_unlock(&dev->phy_mutex);
214 return ret;
215}
216
204static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx,
205 int regval)
217static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id,
218 int idx, int regval, int in_pm)
206{
207 struct usbnet *dev = netdev_priv(netdev);
208 u32 val, addr;
209 int ret;
210
211 mutex_lock(&dev->phy_mutex);
212
213 /* confirm MII not busy */
219{
220 struct usbnet *dev = netdev_priv(netdev);
221 u32 val, addr;
222 int ret;
223
224 mutex_lock(&dev->phy_mutex);
225
226 /* confirm MII not busy */
214 ret = smsc95xx_phy_wait_not_busy(dev);
215 check_warn_goto_done(ret, "MII is busy in smsc95xx_mdio_write");
227 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
228 if (ret < 0) {
229 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_write\n");
230 goto done;
231 }
216
217 val = regval;
232
233 val = regval;
218 ret = smsc95xx_write_reg(dev, MII_DATA, val);
219 check_warn_goto_done(ret, "Error writing MII_DATA");
234 ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm);
235 if (ret < 0) {
236 netdev_warn(dev->net, "Error writing MII_DATA\n");
237 goto done;
238 }
220
221 /* set the address, index & direction (write to PHY) */
222 phy_id &= dev->mii.phy_id_mask;
223 idx &= dev->mii.reg_num_mask;
224 addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_;
239
240 /* set the address, index & direction (write to PHY) */
241 phy_id &= dev->mii.phy_id_mask;
242 idx &= dev->mii.reg_num_mask;
243 addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_;
225 ret = smsc95xx_write_reg(dev, MII_ADDR, addr);
226 check_warn_goto_done(ret, "Error writing MII_ADDR");
244 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm);
245 if (ret < 0) {
246 netdev_warn(dev->net, "Error writing MII_ADDR\n");
247 goto done;
248 }
227
249
228 ret = smsc95xx_phy_wait_not_busy(dev);
229 check_warn_goto_done(ret, "Timed out writing MII reg %02X", idx);
250 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm);
251 if (ret < 0) {
252 netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx);
253 goto done;
254 }
230
231done:
232 mutex_unlock(&dev->phy_mutex);
233}
234
255
256done:
257 mutex_unlock(&dev->phy_mutex);
258}
259
260static int smsc95xx_mdio_read_nopm(struct net_device *netdev, int phy_id,
261 int idx)
262{
263 return __smsc95xx_mdio_read(netdev, phy_id, idx, 1);
264}
265
266static void smsc95xx_mdio_write_nopm(struct net_device *netdev, int phy_id,
267 int idx, int regval)
268{
269 __smsc95xx_mdio_write(netdev, phy_id, idx, regval, 1);
270}
271
272static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx)
273{
274 return __smsc95xx_mdio_read(netdev, phy_id, idx, 0);
275}
276
277static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx,
278 int regval)
279{
280 __smsc95xx_mdio_write(netdev, phy_id, idx, regval, 0);
281}
282
235static int __must_check smsc95xx_wait_eeprom(struct usbnet *dev)
236{
237 unsigned long start_time = jiffies;
238 u32 val;
239 int ret;
240
241 do {
242 ret = smsc95xx_read_reg(dev, E2P_CMD, &val);
283static int __must_check smsc95xx_wait_eeprom(struct usbnet *dev)
284{
285 unsigned long start_time = jiffies;
286 u32 val;
287 int ret;
288
289 do {
290 ret = smsc95xx_read_reg(dev, E2P_CMD, &val);
243 check_warn_return(ret, "Error reading E2P_CMD");
291 if (ret < 0) {
292 netdev_warn(dev->net, "Error reading E2P_CMD\n");
293 return ret;
294 }
295
244 if (!(val & E2P_CMD_BUSY_) || (val & E2P_CMD_TIMEOUT_))
245 break;
246 udelay(40);
247 } while (!time_after(jiffies, start_time + HZ));
248
249 if (val & (E2P_CMD_TIMEOUT_ | E2P_CMD_BUSY_)) {
250 netdev_warn(dev->net, "EEPROM read operation timeout\n");
251 return -EIO;

--- 5 unchanged lines hidden (view full) ---

257static int __must_check smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev)
258{
259 unsigned long start_time = jiffies;
260 u32 val;
261 int ret;
262
263 do {
264 ret = smsc95xx_read_reg(dev, E2P_CMD, &val);
296 if (!(val & E2P_CMD_BUSY_) || (val & E2P_CMD_TIMEOUT_))
297 break;
298 udelay(40);
299 } while (!time_after(jiffies, start_time + HZ));
300
301 if (val & (E2P_CMD_TIMEOUT_ | E2P_CMD_BUSY_)) {
302 netdev_warn(dev->net, "EEPROM read operation timeout\n");
303 return -EIO;

--- 5 unchanged lines hidden (view full) ---

309static int __must_check smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev)
310{
311 unsigned long start_time = jiffies;
312 u32 val;
313 int ret;
314
315 do {
316 ret = smsc95xx_read_reg(dev, E2P_CMD, &val);
265 check_warn_return(ret, "Error reading E2P_CMD");
317 if (ret < 0) {
318 netdev_warn(dev->net, "Error reading E2P_CMD\n");
319 return ret;
320 }
266
267 if (!(val & E2P_CMD_BUSY_))
268 return 0;
269
270 udelay(40);
271 } while (!time_after(jiffies, start_time + HZ));
272
273 netdev_warn(dev->net, "EEPROM is busy\n");

--- 11 unchanged lines hidden (view full) ---

285
286 ret = smsc95xx_eeprom_confirm_not_busy(dev);
287 if (ret)
288 return ret;
289
290 for (i = 0; i < length; i++) {
291 val = E2P_CMD_BUSY_ | E2P_CMD_READ_ | (offset & E2P_CMD_ADDR_);
292 ret = smsc95xx_write_reg(dev, E2P_CMD, val);
321
322 if (!(val & E2P_CMD_BUSY_))
323 return 0;
324
325 udelay(40);
326 } while (!time_after(jiffies, start_time + HZ));
327
328 netdev_warn(dev->net, "EEPROM is busy\n");

--- 11 unchanged lines hidden (view full) ---

340
341 ret = smsc95xx_eeprom_confirm_not_busy(dev);
342 if (ret)
343 return ret;
344
345 for (i = 0; i < length; i++) {
346 val = E2P_CMD_BUSY_ | E2P_CMD_READ_ | (offset & E2P_CMD_ADDR_);
347 ret = smsc95xx_write_reg(dev, E2P_CMD, val);
293 check_warn_return(ret, "Error writing E2P_CMD");
348 if (ret < 0) {
349 netdev_warn(dev->net, "Error writing E2P_CMD\n");
350 return ret;
351 }
294
295 ret = smsc95xx_wait_eeprom(dev);
296 if (ret < 0)
297 return ret;
298
299 ret = smsc95xx_read_reg(dev, E2P_DATA, &val);
352
353 ret = smsc95xx_wait_eeprom(dev);
354 if (ret < 0)
355 return ret;
356
357 ret = smsc95xx_read_reg(dev, E2P_DATA, &val);
300 check_warn_return(ret, "Error reading E2P_DATA");
358 if (ret < 0) {
359 netdev_warn(dev->net, "Error reading E2P_DATA\n");
360 return ret;
361 }
301
302 data[i] = val & 0xFF;
303 offset++;
304 }
305
306 return 0;
307}
308

--- 8 unchanged lines hidden (view full) ---

317
318 ret = smsc95xx_eeprom_confirm_not_busy(dev);
319 if (ret)
320 return ret;
321
322 /* Issue write/erase enable command */
323 val = E2P_CMD_BUSY_ | E2P_CMD_EWEN_;
324 ret = smsc95xx_write_reg(dev, E2P_CMD, val);
362
363 data[i] = val & 0xFF;
364 offset++;
365 }
366
367 return 0;
368}
369

--- 8 unchanged lines hidden (view full) ---

378
379 ret = smsc95xx_eeprom_confirm_not_busy(dev);
380 if (ret)
381 return ret;
382
383 /* Issue write/erase enable command */
384 val = E2P_CMD_BUSY_ | E2P_CMD_EWEN_;
385 ret = smsc95xx_write_reg(dev, E2P_CMD, val);
325 check_warn_return(ret, "Error writing E2P_DATA");
386 if (ret < 0) {
387 netdev_warn(dev->net, "Error writing E2P_DATA\n");
388 return ret;
389 }
326
327 ret = smsc95xx_wait_eeprom(dev);
328 if (ret < 0)
329 return ret;
330
331 for (i = 0; i < length; i++) {
332
333 /* Fill data register */
334 val = data[i];
335 ret = smsc95xx_write_reg(dev, E2P_DATA, val);
390
391 ret = smsc95xx_wait_eeprom(dev);
392 if (ret < 0)
393 return ret;
394
395 for (i = 0; i < length; i++) {
396
397 /* Fill data register */
398 val = data[i];
399 ret = smsc95xx_write_reg(dev, E2P_DATA, val);
336 check_warn_return(ret, "Error writing E2P_DATA");
400 if (ret < 0) {
401 netdev_warn(dev->net, "Error writing E2P_DATA\n");
402 return ret;
403 }
337
338 /* Send "write" command */
339 val = E2P_CMD_BUSY_ | E2P_CMD_WRITE_ | (offset & E2P_CMD_ADDR_);
340 ret = smsc95xx_write_reg(dev, E2P_CMD, val);
404
405 /* Send "write" command */
406 val = E2P_CMD_BUSY_ | E2P_CMD_WRITE_ | (offset & E2P_CMD_ADDR_);
407 ret = smsc95xx_write_reg(dev, E2P_CMD, val);
341 check_warn_return(ret, "Error writing E2P_CMD");
408 if (ret < 0) {
409 netdev_warn(dev->net, "Error writing E2P_CMD\n");
410 return ret;
411 }
342
343 ret = smsc95xx_wait_eeprom(dev);
344 if (ret < 0)
345 return ret;
346
347 offset++;
348 }
349
350 return 0;
351}
352
412
413 ret = smsc95xx_wait_eeprom(dev);
414 if (ret < 0)
415 return ret;
416
417 offset++;
418 }
419
420 return 0;
421}
422
353static void smsc95xx_async_cmd_callback(struct urb *urb)
354{
355 struct usb_context *usb_context = urb->context;
356 struct usbnet *dev = usb_context->dev;
357 int status = urb->status;
358
359 check_warn(status, "async callback failed with %d\n", status);
360
361 kfree(usb_context);
362 usb_free_urb(urb);
363}
364
365static int __must_check smsc95xx_write_reg_async(struct usbnet *dev, u16 index,
366 u32 *data)
367{
423static int __must_check smsc95xx_write_reg_async(struct usbnet *dev, u16 index,
424 u32 *data)
425{
368 struct usb_context *usb_context;
369 int status;
370 struct urb *urb;
371 const u16 size = 4;
426 const u16 size = 4;
427 int ret;
372
428
373 urb = usb_alloc_urb(0, GFP_ATOMIC);
374 if (!urb) {
375 netdev_warn(dev->net, "Error allocating URB\n");
376 return -ENOMEM;
377 }
378
379 usb_context = kmalloc(sizeof(struct usb_context), GFP_ATOMIC);
380 if (usb_context == NULL) {
381 netdev_warn(dev->net, "Error allocating control msg\n");
382 usb_free_urb(urb);
383 return -ENOMEM;
384 }
385
386 usb_context->req.bRequestType =
387 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE;
388 usb_context->req.bRequest = USB_VENDOR_REQUEST_WRITE_REGISTER;
389 usb_context->req.wValue = 00;
390 usb_context->req.wIndex = cpu_to_le16(index);
391 usb_context->req.wLength = cpu_to_le16(size);
392
393 usb_fill_control_urb(urb, dev->udev, usb_sndctrlpipe(dev->udev, 0),
394 (void *)&usb_context->req, data, size,
395 smsc95xx_async_cmd_callback,
396 (void *)usb_context);
397
398 status = usb_submit_urb(urb, GFP_ATOMIC);
399 if (status < 0) {
400 netdev_warn(dev->net, "Error submitting control msg, sts=%d\n",
401 status);
402 kfree(usb_context);
403 usb_free_urb(urb);
404 }
405
406 return status;
429 ret = usbnet_write_cmd_async(dev, USB_VENDOR_REQUEST_WRITE_REGISTER,
430 USB_DIR_OUT | USB_TYPE_VENDOR |
431 USB_RECIP_DEVICE,
432 0, index, data, size);
433 if (ret < 0)
434 netdev_warn(dev->net, "Error write async cmd, sts=%d\n",
435 ret);
436 return ret;
407}
408
409/* returns hash bit number for given MAC address
410 * example:
411 * 01 00 5E 00 00 01 -> returns bit number 31 */
412static unsigned int smsc95xx_hash(char addr[ETH_ALEN])
413{
414 return (ether_crc(ETH_ALEN, addr) >> 26) & 0x3f;

--- 41 unchanged lines hidden (view full) ---

456 pdata->mac_cr &=
457 ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_);
458 }
459
460 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
461
462 /* Initiate async writes, as we can't wait for completion here */
463 ret = smsc95xx_write_reg_async(dev, HASHH, &pdata->hash_hi);
437}
438
439/* returns hash bit number for given MAC address
440 * example:
441 * 01 00 5E 00 00 01 -> returns bit number 31 */
442static unsigned int smsc95xx_hash(char addr[ETH_ALEN])
443{
444 return (ether_crc(ETH_ALEN, addr) >> 26) & 0x3f;

--- 41 unchanged lines hidden (view full) ---

486 pdata->mac_cr &=
487 ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_ | MAC_CR_HPFILT_);
488 }
489
490 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
491
492 /* Initiate async writes, as we can't wait for completion here */
493 ret = smsc95xx_write_reg_async(dev, HASHH, &pdata->hash_hi);
464 check_warn(ret, "failed to initiate async write to HASHH");
494 if (ret < 0)
495 netdev_warn(dev->net, "failed to initiate async write to HASHH\n");
465
466 ret = smsc95xx_write_reg_async(dev, HASHL, &pdata->hash_lo);
496
497 ret = smsc95xx_write_reg_async(dev, HASHL, &pdata->hash_lo);
467 check_warn(ret, "failed to initiate async write to HASHL");
498 if (ret < 0)
499 netdev_warn(dev->net, "failed to initiate async write to HASHL\n");
468
469 ret = smsc95xx_write_reg_async(dev, MAC_CR, &pdata->mac_cr);
500
501 ret = smsc95xx_write_reg_async(dev, MAC_CR, &pdata->mac_cr);
470 check_warn(ret, "failed to initiate async write to MAC_CR");
502 if (ret < 0)
503 netdev_warn(dev->net, "failed to initiate async write to MAC_CR\n");
471}
472
473static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
474 u16 lcladv, u16 rmtadv)
475{
476 u32 flow, afc_cfg = 0;
477
478 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg);
504}
505
506static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
507 u16 lcladv, u16 rmtadv)
508{
509 u32 flow, afc_cfg = 0;
510
511 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg);
479 check_warn_return(ret, "Error reading AFC_CFG");
512 if (ret < 0) {
513 netdev_warn(dev->net, "Error reading AFC_CFG\n");
514 return ret;
515 }
480
481 if (duplex == DUPLEX_FULL) {
482 u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
483
484 if (cap & FLOW_CTRL_RX)
485 flow = 0xFFFF0002;
486 else
487 flow = 0;

--- 8 unchanged lines hidden (view full) ---

496 cap & FLOW_CTRL_TX ? "enabled" : "disabled");
497 } else {
498 netif_dbg(dev, link, dev->net, "half duplex\n");
499 flow = 0;
500 afc_cfg |= 0xF;
501 }
502
503 ret = smsc95xx_write_reg(dev, FLOW, flow);
516
517 if (duplex == DUPLEX_FULL) {
518 u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
519
520 if (cap & FLOW_CTRL_RX)
521 flow = 0xFFFF0002;
522 else
523 flow = 0;

--- 8 unchanged lines hidden (view full) ---

532 cap & FLOW_CTRL_TX ? "enabled" : "disabled");
533 } else {
534 netif_dbg(dev, link, dev->net, "half duplex\n");
535 flow = 0;
536 afc_cfg |= 0xF;
537 }
538
539 ret = smsc95xx_write_reg(dev, FLOW, flow);
504 check_warn_return(ret, "Error writing FLOW");
540 if (ret < 0) {
541 netdev_warn(dev->net, "Error writing FLOW\n");
542 return ret;
543 }
505
506 ret = smsc95xx_write_reg(dev, AFC_CFG, afc_cfg);
544
545 ret = smsc95xx_write_reg(dev, AFC_CFG, afc_cfg);
507 check_warn_return(ret, "Error writing AFC_CFG");
546 if (ret < 0)
547 netdev_warn(dev->net, "Error writing AFC_CFG\n");
508
548
509 return 0;
549 return ret;
510}
511
512static int smsc95xx_link_reset(struct usbnet *dev)
513{
514 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
515 struct mii_if_info *mii = &dev->mii;
516 struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
517 unsigned long flags;
518 u16 lcladv, rmtadv;
519 int ret;
520
521 /* clear interrupt status */
522 ret = smsc95xx_mdio_read(dev->net, mii->phy_id, PHY_INT_SRC);
550}
551
552static int smsc95xx_link_reset(struct usbnet *dev)
553{
554 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
555 struct mii_if_info *mii = &dev->mii;
556 struct ethtool_cmd ecmd = { .cmd = ETHTOOL_GSET };
557 unsigned long flags;
558 u16 lcladv, rmtadv;
559 int ret;
560
561 /* clear interrupt status */
562 ret = smsc95xx_mdio_read(dev->net, mii->phy_id, PHY_INT_SRC);
523 check_warn_return(ret, "Error reading PHY_INT_SRC");
563 if (ret < 0) {
564 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n");
565 return ret;
566 }
524
525 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
567
568 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
526 check_warn_return(ret, "Error writing INT_STS");
569 if (ret < 0) {
570 netdev_warn(dev->net, "Error writing INT_STS\n");
571 return ret;
572 }
527
528 mii_check_media(mii, 1, 1);
529 mii_ethtool_gset(&dev->mii, &ecmd);
530 lcladv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE);
531 rmtadv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_LPA);
532
533 netif_dbg(dev, link, dev->net,
534 "speed: %u duplex: %d lcladv: %04x rmtadv: %04x\n",

--- 5 unchanged lines hidden (view full) ---

540 pdata->mac_cr |= MAC_CR_RCVOWN_;
541 } else {
542 pdata->mac_cr &= ~MAC_CR_RCVOWN_;
543 pdata->mac_cr |= MAC_CR_FDPX_;
544 }
545 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
546
547 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
573
574 mii_check_media(mii, 1, 1);
575 mii_ethtool_gset(&dev->mii, &ecmd);
576 lcladv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE);
577 rmtadv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_LPA);
578
579 netif_dbg(dev, link, dev->net,
580 "speed: %u duplex: %d lcladv: %04x rmtadv: %04x\n",

--- 5 unchanged lines hidden (view full) ---

586 pdata->mac_cr |= MAC_CR_RCVOWN_;
587 } else {
588 pdata->mac_cr &= ~MAC_CR_RCVOWN_;
589 pdata->mac_cr |= MAC_CR_FDPX_;
590 }
591 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
592
593 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
548 check_warn_return(ret, "Error writing MAC_CR");
594 if (ret < 0) {
595 netdev_warn(dev->net, "Error writing MAC_CR\n");
596 return ret;
597 }
549
550 ret = smsc95xx_phy_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv);
598
599 ret = smsc95xx_phy_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv);
551 check_warn_return(ret, "Error updating PHY flow control");
600 if (ret < 0)
601 netdev_warn(dev->net, "Error updating PHY flow control\n");
552
602
553 return 0;
603 return ret;
554}
555
556static void smsc95xx_status(struct usbnet *dev, struct urb *urb)
557{
558 u32 intdata;
559
560 if (urb->actual_length != 4) {
561 netdev_warn(dev->net, "unexpected urb length %d\n",

--- 17 unchanged lines hidden (view full) ---

579static int smsc95xx_set_features(struct net_device *netdev,
580 netdev_features_t features)
581{
582 struct usbnet *dev = netdev_priv(netdev);
583 u32 read_buf;
584 int ret;
585
586 ret = smsc95xx_read_reg(dev, COE_CR, &read_buf);
604}
605
606static void smsc95xx_status(struct usbnet *dev, struct urb *urb)
607{
608 u32 intdata;
609
610 if (urb->actual_length != 4) {
611 netdev_warn(dev->net, "unexpected urb length %d\n",

--- 17 unchanged lines hidden (view full) ---

629static int smsc95xx_set_features(struct net_device *netdev,
630 netdev_features_t features)
631{
632 struct usbnet *dev = netdev_priv(netdev);
633 u32 read_buf;
634 int ret;
635
636 ret = smsc95xx_read_reg(dev, COE_CR, &read_buf);
587 check_warn_return(ret, "Failed to read COE_CR: %d\n", ret);
637 if (ret < 0) {
638 netdev_warn(dev->net, "Failed to read COE_CR: %d\n", ret);
639 return ret;
640 }
588
589 if (features & NETIF_F_HW_CSUM)
590 read_buf |= Tx_COE_EN_;
591 else
592 read_buf &= ~Tx_COE_EN_;
593
594 if (features & NETIF_F_RXCSUM)
595 read_buf |= Rx_COE_EN_;
596 else
597 read_buf &= ~Rx_COE_EN_;
598
599 ret = smsc95xx_write_reg(dev, COE_CR, read_buf);
641
642 if (features & NETIF_F_HW_CSUM)
643 read_buf |= Tx_COE_EN_;
644 else
645 read_buf &= ~Tx_COE_EN_;
646
647 if (features & NETIF_F_RXCSUM)
648 read_buf |= Rx_COE_EN_;
649 else
650 read_buf &= ~Rx_COE_EN_;
651
652 ret = smsc95xx_write_reg(dev, COE_CR, read_buf);
600 check_warn_return(ret, "Failed to write COE_CR: %d\n", ret);
653 if (ret < 0) {
654 netdev_warn(dev->net, "Failed to write COE_CR: %d\n", ret);
655 return ret;
656 }
601
602 netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf);
603 return 0;
604}
605
606static int smsc95xx_ethtool_get_eeprom_len(struct net_device *net)
607{
608 return MAX_EEPROM_SIZE;

--- 21 unchanged lines hidden (view full) ---

630 }
631
632 return smsc95xx_write_eeprom(dev, ee->offset, ee->len, data);
633}
634
635static int smsc95xx_ethtool_getregslen(struct net_device *netdev)
636{
637 /* all smsc95xx registers */
657
658 netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf);
659 return 0;
660}
661
662static int smsc95xx_ethtool_get_eeprom_len(struct net_device *net)
663{
664 return MAX_EEPROM_SIZE;

--- 21 unchanged lines hidden (view full) ---

686 }
687
688 return smsc95xx_write_eeprom(dev, ee->offset, ee->len, data);
689}
690
691static int smsc95xx_ethtool_getregslen(struct net_device *netdev)
692{
693 /* all smsc95xx registers */
638 return COE_CR - ID_REV + 1;
694 return COE_CR - ID_REV + sizeof(u32);
639}
640
641static void
642smsc95xx_ethtool_getregs(struct net_device *netdev, struct ethtool_regs *regs,
643 void *buf)
644{
645 struct usbnet *dev = netdev_priv(netdev);
646 unsigned int i, j;

--- 25 unchanged lines hidden (view full) ---

672 wolinfo->wolopts = pdata->wolopts;
673}
674
675static int smsc95xx_ethtool_set_wol(struct net_device *net,
676 struct ethtool_wolinfo *wolinfo)
677{
678 struct usbnet *dev = netdev_priv(net);
679 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
695}
696
697static void
698smsc95xx_ethtool_getregs(struct net_device *netdev, struct ethtool_regs *regs,
699 void *buf)
700{
701 struct usbnet *dev = netdev_priv(netdev);
702 unsigned int i, j;

--- 25 unchanged lines hidden (view full) ---

728 wolinfo->wolopts = pdata->wolopts;
729}
730
731static int smsc95xx_ethtool_set_wol(struct net_device *net,
732 struct ethtool_wolinfo *wolinfo)
733{
734 struct usbnet *dev = netdev_priv(net);
735 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
736 int ret;
680
681 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
737
738 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
682 return 0;
739
740 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
741 if (ret < 0)
742 netdev_warn(dev->net, "device_set_wakeup_enable error %d\n", ret);
743
744 return ret;
683}
684
685static const struct ethtool_ops smsc95xx_ethtool_ops = {
686 .get_link = usbnet_get_link,
687 .nway_reset = usbnet_nway_reset,
688 .get_drvinfo = usbnet_get_drvinfo,
689 .get_msglevel = usbnet_get_msglevel,
690 .set_msglevel = usbnet_set_msglevel,

--- 38 unchanged lines hidden (view full) ---

729static int smsc95xx_set_mac_address(struct usbnet *dev)
730{
731 u32 addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 |
732 dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24;
733 u32 addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8;
734 int ret;
735
736 ret = smsc95xx_write_reg(dev, ADDRL, addr_lo);
745}
746
747static const struct ethtool_ops smsc95xx_ethtool_ops = {
748 .get_link = usbnet_get_link,
749 .nway_reset = usbnet_nway_reset,
750 .get_drvinfo = usbnet_get_drvinfo,
751 .get_msglevel = usbnet_get_msglevel,
752 .set_msglevel = usbnet_set_msglevel,

--- 38 unchanged lines hidden (view full) ---

791static int smsc95xx_set_mac_address(struct usbnet *dev)
792{
793 u32 addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 |
794 dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24;
795 u32 addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8;
796 int ret;
797
798 ret = smsc95xx_write_reg(dev, ADDRL, addr_lo);
737 check_warn_return(ret, "Failed to write ADDRL: %d\n", ret);
799 if (ret < 0) {
800 netdev_warn(dev->net, "Failed to write ADDRL: %d\n", ret);
801 return ret;
802 }
738
739 ret = smsc95xx_write_reg(dev, ADDRH, addr_hi);
803
804 ret = smsc95xx_write_reg(dev, ADDRH, addr_hi);
740 check_warn_return(ret, "Failed to write ADDRH: %d\n", ret);
805 if (ret < 0)
806 netdev_warn(dev->net, "Failed to write ADDRH: %d\n", ret);
741
807
742 return 0;
808 return ret;
743}
744
745/* starts the TX path */
746static int smsc95xx_start_tx_path(struct usbnet *dev)
747{
748 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
749 unsigned long flags;
750 int ret;
751
752 /* Enable Tx at MAC */
753 spin_lock_irqsave(&pdata->mac_cr_lock, flags);
754 pdata->mac_cr |= MAC_CR_TXEN_;
755 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
756
757 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
809}
810
811/* starts the TX path */
812static int smsc95xx_start_tx_path(struct usbnet *dev)
813{
814 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
815 unsigned long flags;
816 int ret;
817
818 /* Enable Tx at MAC */
819 spin_lock_irqsave(&pdata->mac_cr_lock, flags);
820 pdata->mac_cr |= MAC_CR_TXEN_;
821 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
822
823 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
758 check_warn_return(ret, "Failed to write MAC_CR: %d\n", ret);
824 if (ret < 0) {
825 netdev_warn(dev->net, "Failed to write MAC_CR: %d\n", ret);
826 return ret;
827 }
759
760 /* Enable Tx at SCSRs */
761 ret = smsc95xx_write_reg(dev, TX_CFG, TX_CFG_ON_);
828
829 /* Enable Tx at SCSRs */
830 ret = smsc95xx_write_reg(dev, TX_CFG, TX_CFG_ON_);
762 check_warn_return(ret, "Failed to write TX_CFG: %d\n", ret);
831 if (ret < 0)
832 netdev_warn(dev->net, "Failed to write TX_CFG: %d\n", ret);
763
833
764 return 0;
834 return ret;
765}
766
767/* Starts the Receive path */
835}
836
837/* Starts the Receive path */
768static int smsc95xx_start_rx_path(struct usbnet *dev)
838static int smsc95xx_start_rx_path(struct usbnet *dev, int in_pm)
769{
770 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
771 unsigned long flags;
772 int ret;
773
774 spin_lock_irqsave(&pdata->mac_cr_lock, flags);
775 pdata->mac_cr |= MAC_CR_RXEN_;
776 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
777
839{
840 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
841 unsigned long flags;
842 int ret;
843
844 spin_lock_irqsave(&pdata->mac_cr_lock, flags);
845 pdata->mac_cr |= MAC_CR_RXEN_;
846 spin_unlock_irqrestore(&pdata->mac_cr_lock, flags);
847
778 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr);
779 check_warn_return(ret, "Failed to write MAC_CR: %d\n", ret);
848 ret = __smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr, in_pm);
849 if (ret < 0)
850 netdev_warn(dev->net, "Failed to write MAC_CR: %d\n", ret);
780
851
781 return 0;
852 return ret;
782}
783
784static int smsc95xx_phy_initialize(struct usbnet *dev)
785{
786 int bmcr, ret, timeout = 0;
787
788 /* Initialize MII structure */
789 dev->mii.dev = dev->net;

--- 18 unchanged lines hidden (view full) ---

808 }
809
810 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE,
811 ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP |
812 ADVERTISE_PAUSE_ASYM);
813
814 /* read to clear */
815 ret = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC);
853}
854
855static int smsc95xx_phy_initialize(struct usbnet *dev)
856{
857 int bmcr, ret, timeout = 0;
858
859 /* Initialize MII structure */
860 dev->mii.dev = dev->net;

--- 18 unchanged lines hidden (view full) ---

879 }
880
881 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE,
882 ADVERTISE_ALL | ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP |
883 ADVERTISE_PAUSE_ASYM);
884
885 /* read to clear */
886 ret = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC);
816 check_warn_return(ret, "Failed to read PHY_INT_SRC during init");
887 if (ret < 0) {
888 netdev_warn(dev->net, "Failed to read PHY_INT_SRC during init\n");
889 return ret;
890 }
817
818 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK,
819 PHY_INT_MASK_DEFAULT_);
820 mii_nway_restart(&dev->mii);
821
822 netif_dbg(dev, ifup, dev->net, "phy initialised successfully\n");
823 return 0;
824}
825
826static int smsc95xx_reset(struct usbnet *dev)
827{
828 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
829 u32 read_buf, write_buf, burst_cap;
830 int ret = 0, timeout;
831
832 netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n");
833
834 ret = smsc95xx_write_reg(dev, HW_CFG, HW_CFG_LRST_);
891
892 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK,
893 PHY_INT_MASK_DEFAULT_);
894 mii_nway_restart(&dev->mii);
895
896 netif_dbg(dev, ifup, dev->net, "phy initialised successfully\n");
897 return 0;
898}
899
900static int smsc95xx_reset(struct usbnet *dev)
901{
902 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
903 u32 read_buf, write_buf, burst_cap;
904 int ret = 0, timeout;
905
906 netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n");
907
908 ret = smsc95xx_write_reg(dev, HW_CFG, HW_CFG_LRST_);
835 check_warn_return(ret, "Failed to write HW_CFG_LRST_ bit in HW_CFG\n");
909 if (ret < 0) {
910 netdev_warn(dev->net, "Failed to write HW_CFG_LRST_ bit in HW_CFG\n");
911 return ret;
912 }
836
837 timeout = 0;
838 do {
839 msleep(10);
840 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
913
914 timeout = 0;
915 do {
916 msleep(10);
917 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
841 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret);
918 if (ret < 0) {
919 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
920 return ret;
921 }
842 timeout++;
843 } while ((read_buf & HW_CFG_LRST_) && (timeout < 100));
844
845 if (timeout >= 100) {
846 netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n");
847 return ret;
848 }
849
850 ret = smsc95xx_write_reg(dev, PM_CTRL, PM_CTL_PHY_RST_);
922 timeout++;
923 } while ((read_buf & HW_CFG_LRST_) && (timeout < 100));
924
925 if (timeout >= 100) {
926 netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n");
927 return ret;
928 }
929
930 ret = smsc95xx_write_reg(dev, PM_CTRL, PM_CTL_PHY_RST_);
851 check_warn_return(ret, "Failed to write PM_CTRL: %d\n", ret);
931 if (ret < 0) {
932 netdev_warn(dev->net, "Failed to write PM_CTRL: %d\n", ret);
933 return ret;
934 }
852
853 timeout = 0;
854 do {
855 msleep(10);
856 ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf);
935
936 timeout = 0;
937 do {
938 msleep(10);
939 ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf);
857 check_warn_return(ret, "Failed to read PM_CTRL: %d\n", ret);
940 if (ret < 0) {
941 netdev_warn(dev->net, "Failed to read PM_CTRL: %d\n", ret);
942 return ret;
943 }
858 timeout++;
859 } while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100));
860
861 if (timeout >= 100) {
862 netdev_warn(dev->net, "timeout waiting for PHY Reset\n");
863 return ret;
864 }
865
866 ret = smsc95xx_set_mac_address(dev);
867 if (ret < 0)
868 return ret;
869
944 timeout++;
945 } while ((read_buf & PM_CTL_PHY_RST_) && (timeout < 100));
946
947 if (timeout >= 100) {
948 netdev_warn(dev->net, "timeout waiting for PHY Reset\n");
949 return ret;
950 }
951
952 ret = smsc95xx_set_mac_address(dev);
953 if (ret < 0)
954 return ret;
955
870 netif_dbg(dev, ifup, dev->net,
871 "MAC Address: %pM\n", dev->net->dev_addr);
956 netif_dbg(dev, ifup, dev->net, "MAC Address: %pM\n",
957 dev->net->dev_addr);
872
873 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
958
959 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
874 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret);
960 if (ret < 0) {
961 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
962 return ret;
963 }
875
964
876 netif_dbg(dev, ifup, dev->net,
877 "Read Value from HW_CFG : 0x%08x\n", read_buf);
965 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n",
966 read_buf);
878
879 read_buf |= HW_CFG_BIR_;
880
881 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
967
968 read_buf |= HW_CFG_BIR_;
969
970 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
882 check_warn_return(ret, "Failed to write HW_CFG_BIR_ bit in HW_CFG\n");
971 if (ret < 0) {
972 netdev_warn(dev->net, "Failed to write HW_CFG_BIR_ bit in HW_CFG\n");
973 return ret;
974 }
883
884 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
975
976 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
885 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret);
977 if (ret < 0) {
978 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
979 return ret;
980 }
981
886 netif_dbg(dev, ifup, dev->net,
887 "Read Value from HW_CFG after writing HW_CFG_BIR_: 0x%08x\n",
888 read_buf);
889
890 if (!turbo_mode) {
891 burst_cap = 0;
892 dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE;
893 } else if (dev->udev->speed == USB_SPEED_HIGH) {
894 burst_cap = DEFAULT_HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE;
895 dev->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE;
896 } else {
897 burst_cap = DEFAULT_FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE;
898 dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE;
899 }
900
982 netif_dbg(dev, ifup, dev->net,
983 "Read Value from HW_CFG after writing HW_CFG_BIR_: 0x%08x\n",
984 read_buf);
985
986 if (!turbo_mode) {
987 burst_cap = 0;
988 dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE;
989 } else if (dev->udev->speed == USB_SPEED_HIGH) {
990 burst_cap = DEFAULT_HS_BURST_CAP_SIZE / HS_USB_PKT_SIZE;
991 dev->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE;
992 } else {
993 burst_cap = DEFAULT_FS_BURST_CAP_SIZE / FS_USB_PKT_SIZE;
994 dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE;
995 }
996
901 netif_dbg(dev, ifup, dev->net,
902 "rx_urb_size=%ld\n", (ulong)dev->rx_urb_size);
997 netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n",
998 (ulong)dev->rx_urb_size);
903
904 ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap);
999
1000 ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap);
905 check_warn_return(ret, "Failed to write BURST_CAP: %d\n", ret);
1001 if (ret < 0) {
1002 netdev_warn(dev->net, "Failed to write BURST_CAP: %d\n", ret);
1003 return ret;
1004 }
906
907 ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf);
1005
1006 ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf);
908 check_warn_return(ret, "Failed to read BURST_CAP: %d\n", ret);
1007 if (ret < 0) {
1008 netdev_warn(dev->net, "Failed to read BURST_CAP: %d\n", ret);
1009 return ret;
1010 }
909
910 netif_dbg(dev, ifup, dev->net,
911 "Read Value from BURST_CAP after writing: 0x%08x\n",
912 read_buf);
913
914 ret = smsc95xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY);
1011
1012 netif_dbg(dev, ifup, dev->net,
1013 "Read Value from BURST_CAP after writing: 0x%08x\n",
1014 read_buf);
1015
1016 ret = smsc95xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY);
915 check_warn_return(ret, "Failed to write BULK_IN_DLY: %d\n", ret);
1017 if (ret < 0) {
1018 netdev_warn(dev->net, "Failed to write BULK_IN_DLY: %d\n", ret);
1019 return ret;
1020 }
916
917 ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf);
1021
1022 ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf);
918 check_warn_return(ret, "Failed to read BULK_IN_DLY: %d\n", ret);
1023 if (ret < 0) {
1024 netdev_warn(dev->net, "Failed to read BULK_IN_DLY: %d\n", ret);
1025 return ret;
1026 }
919
920 netif_dbg(dev, ifup, dev->net,
921 "Read Value from BULK_IN_DLY after writing: 0x%08x\n",
922 read_buf);
923
924 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
1027
1028 netif_dbg(dev, ifup, dev->net,
1029 "Read Value from BULK_IN_DLY after writing: 0x%08x\n",
1030 read_buf);
1031
1032 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
925 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret);
1033 if (ret < 0) {
1034 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
1035 return ret;
1036 }
926
1037
927 netif_dbg(dev, ifup, dev->net,
928 "Read Value from HW_CFG: 0x%08x\n", read_buf);
1038 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG: 0x%08x\n",
1039 read_buf);
929
930 if (turbo_mode)
931 read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_);
932
933 read_buf &= ~HW_CFG_RXDOFF_;
934
935 /* set Rx data offset=2, Make IP header aligns on word boundary. */
936 read_buf |= NET_IP_ALIGN << 9;
937
938 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
1040
1041 if (turbo_mode)
1042 read_buf |= (HW_CFG_MEF_ | HW_CFG_BCE_);
1043
1044 read_buf &= ~HW_CFG_RXDOFF_;
1045
1046 /* set Rx data offset=2, Make IP header aligns on word boundary. */
1047 read_buf |= NET_IP_ALIGN << 9;
1048
1049 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf);
939 check_warn_return(ret, "Failed to write HW_CFG: %d\n", ret);
1050 if (ret < 0) {
1051 netdev_warn(dev->net, "Failed to write HW_CFG: %d\n", ret);
1052 return ret;
1053 }
940
941 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
1054
1055 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf);
942 check_warn_return(ret, "Failed to read HW_CFG: %d\n", ret);
1056 if (ret < 0) {
1057 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret);
1058 return ret;
1059 }
943
944 netif_dbg(dev, ifup, dev->net,
945 "Read Value from HW_CFG after writing: 0x%08x\n", read_buf);
946
947 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
1060
1061 netif_dbg(dev, ifup, dev->net,
1062 "Read Value from HW_CFG after writing: 0x%08x\n", read_buf);
1063
1064 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_);
948 check_warn_return(ret, "Failed to write INT_STS: %d\n", ret);
1065 if (ret < 0) {
1066 netdev_warn(dev->net, "Failed to write INT_STS: %d\n", ret);
1067 return ret;
1068 }
949
950 ret = smsc95xx_read_reg(dev, ID_REV, &read_buf);
1069
1070 ret = smsc95xx_read_reg(dev, ID_REV, &read_buf);
951 check_warn_return(ret, "Failed to read ID_REV: %d\n", ret);
1071 if (ret < 0) {
1072 netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret);
1073 return ret;
1074 }
952 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf);
953
954 /* Configure GPIO pins as LED outputs */
955 write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED |
956 LED_GPIO_CFG_FDX_LED;
957 ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf);
1075 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf);
1076
1077 /* Configure GPIO pins as LED outputs */
1078 write_buf = LED_GPIO_CFG_SPD_LED | LED_GPIO_CFG_LNK_LED |
1079 LED_GPIO_CFG_FDX_LED;
1080 ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf);
958 check_warn_return(ret, "Failed to write LED_GPIO_CFG: %d\n", ret);
1081 if (ret < 0) {
1082 netdev_warn(dev->net, "Failed to write LED_GPIO_CFG: %d\n", ret);
1083 return ret;
1084 }
959
960 /* Init Tx */
961 ret = smsc95xx_write_reg(dev, FLOW, 0);
1085
1086 /* Init Tx */
1087 ret = smsc95xx_write_reg(dev, FLOW, 0);
962 check_warn_return(ret, "Failed to write FLOW: %d\n", ret);
1088 if (ret < 0) {
1089 netdev_warn(dev->net, "Failed to write FLOW: %d\n", ret);
1090 return ret;
1091 }
963
964 ret = smsc95xx_write_reg(dev, AFC_CFG, AFC_CFG_DEFAULT);
1092
1093 ret = smsc95xx_write_reg(dev, AFC_CFG, AFC_CFG_DEFAULT);
965 check_warn_return(ret, "Failed to write AFC_CFG: %d\n", ret);
1094 if (ret < 0) {
1095 netdev_warn(dev->net, "Failed to write AFC_CFG: %d\n", ret);
1096 return ret;
1097 }
966
967 /* Don't need mac_cr_lock during initialisation */
968 ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr);
1098
1099 /* Don't need mac_cr_lock during initialisation */
1100 ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr);
969 check_warn_return(ret, "Failed to read MAC_CR: %d\n", ret);
1101 if (ret < 0) {
1102 netdev_warn(dev->net, "Failed to read MAC_CR: %d\n", ret);
1103 return ret;
1104 }
970
971 /* Init Rx */
972 /* Set Vlan */
973 ret = smsc95xx_write_reg(dev, VLAN1, (u32)ETH_P_8021Q);
1105
1106 /* Init Rx */
1107 /* Set Vlan */
1108 ret = smsc95xx_write_reg(dev, VLAN1, (u32)ETH_P_8021Q);
974 check_warn_return(ret, "Failed to write VLAN1: %d\n", ret);
1109 if (ret < 0) {
1110 netdev_warn(dev->net, "Failed to write VLAN1: %d\n", ret);
1111 return ret;
1112 }
975
976 /* Enable or disable checksum offload engines */
977 ret = smsc95xx_set_features(dev->net, dev->net->features);
1113
1114 /* Enable or disable checksum offload engines */
1115 ret = smsc95xx_set_features(dev->net, dev->net->features);
978 check_warn_return(ret, "Failed to set checksum offload features");
1116 if (ret < 0) {
1117 netdev_warn(dev->net, "Failed to set checksum offload features\n");
1118 return ret;
1119 }
979
980 smsc95xx_set_multicast(dev->net);
981
982 ret = smsc95xx_phy_initialize(dev);
1120
1121 smsc95xx_set_multicast(dev->net);
1122
1123 ret = smsc95xx_phy_initialize(dev);
983 check_warn_return(ret, "Failed to init PHY");
1124 if (ret < 0) {
1125 netdev_warn(dev->net, "Failed to init PHY\n");
1126 return ret;
1127 }
984
985 ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf);
1128
1129 ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf);
986 check_warn_return(ret, "Failed to read INT_EP_CTL: %d\n", ret);
1130 if (ret < 0) {
1131 netdev_warn(dev->net, "Failed to read INT_EP_CTL: %d\n", ret);
1132 return ret;
1133 }
987
988 /* enable PHY interrupts */
989 read_buf |= INT_EP_CTL_PHY_INT_;
990
991 ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf);
1134
1135 /* enable PHY interrupts */
1136 read_buf |= INT_EP_CTL_PHY_INT_;
1137
1138 ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf);
992 check_warn_return(ret, "Failed to write INT_EP_CTL: %d\n", ret);
1139 if (ret < 0) {
1140 netdev_warn(dev->net, "Failed to write INT_EP_CTL: %d\n", ret);
1141 return ret;
1142 }
993
994 ret = smsc95xx_start_tx_path(dev);
1143
1144 ret = smsc95xx_start_tx_path(dev);
995 check_warn_return(ret, "Failed to start TX path");
1145 if (ret < 0) {
1146 netdev_warn(dev->net, "Failed to start TX path\n");
1147 return ret;
1148 }
996
1149
997 ret = smsc95xx_start_rx_path(dev);
998 check_warn_return(ret, "Failed to start RX path");
1150 ret = smsc95xx_start_rx_path(dev, 0);
1151 if (ret < 0) {
1152 netdev_warn(dev->net, "Failed to start RX path\n");
1153 return ret;
1154 }
999
1000 netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n");
1001 return 0;
1002}
1003
1004static const struct net_device_ops smsc95xx_netdev_ops = {
1005 .ndo_open = usbnet_open,
1006 .ndo_stop = usbnet_stop,

--- 5 unchanged lines hidden (view full) ---

1012 .ndo_do_ioctl = smsc95xx_ioctl,
1013 .ndo_set_rx_mode = smsc95xx_set_multicast,
1014 .ndo_set_features = smsc95xx_set_features,
1015};
1016
1017static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
1018{
1019 struct smsc95xx_priv *pdata = NULL;
1155
1156 netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n");
1157 return 0;
1158}
1159
1160static const struct net_device_ops smsc95xx_netdev_ops = {
1161 .ndo_open = usbnet_open,
1162 .ndo_stop = usbnet_stop,

--- 5 unchanged lines hidden (view full) ---

1168 .ndo_do_ioctl = smsc95xx_ioctl,
1169 .ndo_set_rx_mode = smsc95xx_set_multicast,
1170 .ndo_set_features = smsc95xx_set_features,
1171};
1172
1173static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
1174{
1175 struct smsc95xx_priv *pdata = NULL;
1176 u32 val;
1020 int ret;
1021
1022 printk(KERN_INFO SMSC_CHIPNAME " v" SMSC_DRIVER_VERSION "\n");
1023
1024 ret = usbnet_get_endpoints(dev, intf);
1177 int ret;
1178
1179 printk(KERN_INFO SMSC_CHIPNAME " v" SMSC_DRIVER_VERSION "\n");
1180
1181 ret = usbnet_get_endpoints(dev, intf);
1025 check_warn_return(ret, "usbnet_get_endpoints failed: %d\n", ret);
1182 if (ret < 0) {
1183 netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret);
1184 return ret;
1185 }
1026
1027 dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc95xx_priv),
1028 GFP_KERNEL);
1029
1030 pdata = (struct smsc95xx_priv *)(dev->data[0]);
1031 if (!pdata) {
1032 netdev_warn(dev->net, "Unable to allocate struct smsc95xx_priv\n");
1033 return -ENOMEM;

--- 8 unchanged lines hidden (view full) ---

1042
1043 dev->net->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
1044
1045 smsc95xx_init_mac_address(dev);
1046
1047 /* Init all registers */
1048 ret = smsc95xx_reset(dev);
1049
1186
1187 dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc95xx_priv),
1188 GFP_KERNEL);
1189
1190 pdata = (struct smsc95xx_priv *)(dev->data[0]);
1191 if (!pdata) {
1192 netdev_warn(dev->net, "Unable to allocate struct smsc95xx_priv\n");
1193 return -ENOMEM;

--- 8 unchanged lines hidden (view full) ---

1202
1203 dev->net->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
1204
1205 smsc95xx_init_mac_address(dev);
1206
1207 /* Init all registers */
1208 ret = smsc95xx_reset(dev);
1209
1210 /* detect device revision as different features may be available */
1211 ret = smsc95xx_read_reg(dev, ID_REV, &val);
1212 if (ret < 0) {
1213 netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret);
1214 return ret;
1215 }
1216 val >>= 16;
1217
1218 if ((val == ID_REV_CHIP_ID_9500A_) || (val == ID_REV_CHIP_ID_9530_) ||
1219 (val == ID_REV_CHIP_ID_89530_) || (val == ID_REV_CHIP_ID_9730_))
1220 pdata->features = (FEATURE_8_WAKEUP_FILTERS |
1221 FEATURE_PHY_NLP_CROSSOVER |
1222 FEATURE_AUTOSUSPEND);
1223 else if (val == ID_REV_CHIP_ID_9512_)
1224 pdata->features = FEATURE_8_WAKEUP_FILTERS;
1225
1050 dev->net->netdev_ops = &smsc95xx_netdev_ops;
1051 dev->net->ethtool_ops = &smsc95xx_ethtool_ops;
1052 dev->net->flags |= IFF_MULTICAST;
1053 dev->net->hard_header_len += SMSC95XX_TX_OVERHEAD_CSUM;
1054 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
1055 return 0;
1056}
1057
1058static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf)
1059{
1060 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1061 if (pdata) {
1062 netif_dbg(dev, ifdown, dev->net, "free pdata\n");
1063 kfree(pdata);
1064 pdata = NULL;
1065 dev->data[0] = 0;
1066 }
1067}
1068
1226 dev->net->netdev_ops = &smsc95xx_netdev_ops;
1227 dev->net->ethtool_ops = &smsc95xx_ethtool_ops;
1228 dev->net->flags |= IFF_MULTICAST;
1229 dev->net->hard_header_len += SMSC95XX_TX_OVERHEAD_CSUM;
1230 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len;
1231 return 0;
1232}
1233
1234static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf)
1235{
1236 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1237 if (pdata) {
1238 netif_dbg(dev, ifdown, dev->net, "free pdata\n");
1239 kfree(pdata);
1240 pdata = NULL;
1241 dev->data[0] = 0;
1242 }
1243}
1244
1245static u32 smsc_crc(const u8 *buffer, size_t len, int filter)
1246{
1247 u32 crc = bitrev16(crc16(0xFFFF, buffer, len));
1248 return crc << ((filter % 2) * 16);
1249}
1250
1251static int smsc95xx_enable_phy_wakeup_interrupts(struct usbnet *dev, u16 mask)
1252{
1253 struct mii_if_info *mii = &dev->mii;
1254 int ret;
1255
1256 netdev_dbg(dev->net, "enabling PHY wakeup interrupts\n");
1257
1258 /* read to clear */
1259 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC);
1260 if (ret < 0) {
1261 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n");
1262 return ret;
1263 }
1264
1265 /* enable interrupt source */
1266 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK);
1267 if (ret < 0) {
1268 netdev_warn(dev->net, "Error reading PHY_INT_MASK\n");
1269 return ret;
1270 }
1271
1272 ret |= mask;
1273
1274 smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_INT_MASK, ret);
1275
1276 return 0;
1277}
1278
1279static int smsc95xx_link_ok_nopm(struct usbnet *dev)
1280{
1281 struct mii_if_info *mii = &dev->mii;
1282 int ret;
1283
1284 /* first, a dummy read, needed to latch some MII phys */
1285 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR);
1286 if (ret < 0) {
1287 netdev_warn(dev->net, "Error reading MII_BMSR\n");
1288 return ret;
1289 }
1290
1291 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR);
1292 if (ret < 0) {
1293 netdev_warn(dev->net, "Error reading MII_BMSR\n");
1294 return ret;
1295 }
1296
1297 return !!(ret & BMSR_LSTATUS);
1298}
1299
1300static int smsc95xx_enter_suspend0(struct usbnet *dev)
1301{
1302 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1303 u32 val;
1304 int ret;
1305
1306 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1307 if (ret < 0) {
1308 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1309 return ret;
1310 }
1311
1312 val &= (~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_));
1313 val |= PM_CTL_SUS_MODE_0;
1314
1315 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1316 if (ret < 0) {
1317 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1318 return ret;
1319 }
1320
1321 /* clear wol status */
1322 val &= ~PM_CTL_WUPS_;
1323 val |= PM_CTL_WUPS_WOL_;
1324
1325 /* enable energy detection */
1326 if (pdata->wolopts & WAKE_PHY)
1327 val |= PM_CTL_WUPS_ED_;
1328
1329 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1330 if (ret < 0) {
1331 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1332 return ret;
1333 }
1334
1335 /* read back PM_CTRL */
1336 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1337 if (ret < 0)
1338 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1339
1340 return ret;
1341}
1342
1343static int smsc95xx_enter_suspend1(struct usbnet *dev)
1344{
1345 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1346 struct mii_if_info *mii = &dev->mii;
1347 u32 val;
1348 int ret;
1349
1350 /* reconfigure link pulse detection timing for
1351 * compatibility with non-standard link partners
1352 */
1353 if (pdata->features & FEATURE_PHY_NLP_CROSSOVER)
1354 smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_EDPD_CONFIG,
1355 PHY_EDPD_CONFIG_DEFAULT);
1356
1357 /* enable energy detect power-down mode */
1358 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS);
1359 if (ret < 0) {
1360 netdev_warn(dev->net, "Error reading PHY_MODE_CTRL_STS\n");
1361 return ret;
1362 }
1363
1364 ret |= MODE_CTRL_STS_EDPWRDOWN_;
1365
1366 smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS, ret);
1367
1368 /* enter SUSPEND1 mode */
1369 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1370 if (ret < 0) {
1371 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1372 return ret;
1373 }
1374
1375 val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_);
1376 val |= PM_CTL_SUS_MODE_1;
1377
1378 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1379 if (ret < 0) {
1380 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1381 return ret;
1382 }
1383
1384 /* clear wol status, enable energy detection */
1385 val &= ~PM_CTL_WUPS_;
1386 val |= (PM_CTL_WUPS_ED_ | PM_CTL_ED_EN_);
1387
1388 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1389 if (ret < 0)
1390 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1391
1392 return ret;
1393}
1394
1395static int smsc95xx_enter_suspend2(struct usbnet *dev)
1396{
1397 u32 val;
1398 int ret;
1399
1400 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1401 if (ret < 0) {
1402 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1403 return ret;
1404 }
1405
1406 val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_);
1407 val |= PM_CTL_SUS_MODE_2;
1408
1409 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1410 if (ret < 0)
1411 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1412
1413 return ret;
1414}
1415
1069static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1070{
1071 struct usbnet *dev = usb_get_intfdata(intf);
1072 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1416static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message)
1417{
1418 struct usbnet *dev = usb_get_intfdata(intf);
1419 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1420 u32 val, link_up;
1073 int ret;
1421 int ret;
1074 u32 val;
1075
1076 ret = usbnet_suspend(intf, message);
1422
1423 ret = usbnet_suspend(intf, message);
1077 check_warn_return(ret, "usbnet_suspend error");
1424 if (ret < 0) {
1425 netdev_warn(dev->net, "usbnet_suspend error\n");
1426 return ret;
1427 }
1078
1428
1079 /* if no wol options set, enter lowest power SUSPEND2 mode */
1080 if (!(pdata->wolopts & SUPPORTED_WAKE)) {
1081 netdev_info(dev->net, "entering SUSPEND2 mode");
1429 /* determine if link is up using only _nopm functions */
1430 link_up = smsc95xx_link_ok_nopm(dev);
1082
1431
1432 /* if no wol options set, or if link is down and we're not waking on
1433 * PHY activity, enter lowest power SUSPEND2 mode
1434 */
1435 if (!(pdata->wolopts & SUPPORTED_WAKE) ||
1436 !(link_up || (pdata->wolopts & WAKE_PHY))) {
1437 netdev_info(dev->net, "entering SUSPEND2 mode\n");
1438
1083 /* disable energy detect (link up) & wake up events */
1439 /* disable energy detect (link up) & wake up events */
1084 ret = smsc95xx_read_reg(dev, WUCSR, &val);
1085 check_warn_return(ret, "Error reading WUCSR");
1440 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1441 if (ret < 0) {
1442 netdev_warn(dev->net, "Error reading WUCSR\n");
1443 goto done;
1444 }
1086
1087 val &= ~(WUCSR_MPEN_ | WUCSR_WAKE_EN_);
1088
1445
1446 val &= ~(WUCSR_MPEN_ | WUCSR_WAKE_EN_);
1447
1089 ret = smsc95xx_write_reg(dev, WUCSR, val);
1090 check_warn_return(ret, "Error writing WUCSR");
1448 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1449 if (ret < 0) {
1450 netdev_warn(dev->net, "Error writing WUCSR\n");
1451 goto done;
1452 }
1091
1453
1092 ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
1093 check_warn_return(ret, "Error reading PM_CTRL");
1454 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1455 if (ret < 0) {
1456 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1457 goto done;
1458 }
1094
1095 val &= ~(PM_CTL_ED_EN_ | PM_CTL_WOL_EN_);
1096
1459
1460 val &= ~(PM_CTL_ED_EN_ | PM_CTL_WOL_EN_);
1461
1097 ret = smsc95xx_write_reg(dev, PM_CTRL, val);
1098 check_warn_return(ret, "Error writing PM_CTRL");
1462 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1463 if (ret < 0) {
1464 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1465 goto done;
1466 }
1099
1467
1100 /* enter suspend2 mode */
1101 ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
1102 check_warn_return(ret, "Error reading PM_CTRL");
1468 ret = smsc95xx_enter_suspend2(dev);
1469 goto done;
1470 }
1103
1471
1104 val &= ~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_);
1105 val |= PM_CTL_SUS_MODE_2;
1472 if (pdata->wolopts & WAKE_PHY) {
1473 ret = smsc95xx_enable_phy_wakeup_interrupts(dev,
1474 (PHY_INT_MASK_ANEG_COMP_ | PHY_INT_MASK_LINK_DOWN_));
1475 if (ret < 0) {
1476 netdev_warn(dev->net, "error enabling PHY wakeup ints\n");
1477 goto done;
1478 }
1106
1479
1107 ret = smsc95xx_write_reg(dev, PM_CTRL, val);
1108 check_warn_return(ret, "Error writing PM_CTRL");
1480 /* if link is down then configure EDPD and enter SUSPEND1,
1481 * otherwise enter SUSPEND0 below
1482 */
1483 if (!link_up) {
1484 netdev_info(dev->net, "entering SUSPEND1 mode\n");
1485 ret = smsc95xx_enter_suspend1(dev);
1486 goto done;
1487 }
1488 }
1109
1489
1110 return 0;
1490 if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) {
1491 u32 *filter_mask = kzalloc(sizeof(u32) * 32, GFP_KERNEL);
1492 u32 command[2];
1493 u32 offset[2];
1494 u32 crc[4];
1495 int wuff_filter_count =
1496 (pdata->features & FEATURE_8_WAKEUP_FILTERS) ?
1497 LAN9500A_WUFF_NUM : LAN9500_WUFF_NUM;
1498 int i, filter = 0;
1499
1500 if (!filter_mask) {
1501 netdev_warn(dev->net, "Unable to allocate filter_mask\n");
1502 ret = -ENOMEM;
1503 goto done;
1504 }
1505
1506 memset(command, 0, sizeof(command));
1507 memset(offset, 0, sizeof(offset));
1508 memset(crc, 0, sizeof(crc));
1509
1510 if (pdata->wolopts & WAKE_BCAST) {
1511 const u8 bcast[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
1512 netdev_info(dev->net, "enabling broadcast detection\n");
1513 filter_mask[filter * 4] = 0x003F;
1514 filter_mask[filter * 4 + 1] = 0x00;
1515 filter_mask[filter * 4 + 2] = 0x00;
1516 filter_mask[filter * 4 + 3] = 0x00;
1517 command[filter/4] |= 0x05UL << ((filter % 4) * 8);
1518 offset[filter/4] |= 0x00 << ((filter % 4) * 8);
1519 crc[filter/2] |= smsc_crc(bcast, 6, filter);
1520 filter++;
1521 }
1522
1523 if (pdata->wolopts & WAKE_MCAST) {
1524 const u8 mcast[] = {0x01, 0x00, 0x5E};
1525 netdev_info(dev->net, "enabling multicast detection\n");
1526 filter_mask[filter * 4] = 0x0007;
1527 filter_mask[filter * 4 + 1] = 0x00;
1528 filter_mask[filter * 4 + 2] = 0x00;
1529 filter_mask[filter * 4 + 3] = 0x00;
1530 command[filter/4] |= 0x09UL << ((filter % 4) * 8);
1531 offset[filter/4] |= 0x00 << ((filter % 4) * 8);
1532 crc[filter/2] |= smsc_crc(mcast, 3, filter);
1533 filter++;
1534 }
1535
1536 if (pdata->wolopts & WAKE_ARP) {
1537 const u8 arp[] = {0x08, 0x06};
1538 netdev_info(dev->net, "enabling ARP detection\n");
1539 filter_mask[filter * 4] = 0x0003;
1540 filter_mask[filter * 4 + 1] = 0x00;
1541 filter_mask[filter * 4 + 2] = 0x00;
1542 filter_mask[filter * 4 + 3] = 0x00;
1543 command[filter/4] |= 0x05UL << ((filter % 4) * 8);
1544 offset[filter/4] |= 0x0C << ((filter % 4) * 8);
1545 crc[filter/2] |= smsc_crc(arp, 2, filter);
1546 filter++;
1547 }
1548
1549 if (pdata->wolopts & WAKE_UCAST) {
1550 netdev_info(dev->net, "enabling unicast detection\n");
1551 filter_mask[filter * 4] = 0x003F;
1552 filter_mask[filter * 4 + 1] = 0x00;
1553 filter_mask[filter * 4 + 2] = 0x00;
1554 filter_mask[filter * 4 + 3] = 0x00;
1555 command[filter/4] |= 0x01UL << ((filter % 4) * 8);
1556 offset[filter/4] |= 0x00 << ((filter % 4) * 8);
1557 crc[filter/2] |= smsc_crc(dev->net->dev_addr, ETH_ALEN, filter);
1558 filter++;
1559 }
1560
1561 for (i = 0; i < (wuff_filter_count * 4); i++) {
1562 ret = smsc95xx_write_reg_nopm(dev, WUFF, filter_mask[i]);
1563 if (ret < 0) {
1564 netdev_warn(dev->net, "Error writing WUFF\n");
1565 kfree(filter_mask);
1566 goto done;
1567 }
1568 }
1569 kfree(filter_mask);
1570
1571 for (i = 0; i < (wuff_filter_count / 4); i++) {
1572 ret = smsc95xx_write_reg_nopm(dev, WUFF, command[i]);
1573 if (ret < 0) {
1574 netdev_warn(dev->net, "Error writing WUFF\n");
1575 goto done;
1576 }
1577 }
1578
1579 for (i = 0; i < (wuff_filter_count / 4); i++) {
1580 ret = smsc95xx_write_reg_nopm(dev, WUFF, offset[i]);
1581 if (ret < 0) {
1582 netdev_warn(dev->net, "Error writing WUFF\n");
1583 goto done;
1584 }
1585 }
1586
1587 for (i = 0; i < (wuff_filter_count / 2); i++) {
1588 ret = smsc95xx_write_reg_nopm(dev, WUFF, crc[i]);
1589 if (ret < 0) {
1590 netdev_warn(dev->net, "Error writing WUFF\n");
1591 goto done;
1592 }
1593 }
1594
1595 /* clear any pending pattern match packet status */
1596 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1597 if (ret < 0) {
1598 netdev_warn(dev->net, "Error reading WUCSR\n");
1599 goto done;
1600 }
1601
1602 val |= WUCSR_WUFR_;
1603
1604 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1605 if (ret < 0) {
1606 netdev_warn(dev->net, "Error writing WUCSR\n");
1607 goto done;
1608 }
1111 }
1112
1113 if (pdata->wolopts & WAKE_MAGIC) {
1114 /* clear any pending magic packet status */
1609 }
1610
1611 if (pdata->wolopts & WAKE_MAGIC) {
1612 /* clear any pending magic packet status */
1115 ret = smsc95xx_read_reg(dev, WUCSR, &val);
1116 check_warn_return(ret, "Error reading WUCSR");
1613 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1614 if (ret < 0) {
1615 netdev_warn(dev->net, "Error reading WUCSR\n");
1616 goto done;
1617 }
1117
1118 val |= WUCSR_MPR_;
1119
1618
1619 val |= WUCSR_MPR_;
1620
1120 ret = smsc95xx_write_reg(dev, WUCSR, val);
1121 check_warn_return(ret, "Error writing WUCSR");
1621 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1622 if (ret < 0) {
1623 netdev_warn(dev->net, "Error writing WUCSR\n");
1624 goto done;
1625 }
1122 }
1123
1626 }
1627
1124 /* enable/disable magic packup wake */
1125 ret = smsc95xx_read_reg(dev, WUCSR, &val);
1126 check_warn_return(ret, "Error reading WUCSR");
1628 /* enable/disable wakeup sources */
1629 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1630 if (ret < 0) {
1631 netdev_warn(dev->net, "Error reading WUCSR\n");
1632 goto done;
1633 }
1127
1634
1635 if (pdata->wolopts & (WAKE_BCAST | WAKE_MCAST | WAKE_ARP | WAKE_UCAST)) {
1636 netdev_info(dev->net, "enabling pattern match wakeup\n");
1637 val |= WUCSR_WAKE_EN_;
1638 } else {
1639 netdev_info(dev->net, "disabling pattern match wakeup\n");
1640 val &= ~WUCSR_WAKE_EN_;
1641 }
1642
1128 if (pdata->wolopts & WAKE_MAGIC) {
1643 if (pdata->wolopts & WAKE_MAGIC) {
1129 netdev_info(dev->net, "enabling magic packet wakeup");
1644 netdev_info(dev->net, "enabling magic packet wakeup\n");
1130 val |= WUCSR_MPEN_;
1131 } else {
1645 val |= WUCSR_MPEN_;
1646 } else {
1132 netdev_info(dev->net, "disabling magic packet wakeup");
1647 netdev_info(dev->net, "disabling magic packet wakeup\n");
1133 val &= ~WUCSR_MPEN_;
1134 }
1135
1648 val &= ~WUCSR_MPEN_;
1649 }
1650
1136 ret = smsc95xx_write_reg(dev, WUCSR, val);
1137 check_warn_return(ret, "Error writing WUCSR");
1651 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1652 if (ret < 0) {
1653 netdev_warn(dev->net, "Error writing WUCSR\n");
1654 goto done;
1655 }
1138
1139 /* enable wol wakeup source */
1656
1657 /* enable wol wakeup source */
1140 ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
1141 check_warn_return(ret, "Error reading PM_CTRL");
1658 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1659 if (ret < 0) {
1660 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1661 goto done;
1662 }
1142
1143 val |= PM_CTL_WOL_EN_;
1144
1663
1664 val |= PM_CTL_WOL_EN_;
1665
1145 ret = smsc95xx_write_reg(dev, PM_CTRL, val);
1146 check_warn_return(ret, "Error writing PM_CTRL");
1666 /* phy energy detect wakeup source */
1667 if (pdata->wolopts & WAKE_PHY)
1668 val |= PM_CTL_ED_EN_;
1147
1669
1148 /* enable receiver */
1149 smsc95xx_start_rx_path(dev);
1670 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1671 if (ret < 0) {
1672 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1673 goto done;
1674 }
1150
1675
1676 /* enable receiver to enable frame reception */
1677 smsc95xx_start_rx_path(dev, 1);
1678
1151 /* some wol options are enabled, so enter SUSPEND0 */
1679 /* some wol options are enabled, so enter SUSPEND0 */
1152 netdev_info(dev->net, "entering SUSPEND0 mode");
1680 netdev_info(dev->net, "entering SUSPEND0 mode\n");
1681 ret = smsc95xx_enter_suspend0(dev);
1153
1682
1154 ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
1155 check_warn_return(ret, "Error reading PM_CTRL");
1156
1157 val &= (~(PM_CTL_SUS_MODE_ | PM_CTL_WUPS_ | PM_CTL_PHY_RST_));
1158 val |= PM_CTL_SUS_MODE_0;
1159
1160 ret = smsc95xx_write_reg(dev, PM_CTRL, val);
1161 check_warn_return(ret, "Error writing PM_CTRL");
1162
1163 /* clear wol status */
1164 val &= ~PM_CTL_WUPS_;
1165 val |= PM_CTL_WUPS_WOL_;
1166 ret = smsc95xx_write_reg(dev, PM_CTRL, val);
1167 check_warn_return(ret, "Error writing PM_CTRL");
1168
1169 /* read back PM_CTRL */
1170 ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
1171 check_warn_return(ret, "Error reading PM_CTRL");
1172
1173 smsc95xx_set_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
1174
1175 return 0;
1683done:
1684 if (ret)
1685 usbnet_resume(intf);
1686 return ret;
1176}
1177
1178static int smsc95xx_resume(struct usb_interface *intf)
1179{
1180 struct usbnet *dev = usb_get_intfdata(intf);
1181 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1182 int ret;
1183 u32 val;
1184
1185 BUG_ON(!dev);
1186
1687}
1688
1689static int smsc95xx_resume(struct usb_interface *intf)
1690{
1691 struct usbnet *dev = usb_get_intfdata(intf);
1692 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1693 int ret;
1694 u32 val;
1695
1696 BUG_ON(!dev);
1697
1187 if (pdata->wolopts & WAKE_MAGIC) {
1188 smsc95xx_clear_feature(dev, USB_DEVICE_REMOTE_WAKEUP);
1698 if (pdata->wolopts) {
1699 /* clear wake-up sources */
1700 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val);
1701 if (ret < 0) {
1702 netdev_warn(dev->net, "Error reading WUCSR\n");
1703 return ret;
1704 }
1189
1705
1190 /* Disable magic packup wake */
1191 ret = smsc95xx_read_reg(dev, WUCSR, &val);
1192 check_warn_return(ret, "Error reading WUCSR");
1706 val &= ~(WUCSR_WAKE_EN_ | WUCSR_MPEN_);
1193
1707
1194 val &= ~WUCSR_MPEN_;
1708 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val);
1709 if (ret < 0) {
1710 netdev_warn(dev->net, "Error writing WUCSR\n");
1711 return ret;
1712 }
1195
1713
1196 ret = smsc95xx_write_reg(dev, WUCSR, val);
1197 check_warn_return(ret, "Error writing WUCSR");
1198
1199 /* clear wake-up status */
1714 /* clear wake-up status */
1200 ret = smsc95xx_read_reg(dev, PM_CTRL, &val);
1201 check_warn_return(ret, "Error reading PM_CTRL");
1715 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val);
1716 if (ret < 0) {
1717 netdev_warn(dev->net, "Error reading PM_CTRL\n");
1718 return ret;
1719 }
1202
1203 val &= ~PM_CTL_WOL_EN_;
1204 val |= PM_CTL_WUPS_;
1205
1720
1721 val &= ~PM_CTL_WOL_EN_;
1722 val |= PM_CTL_WUPS_;
1723
1206 ret = smsc95xx_write_reg(dev, PM_CTRL, val);
1207 check_warn_return(ret, "Error writing PM_CTRL");
1724 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val);
1725 if (ret < 0) {
1726 netdev_warn(dev->net, "Error writing PM_CTRL\n");
1727 return ret;
1728 }
1208 }
1209
1729 }
1730
1210 return usbnet_resume(intf);
1211 check_warn_return(ret, "usbnet_resume error");
1731 ret = usbnet_resume(intf);
1732 if (ret < 0)
1733 netdev_warn(dev->net, "usbnet_resume error\n");
1212
1734
1213 return 0;
1735 return ret;
1214}
1215
1216static void smsc95xx_rx_csum_offload(struct sk_buff *skb)
1217{
1218 skb->csum = *(u16 *)(skb_tail_pointer(skb) - 2);
1219 skb->ip_summed = CHECKSUM_COMPLETE;
1220 skb_trim(skb, skb->len - 2);
1221}

--- 270 unchanged lines hidden ---
1736}
1737
1738static void smsc95xx_rx_csum_offload(struct sk_buff *skb)
1739{
1740 skb->csum = *(u16 *)(skb_tail_pointer(skb) - 2);
1741 skb->ip_summed = CHECKSUM_COMPLETE;
1742 skb_trim(skb, skb->len - 2);
1743}

--- 270 unchanged lines hidden ---