From: Bc. Jan Kriz Date: Tue, 22 Mar 2011 09:23:57 +0000 (+0100) Subject: Change of parameter order in hotplug functions, more debug messages X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/commitdiff_plain/c3adf4f9af7ee68df8bb65fafa4dbcbdcc4895ba Change of parameter order in hotplug functions, more debug messages added --- diff --git a/lincan/include/main.h b/lincan/include/main.h index 152af5c..01f8739 100644 --- a/lincan/include/main.h +++ b/lincan/include/main.h @@ -538,5 +538,5 @@ void can_filltimestamp(canmsg_tstamp_t *ptimestamp) extern int can_rtl_priority; #endif /*CAN_WITH_RTL*/ -extern struct candevice_t* register_hotplug_dev(const char *hwname,void *devdata,void (*chipdataregfnc)(struct canchip_t *chip,void *data)); +extern struct candevice_t* register_hotplug_dev(const char *hwname,int (*chipdataregfnc)(struct canchip_t *chip,void *data),void *devdata); extern void cleanup_hotplug_dev(struct candevice_t *dev); diff --git a/lincan/src/main.c b/lincan/src/main.c index c364895..8018b58 100644 --- a/lincan/src/main.c +++ b/lincan/src/main.c @@ -396,7 +396,7 @@ int init_module(void) res = usbcan_init(); if (res){ CANMSG("usb_register for usbcan failed. Error number %d.\n", res); - return -ENODEV; + goto memory_error; } #endif @@ -441,8 +441,7 @@ int init_module(void) - -struct candevice_t* register_hotplug_dev(const char *hwname,void *devdata,void (*chipdataregfnc)(struct canchip_t *ch,void *data)){ +struct candevice_t* register_hotplug_dev(const char *hwname,int (*chipdataregfnc)(struct canchip_t *ch,void *data),void *devdata){ int i=0, j, board=0; struct candevice_t *candev; struct canchip_t *chip; @@ -456,11 +455,11 @@ struct candevice_t* register_hotplug_dev(const char *hwname,void *devdata,void ( } brp = boardtype_find(hwname); if(!brp) { - CANMSG("Sorry, hardware \"%s\" is currently not supported.\n",hw[board]); + CANMSG("Sorry, hardware \"%s\" is currently not supported.\n",hwname); return NULL; } if (board==MAX_HW_CARDS){ - CANMSG("Device \"%s\" could not be registered due to internal limits.\n",hw[board]); + CANMSG("Device \"%s\" could not be registered due to internal limits.\n",hwname); return NULL; } hw[board]=brp->boardtype; @@ -488,7 +487,10 @@ struct candevice_t* register_hotplug_dev(const char *hwname,void *devdata,void ( if((chip=candev->chip[j])==NULL) continue; - chipdataregfnc(chip,devdata); + if (chipdataregfnc && devdata){ + if (chipdataregfnc(chip,devdata)) + goto interrupt_error; + } if(chip->chipspecops->attach_to_chip(chip)<0) { CANMSG("Initial attach to the chip HW failed\n"); @@ -584,8 +586,8 @@ struct candevice_t* register_hotplug_dev(const char *hwname,void *devdata,void ( #endif /*CAN_WITH_RTL*/ // register_error: - if ( can_del_mem_list() ) - CANMSG("Error deallocating memory\n"); +// if ( can_del_mem_list() ) +// CANMSG("Error deallocating memory\n"); return NULL; } @@ -597,6 +599,7 @@ void cleanup_hotplug_dev(struct candevice_t *dev) if (!dev) return; + DEBUGMSG("Cleaning up hotplug device.\n"); #ifdef CONFIG_PROC_FS if (can_delete_procentry(dev)) @@ -650,9 +653,11 @@ void cleanup_module(void) #endif #if defined(CONFIG_OC_LINCAN_CARD_usbcan) + DEBUGMSG("Unregistering usbcan.\n"); usbcan_exit(); #endif + DEBUGMSG("Continuing with coldplug cleanup.\n"); #ifdef CONFIG_PROC_FS if (can_delete_procdir()) CANMSG("Error unregistering /proc/can entry.\n"); @@ -692,6 +697,8 @@ void cleanup_module(void) canqueue_rtl_done(); #endif /*CAN_WITH_RTL*/ + DEBUGMSG("Can hardware cleanup done, freeing memory.\n"); + if ( can_del_mem_list() ) CANMSG("Error deallocating memory\n"); diff --git a/lincan/src/usbcan.c b/lincan/src/usbcan.c index 4492f61..a5e938a 100644 --- a/lincan/src/usbcan.c +++ b/lincan/src/usbcan.c @@ -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; } /** @@ -1459,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_hotplug_dev("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 */