ftape-setup.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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