ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / char / ftape / lowlevel / ftape-setup.c
1 /* 
2  * Copyright (C) 1996, 1997 Claus-Justus Heine.
3
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2, or (at your option)
7  any later version.
8
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  GNU General Public License for more details.
13
14  You should have received a copy of the GNU General Public License
15  along with this program; see the file COPYING.  If not, write to
16  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
17
18  *
19  * $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/ftape-setup.c,v $
20  * $Revision: 1.7 $
21  * $Date: 1997/10/10 09:57:06 $
22  *
23  *      This file contains the code for processing the kernel command
24  *      line options for the QIC-40/80/3010/3020 floppy-tape driver
25  *      "ftape" for Linux.
26  */
27
28 #include <linux/config.h>
29 #include <linux/string.h>
30 #include <linux/errno.h>
31 #include <linux/mm.h>
32
33 #include <linux/ftape.h>
34 #include <linux/init.h>
35 #include "../lowlevel/ftape-tracing.h"
36 #include "../lowlevel/fdc-io.h"
37
38 static struct param_table {
39         const char *name;
40         int *var;
41         int def_param;
42         int min;
43         int max;
44 } config_params[] __initdata = {
45 #ifndef CONFIG_FT_NO_TRACE_AT_ALL
46         { "tracing",   &ftape_tracing,     3,              ft_t_bug, ft_t_any},
47 #endif
48         { "ioport",    &ft_fdc_base,       CONFIG_FT_FDC_BASE,     0x0, 0xfff},
49         { "irq",       &ft_fdc_irq,        CONFIG_FT_FDC_IRQ,        2,    15},
50         { "dma",       &ft_fdc_dma,        CONFIG_FT_FDC_DMA,        0,     3},
51         { "threshold", &ft_fdc_threshold,  CONFIG_FT_FDC_THR,         1,    16},
52         { "datarate",  &ft_fdc_rate_limit, CONFIG_FT_FDC_MAX_RATE, 500,  2000},
53         { "fc10",      &ft_probe_fc10,     CONFIG_FT_PROBE_FC10,     0,     1},
54         { "mach2",     &ft_mach2,          CONFIG_FT_MACH2,          0,     1}
55 };
56
57 static int __init ftape_setup(char *str)
58 {
59         int i;
60         int param;
61         int ints[2];
62
63         TRACE_FUN(ft_t_flow);
64
65         str = get_options(str, ARRAY_SIZE(ints), ints);
66         if (str) {
67                 for (i=0; i < NR_ITEMS(config_params); i++) {
68                         if (strcmp(str,config_params[i].name) == 0){
69                                 if (ints[0]) {
70                                         param = ints[1];
71                                 } else {
72                                         param = config_params[i].def_param;
73                                 }
74                                 if (param < config_params[i].min ||
75                                     param > config_params[i].max) {
76                                         TRACE(ft_t_err,
77                                         "parameter %s out of range %d ... %d",
78                                               config_params[i].name,
79                                               config_params[i].min,
80                                               config_params[i].max);
81                                         goto out;
82                                 }
83                                 if(config_params[i].var) {
84                                         TRACE(ft_t_info, "%s=%d", str, param);
85                                         *config_params[i].var = param;
86                                 }
87                                 goto out;
88                         }
89                 }
90         }
91         if (str) {
92                 TRACE(ft_t_err, "unknown ftape option [%s]", str);
93                 
94                 TRACE(ft_t_err, "allowed options are:");
95                 for (i=0; i < NR_ITEMS(config_params); i++) {
96                         TRACE(ft_t_err, " %s",config_params[i].name);
97                 }
98         } else {
99                 TRACE(ft_t_err, "botched ftape option");
100         }
101  out:
102         TRACE_EXIT 1;
103 }
104
105 __setup("ftape=", ftape_setup);