]> rtime.felk.cvut.cz Git - lincan.git/blob - lincan/src/usbcan.c
Merge branch 'master' into can-usb1
[lincan.git] / lincan / src / usbcan.c
1 /* usbcan.h
2  * Header file for the Linux CAN-bus driver.
3  * Written by Jan Kriz email:johen@post.cz
4  * This software is released under the GPL-License.
5  * Version lincan-0.3  17 Jul 2008
6  */
7
8 #include "../include/can.h"
9 #include "../include/can_sysdep.h"
10 #include "../include/main.h"
11 #include "../include/devcommon.h"
12 #include "../include/setup.h"
13 #include "../include/usbcan.h"
14 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20))
15  #include <linux/freezer.h>
16 #endif
17 #include <linux/smp_lock.h>
18
19 static int usbcan_probe(struct usb_interface *interface, const struct usb_device_id *id);
20 static void usbcan_disconnect(struct usb_interface *interface);
21 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10))
22 void release_device(struct kref *refcount);
23 #else
24 void release_device(struct candevice_t *candev);
25 #endif
26
27 volatile int usbcan_chip_count=0;
28
29 /* table of devices that work with this driver */
30 static struct usb_device_id usbcan_table [] = {
31         { USB_DEVICE(USBCAN_VENDOR_ID, USBCAN_PRODUCT_ID) },
32         { }                                     /* Terminating entry */
33 };
34 MODULE_DEVICE_TABLE(usb, usbcan_table);
35
36 static struct usb_driver usbcan_driver = {
37         .name =         "usbcan",
38         .id_table = usbcan_table,
39         .probe =        usbcan_probe,
40         .disconnect =   usbcan_disconnect,
41 };
42
43 /**
44  * usbcan_request_io: - reserve io or memory range for can board
45  * @candev: pointer to candevice/board which asks for io. Field @io_addr
46  *      of @candev is used in most cases to define start of the range
47  *
48  * The function usbcan_request_io() is used to reserve the io-memory. If your
49  * hardware uses a dedicated memory range as hardware control registers you
50  * will have to add the code to reserve this memory as well.
51  * %IO_RANGE is the io-memory range that gets reserved, please adjust according
52  * your hardware. Example: #define IO_RANGE 0x100 for i82527 chips or
53  * #define IO_RANGE 0x20 for sja1000 chips in basic CAN mode.
54  * Return Value: The function returns zero on success or %-ENODEV on failure
55  * File: src/usbcan.c
56  */
57 int usbcan_request_io(struct candevice_t *candev)
58 {
59         struct usbcan_devs *usbdevs = (struct usbcan_devs *)candev->sysdevptr.anydev;
60
61         if (!usbdevs){
62                 CANMSG("USBCAN_REQUEST_IO: Cannot register usbcan while usb device is not present.\n");
63                 CANMSG("USBCAN_REQUEST_IO: Usbcan registers automatically on device insertion.\n");
64                 return -ENODEV;
65         }
66
67         return 0;
68 }
69
70 /**
71  * usbcan_release_io - free reserved io memory range
72  * @candev: pointer to candevice/board which releases io
73  *
74  * The function usbcan_release_io() is used to free reserved io-memory.
75  * In case you have reserved more io memory, don't forget to free it here.
76  * IO_RANGE is the io-memory range that gets released, please adjust according
77  * your hardware. Example: #define IO_RANGE 0x100 for i82527 chips or
78  * #define IO_RANGE 0x20 for sja1000 chips in basic CAN mode.
79  * Return Value: The function always returns zero
80  * File: src/usbcan.c
81  */
82 int usbcan_release_io(struct candevice_t *candev)
83 {
84         return 0;
85 }
86
87 /**
88  * usbcan_reset - hardware reset routine
89  * @candev: Pointer to candevice/board structure
90  *
91  * The function usbcan_reset() is used to give a hardware reset. This is
92  * rather hardware specific so I haven't included example code. Don't forget to
93  * check the reset status of the chip before returning.
94  * Return Value: The function returns zero on success or %-ENODEV on failure
95  * File: src/usbcan.c
96  */
97 int usbcan_reset(struct candevice_t *candev)
98 {
99         return 0;
100 }
101
102 /**
103  * usbcan_init_hw_data - Initialize hardware cards
104  * @candev: Pointer to candevice/board structure
105  *
106  * The function usbcan_init_hw_data() is used to initialize the hardware
107  * structure containing information about the installed CAN-board.
108  * %RESET_ADDR represents the io-address of the hardware reset register.
109  * %NR_82527 represents the number of Intel 82527 chips on the board.
110  * %NR_SJA1000 represents the number of Philips sja1000 chips on the board.
111  * The flags entry can currently only be %CANDEV_PROGRAMMABLE_IRQ to indicate that
112  * the hardware uses programmable interrupts.
113  * Return Value: The function always returns zero
114  * File: src/usbcan.c
115  */
116 int usbcan_init_hw_data(struct candevice_t *candev)
117 {
118         candev->res_addr=RESET_ADDR;
119         candev->nr_82527_chips=0;
120         candev->nr_sja1000_chips=0;
121         candev->nr_all_chips=usbcan_chip_count;
122         candev->flags |= CANDEV_PROGRAMMABLE_IRQ*0;
123
124         return 0;
125 }
126
127 /**
128  * usbcan_init_obj_data - Initialize message buffers
129  * @chip: Pointer to chip specific structure
130  * @objnr: Number of the message buffer
131  *
132  * The function usbcan_init_obj_data() is used to initialize the hardware
133  * structure containing information about the different message objects on the
134  * CAN chip. In case of the sja1000 there's only one message object but on the
135  * i82527 chip there are 15.
136  * The code below is for a i82527 chip and initializes the object base addresses
137  * The entry @obj_base_addr represents the first memory address of the message
138  * object. In case of the sja1000 @obj_base_addr is taken the same as the chips
139  * base address.
140  * Unless the hardware uses a segmented memory map, flags can be set zero.
141  * Return Value: The function always returns zero
142  * File: src/usbcan.c
143  */
144 int usbcan_init_obj_data(struct canchip_t *chip, int objnr)
145 {
146         chip->msgobj[objnr]->obj_base_addr=0;
147
148         return 0;
149 }
150
151 /**
152  * usbcan_program_irq - program interrupts
153  * @candev: Pointer to candevice/board structure
154  *
155  * The function usbcan_program_irq() is used for hardware that uses
156  * programmable interrupts. If your hardware doesn't use programmable interrupts
157  * you should not set the @candevices_t->flags entry to %CANDEV_PROGRAMMABLE_IRQ and
158  * leave this function unedited. Again this function is hardware specific so
159  * there's no example code.
160  * Return value: The function returns zero on success or %-ENODEV on failure
161  * File: src/usbcan.c
162  */
163 int usbcan_program_irq(struct candevice_t *candev)
164 {
165         return 0;
166 }
167
168 int usbcan_register(struct hwspecops_t *hwspecops)
169 {
170         hwspecops->request_io = usbcan_request_io;
171         hwspecops->release_io = usbcan_release_io;
172         hwspecops->reset = usbcan_reset;
173         hwspecops->init_hw_data = usbcan_init_hw_data;
174         hwspecops->init_chip_data = usbcan_init_chip_data;
175         hwspecops->init_obj_data = usbcan_init_obj_data;
176         hwspecops->write_register = NULL;
177         hwspecops->read_register = NULL;
178         hwspecops->program_irq = usbcan_program_irq;
179 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10))
180         hwspecops->release_device = release_device;
181 #endif
182         return 0;
183 }
184
185 // static int sja1000_report_error_limit_counter;
186
187 static void usbcan_report_error(struct canchip_t *chip,
188                                 unsigned sr, unsigned ir, unsigned ecc)
189 {
190         /*TODO : Error reporting from device */
191
192 #if 0
193         if(sja1000_report_error_limit_counter>=100)
194                 return;
195
196         CANMSG("Error: status register: 0x%x irq_register: 0x%02x error: 0x%02x\n",
197                 sr, ir, ecc);
198
199         sja1000_report_error_limit_counter+=10;
200
201         if(sja1000_report_error_limit_counter>=100){
202                 sja1000_report_error_limit_counter+=10;
203                 CANMSG("Error: too many errors, reporting disabled\n");
204                 return;
205         }
206
207 #ifdef CONFIG_OC_LINCAN_DETAILED_ERRORS
208         CANMSG("SR: BS=%c  ES=%c  TS=%c  RS=%c  TCS=%c TBS=%c DOS=%c RBS=%c\n",
209                 sr&sjaSR_BS?'1':'0',sr&sjaSR_ES?'1':'0',
210                 sr&sjaSR_TS?'1':'0',sr&sjaSR_RS?'1':'0',
211                 sr&sjaSR_TCS?'1':'0',sr&sjaSR_TBS?'1':'0',
212                 sr&sjaSR_DOS?'1':'0',sr&sjaSR_RBS?'1':'0');
213         CANMSG("IR: BEI=%c ALI=%c EPI=%c WUI=%c DOI=%c EI=%c  TI=%c  RI=%c\n",
214                 sr&sjaIR_BEI?'1':'0',sr&sjaIR_ALI?'1':'0',
215                 sr&sjaIR_EPI?'1':'0',sr&sjaIR_WUI?'1':'0',
216                 sr&sjaIR_DOI?'1':'0',sr&sjaIR_EI?'1':'0',
217                 sr&sjaIR_TI?'1':'0',sr&sjaIR_RI?'1':'0');
218         if((sr&sjaIR_EI) || 1){
219                 CANMSG("EI: %s %s %s\n",
220                        sja1000_ecc_errc_str[(ecc&(sjaECC_ERCC1|sjaECC_ERCC0))/sjaECC_ERCC0],
221                        ecc&sjaECC_DIR?"RX":"TX",
222                        sja1000_ecc_seg_str[ecc&sjaECC_SEG_M]
223                       );
224         }
225 #endif /*CONFIG_OC_LINCAN_DETAILED_ERRORS*/
226 #endif
227 }
228
229
230 /**
231  * usbcan_enable_configuration - enable chip configuration mode
232  * @chip: pointer to chip state structure
233  */
234 int usbcan_enable_configuration(struct canchip_t *chip)
235 {
236         return 0;
237 }
238
239 /**
240  * usbcan_disable_configuration - disable chip configuration mode
241  * @chip: pointer to chip state structure
242  */
243 int usbcan_disable_configuration(struct canchip_t *chip)
244 {
245         return 0;
246 }
247
248 /**
249  * usbcan_chip_config: - can chip configuration
250  * @chip: pointer to chip state structure
251  *
252  * This function configures chip and prepares it for message
253  * transmission and reception. The function resets chip,
254  * resets mask for acceptance of all messages by call to
255  * usbcan_extended_mask() function and then
256  * computes and sets baudrate with use of function usbcan_baud_rate().
257  * Return Value: negative value reports error.
258  * File: src/usbcan.c
259  */
260 int usbcan_chip_config(struct canchip_t *chip)
261 {
262         return 0;
263 }
264
265 /**
266  * usbcan_extended_mask: - setup of extended mask for message filtering
267  * @chip: pointer to chip state structure
268  * @code: can message acceptance code
269  * @mask: can message acceptance mask
270  *
271  * Return Value: negative value reports error.
272  * File: src/usbcan.c
273  */
274 int usbcan_extended_mask(struct canchip_t *chip, unsigned long code, unsigned  long mask)
275 {
276         int retval;
277         struct usbcan_usb *dev=(struct usbcan_usb*)chip->chip_data;
278
279         u8 usbbuf[USBCAN_TRANSFER_SIZE];
280
281         if (!dev)
282                 return -ENODEV;
283
284         *(uint32_t *)(usbbuf)=cpu_to_le32(mask);
285         *(uint32_t *)(usbbuf+4)=cpu_to_le32(code);
286
287         retval=usb_control_msg(dev->udev,
288                 usb_sndctrlpipe(dev->udev, 0),
289                 USBCAN_VENDOR_EXT_MASK_SET,
290                 USB_TYPE_VENDOR,
291                 cpu_to_le16(0), cpu_to_le16(chip->chip_idx),
292                 &usbbuf, USBCAN_TRANSFER_SIZE,
293                 10000);
294         if (retval<0)
295                 return -ENODEV;
296
297         retval = usb_control_msg(dev->udev,
298                 usb_rcvctrlpipe(dev->udev, 0),
299                 USBCAN_VENDOR_EXT_MASK_STATUS,
300                 USB_TYPE_VENDOR,
301                 cpu_to_le16(0), cpu_to_le16(chip->chip_idx),
302                 &usbbuf, USBCAN_TRANSFER_SIZE,
303                 10000);
304
305         if (retval==1){
306                 if(usbbuf[0]==1){
307                         DEBUGMSG("Setting acceptance code to 0x%lx\n",(unsigned long)code);
308                         DEBUGMSG("Setting acceptance mask to 0x%lx\n",(unsigned long)mask);
309                         return 0;
310                 }
311         }
312
313         CANMSG("Setting extended mask failed\n");
314         return -EINVAL;
315 }
316
317 /**
318  * usbcan_baud_rate: - set communication parameters.
319  * @chip: pointer to chip state structure
320  * @rate: baud rate in Hz
321  * @clock: frequency of sja1000 clock in Hz (ISA osc is 14318000)
322  * @sjw: synchronization jump width (0-3) prescaled clock cycles
323  * @sampl_pt: sample point in % (0-100) sets (TSEG1+1)/(TSEG1+TSEG2+2) ratio
324  * @flags: fields %BTR1_SAM, %OCMODE, %OCPOL, %OCTP, %OCTN, %CLK_OFF, %CBP
325  *
326  * Return Value: negative value reports error.
327  * File: src/usbcan.c
328  */
329 int usbcan_baud_rate(struct canchip_t *chip, int rate, int clock, int sjw,
330                                                         int sampl_pt, int flags)
331 {
332         int retval;
333         struct usbcan_usb *dev=(struct usbcan_usb*)chip->chip_data;
334
335         u8 usbbuf[USBCAN_TRANSFER_SIZE];
336
337         if (!dev)
338                 return -ENODEV;
339
340         *(int32_t *)(usbbuf)=cpu_to_le32(rate);
341         *(int32_t *)(usbbuf+4)=cpu_to_le32(sjw);
342         *(int32_t *)(usbbuf+8)=cpu_to_le32(sampl_pt);
343         *(int32_t *)(usbbuf+12)=cpu_to_le32(flags);
344
345         retval=usb_control_msg(dev->udev,
346                 usb_sndctrlpipe(dev->udev, 0),
347                 USBCAN_VENDOR_BAUD_RATE_SET,
348                 USB_TYPE_VENDOR,
349                 cpu_to_le16(0), cpu_to_le16(chip->chip_idx),
350                 &usbbuf, USBCAN_TRANSFER_SIZE,
351                 10000);
352         if (retval<0)
353                 return -ENODEV;
354
355         retval = usb_control_msg(dev->udev,
356                 usb_rcvctrlpipe(dev->udev, 0),
357                 USBCAN_VENDOR_BAUD_RATE_STATUS,
358                 USB_TYPE_VENDOR,
359                 cpu_to_le16(0), cpu_to_le16(chip->chip_idx),
360                 usbbuf, USBCAN_TRANSFER_SIZE,
361                 10000);
362
363         if (retval==1){
364                 if(usbbuf[0]==1)
365                         return 0;
366         }
367
368         CANMSG("baud rate %d is not possible to set\n",
369                 rate);
370         return -EINVAL;
371 }
372
373 /**
374  * usbcan_pre_read_config: - prepares message object for message reception
375  * @chip: pointer to chip state structure
376  * @obj: pointer to message object state structure
377  *
378  * Return Value: negative value reports error.
379  *      Positive value indicates immediate reception of message.
380  * File: src/usbcan.c
381  */
382 int usbcan_pre_read_config(struct canchip_t *chip, struct msgobj_t *obj)
383 {
384         return 0;
385 }
386
387 #define MAX_TRANSMIT_WAIT_LOOPS 10
388 /**
389  * usbcan_pre_write_config: - prepares message object for message transmission
390  * @chip: pointer to chip state structure
391  * @obj: pointer to message object state structure
392  * @msg: pointer to CAN message
393  *
394  * This function prepares selected message object for future initiation
395  * of message transmission by usbcan_send_msg() function.
396  * The CAN message data and message ID are transfered from @msg slot
397  * into chip buffer in this function.
398  * Return Value: negative value reports error.
399  * File: src/usbcan.c
400  */
401 int usbcan_pre_write_config(struct canchip_t *chip, struct msgobj_t *obj,
402                                                         struct canmsg_t *msg)
403 {
404         return 0;
405 }
406
407 /**
408  * usbcan_send_msg: - initiate message transmission
409  * @chip: pointer to chip state structure
410  * @obj: pointer to message object state structure
411  * @msg: pointer to CAN message
412  *
413  * This function is called after usbcan_pre_write_config() function,
414  * which prepares data in chip buffer.
415  * Return Value: negative value reports error.
416  * File: src/usbcan.c
417  */
418 int usbcan_send_msg(struct canchip_t *chip, struct msgobj_t *obj,
419                                                         struct canmsg_t *msg)
420 {
421         return 0;
422 }
423
424 /**
425  * usbcan_check_tx_stat: - checks state of transmission engine
426  * @chip: pointer to chip state structure
427  *
428  * Return Value: negative value reports error.
429  *      Positive return value indicates transmission under way status.
430  *      Zero value indicates finishing of all issued transmission requests.
431  * File: src/usbcan.c
432  */
433 int usbcan_check_tx_stat(struct canchip_t *chip)
434 {
435         struct usbcan_usb *dev=(struct usbcan_usb*)chip->chip_data;
436         if (!dev)
437                 return 0;
438         if (test_bit(USBCAN_TX_PENDING,&dev->flags))
439                 return 1;
440         return 0;
441 }
442
443 /**
444  * usbcan_set_btregs: -  configures bitrate registers
445  * @chip: pointer to chip state structure
446  * @btr0: bitrate register 0
447  * @btr1: bitrate register 1
448  *
449  * Return Value: negative value reports error.
450  * File: src/usbcan.c
451  */
452 int usbcan_set_btregs(struct canchip_t *chip, unsigned short btr0,
453                                                         unsigned short btr1)
454 {
455         int retval;
456         u8      buf[USBCAN_TRANSFER_SIZE];
457         struct usbcan_usb *dev=(struct usbcan_usb*)chip->chip_data;
458         uint16_t value=(btr1&0xFF)<<8 | (btr0&0xFF);
459
460         if (!dev)
461                 return -ENODEV;
462
463         retval = usb_control_msg(dev->udev,
464         usb_rcvctrlpipe(dev->udev, 0),
465         USBCAN_VENDOR_SET_BTREGS,
466         USB_TYPE_VENDOR,
467         cpu_to_le16(value), cpu_to_le16(chip->chip_idx),
468         &buf, USBCAN_TRANSFER_SIZE,
469         10000);
470
471         if (retval==1){
472                 if(buf[0]==1)
473                         return 0;
474         }
475         return -ENODEV;
476 }
477
478 /**
479  * usbcan_start_chip: -  starts chip message processing
480  * @chip: pointer to chip state structure
481  *
482  * Return Value: negative value reports error.
483  * File: src/usbcan.c
484  */
485 int usbcan_start_chip(struct canchip_t *chip)
486 {
487         int retval;
488         u8      buf[USBCAN_TRANSFER_SIZE];
489         struct usbcan_usb *dev=(struct usbcan_usb*)chip->chip_data;
490
491         if (!dev)
492                 return -ENODEV;
493
494         retval = usb_control_msg(dev->udev,
495         usb_rcvctrlpipe(dev->udev, 0),
496         USBCAN_VENDOR_START_CHIP,
497         USB_TYPE_VENDOR,
498         cpu_to_le16(0), cpu_to_le16(chip->chip_idx),
499         &buf, USBCAN_TRANSFER_SIZE,
500         10000);
501
502         if (retval==1){
503                 if(buf[0]==1)
504                         return 0;
505         }
506         return -ENODEV;
507 }
508
509 /**
510  * usbcan_chip_queue_status: -  gets queue status from usb device
511  * @chip: pointer to chip state structure
512  *
513  * Return Value: negative value reports error.
514  * 0 means queue is not full
515  * 1 means queue is full
516  * File: src/usbcan.c
517  */
518 int usbcan_chip_queue_status(struct canchip_t *chip)
519 {
520         int retval;
521         u8      buf[USBCAN_TRANSFER_SIZE];
522         struct usbcan_usb *dev=(struct usbcan_usb*)chip->chip_data;
523
524         if (!dev)
525                 return -ENODEV;
526         retval = usb_control_msg(dev->udev,
527         usb_rcvctrlpipe(dev->udev, 0),
528         USBCAN_VENDOR_CHECK_TX_STAT,
529         USB_TYPE_VENDOR,
530         cpu_to_le16(0), cpu_to_le16(chip->chip_idx),
531         &buf, USBCAN_TRANSFER_SIZE,
532         10000);
533
534         if (retval==1){
535                 DEBUGMSG("Chip_queue_status: %d\n",buf[0]);
536                 if(buf[0]==1)
537                         return 0;
538                 if(buf[0]==0)
539                         return 1;
540         }
541         CANMSG("Chip_queue_status error: %d\n",retval);
542         return -ENODEV;
543 }
544
545 /**
546  * usbcan_stop_chip: -  stops chip message processing
547  * @chip: pointer to chip state structure
548  *
549  * Return Value: negative value reports error.
550  * File: src/usbcan.c
551  */
552 int usbcan_stop_chip(struct canchip_t *chip)
553 {
554         int retval;
555         u8      buf[USBCAN_TRANSFER_SIZE];
556         struct usbcan_usb *dev=(struct usbcan_usb*)chip->chip_data;
557
558         if (!dev)
559                 return -ENODEV;
560
561         retval = usb_control_msg(dev->udev,
562         usb_rcvctrlpipe(dev->udev, 0),
563         USBCAN_VENDOR_STOP_CHIP,
564         USB_TYPE_VENDOR,
565         cpu_to_le16(0), cpu_to_le16(chip->chip_idx),
566         &buf, USBCAN_TRANSFER_SIZE,
567         10000);
568
569         if (retval==1){
570                 if(buf[0]==1)
571                         return 0;
572         }
573         return -ENODEV;
574 }
575
576 /**
577  * usbcan_register_devs: - attaches usb device data to the chip structure
578  * @chip: pointer to chip state structure
579  * @data: usb device data
580  *
581  * File: src/usbcan.c
582  */
583 int usbcan_register_devs(struct canchip_t *chip,void *data){
584         struct usbcan_devs *usbdevs=(struct usbcan_devs *)data;
585         if (!usbdevs){
586             CANMSG("Bad structure given\n");
587             return -1;
588         }
589         if (chip->chip_idx>=usbdevs->count) {
590             CANMSG("Requested chip number is bigger than chip count\n");
591             return -1;
592         }
593
594         usbdevs->devs[chip->chip_idx]->chip=chip;
595         chip->chip_data=(void *)usbdevs->devs[chip->chip_idx];
596         return 0;
597 }
598
599 /**
600  * usbcan_attach_to_chip: - attaches to the chip, setups registers and state
601  * @chip: pointer to chip state structure
602  *
603  * Return Value: negative value reports error.
604  * File: src/usbcan.c
605  */
606 int usbcan_attach_to_chip(struct canchip_t *chip)
607 {
608         struct usbcan_usb *dev = (struct usbcan_usb *)chip->chip_data;
609
610         /* start kernel thread */
611         dev->comthread=can_kthread_run(usbcan_kthread, (void *)dev, "usbcan_%d",chip->chip_idx);
612
613         return 0;
614 }
615
616 /**
617  * usbcan_release_chip: - called before chip structure removal if %CHIP_ATTACHED is set
618  * @chip: pointer to chip state structure
619  *
620  * Return Value: negative value reports error.
621  * File: src/usbcan.c
622  */
623 int usbcan_release_chip(struct canchip_t *chip)
624 {
625         struct usbcan_usb *dev = (struct usbcan_usb *)chip->chip_data;
626
627         usbcan_stop_chip(chip);
628
629         /* terminate the kernel thread */
630         set_bit(USBCAN_TERMINATE,&dev->flags);
631 //      wake_up_process(dev->comthread);
632         can_kthread_stop(dev->comthread);
633
634         return 0;
635 }
636
637 /**
638  * usbcan_remote_request: - configures message object and asks for RTR message
639  * @chip: pointer to chip state structure
640  * @obj: pointer to message object structure
641  *
642  * Return Value: negative value reports error.
643  * File: src/usbcan.c
644  */
645 int usbcan_remote_request(struct canchip_t *chip, struct msgobj_t *obj)
646 {
647         CANMSG("usbcan_remote_request not implemented\n");
648         return -ENOSYS;
649 }
650
651 /**
652  * usbcan_standard_mask: - setup of mask for message filtering
653  * @chip: pointer to chip state structure
654  * @code: can message acceptance code
655  * @mask: can message acceptance mask
656  *
657  * Return Value: negative value reports error.
658  * File: src/usbcan.c
659  */
660 int usbcan_standard_mask(struct canchip_t *chip, unsigned short code,
661                 unsigned short mask)
662 {
663         CANMSG("usbcan_standard_mask not implemented\n");
664         return -ENOSYS;
665 }
666
667 /**
668  * usbcan_clear_objects: - clears state of all message object residing in chip
669  * @chip: pointer to chip state structure
670  *
671  * Return Value: negative value reports error.
672  * File: src/usbcan.c
673  */
674 int usbcan_clear_objects(struct canchip_t *chip)
675 {
676         CANMSG("usbcan_clear_objects not implemented\n");
677         return -ENOSYS;
678 }
679
680 /**
681  * usbcan_config_irqs: - tunes chip hardware interrupt delivery
682  * @chip: pointer to chip state structure
683  * @irqs: requested chip IRQ configuration
684  *
685  * Return Value: negative value reports error.
686  * File: src/usbcan.c
687  */
688 int usbcan_config_irqs(struct canchip_t *chip, short irqs)
689 {
690         CANMSG("usbcan_config_irqs not implemented\n");
691         return -ENOSYS;
692 }
693
694
695 static void usbcan_usb_message_move_list(struct usbcan_usb *dev,
696                         struct usbcan_message *m, struct list_head *head)
697 {
698         can_spin_irqflags_t flags;
699         can_spin_lock_irqsave(&dev->list_lock, flags);
700         list_del(&m->list_node);
701         list_add_tail(&m->list_node, head);
702         can_spin_unlock_irqrestore(&dev->list_lock, flags);
703 }
704
705
706 /**
707  * usbcan_kthread_read_handler: - part of kthread code responsible for receive completed events
708  * @dev: pointer to usb device related structure
709  * @obj: pointer to attached message object description
710  *
711  * The main purpose of this function is to read message from usb urb
712  * and transfer message contents to CAN queue ends.
713  * This subroutine is called by
714  * usbcan_kthread().
715  * File: src/usbcan.c
716  */
717 void usbcan_kthread_read_handler(struct usbcan_usb *dev, struct usbcan_message *m,
718                                 struct msgobj_t *obj)
719 {
720         int i, len, retval;
721         u8 *ptr;
722
723         DEBUGMSG("USBCAN RX handler\n");
724
725         if (!test_and_clear_bit(USBCAN_MESSAGE_DATA_OK,&m->flags)) {
726                 CANMSG("Strange, Rx handler USBCAN_MESSAGE_DATA_OK not set\n");
727                 goto skip_msg;
728         }
729
730         if (!(dev->chip)||!(dev->chip->flags & CHIP_CONFIGURED)) {
731                 CANMSG("Destination chip not found\n");
732                 goto skip_msg;
733         }
734
735
736         DEBUGMSG("USBCAN Thread has received a message\n");
737
738         len=*(u8 *)(m->msg+1);
739         if(len > CAN_MSG_LENGTH) len = CAN_MSG_LENGTH;
740         obj->rx_msg.length = len;
741
742         obj->rx_msg.flags=le16_to_cpu(*(u16 *)(m->msg+2));
743         obj->rx_msg.id=le32_to_cpu((*(u32 *)(m->msg+4)));
744
745         for(ptr=m->msg+8,i=0; i < len; ptr++,i++) {
746                 obj->rx_msg.data[i]=*ptr;
747         }
748
749         // fill CAN message timestamp
750         can_filltimestamp(&obj->rx_msg.timestamp);
751         canque_filter_msg2edges(obj->qends, &obj->rx_msg);
752
753 skip_msg:
754         set_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
755         DEBUGMSG("Renewing RX urb\n");
756
757         usbcan_usb_message_move_list(dev, m, &dev->rx_pend_list);
758         retval = usb_submit_urb (m->u, GFP_KERNEL);
759         if (retval<0) {
760                 CANMSG("URB error %d\n", retval);
761                 set_bit(USBCAN_ERROR,&dev->flags);
762         }
763 }
764
765 /**
766  * usbcan_kthread_write_handler: - part of kthread code responsible for transmit done events
767  * @dev: pointer to usb device related structure
768  * @obj: pointer to attached message object description
769  *
770  * The main purpose of this function is to free allocated resources on transmit done event
771  * This subroutine is called by
772  * usbcan_kthread().
773  * File: src/usbcan.c
774  */
775 void usbcan_kthread_write_handler(struct usbcan_usb *dev, struct usbcan_message *m,
776                                 struct msgobj_t *obj)
777 {
778         if (!test_and_clear_bit(USBCAN_MESSAGE_DATA_OK,&m->flags)) {
779                 CANMSG("Strange, Tx handler USBCAN_MESSAGE_DATA_OK not set\n");
780                 goto skip_msg;
781         }
782
783         DEBUGMSG("USBCAN Message successfully sent\n");
784
785         if(m->slot){
786                 // Do local transmitted message distribution if enabled
787                 if (processlocal){
788                         // fill CAN message timestamp
789                         can_filltimestamp(&m->slot->msg.timestamp);
790
791                         m->slot->msg.flags |= MSG_LOCAL;
792                         canque_filter_msg2edges(obj->qends, &m->slot->msg);
793                 }
794                 // Free transmitted slot
795                 canque_free_outslot(obj->qends, m->qedge, m->slot);
796                 m->slot=NULL;
797         }
798         
799         /*FIXME - why there*/
800         can_msgobj_clear_fl(obj,TX_PENDING);
801
802 skip_msg:
803         set_bit(USBCAN_FREE_TX_URB,&dev->flags);
804         set_bit(USBCAN_MESSAGE_FREE,&m->flags);
805
806         set_bit(USBCAN_TX_PENDING,&dev->flags);
807
808         usbcan_usb_message_move_list(dev, m, &dev->tx_idle_list);
809 }
810
811 /**
812  * usbcan_kthread_write_request_handler: - part of kthread code responsible for sending transmit urbs
813  * @dev: pointer to usb device related structure
814  * @obj: pointer to attached message object description
815  *
816  * The main purpose of this function is to create a usb transmit safe object
817  * and send it via free transmit usb urb
818  * This subroutine is called by
819  * usbcan_kthread().
820  * File: src/usbcan.c
821  */
822 void usbcan_kthread_write_request_handler(struct usbcan_usb *dev, struct msgobj_t *obj){
823         int i, cmd, len, retval;
824         u8 *ptr;
825         struct usbcan_message *m;
826
827         if(list_empty(&dev->tx_idle_list)) {
828                 clear_bit(USBCAN_FREE_TX_URB,&dev->flags);
829                 return;
830         }
831         
832         m = list_first_entry(&dev->tx_idle_list, typeof(*m), list_node);
833
834         cmd=canque_test_outslot(obj->qends, &m->qedge, &m->slot);
835         if(cmd>=0){
836                 DEBUGMSG("USBCAN Sending a message\n");
837
838                 can_msgobj_set_fl(obj,TX_PENDING);
839                 clear_bit(USBCAN_FREE_TX_URB,&dev->flags);
840                 clear_bit(USBCAN_MESSAGE_FREE,&m->flags);
841
842                 *(u8 *)(m->msg)=0;
843                 len = m->slot->msg.length;
844                 if(len > CAN_MSG_LENGTH)
845                 len = CAN_MSG_LENGTH;
846                 *(u8 *)(m->msg+1)=len & 0xFF;
847                 *(u16 *)(m->msg+2)=cpu_to_le16(m->slot->msg.flags);
848                 *(u32 *)(m->msg+4)=cpu_to_le32(m->slot->msg.id);
849
850                 for(ptr=m->msg+8, i=0; i < len; ptr++,i++) {
851                         *ptr=m->slot->msg.data[i] & 0xFF;
852                 }
853                 for(; i < 8; ptr++,i++) {
854                         *ptr=0;
855                 }
856
857                 set_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
858
859                 usbcan_usb_message_move_list(dev, m, &dev->tx_pend_list);
860
861                 retval = usb_submit_urb (m->u, GFP_KERNEL);
862                 if (retval){
863                         CANMSG("%d. URB error %d\n",i,retval);
864                         clear_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
865                         set_bit(USBCAN_FREE_TX_URB,&dev->flags);
866                         set_bit(USBCAN_MESSAGE_FREE,&m->flags);
867                         obj->ret = -1;
868                         canque_notify_inends(m->qedge, CANQUEUE_NOTIFY_ERRTX_SEND);
869                         canque_free_outslot(obj->qends, m->qedge, m->slot);
870                         m->slot=NULL;
871                         usbcan_usb_message_move_list(dev, m, &dev->tx_idle_list);
872                 } else {
873                         set_bit(USBCAN_TX_PENDING,&dev->flags);
874                 }
875         } else {
876                 set_bit(USBCAN_FREE_TX_URB,&dev->flags);
877         }
878 }
879
880 #define MAX_RETR 10
881
882 /**
883  * usbcan_irq_handler: - interrupt service routine
884  * @irq: interrupt vector number, this value is system specific
885  * @chip: pointer to chip state structure
886  *
887  * Interrupt handler is activated when state of CAN controller chip changes,
888  * there is message to be read or there is more space for new messages or
889  * error occurs. The receive events results in reading of the message from
890  * CAN controller chip and distribution of message through attached
891  * message queues.
892  * File: src/usbcan.c
893  */
894 int usbcan_irq_handler(int irq, struct canchip_t *chip)
895 {
896         return CANCHIP_IRQ_HANDLED;
897 }
898
899 /**
900  * usbcan_wakeup_tx: - wakeups TX processing
901  * @chip: pointer to chip state structure
902  * @obj: pointer to message object structure
903  *
904  * Function is responsible for initiating message transmition.
905  * It is responsible for clearing of object TX_REQUEST flag
906  *
907  * Return Value: negative value reports error.
908  * File: src/usbcan.c
909  */
910 int usbcan_wakeup_tx(struct canchip_t *chip, struct msgobj_t *obj)
911 {
912         struct usbcan_usb *dev=(struct usbcan_usb *)chip->chip_data;
913
914         DEBUGMSG("Trying to send message\n");
915         can_preempt_disable();
916
917         can_msgobj_set_fl(obj,TX_PENDING);
918         can_msgobj_set_fl(obj,TX_REQUEST);
919         while(!can_msgobj_test_and_set_fl(obj,TX_LOCK)){
920                 can_msgobj_clear_fl(obj,TX_REQUEST);
921
922                 if (test_and_clear_bit(USBCAN_FREE_TX_URB,&dev->flags)){
923                         obj->tx_retry_cnt=0;
924                         set_bit(USBCAN_TX_PENDING,&dev->flags);
925                         if (test_bit(USBCAN_THREAD_RUNNING,&dev->flags))
926                                 wake_up_process(dev->comthread);
927                 }
928
929                 can_msgobj_clear_fl(obj,TX_LOCK);
930                 if(!can_msgobj_test_fl(obj,TX_REQUEST)) break;
931                 CANMSG("TX looping in usbcan_wakeup_tx\n");
932         }
933
934         can_preempt_enable();
935         return 0;
936 }
937
938 int usbcan_chipregister(struct chipspecops_t *chipspecops)
939 {
940         CANMSG("initializing usbcan chip operations\n");
941         chipspecops->chip_config=usbcan_chip_config;
942         chipspecops->baud_rate=usbcan_baud_rate;
943         chipspecops->standard_mask=usbcan_standard_mask;
944         chipspecops->extended_mask=usbcan_extended_mask;
945         chipspecops->message15_mask=usbcan_extended_mask;
946         chipspecops->clear_objects=usbcan_clear_objects;
947         chipspecops->config_irqs=usbcan_config_irqs;
948         chipspecops->pre_read_config=usbcan_pre_read_config;
949         chipspecops->pre_write_config=usbcan_pre_write_config;
950         chipspecops->send_msg=usbcan_send_msg;
951         chipspecops->check_tx_stat=usbcan_check_tx_stat;
952         chipspecops->wakeup_tx=usbcan_wakeup_tx;
953         chipspecops->remote_request=usbcan_remote_request;
954         chipspecops->enable_configuration=usbcan_enable_configuration;
955         chipspecops->disable_configuration=usbcan_disable_configuration;
956         chipspecops->attach_to_chip=usbcan_attach_to_chip;
957         chipspecops->release_chip=usbcan_release_chip;
958         chipspecops->set_btregs=usbcan_set_btregs;
959         chipspecops->start_chip=usbcan_start_chip;
960         chipspecops->stop_chip=usbcan_stop_chip;
961         chipspecops->irq_handler=usbcan_irq_handler;
962         chipspecops->irq_accept=NULL;
963         return 0;
964 }
965
966 /**
967  * usbcan_fill_chipspecops - fills chip specific operations
968  * @chip: pointer to chip representation structure
969  *
970  * The function fills chip specific operations for sja1000 (PeliCAN) chip.
971  *
972  * Return Value: returns negative number in the case of fail
973  */
974 int usbcan_fill_chipspecops(struct canchip_t *chip)
975 {
976         chip->chip_type="usbcan";
977         chip->max_objects=1;
978         usbcan_chipregister(chip->chipspecops);
979         return 0;
980 }
981
982 /**
983  * usbcan_init_chip_data - Initialize chips
984  * @candev: Pointer to candevice/board structure
985  * @chipnr: Number of the CAN chip on the hardware card
986  *
987  * The function usbcan_init_chip_data() is used to initialize the hardware
988  * structure containing information about the CAN chips.
989  * %CHIP_TYPE represents the type of CAN chip. %CHIP_TYPE can be "i82527" or
990  * "sja1000".
991  * The @chip_base_addr entry represents the start of the 'official' memory map
992  * of the installed chip. It's likely that this is the same as the @io_addr
993  * argument supplied at module loading time.
994  * The @clock entry holds the chip clock value in Hz.
995  * The entry @sja_cdr_reg holds hardware specific options for the Clock Divider
996  * register. Options defined in the %sja1000.h file:
997  * %sjaCDR_CLKOUT_MASK, %sjaCDR_CLK_OFF, %sjaCDR_RXINPEN, %sjaCDR_CBP, %sjaCDR_PELICAN
998  * The entry @sja_ocr_reg holds hardware specific options for the Output Control
999  * register. Options defined in the %sja1000.h file:
1000  * %sjaOCR_MODE_BIPHASE, %sjaOCR_MODE_TEST, %sjaOCR_MODE_NORMAL, %sjaOCR_MODE_CLOCK,
1001  * %sjaOCR_TX0_LH, %sjaOCR_TX1_ZZ.
1002  * The entry @int_clk_reg holds hardware specific options for the Clock Out
1003  * register. Options defined in the %i82527.h file:
1004  * %iCLK_CD0, %iCLK_CD1, %iCLK_CD2, %iCLK_CD3, %iCLK_SL0, %iCLK_SL1.
1005  * The entry @int_bus_reg holds hardware specific options for the Bus
1006  * Configuration register. Options defined in the %i82527.h file:
1007  * %iBUS_DR0, %iBUS_DR1, %iBUS_DT1, %iBUS_POL, %iBUS_CBY.
1008  * The entry @int_cpu_reg holds hardware specific options for the cpu interface
1009  * register. Options defined in the %i82527.h file:
1010  * %iCPU_CEN, %iCPU_MUX, %iCPU_SLP, %iCPU_PWD, %iCPU_DMC, %iCPU_DSC, %iCPU_RST.
1011  * Return Value: The function always returns zero
1012  * File: src/usbcan.c
1013  */
1014 int usbcan_init_chip_data(struct candevice_t *candev, int chipnr)
1015 {
1016         struct canchip_t *chip=candev->chip[chipnr];
1017
1018         usbcan_fill_chipspecops(chip);
1019
1020         candev->chip[chipnr]->flags|=CHIP_IRQ_CUSTOM|CHIP_KEEP_DATA;
1021         candev->chip[chipnr]->chip_base_addr=0;
1022         candev->chip[chipnr]->clock = 0;
1023
1024         return 0;
1025 }
1026
1027
1028 /** *********************************
1029  *    USB related functions
1030  *  ********************************* */
1031
1032 static int usbcan_sleep_thread(struct usbcan_usb *dev)
1033 {
1034         int     rc = 0;
1035
1036         /* Wait until a signal arrives or we are woken up */
1037         for (;;) {
1038                 try_to_freeze();
1039                 set_current_state(TASK_INTERRUPTIBLE);
1040                 if (signal_pending(current)) {
1041                         rc = -EINTR;
1042                         break;
1043                 }
1044                 if (
1045                         can_kthread_should_stop() ||
1046                         test_bit(USBCAN_DATA_OK,&dev->flags) ||
1047                         test_bit(USBCAN_TX_PENDING,&dev->flags) ||
1048                         test_bit(USBCAN_TERMINATE,&dev->flags) ||
1049                         test_bit(USBCAN_ERROR,&dev->flags)
1050                 )
1051                         break;
1052                 schedule();
1053         }
1054         __set_current_state(TASK_RUNNING);
1055         return rc;
1056 }
1057
1058 static void usbcan_tx_callback(struct urb *urb)
1059 {
1060         struct usbcan_message *m = urb->context;
1061         int retval;
1062
1063         if (!test_bit(USBCAN_THREAD_RUNNING,&m->dev->flags))
1064                 return;
1065         if (test_bit(USBCAN_MESSAGE_TERMINATE,&m->flags))
1066                 return;
1067
1068         switch (urb->status) {
1069         case 0:
1070                 /* success */
1071                 DEBUGMSG("%s > Message OK\n", __FUNCTION__);
1072                 set_bit(USBCAN_DATA_OK,&m->dev->flags);
1073                 set_bit(USBCAN_MESSAGE_DATA_OK,&m->flags);
1074                 DEBUGMSG("%s > TX flag set\n", __FUNCTION__);
1075                 set_bit(USBCAN_DATA_TX,&m->dev->flags);
1076                 clear_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
1077                 usbcan_usb_message_move_list(m->dev, m, &m->dev->tx_ready_list);
1078                 if (test_bit(USBCAN_THREAD_RUNNING,&m->dev->flags))
1079                         wake_up_process(m->dev->comthread);
1080                 else
1081                         CANMSG("%s > USBCAN thread not running\n", __FUNCTION__);
1082                 return;
1083         case -ECONNRESET:
1084         case -ENOENT:
1085         case -ESHUTDOWN:
1086                 /* this urb is terminated, clean up */
1087                 CANMSG("%s > Urb shutting down with status: %d\n", __FUNCTION__, urb->status);
1088 //              set_bit(USBCAN_TERMINATE,&m->dev->flags);
1089                 set_bit(USBCAN_MESSAGE_TERMINATE,&m->flags);
1090                 clear_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
1091                 return;
1092         default:
1093                 //CANMSG("%s > Nonzero status received: %d\n", __FUNCTION__, urb->status);
1094                 break;
1095         }
1096
1097         // Try to send urb again on non significant errors
1098         retval = usb_submit_urb (urb, GFP_ATOMIC);
1099         if (retval<0){
1100                 CANMSG("%s > Retrying urb failed with result %d\n", __FUNCTION__, retval);
1101                 set_bit(USBCAN_ERROR,&m->dev->flags);
1102                 clear_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
1103                 usbcan_usb_message_move_list(m->dev, m, &m->dev->tx_ready_list);
1104                 if (test_bit(USBCAN_THREAD_RUNNING,&m->dev->flags))
1105                         wake_up_process(m->dev->comthread);
1106         }
1107 }
1108
1109 static void usbcan_rx_callback(struct urb *urb)
1110 {
1111         struct usbcan_message *m = urb->context;
1112         int retval;
1113
1114         if (!test_bit(USBCAN_THREAD_RUNNING,&m->dev->flags))
1115                 return;
1116         if (test_bit(USBCAN_MESSAGE_TERMINATE,&m->flags))
1117                 return;
1118
1119         switch (urb->status) {
1120         case 0:
1121                 /* success */
1122                 DEBUGMSG("%s > Message OK\n", __FUNCTION__);
1123                 set_bit(USBCAN_DATA_OK,&m->dev->flags);
1124                 set_bit(USBCAN_MESSAGE_DATA_OK,&m->flags);
1125                 DEBUGMSG("%s > RX flag set\n", __FUNCTION__);
1126                 set_bit(USBCAN_DATA_RX,&m->dev->flags);
1127                 clear_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
1128                 usbcan_usb_message_move_list(m->dev, m, &m->dev->rx_ready_list);
1129                 if (test_bit(USBCAN_THREAD_RUNNING,&m->dev->flags))
1130                         wake_up_process(m->dev->comthread);
1131                 else
1132                         CANMSG("%s > USBCAN thread not running\n", __FUNCTION__);
1133                 return;
1134         case -ECONNRESET:
1135         case -ENOENT:
1136         case -ESHUTDOWN:
1137                 /* this urb is terminated, clean up */
1138                 CANMSG("%s > Urb shutting down with status: %d\n", __FUNCTION__, urb->status);
1139 //              set_bit(USBCAN_TERMINATE,&m->dev->flags);
1140                 set_bit(USBCAN_MESSAGE_TERMINATE,&m->flags);
1141                 clear_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
1142                 return;
1143         default:
1144                 //CANMSG("%s > Nonzero status received: %d\n", __FUNCTION__, urb->status);
1145                 break;
1146         }
1147
1148         // Try to send urb again on non significant errors
1149         retval = usb_submit_urb (urb, GFP_ATOMIC);
1150         if (retval<0){
1151                 CANMSG("%s > Retrying urb failed with result %d\n", __FUNCTION__, retval);
1152                 set_bit(USBCAN_ERROR,&m->dev->flags);
1153                 clear_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
1154                 usbcan_usb_message_move_list(m->dev, m, &m->dev->rx_ready_list);
1155                 if (test_bit(USBCAN_THREAD_RUNNING,&m->dev->flags))
1156                         wake_up_process(m->dev->comthread);
1157         }
1158 }
1159
1160
1161 static void usbcan_kthread_free_urbs(struct usbcan_usb *dev)
1162 {
1163         while(!list_empty(&dev->rx_pend_list)) {
1164                 struct usbcan_message *m;
1165                 m = list_first_entry(&dev->rx_pend_list, typeof(*m), list_node);
1166                 set_bit(USBCAN_MESSAGE_TERMINATE,&m->flags);
1167                 usb_kill_urb(m->u);
1168                 usbcan_usb_message_move_list(dev, m, &dev->rx_ready_list);
1169         }
1170
1171         while(!list_empty(&dev->tx_pend_list)) {
1172                 struct usbcan_message *m;
1173                 m = list_first_entry(&dev->tx_pend_list, typeof(*m), list_node);
1174                 set_bit(USBCAN_MESSAGE_TERMINATE,&m->flags);
1175                 usb_kill_urb(m->u);
1176                 usbcan_usb_message_move_list(dev, m, &dev->tx_idle_list);
1177         }
1178
1179         while(!list_empty(&dev->rx_ready_list)) {
1180                 struct usbcan_message *m;
1181                 m = list_first_entry(&dev->rx_ready_list, typeof(*m), list_node);
1182                 list_del(&m->list_node);
1183                 usb_free_urb(m->u);
1184                 kfree(m);
1185         }
1186
1187         while(!list_empty(&dev->tx_ready_list)) {
1188                 struct usbcan_message *m;
1189                 m = list_first_entry(&dev->tx_ready_list, typeof(*m), list_node);
1190                 list_del(&m->list_node);
1191                 usb_free_urb(m->u);
1192                 kfree(m);
1193         }
1194
1195         while(!list_empty(&dev->tx_idle_list)) {
1196                 struct usbcan_message *m;
1197                 m = list_first_entry(&dev->tx_idle_list, typeof(*m), list_node);
1198                 list_del(&m->list_node);
1199                 usb_free_urb(m->u);
1200                 kfree(m);
1201         }
1202
1203 }
1204
1205 int usbcan_kthread(void *data)
1206 {
1207         int i,retval=0;
1208         struct usbcan_usb *dev=(struct usbcan_usb *)data;
1209         struct msgobj_t *obj;
1210
1211         CANMSG("Usbcan thread started...\n");
1212
1213         if (!dev->chip)
1214                 goto error;
1215         obj=dev->chip->msgobj[0];
1216
1217         INIT_LIST_HEAD(&dev->rx_pend_list);
1218         INIT_LIST_HEAD(&dev->rx_ready_list);
1219         INIT_LIST_HEAD(&dev->tx_idle_list);
1220         INIT_LIST_HEAD(&dev->tx_pend_list);
1221         INIT_LIST_HEAD(&dev->tx_ready_list);
1222
1223         if (1) {
1224                 struct sched_param param = { .sched_priority = 1 };
1225                 sched_setscheduler(current, SCHED_FIFO, &param);
1226         }
1227
1228
1229         /* Prepare receive urbs  */
1230         for (i=0;i<USBCAN_TOT_RX_URBS;i++){
1231                 struct usbcan_message *m;
1232                 struct urb *u = usb_alloc_urb(0, GFP_KERNEL);
1233                 if (!u){
1234                         CANMSG("Error allocating %d. usb receive urb\n",i);
1235                         goto error;
1236                 }
1237                 m = kmalloc(sizeof(struct usbcan_message), GFP_KERNEL);
1238                 if(!m) {
1239                         usb_free_urb(u);
1240                         CANMSG("Error allocating %d. receive usbcan_message\n",i);
1241                         goto error;
1242                 }
1243                 m->u = u;
1244                 u->dev = dev->udev;
1245                 m->dev = dev;
1246                 usb_fill_bulk_urb(u, dev->udev,
1247                         usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointAddr),
1248                         m->msg, USBCAN_TRANSFER_SIZE, usbcan_rx_callback, m);
1249                 set_bit(USBCAN_MESSAGE_TYPE_RX, &m->flags);
1250                 list_add_tail(&m->list_node, &dev->rx_ready_list);
1251         }
1252
1253         /* Prepare transmit urbs  */
1254         for (i=0;i<USBCAN_TOT_TX_URBS;i++){
1255                 struct usbcan_message *m;
1256                 struct urb *u = usb_alloc_urb(0, GFP_KERNEL);
1257                 if (!u){
1258                         CANMSG("Error allocating %d. usb transmit urb\n",i);
1259                         goto error;
1260                 }
1261                 m = kmalloc(sizeof(struct usbcan_message), GFP_KERNEL);
1262                 if(!m) {
1263                         usb_free_urb(u);
1264                         CANMSG("Error allocating %d. transmit usbcan_message\n",i);
1265                         goto error;
1266                 }
1267                 m->u = u;
1268                 u->dev = dev->udev;
1269                 m->dev = dev;
1270                 usb_fill_bulk_urb(u, dev->udev,
1271                         usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr),
1272                         m->msg, USBCAN_TRANSFER_SIZE, usbcan_tx_callback, m);
1273                         
1274                 set_bit(USBCAN_MESSAGE_FREE,&m->flags);
1275                 set_bit(USBCAN_MESSAGE_TYPE_TX,&m->flags);
1276                 list_add_tail(&m->list_node, &dev->tx_idle_list);
1277
1278         }
1279
1280         set_bit(USBCAN_THREAD_RUNNING,&dev->flags);
1281         set_bit(USBCAN_FREE_TX_URB,&dev->flags);
1282
1283         for (i=0;i<USBCAN_TOT_RX_URBS;i++){
1284                 struct usbcan_message *m;
1285                 m = list_first_entry(&dev->rx_ready_list, typeof(*m), list_node);
1286                 set_bit(USBCAN_MESSAGE_URB_PENDING,&m->flags);
1287                 usbcan_usb_message_move_list(dev, m, &dev->rx_pend_list);
1288
1289                 retval=usb_submit_urb(m->u, GFP_KERNEL);
1290                 if (retval){
1291                         CANMSG("%d. URB error %d\n",i,retval);
1292                         set_bit(USBCAN_ERROR,&dev->flags);
1293                         usbcan_usb_message_move_list(dev, m, &dev->rx_ready_list);
1294                         goto exit;
1295                 }
1296         }
1297         /* an endless loop in which we are doing our work */
1298         for(;;)
1299         {
1300                 /* We need to do a memory barrier here to be sure that
1301                 the flags are visible on all CPUs. */
1302                 mb();
1303                 /* fall asleep */
1304                 if (!can_kthread_should_stop() && !test_bit(USBCAN_TERMINATE,&dev->flags) && (usbcan_sleep_thread(dev)<0)){
1305                         break;
1306                 }
1307                 /* We need to do a memory barrier here to be sure that the flags are visible on all CPUs. */
1308                 mb();
1309
1310                 if (can_kthread_should_stop() || test_bit(USBCAN_TERMINATE,&dev->flags)){
1311                         break;
1312                 }
1313
1314                 clear_bit(USBCAN_DATA_OK,&dev->flags);
1315
1316                 mb();
1317
1318                 while(!list_empty(&dev->rx_ready_list)) {
1319                         struct usbcan_message *m;
1320                         m = list_first_entry(&dev->rx_ready_list, typeof(*m), list_node);
1321                         usbcan_kthread_read_handler(dev, m, obj);
1322                 }
1323
1324                 while(!list_empty(&dev->tx_ready_list)) {
1325                         struct usbcan_message *m;
1326                         m = list_first_entry(&dev->tx_ready_list, typeof(*m), list_node);
1327                         usbcan_kthread_write_handler(dev, m, obj);
1328                 }
1329
1330                 if (test_and_clear_bit(USBCAN_TX_PENDING,&dev->flags)) {
1331                         usbcan_kthread_write_request_handler(dev, obj);
1332                 }
1333         }
1334
1335         set_bit(USBCAN_TERMINATE,&dev->flags);
1336 exit:
1337
1338         usbcan_kthread_free_urbs(dev);
1339         clear_bit(USBCAN_THREAD_RUNNING,&dev->flags);
1340
1341         CANMSG ("usbcan thread finished!\n");
1342         return 0;
1343 error:
1344         /* cleanup the thread, leave */
1345         usbcan_kthread_free_urbs(dev);
1346
1347         CANMSG ("kernel thread terminated!\n");
1348         return -ENOMEM;
1349 }
1350
1351 static int usbcan_probe(struct usb_interface *interface, const struct usb_device_id *id)
1352 {
1353         struct usbcan_devs *usbdevs=NULL;
1354         struct usb_host_interface *iface_desc;
1355         struct usb_endpoint_descriptor *endpoint;
1356         size_t buffer_size;
1357         int i,j,k;
1358         int retval = -ENOMEM;
1359
1360         iface_desc = interface->cur_altsetting;
1361         if (iface_desc->desc.bNumEndpoints % 2){
1362                 CANMSG("Endpoint count must be even");
1363                 goto noalloc;
1364         }
1365
1366         usbcan_chip_count = iface_desc->desc.bNumEndpoints / 2;
1367
1368         usbdevs = (struct usbcan_devs *) can_checked_malloc(sizeof(struct usbcan_devs));
1369         if (!usbdevs) {
1370                 goto noalloc;
1371         }
1372         memset(usbdevs, 0, sizeof(struct usbcan_devs));
1373
1374         usbdevs->count = usbcan_chip_count;
1375         usbdevs->udev = interface_to_usbdev(interface);
1376
1377         usbdevs->devs = (struct usbcan_usb **) can_checked_malloc(usbcan_chip_count * sizeof(struct usbcan_usb *));
1378         if (!usbdevs->devs) {
1379                 goto error;
1380         }
1381         memset(usbdevs->devs, 0, usbcan_chip_count * sizeof(struct usbcan_usb *));
1382
1383         for (j=0;j<usbcan_chip_count;j++){
1384                 struct usbcan_usb *dev;
1385                 int epnum=-1,was;
1386
1387                 /* allocate memory for our device state and initialize it */
1388                 usbdevs->devs[j] = (struct usbcan_usb *) can_checked_malloc(sizeof(struct usbcan_usb));
1389                 if (!usbdevs->devs[j]) {
1390                         goto error;
1391                 }
1392                 memset(usbdevs->devs[j], 0, sizeof(struct usbcan_usb));
1393                 dev=usbdevs->devs[j];
1394                 spin_lock_init(&dev->list_lock);
1395
1396                 mutex_init(&dev->io_mutex);
1397                 init_waitqueue_head(&dev->queue);
1398                 dev->udev = usbdevs->udev;
1399                 dev->interface = interface;
1400
1401                 /* set up the endpoint information */
1402                 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
1403                         endpoint = &iface_desc->endpoint[i].desc;
1404
1405                         if (epnum==-1){
1406                                 was=0;
1407                                 for (k=0;k<j;k++){
1408                                         if ((usbdevs->devs[k]->bulk_in_endpointAddr & USB_ENDPOINT_NUMBER_MASK) == (endpoint->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK))
1409                                                 was=1;
1410                                 }
1411                                 if (was) continue;
1412                                 epnum=endpoint->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
1413                         }
1414
1415                         if (!dev->bulk_in_endpointAddr &&
1416                                         usb_endpoint_is_bulk_in(endpoint)) {
1417                                 if (epnum == (endpoint->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK)){
1418                                         /* we found a bulk in endpoint */
1419                                         buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1420                                         dev->bulk_in_size = buffer_size;
1421                                         dev->bulk_in_endpointAddr = endpoint->bEndpointAddress;
1422                                         dev->bulk_in_buffer = can_checked_malloc(buffer_size);
1423                                         if (!dev->bulk_in_buffer) {
1424                                                 CANMSG("Could not allocate bulk_in_buffer");
1425                                                 goto error;
1426                                         }
1427                                 }
1428                         }
1429
1430                         if (!dev->bulk_out_endpointAddr &&
1431                                         usb_endpoint_is_bulk_out(endpoint)) {
1432                                 if (epnum == (endpoint->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK)){
1433                                 /* we found a bulk out endpoint */
1434                                         dev->bulk_out_endpointAddr = endpoint->bEndpointAddress;
1435                                 }
1436                         }
1437
1438                 }
1439                 if (!(dev->bulk_in_endpointAddr && dev->bulk_out_endpointAddr)) {
1440                         CANMSG("Could not find all bulk-in and bulk-out endpoints for chip %d",j);
1441                         goto error;
1442                 }
1443         }
1444
1445         usb_get_dev(usbdevs->udev);
1446         
1447         /* save our data pointer in this interface device */
1448         usb_set_intfdata(interface, usbdevs);
1449
1450         usbdevs->candev=register_hotplug_dev("usbcan", usbcan_register_devs,(void *) usbdevs);
1451         if (!(usbdevs->candev)){
1452                 CANMSG("register_hotplug_dev() failed\n");
1453                 goto register_error;
1454         }
1455
1456         /* let the user know what node this device is now attached to */
1457         CANMSG("USBCAN device now attached\n");
1458         return 0;
1459
1460 register_error:
1461 //      cleanup_hotplug_dev(usbdevs->candev);
1462         usb_put_dev(usbdevs->udev);
1463 error:
1464         if (usbdevs){
1465                 if (usbdevs->devs){
1466                         for (j=0;j<usbdevs->count;j++){
1467                                 if (!usbdevs->devs[j])  continue;
1468
1469                                 if (usbdevs->devs[j]->bulk_in_buffer)
1470                                         can_checked_free(usbdevs->devs[j]->bulk_in_buffer);
1471                                 if (usbdevs->devs[j]->chip){
1472                                         usbdevs->devs[j]->chip->chip_data=NULL;
1473                                 }
1474                                 can_checked_free(usbdevs->devs[j]);
1475                         }
1476                         can_checked_free(usbdevs->devs);
1477                 }
1478                 can_checked_free(usbdevs);
1479         }
1480 noalloc:
1481         return retval;
1482 }
1483
1484 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10))
1485 void release_device(struct kref *refcount){
1486         struct candevice_t *candev = container_of(refcount,struct candevice_t,refcount);
1487 #else
1488 void release_device(struct candevice_t *candev){
1489 #endif
1490         struct usbcan_devs *usbdevs = (struct usbcan_devs *)candev->sysdevptr.anydev;
1491         int j;
1492         
1493         if (!usbdevs)
1494                 return;
1495         
1496         cleanup_hotplug_dev(usbdevs->candev);
1497
1498         if (usbdevs->devs){
1499                 /* Finally, release all structures in USB subsystem */
1500                 if (!usbdevs->udev)
1501                         panic("udev is already null on device release");
1502                 usb_put_dev(usbdevs->udev);
1503
1504                 for (j=0;j<usbdevs->count;j++){
1505                         if (!usbdevs->devs[j])  continue;
1506
1507                         if (usbdevs->devs[j]->bulk_in_buffer)
1508                                 can_checked_free(usbdevs->devs[j]->bulk_in_buffer);
1509                         can_checked_free(usbdevs->devs[j]);
1510                         usbdevs->devs[j]=NULL;
1511                 }
1512                 can_checked_free(usbdevs->devs);
1513         }
1514         can_checked_free(usbdevs);
1515
1516         CANMSG("USBCAN now disconnected\n");
1517 }
1518
1519 // Physically disconnected device
1520 static void usbcan_disconnect(struct usb_interface *interface)
1521 {
1522         struct usbcan_devs *usbdevs;
1523         int j;
1524
1525         /* prevent more I/O from starting */
1526         lock_kernel();
1527
1528         usbdevs = usb_get_intfdata(interface);
1529         if (usbdevs==NULL){
1530                 CANMSG("USBCAN device seems to be already removed\n");
1531                 unlock_kernel();
1532                 return;
1533         }
1534         usb_set_intfdata(interface, NULL);
1535         deregister_hotplug_dev(usbdevs->candev);
1536
1537         for (j=0;j<usbdevs->count;j++){
1538                 if (!usbdevs->devs[j])  continue;
1539                 mutex_lock(&usbdevs->devs[j]->io_mutex);
1540                 usbdevs->devs[j]->interface = NULL;
1541                 mutex_unlock(&usbdevs->devs[j]->io_mutex);
1542         }
1543
1544         unlock_kernel();
1545         
1546 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10))
1547         kref_put(&usbdevs->candev->refcount,release_device);
1548 #else
1549         release_device(&usbdevs->candev);
1550 #endif
1551 }
1552
1553 int usbcan_init(void){
1554         return usb_register(&usbcan_driver);
1555 }
1556
1557 void usbcan_exit(void){
1558         usb_deregister(&usbcan_driver);
1559 }