@@ -132,9 +132,15 @@ static int get_registers(pegasus_t *pegasus, __u16 indx, __u16 size, void *data)
132
132
static int set_registers (pegasus_t * pegasus , __u16 indx , __u16 size ,
133
133
const void * data )
134
134
{
135
- return usb_control_msg_send (pegasus -> usb , 0 , PEGASUS_REQ_SET_REGS ,
135
+ int ret ;
136
+
137
+ ret = usb_control_msg_send (pegasus -> usb , 0 , PEGASUS_REQ_SET_REGS ,
136
138
PEGASUS_REQT_WRITE , 0 , indx , data , size ,
137
139
1000 , GFP_NOIO );
140
+ if (ret < 0 )
141
+ netif_dbg (pegasus , drv , pegasus -> net , "%s failed with %d\n" , __func__ , ret );
142
+
143
+ return ret ;
138
144
}
139
145
140
146
/*
@@ -145,10 +151,15 @@ static int set_registers(pegasus_t *pegasus, __u16 indx, __u16 size,
145
151
static int set_register (pegasus_t * pegasus , __u16 indx , __u8 data )
146
152
{
147
153
void * buf = & data ;
154
+ int ret ;
148
155
149
- return usb_control_msg_send (pegasus -> usb , 0 , PEGASUS_REQ_SET_REG ,
156
+ ret = usb_control_msg_send (pegasus -> usb , 0 , PEGASUS_REQ_SET_REG ,
150
157
PEGASUS_REQT_WRITE , data , indx , buf , 1 ,
151
158
1000 , GFP_NOIO );
159
+ if (ret < 0 )
160
+ netif_dbg (pegasus , drv , pegasus -> net , "%s failed with %d\n" , __func__ , ret );
161
+
162
+ return ret ;
152
163
}
153
164
154
165
static int update_eth_regs_async (pegasus_t * pegasus )
@@ -188,10 +199,9 @@ static int update_eth_regs_async(pegasus_t *pegasus)
188
199
189
200
static int __mii_op (pegasus_t * p , __u8 phy , __u8 indx , __u16 * regd , __u8 cmd )
190
201
{
191
- int i ;
192
- __u8 data [4 ] = { phy , 0 , 0 , indx };
202
+ int i , ret ;
193
203
__le16 regdi ;
194
- int ret = - ETIMEDOUT ;
204
+ __u8 data [ 4 ] = { phy , 0 , 0 , indx } ;
195
205
196
206
if (cmd & PHY_WRITE ) {
197
207
__le16 * t = (__le16 * ) & data [1 ];
@@ -207,12 +217,15 @@ static int __mii_op(pegasus_t *p, __u8 phy, __u8 indx, __u16 *regd, __u8 cmd)
207
217
if (data [0 ] & PHY_DONE )
208
218
break ;
209
219
}
210
- if (i >= REG_TIMEOUT )
220
+ if (i >= REG_TIMEOUT ) {
221
+ ret = - ETIMEDOUT ;
211
222
goto fail ;
223
+ }
212
224
if (cmd & PHY_READ ) {
213
225
ret = get_registers (p , PhyData , 2 , & regdi );
226
+ if (ret < 0 )
227
+ goto fail ;
214
228
* regd = le16_to_cpu (regdi );
215
- return ret ;
216
229
}
217
230
return 0 ;
218
231
fail :
@@ -235,9 +248,13 @@ static int write_mii_word(pegasus_t *pegasus, __u8 phy, __u8 indx, __u16 *regd)
235
248
static int mdio_read (struct net_device * dev , int phy_id , int loc )
236
249
{
237
250
pegasus_t * pegasus = netdev_priv (dev );
251
+ int ret ;
238
252
u16 res ;
239
253
240
- read_mii_word (pegasus , phy_id , loc , & res );
254
+ ret = read_mii_word (pegasus , phy_id , loc , & res );
255
+ if (ret < 0 )
256
+ return ret ;
257
+
241
258
return (int )res ;
242
259
}
243
260
@@ -251,32 +268,35 @@ static void mdio_write(struct net_device *dev, int phy_id, int loc, int val)
251
268
252
269
static int read_eprom_word (pegasus_t * pegasus , __u8 index , __u16 * retdata )
253
270
{
254
- int i ;
255
- __u8 tmp = 0 ;
271
+ int ret , i ;
256
272
__le16 retdatai ;
257
- int ret ;
273
+ __u8 tmp = 0 ;
258
274
259
275
set_register (pegasus , EpromCtrl , 0 );
260
276
set_register (pegasus , EpromOffset , index );
261
277
set_register (pegasus , EpromCtrl , EPROM_READ );
262
278
263
279
for (i = 0 ; i < REG_TIMEOUT ; i ++ ) {
264
280
ret = get_registers (pegasus , EpromCtrl , 1 , & tmp );
281
+ if (ret < 0 )
282
+ goto fail ;
265
283
if (tmp & EPROM_DONE )
266
284
break ;
267
- if (ret == - ESHUTDOWN )
268
- goto fail ;
269
285
}
270
- if (i >= REG_TIMEOUT )
286
+ if (i >= REG_TIMEOUT ) {
287
+ ret = - ETIMEDOUT ;
271
288
goto fail ;
289
+ }
272
290
273
291
ret = get_registers (pegasus , EpromData , 2 , & retdatai );
292
+ if (ret < 0 )
293
+ goto fail ;
274
294
* retdata = le16_to_cpu (retdatai );
275
295
return ret ;
276
296
277
297
fail :
278
- netif_warn (pegasus , drv , pegasus -> net , "%s failed\n" , __func__ );
279
- return - ETIMEDOUT ;
298
+ netif_dbg (pegasus , drv , pegasus -> net , "%s failed\n" , __func__ );
299
+ return ret ;
280
300
}
281
301
282
302
#ifdef PEGASUS_WRITE_EEPROM
@@ -324,10 +344,10 @@ static int write_eprom_word(pegasus_t *pegasus, __u8 index, __u16 data)
324
344
return ret ;
325
345
326
346
fail :
327
- netif_warn (pegasus , drv , pegasus -> net , "%s failed\n" , __func__ );
347
+ netif_dbg (pegasus , drv , pegasus -> net , "%s failed\n" , __func__ );
328
348
return - ETIMEDOUT ;
329
349
}
330
- #endif /* PEGASUS_WRITE_EEPROM */
350
+ #endif /* PEGASUS_WRITE_EEPROM */
331
351
332
352
static inline int get_node_id (pegasus_t * pegasus , u8 * id )
333
353
{
@@ -367,19 +387,21 @@ static void set_ethernet_addr(pegasus_t *pegasus)
367
387
return ;
368
388
err :
369
389
eth_hw_addr_random (pegasus -> net );
370
- dev_info ( & pegasus -> intf -> dev , "software assigned MAC address.\n" );
390
+ netif_dbg ( pegasus , drv , pegasus -> net , "software assigned MAC address.\n" );
371
391
372
392
return ;
373
393
}
374
394
375
395
static inline int reset_mac (pegasus_t * pegasus )
376
396
{
397
+ int ret , i ;
377
398
__u8 data = 0x8 ;
378
- int i ;
379
399
380
400
set_register (pegasus , EthCtrl1 , data );
381
401
for (i = 0 ; i < REG_TIMEOUT ; i ++ ) {
382
- get_registers (pegasus , EthCtrl1 , 1 , & data );
402
+ ret = get_registers (pegasus , EthCtrl1 , 1 , & data );
403
+ if (ret < 0 )
404
+ goto fail ;
383
405
if (~data & 0x08 ) {
384
406
if (loopback )
385
407
break ;
@@ -402,22 +424,29 @@ static inline int reset_mac(pegasus_t *pegasus)
402
424
}
403
425
if (usb_dev_id [pegasus -> dev_index ].vendor == VENDOR_ELCON ) {
404
426
__u16 auxmode ;
405
- read_mii_word (pegasus , 3 , 0x1b , & auxmode );
427
+ ret = read_mii_word (pegasus , 3 , 0x1b , & auxmode );
428
+ if (ret < 0 )
429
+ goto fail ;
406
430
auxmode |= 4 ;
407
431
write_mii_word (pegasus , 3 , 0x1b , & auxmode );
408
432
}
409
433
410
434
return 0 ;
435
+ fail :
436
+ netif_dbg (pegasus , drv , pegasus -> net , "%s failed\n" , __func__ );
437
+ return ret ;
411
438
}
412
439
413
440
static int enable_net_traffic (struct net_device * dev , struct usb_device * usb )
414
441
{
415
- __u16 linkpart ;
416
- __u8 data [4 ];
417
442
pegasus_t * pegasus = netdev_priv (dev );
418
443
int ret ;
444
+ __u16 linkpart ;
445
+ __u8 data [4 ];
419
446
420
- read_mii_word (pegasus , pegasus -> phy , MII_LPA , & linkpart );
447
+ ret = read_mii_word (pegasus , pegasus -> phy , MII_LPA , & linkpart );
448
+ if (ret < 0 )
449
+ goto fail ;
421
450
data [0 ] = 0xc8 ; /* TX & RX enable, append status, no CRC */
422
451
data [1 ] = 0 ;
423
452
if (linkpart & (ADVERTISE_100FULL | ADVERTISE_10FULL ))
@@ -435,21 +464,26 @@ static int enable_net_traffic(struct net_device *dev, struct usb_device *usb)
435
464
usb_dev_id [pegasus -> dev_index ].vendor == VENDOR_LINKSYS2 ||
436
465
usb_dev_id [pegasus -> dev_index ].vendor == VENDOR_DLINK ) {
437
466
u16 auxmode ;
438
- read_mii_word (pegasus , 0 , 0x1b , & auxmode );
467
+ ret = read_mii_word (pegasus , 0 , 0x1b , & auxmode );
468
+ if (ret < 0 )
469
+ goto fail ;
439
470
auxmode |= 4 ;
440
471
write_mii_word (pegasus , 0 , 0x1b , & auxmode );
441
472
}
442
473
474
+ return 0 ;
475
+ fail :
476
+ netif_dbg (pegasus , drv , pegasus -> net , "%s failed\n" , __func__ );
443
477
return ret ;
444
478
}
445
479
446
480
static void read_bulk_callback (struct urb * urb )
447
481
{
448
482
pegasus_t * pegasus = urb -> context ;
449
483
struct net_device * net ;
484
+ u8 * buf = urb -> transfer_buffer ;
450
485
int rx_status , count = urb -> actual_length ;
451
486
int status = urb -> status ;
452
- u8 * buf = urb -> transfer_buffer ;
453
487
__u16 pkt_len ;
454
488
455
489
if (!pegasus )
@@ -998,8 +1032,7 @@ static int pegasus_ioctl(struct net_device *net, struct ifreq *rq, int cmd)
998
1032
data [0 ] = pegasus -> phy ;
999
1033
fallthrough ;
1000
1034
case SIOCDEVPRIVATE + 1 :
1001
- read_mii_word (pegasus , data [0 ], data [1 ] & 0x1f , & data [3 ]);
1002
- res = 0 ;
1035
+ res = read_mii_word (pegasus , data [0 ], data [1 ] & 0x1f , & data [3 ]);
1003
1036
break ;
1004
1037
case SIOCDEVPRIVATE + 2 :
1005
1038
if (!capable (CAP_NET_ADMIN ))
@@ -1033,22 +1066,25 @@ static void pegasus_set_multicast(struct net_device *net)
1033
1066
1034
1067
static __u8 mii_phy_probe (pegasus_t * pegasus )
1035
1068
{
1036
- int i ;
1069
+ int i , ret ;
1037
1070
__u16 tmp ;
1038
1071
1039
1072
for (i = 0 ; i < 32 ; i ++ ) {
1040
- read_mii_word (pegasus , i , MII_BMSR , & tmp );
1073
+ ret = read_mii_word (pegasus , i , MII_BMSR , & tmp );
1074
+ if (ret < 0 )
1075
+ goto fail ;
1041
1076
if (tmp == 0 || tmp == 0xffff || (tmp & BMSR_MEDIA ) == 0 )
1042
1077
continue ;
1043
1078
else
1044
1079
return i ;
1045
1080
}
1046
-
1081
+ fail :
1047
1082
return 0xff ;
1048
1083
}
1049
1084
1050
1085
static inline void setup_pegasus_II (pegasus_t * pegasus )
1051
1086
{
1087
+ int ret ;
1052
1088
__u8 data = 0xa5 ;
1053
1089
1054
1090
set_register (pegasus , Reg1d , 0 );
@@ -1060,7 +1096,9 @@ static inline void setup_pegasus_II(pegasus_t *pegasus)
1060
1096
set_register (pegasus , Reg7b , 2 );
1061
1097
1062
1098
set_register (pegasus , 0x83 , data );
1063
- get_registers (pegasus , 0x83 , 1 , & data );
1099
+ ret = get_registers (pegasus , 0x83 , 1 , & data );
1100
+ if (ret < 0 )
1101
+ goto fail ;
1064
1102
1065
1103
if (data == 0xa5 )
1066
1104
pegasus -> chip = 0x8513 ;
@@ -1075,6 +1113,10 @@ static inline void setup_pegasus_II(pegasus_t *pegasus)
1075
1113
set_register (pegasus , Reg81 , 6 );
1076
1114
else
1077
1115
set_register (pegasus , Reg81 , 2 );
1116
+
1117
+ return ;
1118
+ fail :
1119
+ netif_dbg (pegasus , drv , pegasus -> net , "%s failed\n" , __func__ );
1078
1120
}
1079
1121
1080
1122
static void check_carrier (struct work_struct * work )
0 commit comments