]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/usbcan.c
Change of parameter order in hotplug functions, more debug messages
[lincan.git] / lincan / src / usbcan.c
index 01d2f908bb47d1f59e90eca2406f7276c5aa5de3..a5e938a441993d83683b6e04acc3af6a2d884d07 100644 (file)
@@ -573,19 +573,20 @@ int usbcan_stop_chip(struct canchip_t *chip)
  *
  * File: src/usbcan.c
  */
-void usbcan_register_devs(struct canchip_t *chip,void *data){
+int usbcan_register_devs(struct canchip_t *chip,void *data){
        struct usbcan_devs *usbdevs=(struct usbcan_devs *)data;
        if (!usbdevs){
            CANMSG("Bad structure given\n");
-           return;
+           return -1;
        }
        if (chip->chip_idx>=usbdevs->count) {
            CANMSG("Requested chip number is bigger than chip count\n");
-           return;
+           return -1;
        }
 
        usbdevs->devs[chip->chip_idx]->chip=chip;
        chip->chip_data=(void *)usbdevs->devs[chip->chip_idx];
+       return 0;
 }
 
 /**
@@ -1213,6 +1214,12 @@ int usbcan_kthread(void *data)
        INIT_LIST_HEAD(&dev->tx_pend_list);
        INIT_LIST_HEAD(&dev->tx_ready_list);
 
+       if (1) {
+               struct sched_param param = { .sched_priority = 1 };
+               sched_setscheduler(current, SCHED_FIFO, &param);
+       }
+
+
        /* Prepare receive urbs  */
        for (i=0;i<USBCAN_TOT_RX_URBS;i++){
                struct usbcan_message *m;
@@ -1315,6 +1322,10 @@ int usbcan_kthread(void *data)
                        break;
                }
 
+               clear_bit(USBCAN_DATA_OK,&dev->flags);
+
+               mb();
+
                while(!list_empty(&dev->rx_ready_list)) {
                        struct usbcan_message *m;
                        m = list_first_entry(&dev->rx_ready_list, typeof(*m), list_node);
@@ -1449,7 +1460,7 @@ static int usbcan_probe(struct usb_interface *interface, const struct usb_device
        /* save our data pointer in this interface device */
        usb_set_intfdata(interface, usbdevs);
 
-       if (!(usbdevs->candev=register_usbdev("usbcan",(void *) usbdevs, usbcan_register_devs)))
+       if (!(usbdevs->candev=register_hotplug_dev("usbcan", usbcan_register_devs,(void *) usbdevs)))
                goto register_error;
 
        /* let the user know what node this device is now attached to */
@@ -1457,7 +1468,7 @@ static int usbcan_probe(struct usb_interface *interface, const struct usb_device
        return 0;
 
 register_error:
-       cleanup_usbdev(usbdevs->candev);
+       cleanup_hotplug_dev(usbdevs->candev);
 error:
        if (usbdevs){
                if (usbdevs->devs){
@@ -1497,7 +1508,7 @@ static void usbcan_disconnect(struct usb_interface *interface)
        if (usbdevs->devs){
                usb_put_dev((*usbdevs->devs)->udev);
        }
-       cleanup_usbdev(usbdevs->candev);
+       cleanup_hotplug_dev(usbdevs->candev);
        if (usbdevs->devs){
                for (j=0;j<usbdevs->count;j++){
                        if (!usbdevs->devs[j])  continue;