@@ -86,7 +86,7 @@ MODULE_DEVICE_TABLE(usb, panda_usb_table);
86
86
const int can_numbering [] = {0 ,1 ,2 };
87
87
88
88
struct panda_inf_priv *
89
- panda_get_inf_from_bus_id (struct panda_dev_priv * priv_dev , int bus_id ){
89
+ panda_get_inf_from_bus_id (struct panda_dev_priv * priv_dev , int bus_id ) {
90
90
int inf_num ;
91
91
for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ )
92
92
if (can_numbering [inf_num ] == bus_id )
@@ -107,8 +107,7 @@ static inline void panda_init_ctx(struct panda_inf_priv *priv)
107
107
atomic_set (& priv -> free_ctx_cnt , ARRAY_SIZE (priv -> tx_context ));
108
108
}
109
109
110
- static inline struct panda_usb_ctx * panda_usb_get_free_ctx (struct panda_inf_priv * priv ,
111
- struct can_frame * cf )
110
+ static inline struct panda_usb_ctx * panda_usb_get_free_ctx (struct panda_inf_priv * priv , struct can_frame * cf )
112
111
{
113
112
int i = 0 ;
114
113
struct panda_usb_ctx * ctx = NULL ;
@@ -124,8 +123,8 @@ static inline struct panda_usb_ctx *panda_usb_get_free_ctx(struct panda_inf_priv
124
123
}
125
124
}
126
125
127
- printk ("CTX num %d\n" , atomic_read (& priv -> free_ctx_cnt ));
128
- if (!atomic_read (& priv -> free_ctx_cnt )){
126
+ // printk("CTX num %d\n", atomic_read(&priv->free_ctx_cnt));
127
+ if (!atomic_read (& priv -> free_ctx_cnt )) {
129
128
/* That was the last free ctx. Slow down tx path */
130
129
printk ("SENDING TOO FAST\n" );
131
130
netif_stop_queue (priv -> netdev );
@@ -148,19 +147,17 @@ static inline void panda_usb_free_ctx(struct panda_usb_ctx *ctx)
148
147
netif_wake_queue (ctx -> priv -> netdev );
149
148
}
150
149
151
-
152
-
153
150
static void panda_urb_unlink (struct panda_inf_priv * priv )
154
151
{
155
152
usb_kill_anchored_urbs (& priv -> priv_dev -> rx_submitted );
156
153
usb_kill_anchored_urbs (& priv -> tx_submitted );
157
154
}
158
155
159
- static int panda_set_output_enable (struct panda_inf_priv * priv , bool enable ){
156
+ static int panda_set_output_enable (struct panda_inf_priv * priv , bool enable ) {
160
157
return usb_control_msg (priv -> priv_dev -> udev ,
161
- usb_sndctrlpipe (priv -> priv_dev -> udev , 0 ),
162
- 0xDC , USB_TYPE_VENDOR | USB_RECIP_DEVICE ,
163
- enable ? SAFETY_ALLOUTPUT : SAFETY_SILENT , 0 , NULL , 0 , USB_CTRL_SET_TIMEOUT );
158
+ usb_sndctrlpipe (priv -> priv_dev -> udev , 0 ),
159
+ 0xDC , USB_TYPE_VENDOR | USB_RECIP_DEVICE ,
160
+ enable ? SAFETY_ALLOUTPUT : SAFETY_SILENT , 0 , NULL , 0 , USB_CTRL_SET_TIMEOUT );
164
161
}
165
162
166
163
static void panda_usb_write_bulk_callback (struct urb * urb )
@@ -173,8 +170,7 @@ static void panda_usb_write_bulk_callback(struct urb *urb)
173
170
netdev = ctx -> priv -> netdev ;
174
171
175
172
/* free up our allocated buffer */
176
- usb_free_coherent (urb -> dev , urb -> transfer_buffer_length ,
177
- urb -> transfer_buffer , urb -> transfer_dma );
173
+ usb_free_coherent (urb -> dev , urb -> transfer_buffer_length , urb -> transfer_buffer , urb -> transfer_dma );
178
174
179
175
if (!netif_device_present (netdev ))
180
176
return ;
@@ -191,10 +187,7 @@ static void panda_usb_write_bulk_callback(struct urb *urb)
191
187
panda_usb_free_ctx (ctx );
192
188
}
193
189
194
-
195
- static netdev_tx_t panda_usb_xmit (struct panda_inf_priv * priv ,
196
- struct panda_usb_can_msg * usb_msg ,
197
- struct panda_usb_ctx * ctx )
190
+ static netdev_tx_t panda_usb_xmit (struct panda_inf_priv * priv , struct panda_usb_can_msg * usb_msg , struct panda_usb_ctx * ctx )
198
191
{
199
192
struct urb * urb ;
200
193
u8 * buf ;
@@ -205,9 +198,7 @@ static netdev_tx_t panda_usb_xmit(struct panda_inf_priv *priv,
205
198
if (!urb )
206
199
return - ENOMEM ;
207
200
208
- buf = usb_alloc_coherent (priv -> priv_dev -> udev ,
209
- PANDA_USB_TX_BUFF_SIZE , GFP_ATOMIC ,
210
- & urb -> transfer_dma );
201
+ buf = usb_alloc_coherent (priv -> priv_dev -> udev , PANDA_USB_TX_BUFF_SIZE , GFP_ATOMIC , & urb -> transfer_dma );
211
202
if (!buf ) {
212
203
err = - ENOMEM ;
213
204
goto nomembuf ;
@@ -216,9 +207,9 @@ static netdev_tx_t panda_usb_xmit(struct panda_inf_priv *priv,
216
207
memcpy (buf , usb_msg , PANDA_USB_TX_BUFF_SIZE );
217
208
218
209
usb_fill_bulk_urb (urb , priv -> priv_dev -> udev ,
219
- usb_sndbulkpipe (priv -> priv_dev -> udev , 3 ), buf ,
220
- PANDA_USB_TX_BUFF_SIZE , panda_usb_write_bulk_callback ,
221
- ctx );
210
+ usb_sndbulkpipe (priv -> priv_dev -> udev , 3 ), buf ,
211
+ PANDA_USB_TX_BUFF_SIZE , panda_usb_write_bulk_callback ,
212
+ ctx );
222
213
223
214
urb -> transfer_flags |= URB_NO_TRANSFER_DMA_MAP ;
224
215
usb_anchor_urb (urb , & priv -> tx_submitted );
@@ -247,8 +238,7 @@ static netdev_tx_t panda_usb_xmit(struct panda_inf_priv *priv,
247
238
return err ;
248
239
}
249
240
250
- static void panda_usb_process_can_rx (struct panda_dev_priv * priv_dev ,
251
- struct panda_usb_can_msg * msg )
241
+ static void panda_usb_process_can_rx (struct panda_dev_priv * priv_dev , struct panda_usb_can_msg * msg )
252
242
{
253
243
struct can_frame * cf ;
254
244
struct sk_buff * skb ;
@@ -258,11 +248,11 @@ static void panda_usb_process_can_rx(struct panda_dev_priv *priv_dev,
258
248
259
249
bus_num = (msg -> bus_dat_len >> 4 ) & 0xf ;
260
250
priv_inf = panda_get_inf_from_bus_id (priv_dev , bus_num );
261
- if (!priv_inf ){
251
+ if (!priv_inf ) {
262
252
printk ("Got something on an unused interface %d\n" , bus_num );
263
253
return ;
264
254
}
265
- printk ("Recv bus %d\n" , bus_num );
255
+ // printk("Recv bus %d\n", bus_num);
266
256
267
257
stats = & priv_inf -> netdev -> stats ;
268
258
//u16 sid;
@@ -274,9 +264,9 @@ static void panda_usb_process_can_rx(struct panda_dev_priv *priv_dev,
274
264
if (!skb )
275
265
return ;
276
266
277
- if (msg -> rir & PANDA_CAN_EXTENDED ){
267
+ if (msg -> rir & PANDA_CAN_EXTENDED ) {
278
268
cf -> can_id = (msg -> rir >> 3 ) | CAN_EFF_FLAG ;
279
- }else {
269
+ } else {
280
270
cf -> can_id = (msg -> rir >> 21 );
281
271
}
282
272
@@ -298,7 +288,7 @@ static void panda_usb_process_can_rx(struct panda_dev_priv *priv_dev,
298
288
netif_rx (skb );
299
289
}
300
290
301
- static void panda_usb_read_int_callback (struct urb * urb )
291
+ static void panda_usb_read_bulk_callback (struct urb * urb )
302
292
{
303
293
struct panda_dev_priv * priv_dev = urb -> context ;
304
294
int retval ;
@@ -332,19 +322,20 @@ static void panda_usb_read_int_callback(struct urb *urb)
332
322
}
333
323
334
324
resubmit_urb :
335
- usb_fill_int_urb (urb , priv_dev -> udev ,
336
- usb_rcvintpipe (priv_dev -> udev , 1 ),
337
- urb -> transfer_buffer , PANDA_USB_RX_BUFF_SIZE ,
338
- panda_usb_read_int_callback , priv_dev , 5 );
325
+ usb_fill_bulk_urb (urb , priv_dev -> udev ,
326
+ usb_rcvbulkpipe (priv_dev -> udev , 1 ),
327
+ urb -> transfer_buffer , PANDA_USB_RX_BUFF_SIZE ,
328
+ panda_usb_read_bulk_callback , priv_dev );
339
329
340
330
retval = usb_submit_urb (urb , GFP_ATOMIC );
341
331
342
- if (retval == - ENODEV ){
343
- for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ )
344
- if (priv_dev -> interfaces [inf_num ])
345
- netif_device_detach (priv_dev -> interfaces [inf_num ]-> netdev );
346
- }else if (retval )
332
+ if (retval == - ENODEV ) {
333
+ for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ )
334
+ if (priv_dev -> interfaces [inf_num ])
335
+ netif_device_detach (priv_dev -> interfaces [inf_num ]-> netdev );
336
+ } else if (retval ) {
347
337
dev_err (priv_dev -> dev , "failed resubmitting read bulk urb: %d\n" , retval );
338
+ }
348
339
}
349
340
350
341
@@ -355,12 +346,12 @@ static int panda_usb_start(struct panda_dev_priv *priv_dev)
355
346
u8 * buf ;
356
347
int inf_num ;
357
348
358
- for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ )
349
+ for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ )
359
350
panda_init_ctx (priv_dev -> interfaces [inf_num ]);
360
351
361
- err = usb_set_interface (priv_dev -> udev , 0 , 1 );
352
+ err = usb_set_interface (priv_dev -> udev , 0 , 0 );
362
353
if (err ) {
363
- dev_err (priv_dev -> dev , "Can not set alternate setting to 1 , error: %i" , err );
354
+ dev_err (priv_dev -> dev , "Can not set alternate setting to 0 , error: %i" , err );
364
355
return err ;
365
356
}
366
357
@@ -370,27 +361,25 @@ static int panda_usb_start(struct panda_dev_priv *priv_dev)
370
361
return - ENOMEM ;
371
362
}
372
363
373
- buf = usb_alloc_coherent (priv_dev -> udev , PANDA_USB_RX_BUFF_SIZE ,
374
- GFP_KERNEL , & urb -> transfer_dma );
364
+ buf = usb_alloc_coherent (priv_dev -> udev , PANDA_USB_RX_BUFF_SIZE , GFP_KERNEL , & urb -> transfer_dma );
375
365
if (!buf ) {
376
366
dev_err (priv_dev -> dev , "No memory left for USB buffer\n" );
377
367
usb_free_urb (urb );
378
368
return - ENOMEM ;
379
369
}
380
370
381
- usb_fill_int_urb (urb , priv_dev -> udev ,
382
- usb_rcvintpipe (priv_dev -> udev , 1 ),
383
- buf , PANDA_USB_RX_BUFF_SIZE ,
384
- panda_usb_read_int_callback , priv_dev , 5 );
371
+ usb_fill_bulk_urb (urb , priv_dev -> udev ,
372
+ usb_rcvbulkpipe (priv_dev -> udev , 1 ),
373
+ buf , PANDA_USB_RX_BUFF_SIZE ,
374
+ panda_usb_read_bulk_callback , priv_dev );
385
375
urb -> transfer_flags |= URB_NO_TRANSFER_DMA_MAP ;
386
376
387
377
usb_anchor_urb (urb , & priv_dev -> rx_submitted );
388
378
389
379
err = usb_submit_urb (urb , GFP_KERNEL );
390
380
if (err ) {
391
381
usb_unanchor_urb (urb );
392
- usb_free_coherent (priv_dev -> udev , PANDA_USB_RX_BUFF_SIZE ,
393
- buf , urb -> transfer_dma );
382
+ usb_free_coherent (priv_dev -> udev , PANDA_USB_RX_BUFF_SIZE , buf , urb -> transfer_dma );
394
383
usb_free_urb (urb );
395
384
dev_err (priv_dev -> dev , "Failed in start, while submitting urb.\n" );
396
385
return err ;
@@ -439,8 +428,7 @@ static int panda_usb_close(struct net_device *netdev)
439
428
return 0 ;
440
429
}
441
430
442
- static netdev_tx_t panda_usb_start_xmit (struct sk_buff * skb ,
443
- struct net_device * netdev )
431
+ static netdev_tx_t panda_usb_start_xmit (struct sk_buff * skb , struct net_device * netdev )
444
432
{
445
433
struct panda_inf_priv * priv_inf = netdev_priv (netdev );
446
434
struct can_frame * cf = (struct can_frame * )skb -> data ;
@@ -450,7 +438,7 @@ static netdev_tx_t panda_usb_start_xmit(struct sk_buff *skb,
450
438
struct panda_usb_can_msg usb_msg = {};
451
439
int bus = priv_inf -> mcu_can_ifnum ;
452
440
453
- if (can_dropped_invalid_skb (netdev , skb )){
441
+ if (can_dropped_invalid_skb (netdev , skb )) {
454
442
printk ("Invalid CAN packet" );
455
443
return NETDEV_TX_OK ;
456
444
}
@@ -461,10 +449,9 @@ static netdev_tx_t panda_usb_start_xmit(struct sk_buff *skb,
461
449
//everywhere and encouraged in the documentation.
462
450
can_put_echo_skb (skb , priv_inf -> netdev , ctx -> ndx , NULL );
463
451
464
- if (cf -> can_id & CAN_EFF_FLAG ){
465
- usb_msg .rir = cpu_to_le32 (((cf -> can_id & 0x1FFFFFFF ) << 3 ) |
466
- PANDA_CAN_TRANSMIT | PANDA_CAN_EXTENDED );
467
- }else {
452
+ if (cf -> can_id & CAN_EFF_FLAG ) {
453
+ usb_msg .rir = cpu_to_le32 (((cf -> can_id & 0x1FFFFFFF ) << 3 ) | PANDA_CAN_TRANSMIT | PANDA_CAN_EXTENDED );
454
+ } else {
468
455
usb_msg .rir = cpu_to_le32 (((cf -> can_id & 0x7FF ) << 21 ) | PANDA_CAN_TRANSMIT );
469
456
}
470
457
usb_msg .bus_dat_len = cpu_to_le32 ((cf -> can_dlc & 0x0F ) | (bus << 4 ));
@@ -475,7 +462,7 @@ static netdev_tx_t panda_usb_start_xmit(struct sk_buff *skb,
475
462
//if (cf->can_id & CAN_RTR_FLAG)
476
463
// usb_msg.dlc |= PANDA_DLC_RTR_MASK;
477
464
478
- netdev_err ( netdev , "Received data from socket. canid: %x; len: %d\n" , cf -> can_id , cf -> can_dlc );
465
+ // printk( "Received data from socket. bus: %x; canid: %x; len: %d\n", priv_inf->mcu_can_ifnum , cf->can_id, cf->can_dlc);
479
466
480
467
err = panda_usb_xmit (priv_inf , & usb_msg , ctx );
481
468
if (err )
@@ -498,8 +485,7 @@ static const struct net_device_ops panda_netdev_ops = {
498
485
.ndo_start_xmit = panda_usb_start_xmit ,
499
486
};
500
487
501
- static int panda_usb_probe (struct usb_interface * intf ,
502
- const struct usb_device_id * id )
488
+ static int panda_usb_probe (struct usb_interface * intf , const struct usb_device_id * id )
503
489
{
504
490
struct net_device * netdev ;
505
491
struct panda_inf_priv * priv_inf ;
@@ -518,7 +504,7 @@ static int panda_usb_probe(struct usb_interface *intf,
518
504
usb_set_intfdata (intf , priv_dev );
519
505
520
506
////// Interface privs
521
- for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ ){
507
+ for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ ) {
522
508
netdev = alloc_candev (sizeof (struct panda_inf_priv ), PANDA_MAX_TX_URBS );
523
509
if (!netdev ) {
524
510
dev_err (& intf -> dev , "Couldn't alloc candev\n" );
@@ -569,13 +555,14 @@ static int panda_usb_probe(struct usb_interface *intf,
569
555
return 0 ;
570
556
571
557
cleanup_candev :
572
- for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ ){
558
+ for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ ) {
573
559
priv_inf = priv_dev -> interfaces [inf_num ];
574
- if (priv_inf ){
560
+ if (priv_inf ) {
575
561
unregister_candev (priv_inf -> netdev );
576
562
free_candev (priv_inf -> netdev );
577
- }else
563
+ } else {
578
564
break ;
565
+ }
579
566
}
580
567
581
568
kfree (priv_dev );
@@ -592,14 +579,15 @@ static void panda_usb_disconnect(struct usb_interface *intf)
592
579
593
580
usb_set_intfdata (intf , NULL );
594
581
595
- for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ ){
582
+ for (inf_num = 0 ; inf_num < PANDA_NUM_CAN_INTERFACES ; inf_num ++ ) {
596
583
priv_inf = priv_dev -> interfaces [inf_num ];
597
- if (priv_inf ){
584
+ if (priv_inf ) {
598
585
netdev_info (priv_inf -> netdev , "device disconnected\n" );
599
586
unregister_candev (priv_inf -> netdev );
600
587
free_candev (priv_inf -> netdev );
601
- }else
588
+ } else {
602
589
break ;
590
+ }
603
591
}
604
592
605
593
panda_urb_unlink (priv_inf );
0 commit comments