X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/4cf24de229090b1ab6279570a564d224e13dd706..a6d355f1cf48f39eecb2f1bdead51817d1fd5989:/lincan/src/modparms.c diff --git a/lincan/src/modparms.c b/lincan/src/modparms.c index 6f9a0de..3c79a36 100644 --- a/lincan/src/modparms.c +++ b/lincan/src/modparms.c @@ -1,116 +1,43 @@ /* mod_parms.c * Linux CAN-bus device driver. * Written by Arnaud Westenberg email:arnaud@wanadoo.nl + * Rewritten for new CAN queues by Pavel Pisa - OCERA team member + * email:pisa@cmp.felk.cvut.cz * This software is released under the GPL-License. - * Version 0.7 6 Aug 2001 + * Version lincan-0.3 17 Jun 2004 */ -#include -#if defined (CONFIG_MODVERSIONS) && !defined (MODVERSIONS) -#define MODVERSIONS -#endif - -#if defined (MODVERSIONS) -#include -#endif - -#include "../.support" -#ifndef PIP -#define PIP 0 -#endif -#ifndef SMARTCAN -#define SMARTCAN 0 -#endif -#ifndef PCCAN -#define PCCAN 0 -#endif -#ifndef NSI -#define NSI 0 -#endif -#ifndef CC104 -#define CC104 0 -#endif -#ifndef AIM104 -#define AIM104 0 -#endif -#ifndef PCI03 -#define PCI03 0 -#endif -#ifndef PCM3680 -#define PCM3680 0 -#endif -#ifndef M437 -#define M437 0 -#endif -#ifndef PCCCAN -#define PCCCAN 0 -#endif -#ifndef SSV -#define SSV 0 -#endif -#ifndef TEMPLATE -#define TEMPLATE 0 -#endif - -#include -#include - +#include "../include/can.h" +#include "../include/can_sysdep.h" #include "../include/main.h" #include "../include/modparms.h" int parse_mod_parms(void) { int i=0,j=0,irq_needed=0,irq_supplied=0,io_needed=0,io_supplied=0,minor_needed=0,minor_supplied=0; + const struct boardtype_t *brp; - if ( (hw[0] == NULL) | (irq[0] == -1) | (io[0] == -1) ) { - CANMSG("You must supply your type of hardware, interrupt numbers and io address.\n"); + if ( (hw[0] == NULL) | (io[0] == -1) ) { + //CANMSG("You must supply your type of hardware, interrupt numbers and io address.\n"); + CANMSG("Autodetection works only for USB devices, supply your type of hardware for PCI devices \n"); CANMSG("Example: # insmod can.o hw=pip5 irq=4 io=0x8000\n"); - return -ENODEV; + //return -ENODEV; } while ( (hw[i] != NULL) && (i < MAX_HW_CARDS) ) { - if ( !strcmp(hw[i],"pip5") && PIP ) - irq_needed++; - else if (!strcmp(hw[i],"pip6") && PIP) - irq_needed++; - else if (!strcmp(hw[i],"smartcan") && SMARTCAN) - irq_needed++; - else if (!strcmp(hw[i],"pccan-q") && PCCAN) - irq_needed=irq_needed+4; - else if (!strcmp(hw[i],"pccan-f") && PCCAN) - irq_needed++; - else if (!strcmp(hw[i],"pccan-s") && PCCAN) - irq_needed++; - else if (!strcmp(hw[i],"pccan-d") && PCCAN) - irq_needed=irq_needed+2; - else if (!strcmp(hw[i],"nsican") && NSI) - irq_needed++; - else if (!strcmp(hw[i],"cc104") && CC104) - irq_needed++; - else if (!strcmp(hw[i],"aim104") && AIM104) - irq_needed++; - else if (!strcmp(hw[i],"pc-i03") && PCI03) - irq_needed++; - else if (!strcmp(hw[i],"pcm3680") && PCM3680) - irq_needed=irq_needed+2; - else if (!strcmp(hw[i],"m437") && M437) - irq_needed++; - else if (!strcmp(hw[i],"pcccan") && PCCCAN) - irq_needed++; - else if (!strcmp(hw[i],"ssv") && SSV) - irq_needed=irq_needed+2; - else if (!strcmp(hw[i],"template") && TEMPLATE); - else { + brp = boardtype_find(hw[i]); + if(!brp) { CANMSG("Sorry, hardware \"%s\" is currently not supported.\n",hw[i]); return -EINVAL; } + irq_needed += brp->irqnum; i++; } /* Check wether the supplied number of io addresses is correct. */ io_needed=i; - while ( (io[io_supplied] != -1) & (io_suppliedcandevice[i]->hwname); DEBUGMSG("IO address : 0x%lx\n",hardware_p->candevice[i]->io_addr); + DEBUGMSG("Nr. all chips : %d\n",hardware_p->candevice[i]->nr_all_chips); DEBUGMSG("Nr. of i82527 : %d\n",hardware_p->candevice[i]->nr_82527_chips); DEBUGMSG("Nr. of sja1000 : %d\n",hardware_p->candevice[i]->nr_sja1000_chips); - for (j=0; jcandevice[i]->nr_82527_chips+hardware_p->candevice[i]->nr_sja1000_chips; j++) { + for (j=0; jcandevice[i]->nr_all_chips; j++) { DEBUGMSG("Chip%d type : %s\n", j+1, hardware_p->candevice[i]->chip[j]->chip_type); DEBUGMSG("Chip base : 0x%lx\n",hardware_p->candevice[i]->chip[j]->chip_base_addr); DEBUGMSG("Interrupt : %d\n",hardware_p->candevice[i]->chip[j]->chip_irq); - if (!strcmp(hardware_p->candevice[i]->chip[j]->chip_type,"i82527")) { - for (k=0; k<15; k++) - DEBUGMSG("Obj%d: minor: %d base: 0x%lx\n",k,hardware_p->candevice[i]->chip[j]->msgobj[k]->minor,hardware_p->candevice[i]->chip[j]->msgobj[k]->obj_base_addr); - } - - if (!strcmp(hardware_p->candevice[i]->chip[j]->chip_type,"sja1000")) { - for (k=0; k<1; k++) - DEBUGMSG("Obj%d: minor: %d base: 0x%lx\n",k,hardware_p->candevice[i]->chip[j]->msgobj[k]->minor,hardware_p->candevice[i]->chip[j]->msgobj[k]->obj_base_addr); - } - + for (k=0; kcandevice[i]->chip[j]->max_objects; k++) + DEBUGMSG("Obj%d: minor: %d base: 0x%lx\n",k,hardware_p->candevice[i]->chip[j]->msgobj[k]->minor,hardware_p->candevice[i]->chip[j]->msgobj[k]->obj_base_addr); } i++;