X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/4ddb8468e0688f83f24fc041cfb62512ee45194a..4cf24de229090b1ab6279570a564d224e13dd706:/lincan/src/modparms.c diff --git a/lincan/src/modparms.c b/lincan/src/modparms.c new file mode 100644 index 0000000..6f9a0de --- /dev/null +++ b/lincan/src/modparms.c @@ -0,0 +1,185 @@ +/* mod_parms.c + * Linux CAN-bus device driver. + * Written by Arnaud Westenberg email:arnaud@wanadoo.nl + * This software is released under the GPL-License. + * Version 0.7 6 Aug 2001 + */ + + +#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/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; + + if ( (hw[0] == NULL) | (irq[0] == -1) | (io[0] == -1) ) { + CANMSG("You must supply your type of hardware, interrupt numbers and io address.\n"); + CANMSG("Example: # insmod can.o hw=pip5 irq=4 io=0x8000\n"); + 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 { + CANMSG("Sorry, hardware \"%s\" is currently not supported.\n",hw[i]); + return -EINVAL; + } + i++; + } + + /* Check wether the supplied number of io addresses is correct. */ + io_needed=i; + while ( (io[io_supplied] != -1) & (io_suppliednr_boards); + + while ( (hw[i] != NULL) & (i<=MAX_HW_CARDS-1) ) { + printk(KERN_ERR "\n"); + DEBUGMSG("Hardware : %s\n",hardware_p->candevice[i]->hwname); + DEBUGMSG("IO address : 0x%lx\n",hardware_p->candevice[i]->io_addr); + 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++) { + 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); + } + + + } + i++; + } + return 0; +}