diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-10-05 01:18:40 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-10-05 01:18:40 +0000 |
commit | 012bb3e61e5eced6c610f9e036372bf0c8def2d1 (patch) | |
tree | 87efc733f9b164e8c85c0336f92c8fb7eff6d183 /drivers/scsi/hosts.c | |
parent | 625a1589d3d6464b5d90b8a0918789e3afffd220 (diff) |
Merge with Linux 2.4.0-test9. Please check DECstation, I had a number
of rejects to fixup while integrating Linus patches. I also found
that this kernel will only boot SMP on Origin; the UP kernel freeze
soon after bootup with SCSI timeout messages. I commit this anyway
since I found that the last CVS versions had the same problem.
Diffstat (limited to 'drivers/scsi/hosts.c')
-rw-r--r-- | drivers/scsi/hosts.c | 771 |
1 files changed, 8 insertions, 763 deletions
diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c index ab934fb2d..b04de5a8a 100644 --- a/drivers/scsi/hosts.c +++ b/drivers/scsi/hosts.c @@ -11,6 +11,10 @@ * Jiffies wrap fixes (host->resetting), 3 Dec 1998 Andrea Arcangeli * Added QLOGIC QLA1280 SCSI controller kernel host support. * August 4, 1999 Fred Lewis, Intel DuPont + * + * Updated to reflect the new initialization scheme for the higher + * level of scsi drivers (sd/sr/st) + * September 17, 2000 Torben Mathiasen <tmm@image.dk> */ @@ -22,8 +26,6 @@ #define __NO_VERSION__ #include <linux/module.h> - -#include <linux/config.h> #include <linux/blk.h> #include <linux/kernel.h> #include <linux/string.h> @@ -36,361 +38,8 @@ #include <linux/unistd.h> #include "scsi.h" - -#ifndef NULL -#define NULL 0L -#endif - -#define HOSTS_C - #include "hosts.h" -#if defined(CONFIG_A4000T_SCSI) || \ - defined(CONFIG_WARPENGINE_SCSI) || \ - defined(CONFIG_A4091_SCSI) || \ - defined (CONFIG_GVP_TURBO_SCSI) || \ - defined (CONFIG_BLZ603EPLUS_SCSI) -#define AMIGA7XXCONFIG -#endif - -#ifdef AMIGA7XXCONFIG -#include "amiga7xx.h" -#endif - -#ifdef CONFIG_MVME16x_SCSI -#include "mvme16x.h" -#endif - -#ifdef CONFIG_BVME6000_SCSI -#include "bvme6000.h" -#endif - -#ifdef CONFIG_SCSI_SIM710 -#include "sim710.h" -#endif - -#ifdef CONFIG_A3000_SCSI -#include "a3000.h" -#endif - -#ifdef CONFIG_A2091_SCSI -#include "a2091.h" -#endif - -#ifdef CONFIG_GVP11_SCSI -#include "gvp11.h" -#endif - -#ifdef CONFIG_CYBERSTORM_SCSI -#include "cyberstorm.h" -#endif - -#ifdef CONFIG_CYBERSTORMII_SCSI -#include "cyberstormII.h" -#endif - -#ifdef CONFIG_BLZ2060_SCSI -#include "blz2060.h" -#endif - -#ifdef CONFIG_BLZ1230_SCSI -#include "blz1230.h" -#endif - -#ifdef CONFIG_FASTLANE_SCSI -#include "fastlane.h" -#endif - -#ifdef CONFIG_OKTAGON_SCSI -#include "oktagon_esp.h" -#endif - -#ifdef CONFIG_ATARI_SCSI -#include "atari_scsi.h" -#endif - -#if defined(CONFIG_MAC_SCSI) || defined(CONFIG_MAC_SCSI_OLD) -#include "mac_scsi.h" -#endif - -#ifdef CONFIG_SUN3_SCSI -#include "sun3_scsi.h" -#endif - -#ifdef CONFIG_SCSI_MAC_ESP -#include "mac_esp.h" -#endif - -#ifdef CONFIG_SCSI_ADVANSYS -#include "advansys.h" -#endif - -#ifdef CONFIG_SCSI_AHA152X -#include "aha152x.h" -#endif - -#ifdef CONFIG_SCSI_AHA1542 -#include "aha1542.h" -#endif - -#ifdef CONFIG_SCSI_AHA1740 -#include "aha1740.h" -#endif - -#ifdef CONFIG_SCSI_AIC7XXX -#include "aic7xxx.h" -#endif - -#ifdef CONFIG_SCSI_IPS -#include "ips.h" -#endif - -#ifdef CONFIG_SCSI_BUSLOGIC -#include "BusLogic.h" -#endif - -#ifdef CONFIG_SCSI_EATA_DMA -#include "eata_dma.h" -#endif - -#ifdef CONFIG_SCSI_EATA_PIO -#include "eata_pio.h" -#endif - -#ifdef CONFIG_SCSI_U14_34F -#include "u14-34f.h" -#endif - -#ifdef CONFIG_SCSI_FD_MCS -#include "fd_mcs.h" -#endif - -#ifdef CONFIG_SCSI_FUTURE_DOMAIN -#include "fdomain.h" -#endif - -#ifdef CONFIG_SCSI_GENERIC_NCR5380 -#include "g_NCR5380.h" -#endif - -#ifdef CONFIG_SCSI_IN2000 -#include "in2000.h" -#endif - -#ifdef CONFIG_SCSI_PAS16 -#include "pas16.h" -#endif - -#ifdef CONFIG_SCSI_QLOGIC_FAS -#include "qlogicfas.h" -#endif - -#ifdef CONFIG_SCSI_QLOGIC_ISP -#include "qlogicisp.h" -#endif - -#ifdef CONFIG_SCSI_QLOGIC_FC -#include "qlogicfc.h" -#endif - -#ifdef CONFIG_SCSI_QLOGIC_1280 -#include "qla1280.h" -#endif - -#ifdef CONFIG_SCSI_SEAGATE -#include "seagate.h" -#endif - -#ifdef CONFIG_SCSI_T128 -#include "t128.h" -#endif - -#ifdef CONFIG_SCSI_DMX3191D -#include "dmx3191d.h" -#endif - -#ifdef CONFIG_SCSI_DTC3280 -#include "dtc.h" -#endif - -#ifdef CONFIG_SCSI_NCR53C7xx -#include "53c7,8xx.h" -#endif - -#ifdef CONFIG_SCSI_SYM53C8XX -#include "sym53c8xx.h" -#endif - -#ifdef CONFIG_SCSI_NCR53C8XX -#include "ncr53c8xx.h" -#endif - -#ifdef CONFIG_SCSI_ULTRASTOR -#include "ultrastor.h" -#endif - -#ifdef CONFIG_SCSI_7000FASST -#include "wd7000.h" -#endif - -#ifdef CONFIG_SCSI_MCA_53C9X -#include "mca_53c9x.h" -#endif - -#ifdef CONFIG_SCSI_IBMMCA -#include "ibmmca.h" -#endif - -#ifdef CONFIG_SCSI_EATA -#include "eata.h" -#endif - -#ifdef CONFIG_SCSI_NCR53C406A -#include "NCR53c406a.h" -#endif - -#ifdef CONFIG_SCSI_SYM53C416 -#include "sym53c416.h" -#endif - -#ifdef CONFIG_SCSI_DC390T -#include "dc390.h" -#endif - -#ifdef CONFIG_SCSI_AM53C974 -#include "AM53C974.h" -#endif - -#ifdef CONFIG_SCSI_MEGARAID -#include "megaraid.h" -#endif - -#ifdef CONFIG_SCSI_ACARD -#include "atp870u.h" -#endif - -#ifdef CONFIG_SCSI_SUNESP -#include "esp.h" -#endif - -#ifdef CONFIG_SCSI_SGIWD93 -#include "sgiwd93.h" -#endif - -#ifdef CONFIG_SCSI_QLOGICPTI -#include "qlogicpti.h" -#endif - -#ifdef CONFIG_BLK_DEV_IDESCSI -#include "ide-scsi.h" -#endif - -#ifdef CONFIG_SCSI_MESH -#include "mesh.h" -#endif - -#ifdef CONFIG_SCSI_MAC53C94 -#include "mac53c94.h" -#endif - -#ifdef CONFIG_SCSI_GDTH -#include "gdth.h" -#endif - -#ifdef CONFIG_SCSI_PCI2000 -#include "pci2000.h" -#endif - -#ifdef CONFIG_SCSI_PCI2220I -#include "pci2220i.h" -#endif - -#ifdef CONFIG_SCSI_PSI240I -#include "psi240i.h" -#endif - -#ifdef CONFIG_SCSI_PLUTO -#include "pluto.h" -#endif - -#ifdef CONFIG_SCSI_INITIO -#include "ini9100u.h" -#endif - -#ifdef CONFIG_SCSI_INIA100 -#include "inia100.h" -#endif - -#ifdef CONFIG_SCSI_DEBUG -#include "scsi_debug.h" -#endif - -#ifdef CONFIG_SCSI_ACORNSCSI_3 -#include "../acorn/scsi/acornscsi.h" -#endif - -#ifdef CONFIG_SCSI_CUMANA_1 -#include "../acorn/scsi/cumana_1.h" -#endif - -#ifdef CONFIG_SCSI_CUMANA_2 -#include "../acorn/scsi/cumana_2.h" -#endif - -#ifdef CONFIG_SCSI_ECOSCSI -#include "../acorn/scsi/ecoscsi.h" -#endif - -#ifdef CONFIG_SCSI_OAK1 -#include "../acorn/scsi/oak.h" -#endif - -#ifdef CONFIG_SCSI_POWERTECSCSI -#include "../acorn/scsi/powertec.h" -#endif - -#ifdef CONFIG_SCSI_ARXESCSI -#include "../acorn/scsi/arxescsi.h" -#endif - -#ifdef CONFIG_I2O_SCSI -#include "../i2o/i2o_scsi.h" -#endif - -#ifdef CONFIG_JAZZ_ESP -#include "jazz_esp.h" -#endif - -#ifdef CONFIG_SCSI_DECNCR -#include "dec_esp.h" -#endif - -#ifdef CONFIG_SUN3X_ESP -#include "sun3x_esp.h" -#endif - -#ifdef CONFIG_IPHASE5526 -#include "../net/fc/iph5526_scsi.h" -#endif - -#ifdef CONFIG_BLK_DEV_3W_XXXX_RAID -#include "3w-xxxx.h" -#endif - -/* - * Moved ppa driver to the end of the probe list - * since it is a removable host adapter. - * This means the parallel ZIP drive will not bump - * the order of the /dev/sd devices - campbell@torque.net - */ -#ifdef CONFIG_SCSI_PPA -#include "ppa.h" -#endif - -#ifdef CONFIG_SCSI_IMM -#include "imm.h" -#endif - /* static const char RCSid[] = "$Header: /vger/u4/cvs/linux/drivers/scsi/hosts.c,v 1.20 1996/12/12 19:18:32 davem Exp $"; */ @@ -422,281 +71,6 @@ static const char RCSid[] = "$Header: /vger/u4/cvs/linux/drivers/scsi/hosts.c,v Scsi_Host_Template * scsi_hosts = NULL; -static Scsi_Host_Template builtin_scsi_hosts[] = -{ -#ifdef CONFIG_AMIGA -#ifdef AMIGA7XXCONFIG - AMIGA7XX_SCSI, -#endif -#ifdef CONFIG_A3000_SCSI - A3000_SCSI, -#endif -#ifdef CONFIG_A2091_SCSI - A2091_SCSI, -#endif -#ifdef CONFIG_GVP11_SCSI - GVP11_SCSI, -#endif -#ifdef CONFIG_CYBERSTORM_SCSI - SCSI_CYBERSTORM, -#endif -#ifdef CONFIG_CYBERSTORMII_SCSI - SCSI_CYBERSTORMII, -#endif -#ifdef CONFIG_BLZ2060_SCSI - SCSI_BLZ2060, -#endif -#ifdef CONFIG_BLZ1230_SCSI - SCSI_BLZ1230, -#endif -#ifdef CONFIG_FASTLANE_SCSI - SCSI_FASTLANE, -#endif -#ifdef CONFIG_OKTAGON_SCSI - SCSI_OKTAGON_ESP, -#endif -#endif - -#ifdef CONFIG_ATARI -#ifdef CONFIG_ATARI_SCSI - ATARI_SCSI, -#endif -#endif - -#ifdef CONFIG_MAC -#ifdef CONFIG_MAC_SCSI_OLD - MAC_SCSI, -#endif -#ifdef CONFIG_SCSI_MAC_ESP - SCSI_MAC_ESP, -#endif -#ifdef CONFIG_MAC_SCSI - MAC_NCR5380, -#endif -#endif - -#ifdef CONFIG_SUN3_SCSI - SUN3_NCR5380, -#endif - -#ifdef CONFIG_MVME16x_SCSI - MVME16x_SCSI, -#endif -#ifdef CONFIG_BVME6000_SCSI - BVME6000_SCSI, -#endif -#ifdef CONFIG_SCSI_SIM710 - SIM710_SCSI, -#endif -#ifdef CONFIG_SCSI_ADVANSYS - ADVANSYS, -#endif - -#ifdef CONFIG_SCSI_PCI2000 - PCI2000, -#endif -#ifdef CONFIG_SCSI_PCI2220I - PCI2220I, -#endif -#ifdef CONFIG_SCSI_PSI240I - PSI240I, -#endif - -/* BusLogic must come before aha1542.c */ -#ifdef CONFIG_SCSI_BUSLOGIC - BUSLOGIC, -#endif -#ifdef CONFIG_SCSI_U14_34F - ULTRASTOR_14_34F, -#endif -#ifdef CONFIG_SCSI_ULTRASTOR - ULTRASTOR_14F, -#endif -#ifdef CONFIG_SCSI_AHA152X - AHA152X, -#endif -#ifdef CONFIG_SCSI_AHA1542 - AHA1542, -#endif -#ifdef CONFIG_SCSI_AHA1740 - AHA1740, -#endif -#ifdef CONFIG_SCSI_AIC7XXX - AIC7XXX, -#endif -#ifdef CONFIG_SCSI_IPS - IPS, -#endif -#ifdef CONFIG_SCSI_FD_MCS - FD_MCS, -#endif -#ifdef CONFIG_SCSI_FUTURE_DOMAIN - FDOMAIN_16X0, -#endif -#ifdef CONFIG_SCSI_IN2000 - IN2000, -#endif -#ifdef CONFIG_SCSI_GENERIC_NCR5380 - GENERIC_NCR5380, -#endif -#ifdef CONFIG_SCSI_NCR53C406A /* 53C406A should come before QLOGIC */ - NCR53c406a, -#endif -#ifdef CONFIG_SCSI_SYM53C416 - SYM53C416, -#endif -#ifdef CONFIG_SCSI_QLOGIC_FAS - QLOGICFAS, -#endif -#ifdef CONFIG_SCSI_QLOGIC_ISP - QLOGICISP, -#endif -#ifdef CONFIG_SCSI_QLOGIC_FC - QLOGICFC, -#endif -#ifdef CONFIG_SCSI_QLOGIC_1280 - QLA1280_LINUX_TEMPLATE, -#endif -#ifdef CONFIG_SCSI_PAS16 - MV_PAS16, -#endif -#ifdef CONFIG_SCSI_SEAGATE - SEAGATE_ST0X, -#endif -#ifdef CONFIG_SCSI_T128 - TRANTOR_T128, -#endif -#ifdef CONFIG_SCSI_DMX3191D - DMX3191D, -#endif -#ifdef CONFIG_SCSI_DTC3280 - DTC3x80, -#endif -#ifdef CONFIG_SCSI_NCR53C7xx - NCR53c7xx, -#endif -#ifdef CONFIG_SCSI_SYM53C8XX - SYM53C8XX, -#endif -#ifdef CONFIG_SCSI_NCR53C8XX - NCR53C8XX, -#endif -#ifdef CONFIG_SCSI_EATA_DMA - EATA_DMA, -#endif -#ifdef CONFIG_SCSI_EATA_PIO - EATA_PIO, -#endif -#ifdef CONFIG_SCSI_7000FASST - WD7000, -#endif -#ifdef CONFIG_SCSI_MCA_53C9X - MCA_53C9X, -#endif -#ifdef CONFIG_SCSI_IBMMCA - IBMMCA, -#endif -#ifdef CONFIG_SCSI_EATA - EATA, -#endif -#ifdef CONFIG_SCSI_DC390T - DC390_T, -#endif -#ifdef CONFIG_SCSI_AM53C974 - AM53C974, -#endif -#ifdef CONFIG_SCSI_MEGARAID - MEGARAID, -#endif -#ifdef CONFIG_SCSI_ACARD - ATP870U, -#endif -#ifdef CONFIG_SCSI_SUNESP - SCSI_SPARC_ESP, -#endif -#ifdef CONFIG_SCSI_GDTH - GDTH, -#endif -#ifdef CONFIG_SCSI_INITIO - INI9100U, -#endif -#ifdef CONFIG_SCSI_INIA100 - INIA100, -#endif -#ifdef CONFIG_SCSI_QLOGICPTI - QLOGICPTI, -#endif -#ifdef CONFIG_BLK_DEV_IDESCSI - IDESCSI, -#endif -#ifdef CONFIG_SCSI_MESH - SCSI_MESH, -#endif -#ifdef CONFIG_SCSI_MAC53C94 - SCSI_MAC53C94, -#endif -#ifdef CONFIG_SCSI_PLUTO - PLUTO, -#endif -#ifdef CONFIG_ARCH_ACORN -#ifdef CONFIG_SCSI_ACORNSCSI_3 - ACORNSCSI_3, -#endif -#ifdef CONFIG_SCSI_CUMANA_1 - CUMANA_NCR5380, -#endif -#ifdef CONFIG_SCSI_CUMANA_2 - CUMANA_FAS216, -#endif -#ifdef CONFIG_SCSI_ARXESCSI - ARXEScsi, -#endif -#ifdef CONFIG_SCSI_ECOSCSI - ECOSCSI_NCR5380, -#endif -#ifdef CONFIG_SCSI_OAK1 - OAK_NCR5380, -#endif -#ifdef CONFIG_SCSI_POWERTECSCSI - POWERTECSCSI, -#endif -#endif -#ifdef CONFIG_IPHASE5526 - IPH5526_SCSI_FC, -#endif -#ifdef CONFIG_SCSI_DECNCR - SCSI_DEC_ESP, -#endif -#ifdef CONFIG_BLK_DEV_3W_XXXX_RAID - TWXXXX, -#endif -/* Put I2O last so that host specific controllers always win */ -#ifdef CONFIG_I2O_SCSI - I2OSCSI, -#endif -/* "Removable host adapters" below this line (Parallel Port/USB/other) */ -#ifdef CONFIG_SCSI_PPA - PPA, -#endif -#ifdef CONFIG_SCSI_IMM - IMM, -#endif -#ifdef CONFIG_SCSI_SGIWD93 - SGIWD93_SCSI, -#endif -#ifdef CONFIG_JAZZ_ESP - SCSI_JAZZ_ESP, -#endif -#ifdef CONFIG_SUN3X_ESP - SCSI_SUN3X_ESP, -#endif -#ifdef CONFIG_SCSI_DEBUG - SCSI_DEBUG, -#endif -}; - -#define MAX_SCSI_HOSTS (sizeof(builtin_scsi_hosts) / sizeof(Scsi_Host_Template)) - /* * Our semaphores and timeout counters, where size depends on @@ -771,12 +145,12 @@ struct Scsi_Host * scsi_register(Scsi_Host_Template * tpnt, int j){ hname = (tpnt->proc_name) ? tpnt->proc_name : ""; hname_len = strlen(hname); for (shn = scsi_host_no_list;shn;shn = shn->next) { - if (!(shn->host_registered) && shn->loaded_as_module && + if (!(shn->host_registered) && (hname_len > 0) && (0 == strncmp(hname, shn->name, hname_len))) { flag_new = 0; retval->host_no = shn->host_no; shn->host_registered = 1; - shn->loaded_as_module = scsi_loadable_module_flag; + shn->loaded_as_module = 1; break; } } @@ -785,7 +159,7 @@ struct Scsi_Host * scsi_register(Scsi_Host_Template * tpnt, int j){ retval->host_failed = 0; if(j > 0xffff) panic("Too many extra bytes requested\n"); retval->extra_bytes = j; - retval->loaded_as_module = scsi_loadable_module_flag; + retval->loaded_as_module = 1; if (flag_new) { shn = (Scsi_Host_Name *) kmalloc(sizeof(Scsi_Host_Name), GFP_ATOMIC); shn->name = kmalloc(hname_len + 1, GFP_ATOMIC); @@ -794,7 +168,7 @@ struct Scsi_Host * scsi_register(Scsi_Host_Template * tpnt, int j){ shn->name[hname_len] = 0; shn->host_no = max_scsi_hosts++; shn->host_registered = 1; - shn->loaded_as_module = scsi_loadable_module_flag; + shn->loaded_as_module = 1; shn->next = NULL; if (scsi_host_no_list) { for (shn2 = scsi_host_no_list;shn2->next;shn2 = shn2->next) @@ -890,135 +264,6 @@ scsi_register_device(struct Scsi_Device_Template * sdpnt) } /* - * Why is this a separate function? Because the kernel_thread code - * effectively does a fork, and there is a builtin exit() call when - * the child returns. The difficulty is that scsi_init() is - * marked __init, which means the memory is unmapped after bootup - * is complete, which means that the thread's exit() call gets wiped. - * - * The lesson is to *NEVER*, *NEVER* call kernel_thread() from an - * __init function, if that function could ever return. - */ -static void launch_error_handler_thread(struct Scsi_Host * shpnt) -{ - DECLARE_MUTEX_LOCKED(sem); - - shpnt->eh_notify = &sem; - - kernel_thread((int (*)(void *))scsi_error_handler, - (void *) shpnt, 0); - - /* - * Now wait for the kernel error thread to initialize itself - * as it might be needed when we scan the bus. - */ - down (&sem); - shpnt->eh_notify = NULL; -} - -unsigned int __init scsi_init(void) -{ - static int called = 0; - int i, pcount; - unsigned long flags; - Scsi_Host_Template * tpnt; - struct Scsi_Host * shpnt; - const char * name; - - if(called) return 0; - - called = 1; - for (tpnt = &builtin_scsi_hosts[0], i = 0; i < MAX_SCSI_HOSTS; ++i, tpnt++) - { - /* - * Initialize our semaphores. -1 is interpreted to mean - * "inactive" - where as 0 will indicate a time out condition. - */ - - pcount = next_scsi_host; - if (tpnt->detect) { - - /* The detect routine must carefully spinunlock/spinlock if - it enables interrupts, since all interrupt handlers do - spinlock as well. - All lame drivers are going to fail due to the following - spinlock. For the time beeing let's use it only for drivers - using the new scsi code. NOTE: the detect routine could - redefine the value tpnt->use_new_eh_code. (DB, 13 May 1998) */ - - if (tpnt->use_new_eh_code) { - spin_lock_irqsave(&io_request_lock, flags); - tpnt->present = tpnt->detect(tpnt); - spin_unlock_irqrestore(&io_request_lock, flags); - } - else - tpnt->present = tpnt->detect(tpnt); - - } - - if (tpnt->detect && tpnt->present) - { - /* The only time this should come up is when people use - * some kind of patched driver of some kind or another. */ - if(pcount == next_scsi_host) { - if(tpnt->present > 1) - panic("Failure to register low-level scsi driver"); - /* The low-level driver failed to register a driver. We - * can do this now. */ - scsi_register(tpnt,0); - } - tpnt->next = scsi_hosts; - scsi_hosts = tpnt; - - /* Add the driver to /proc/scsi */ -#if CONFIG_PROC_FS - build_proc_dir_entries(tpnt); -#endif - } - } - - for(shpnt=scsi_hostlist; shpnt; shpnt = shpnt->next) - { - if(shpnt->hostt->info) - name = shpnt->hostt->info(shpnt); - else - name = shpnt->hostt->name; - printk ("scsi%d : %s\n", /* And print a little message */ - shpnt->host_no, name); - - /* - * Now start the error recovery thread for the host. - */ - if( shpnt->hostt->use_new_eh_code ) - { - launch_error_handler_thread(shpnt); - } - } - - printk ("scsi : %d host%s.\n", next_scsi_host, - (next_scsi_host == 1) ? "" : "s"); - - /* Now attach the high level drivers */ -#ifdef CONFIG_BLK_DEV_SD - scsi_register_device(&sd_template); -#endif -#ifdef CONFIG_BLK_DEV_SR - scsi_register_device(&sr_template); -#endif -#ifdef CONFIG_CHR_DEV_ST - scsi_register_device(&st_template); -#endif -#ifdef CONFIG_CHR_DEV_SG - scsi_register_device(&sg_template); -#endif - -#if 0 - max_scsi_hosts = next_scsi_host; -#endif - return 0; -} - -/* * Overrides for Emacs so that we follow Linus's tabbing style. * Emacs will notice this stuff at the end of the file and automatically * adjust the settings for this buffer only. This must remain at the end |