| /* |
| * Copyright (C) 1996, 1997 Claus-Justus Heine. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; see the file COPYING. If not, write to |
| the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |
| |
| * |
| * $Source: /homes/cvs/ftape-stacked/ftape/lowlevel/ftape-setup.c,v $ |
| * $Revision: 1.7 $ |
| * $Date: 1997/10/10 09:57:06 $ |
| * |
| * This file contains the code for processing the kernel command |
| * line options for the QIC-40/80/3010/3020 floppy-tape driver |
| * "ftape" for Linux. |
| */ |
| |
| #include <linux/string.h> |
| #include <linux/errno.h> |
| #include <linux/mm.h> |
| |
| #include <linux/ftape.h> |
| #include <linux/init.h> |
| #include "../lowlevel/ftape-tracing.h" |
| #include "../lowlevel/fdc-io.h" |
| |
| static struct param_table { |
| const char *name; |
| int *var; |
| int def_param; |
| int min; |
| int max; |
| } config_params[] __initdata = { |
| #ifndef CONFIG_FT_NO_TRACE_AT_ALL |
| { "tracing", &ftape_tracing, 3, ft_t_bug, ft_t_any}, |
| #endif |
| { "ioport", &ft_fdc_base, CONFIG_FT_FDC_BASE, 0x0, 0xfff}, |
| { "irq", &ft_fdc_irq, CONFIG_FT_FDC_IRQ, 2, 15}, |
| { "dma", &ft_fdc_dma, CONFIG_FT_FDC_DMA, 0, 3}, |
| { "threshold", &ft_fdc_threshold, CONFIG_FT_FDC_THR, 1, 16}, |
| { "datarate", &ft_fdc_rate_limit, CONFIG_FT_FDC_MAX_RATE, 500, 2000}, |
| { "fc10", &ft_probe_fc10, CONFIG_FT_PROBE_FC10, 0, 1}, |
| { "mach2", &ft_mach2, CONFIG_FT_MACH2, 0, 1} |
| }; |
| |
| static int __init ftape_setup(char *str) |
| { |
| int i; |
| int param; |
| int ints[2]; |
| |
| TRACE_FUN(ft_t_flow); |
| |
| str = get_options(str, ARRAY_SIZE(ints), ints); |
| if (str) { |
| for (i=0; i < NR_ITEMS(config_params); i++) { |
| if (strcmp(str,config_params[i].name) == 0){ |
| if (ints[0]) { |
| param = ints[1]; |
| } else { |
| param = config_params[i].def_param; |
| } |
| if (param < config_params[i].min || |
| param > config_params[i].max) { |
| TRACE(ft_t_err, |
| "parameter %s out of range %d ... %d", |
| config_params[i].name, |
| config_params[i].min, |
| config_params[i].max); |
| goto out; |
| } |
| if(config_params[i].var) { |
| TRACE(ft_t_info, "%s=%d", str, param); |
| *config_params[i].var = param; |
| } |
| goto out; |
| } |
| } |
| } |
| if (str) { |
| TRACE(ft_t_err, "unknown ftape option [%s]", str); |
| |
| TRACE(ft_t_err, "allowed options are:"); |
| for (i=0; i < NR_ITEMS(config_params); i++) { |
| TRACE(ft_t_err, " %s",config_params[i].name); |
| } |
| } else { |
| TRACE(ft_t_err, "botched ftape option"); |
| } |
| out: |
| TRACE_EXIT 1; |
| } |
| |
| __setup("ftape=", ftape_setup); |