From: ppisa Date: Mon, 5 Jun 2006 00:55:45 +0000 (+0000) Subject: Unified module parameters style to new one for 2.6.x kernels. X-Git-Tag: CLT_COMM_CAN_pre_ul_log_introduction~5 X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/commitdiff_plain/fed27ce228698b4e0420639201209545bc1d0bd8 Unified module parameters style to new one for 2.6.x kernels. Old one style left for 2.4 kernels. This prevents error: Ignoring new-style parameters in presence of obsolete ones. Base board frequency specification moved to main.c and parameter unified under name "clockfreq". --- diff --git a/lincan/README b/lincan/README index 00f8768..7c6509e 100644 --- a/lincan/README +++ b/lincan/README @@ -276,7 +276,7 @@ options can be one of: - extended=[1|0], configures the driver to use extended message format. - pelican=[1|0], configures the driver to set the CAN chips into pelican mode. - baudrate=, sets the baudrate of the device(s) -- clock_freq=, the frequency of the CAN quartz +- clockfreq=, the frequency of the CAN quartz - stdmask=, sets the standard mask of the device - extmask=, sets the extended mask of the device - mo15mask=, sets the mask for message object 15 (i82527 only) diff --git a/lincan/include/main.h b/lincan/include/main.h index 99a493d..7baf67b 100644 --- a/lincan/include/main.h +++ b/lincan/include/main.h @@ -379,9 +379,10 @@ extern int major; extern int minor[MAX_TOT_CHIPS]; extern int extended; extern int baudrate[MAX_TOT_CHIPS]; -extern char *hw[MAX_HW_CARDS]; extern int irq[MAX_IRQ]; +extern char *hw[MAX_HW_CARDS]; extern unsigned long io[MAX_HW_CARDS]; +extern long clockfreq[MAX_HW_CARDS]; extern int processlocal; extern struct canhardware_t *hardware_p; diff --git a/lincan/src/bfadcan.c b/lincan/src/bfadcan.c index f6d831b..f04fe9f 100644 --- a/lincan/src/bfadcan.c +++ b/lincan/src/bfadcan.c @@ -23,8 +23,7 @@ #define __NO_VERSION__ #include -long clock_freq; -MODULE_PARM(clock_freq,"i"); +#define CAN_BFAD_CLOCKFREQ 20000000 /* cli and sti are not allowed in 2.5.5x SMP kernels */ #ifdef WINDOWED_ACCESS @@ -197,7 +196,8 @@ int bfadcan_init_chip_data(struct candevice_t *candev, int chipnr) unsigned int id1, id2; sja1000p_fill_chipspecops(candev->chip[chipnr]); candev->chip[chipnr]->chip_base_addr=candev->io_addr; - candev->chip[chipnr]->clock = clock_freq; + if(candev->chip[chipnr]->clock<=0) + candev->chip[chipnr]->clock = CAN_BFAD_CLOCKFREQ; candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF; candev->chip[chipnr]->sja_ocr_reg = sjaOCR_MODE_NORMAL | sjaOCR_TX0_LH; id1 = inb(0xe284); diff --git a/lincan/src/main.c b/lincan/src/main.c index 0bbf365..2a55355 100644 --- a/lincan/src/main.c +++ b/lincan/src/main.c @@ -84,6 +84,7 @@ int baudrate[MAX_TOT_CHIPS]; char *hw[MAX_HW_CARDS]={NULL,}; int irq[MAX_IRQ]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; unsigned long io[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1}; +long clockfreq[MAX_HW_CARDS]; int stdmask=0; int extmask=0; int mo15mask=0; @@ -94,6 +95,7 @@ unsigned int baudrate_specified; unsigned int hw_specified; unsigned int irq_specified; unsigned int io_specified; +unsigned int clockfreq_specified; #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) /* Module parameters, some must be supplied at module loading time */ @@ -106,6 +108,7 @@ MODULE_PARM(baudrate, "1-" __MODULE_STRING(MAX_TOT_CHIPS_STR)"i"); MODULE_PARM(hw, "1-" __MODULE_STRING(MAX_HW_CARDS)"s"); MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_IRQ)"i"); MODULE_PARM(io, "1-" __MODULE_STRING(MAX_HW_CARDS)"i"); +MODULE_PARM(clockfreq, "1-" __MODULE_STRING(MAX_HW_CARDS)"i"); MODULE_PARM(stdmask, "1i"); MODULE_PARM(extmask, "1i"); MODULE_PARM(mo15mask, "1i"); @@ -119,7 +122,8 @@ module_param(pelican, int, 0); module_param_array(baudrate, int, &baudrate_specified, 0); module_param_array(hw, charp, &hw_specified, 0); module_param_array(irq, int, &irq_specified, 0); -module_param_array(io, int, &io_specified, 0); +module_param_array(io, ulong, &io_specified, 0); +module_param_array(clockfreq, long, &clockfreq_specified, 0); module_param(stdmask, int, 0); module_param(extmask, int, 0); module_param(mo15mask, int, 0); @@ -135,6 +139,7 @@ MODULE_PARM_DESC(baudrate,"baudrate for each channel in step of 1kHz"); MODULE_PARM_DESC(hw,"list of boards types to initialize - virtual,pip5,..."); MODULE_PARM_DESC(irq,"list of iterrupt signal numbers, most ISA has one per chip, no value for PCI or virtual"); MODULE_PARM_DESC(io,"IO address for each board, use 0 for PCI or virtual"); +MODULE_PARM_DESC(clockfreq,"base board clock source frequency in step of 1kHz"); MODULE_PARM_DESC(stdmask,"default standard mask for i82527 chips"); MODULE_PARM_DESC(extmask,"default extended mask for i82527 chips"); MODULE_PARM_DESC(mo15mask,"mask for communication object 15 of i82527 chips"); diff --git a/lincan/src/setup.c b/lincan/src/setup.c index ac83789..bce1226 100644 --- a/lincan/src/setup.c +++ b/lincan/src/setup.c @@ -16,7 +16,7 @@ int init_hwspecops(struct candevice_t *candev, int *irqnum_p); int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p); -int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate); +int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate, long clock); int init_obj_struct(struct candevice_t *candev, struct canchip_t *hostchip, int objnr); /** @@ -187,6 +187,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p) int chipnr; long bd; int irqsig=-1; + long clock; candev=(struct candevice_t *)can_checked_malloc(sizeof(struct candevice_t)); if (candev==NULL) @@ -202,6 +203,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p) candev->hwname=hw[card]; candev->io_addr=io[card]; candev->dev_base_addr=io[card]; + clock=clockfreq[card]; candev->hwspecops=(struct hwspecops_t *)can_checked_malloc(sizeof(struct hwspecops_t)); if (candev->hwspecops==NULL) @@ -224,7 +226,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p) bd=baudrate[*chan_param_idx_p+chipnr]; if(!bd) bd=baudrate[0]; - if ((ret=init_chip_struct(candev, chipnr, irqsig, bd*1000))) + if ((ret=init_chip_struct(candev, chipnr, irqsig, bd*1000, clock*1000))) goto error_chip; } @@ -270,6 +272,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p) * @chipnr: index of the chip in the corresponding device/board structure * @irq: chip IRQ number or (-1) if not appropriate * @baudrate: baudrate in the units of 1Bd + * @clock: optional chip base clock frequency in 1Hz step * * Chip structure is allocated and chip specific operations are filled by * call to board specific init_chip_data() which calls chip specific @@ -278,7 +281,7 @@ int init_device_struct(int card, int *chan_param_idx_p, int *irq_param_idx_p) * * Return Value: returns negative number in the case of fail */ -int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate) +int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudrate, long clock) { struct canchip_t *chip; int objnr; @@ -302,6 +305,7 @@ int init_chip_struct(struct candevice_t *candev, int chipnr, int irq, long baudr chip->hostdevice=candev; chip->chip_irq=irq; chip->baudrate=baudrate; + chip->clock=clock; chip->flags=0x0; if(candev->hwspecops->init_chip_data(candev,chipnr)<0) diff --git a/lincan/src/tscan1.c b/lincan/src/tscan1.c index 313f041..a48a93e 100644 --- a/lincan/src/tscan1.c +++ b/lincan/src/tscan1.c @@ -24,13 +24,8 @@ static CAN_DEFINE_SPINLOCK(ts7kv_win_lock); -long clock[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1}; -MODULE_PARM(clock, "1-" __MODULE_STRING(MAX_HW_CARDS)"i"); -MODULE_PARM_DESC(clock,"clock frequency for each board in step of 1kHz"); - -long tscanio[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1}; -MODULE_PARM(tscanio, "1-" __MODULE_STRING(MAX_HW_CARDS)"i"); -MODULE_PARM_DESC(tscanio,"TSCAN CAN controller IO address for each board"); +unsigned long tscanio[MAX_HW_CARDS]={-1,-1,-1,-1,-1,-1,-1,-1}; +unsigned int tscanio_specified; #if defined(TS7XXX_IO8_BASE)&&defined(TSXXX_BASE_IO) int tsxxx_base=TS7XXX_IO8_BASE+TSXXX_BASE_IO; @@ -39,10 +34,18 @@ int tsxxx_base=TS7XXX_IO8_BASE; #else /*TS7XXX_IO8_BASE*/ unsigned long tsxxx_base=0; #endif /*TS7XXX_IO8_BASE*/ + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) +MODULE_PARM(tscanio, "1-" __MODULE_STRING(MAX_HW_CARDS)"i"); MODULE_PARM(tsxxx_base, "1i"); +#else /* LINUX_VERSION_CODE >= 2,6,0 */ +module_param_array(tscanio, int, &tscanio_specified, 0); +module_param(tsxxx_base, ulong, 0); +#endif /* LINUX_VERSION_CODE >= 2,6,0 */ + +MODULE_PARM_DESC(tscanio,"TSCAN CAN controller IO address for each board"); MODULE_PARM_DESC(tsxxx_base,"The base of the ISA/8-bit IO space for TSxxx CAN peripherals in the system"); -unsigned short ts7kv_isused = 0x0; /** * tscan1_request_io: - reserve io or memory range for can board @@ -457,16 +460,10 @@ int ts7kv_init_hw_data(struct candevice_t *candev) */ int tscan1_init_chip_data(struct candevice_t *candev, int chipnr) { - unsigned long clk; + unsigned long default_clk = 16000 * 1000; int jmp; int irq = -1; - clk = clock[candev->candev_idx]; - if(!clk || (clk == -1)) - clk = 16000 * 1000; - else - clk *= 1000; - /* unused reset address is used to store jumper setting */ jmp = candev->res_addr; @@ -483,7 +480,8 @@ int tscan1_init_chip_data(struct candevice_t *candev, int chipnr) sja1000p_fill_chipspecops(candev->chip[chipnr]); - candev->chip[chipnr]->clock = clk; + if(candev->chip[chipnr]->clock <= 0) + candev->chip[chipnr]->clock = default_clk; candev->chip[chipnr]->int_clk_reg = 0x0; candev->chip[chipnr]->int_bus_reg = 0x0; candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF; @@ -499,16 +497,10 @@ int tscan1_init_chip_data(struct candevice_t *candev, int chipnr) int ts7kv_init_chip_data(struct candevice_t *candev, int chipnr) { - unsigned long clk; + unsigned long default_clk = 16000 * 1000; int jmp; int irq = -1; - clk = clock[candev->candev_idx]; - if(!clk || (clk == -1)) - clk = 24000 * 1000; - else - clk *= 1000; - /* unused reset address is used to store jumper setting */ jmp = candev->res_addr; @@ -526,7 +518,8 @@ int ts7kv_init_chip_data(struct candevice_t *candev, int chipnr) sja1000p_fill_chipspecops(candev->chip[chipnr]); - candev->chip[chipnr]->clock = clk; + if(candev->chip[chipnr]->clock <= 0) + candev->chip[chipnr]->clock = default_clk; candev->chip[chipnr]->int_clk_reg = 0x0; candev->chip[chipnr]->int_bus_reg = 0x0; candev->chip[chipnr]->sja_cdr_reg = sjaCDR_CBP | sjaCDR_CLK_OFF;