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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  scsi_module.c Copyright (1994, 1995) Eric Youngdale.
  3.  *
  4.  * Support for loading low-level scsi drivers using the linux kernel loadable
  5.  * module interface.
  6.  *
  7.  * To use, the host adapter should first define and initialize the variable
  8.  * driver_template (datatype Scsi_Host_Template), and then include this file.
  9.  * This should also be wrapped in a #ifdef MODULE/#endif.
  10.  *
  11.  * The low -level driver must also define a release function which will
  12.  * free any irq assignments, release any dma channels, release any I/O
  13.  * address space that might be reserved, and otherwise clean up after itself.
  14.  * The idea is that the same driver should be able to be reloaded without
  15.  * any difficulty.  This makes debugging new drivers easier, as you should
  16.  * be able to load the driver, test it, unload, modify and reload.
  17.  *
  18.  * One *very* important caveat.  If the driver may need to do DMA on the
  19.  * ISA bus, you must have unchecked_isa_dma set in the device template,
  20.  * even if this might be changed during the detect routine.  This is
  21.  * because the shpnt structure will be allocated in a special way so that
  22.  * it will be below the appropriate DMA limit - thus if your driver uses
  23.  * the hostdata field of shpnt, and the board must be able to access this
  24.  * via DMA, the shpnt structure must be in a DMA accessible region of
  25.  * memory.  This comment would be relevant for something like the buslogic
  26.  * driver where there are many boards, only some of which do DMA onto the
  27.  * ISA bus.  There is no convenient way of specifying whether the host
  28.  * needs to be in a ISA DMA accessible region of memory when you call
  29.  * scsi_register.
  30.  */
  31. #include <linux/module.h>
  32. #include <linux/init.h>
  33. static int __init init_this_scsi_driver(void)
  34. {
  35. driver_template.module = THIS_MODULE;
  36. scsi_register_module(MODULE_SCSI_HA, &driver_template);
  37. if (driver_template.present)
  38. return 0;
  39. scsi_unregister_module(MODULE_SCSI_HA, &driver_template);
  40. return -ENODEV;
  41. }
  42. static void __exit exit_this_scsi_driver(void)
  43. {
  44. scsi_unregister_module(MODULE_SCSI_HA, &driver_template);
  45. }
  46. module_init(init_this_scsi_driver);
  47. module_exit(exit_this_scsi_driver);
  48. /*
  49.  * Overrides for Emacs so that we almost follow Linus's tabbing style.
  50.  * Emacs will notice this stuff at the end of the file and automatically
  51.  * adjust the settings for this buffer only.  This must remain at the end
  52.  * of the file.
  53.  * ---------------------------------------------------------------------------
  54.  * Local variables:
  55.  * c-indent-level: 4
  56.  * c-brace-imaginary-offset: 0
  57.  * c-brace-offset: -4
  58.  * c-argdecl-indent: 4
  59.  * c-label-offset: -4
  60.  * c-continued-statement-offset: 4
  61.  * c-continued-brace-offset: 0
  62.  * indent-tabs-mode: nil
  63.  * tab-width: 8
  64.  * End:
  65.  */