scsi.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:81k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  scsi.c Copyright (C) 1992 Drew Eckhardt
  3.  *         Copyright (C) 1993, 1994, 1995, 1999 Eric Youngdale
  4.  *
  5.  *  generic mid-level SCSI driver
  6.  *      Initial versions: Drew Eckhardt
  7.  *      Subsequent revisions: Eric Youngdale
  8.  *
  9.  *  <drew@colorado.edu>
  10.  *
  11.  *  Bug correction thanks go to :
  12.  *      Rik Faith <faith@cs.unc.edu>
  13.  *      Tommy Thorn <tthorn>
  14.  *      Thomas Wuensche <tw@fgb1.fgb.mw.tu-muenchen.de>
  15.  *
  16.  *  Modified by Eric Youngdale eric@andante.org or ericy@gnu.ai.mit.edu to
  17.  *  add scatter-gather, multiple outstanding request, and other
  18.  *  enhancements.
  19.  *
  20.  *  Native multichannel, wide scsi, /proc/scsi and hot plugging
  21.  *  support added by Michael Neuffer <mike@i-connect.net>
  22.  *
  23.  *  Added request_module("scsi_hostadapter") for kerneld:
  24.  *  (Put an "alias scsi_hostadapter your_hostadapter" in /etc/modules.conf)
  25.  *  Bjorn Ekwall  <bj0rn@blox.se>
  26.  *  (changed to kmod)
  27.  *
  28.  *  Major improvements to the timeout, abort, and reset processing,
  29.  *  as well as performance modifications for large queue depths by
  30.  *  Leonard N. Zubkoff <lnz@dandelion.com>
  31.  *
  32.  *  Converted cli() code to spinlocks, Ingo Molnar
  33.  *
  34.  *  Jiffies wrap fixes (host->resetting), 3 Dec 1998 Andrea Arcangeli
  35.  *
  36.  *  out_of_space hacks, D. Gilbert (dpg) 990608
  37.  */
  38. #define REVISION "Revision: 1.00"
  39. #define VERSION "Id: scsi.c 1.00 2000/09/26"
  40. #include <linux/config.h>
  41. #include <linux/module.h>
  42. #include <linux/sched.h>
  43. #include <linux/timer.h>
  44. #include <linux/string.h>
  45. #include <linux/slab.h>
  46. #include <linux/ioport.h>
  47. #include <linux/kernel.h>
  48. #include <linux/stat.h>
  49. #include <linux/blk.h>
  50. #include <linux/interrupt.h>
  51. #include <linux/delay.h>
  52. #include <linux/init.h>
  53. #include <linux/smp_lock.h>
  54. #include <linux/completion.h>
  55. #define __KERNEL_SYSCALLS__
  56. #include <linux/unistd.h>
  57. #include <linux/spinlock.h>
  58. #include <asm/system.h>
  59. #include <asm/irq.h>
  60. #include <asm/dma.h>
  61. #include <asm/uaccess.h>
  62. #include "scsi.h"
  63. #include "hosts.h"
  64. #include "constants.h"
  65. #ifdef CONFIG_KMOD
  66. #include <linux/kmod.h>
  67. #endif
  68. #undef USE_STATIC_SCSI_MEMORY
  69. struct proc_dir_entry *proc_scsi;
  70. #ifdef CONFIG_PROC_FS
  71. static int scsi_proc_info(char *buffer, char **start, off_t offset, int length);
  72. static void scsi_dump_status(int level);
  73. #endif
  74. /*
  75.    static const char RCSid[] = "$Header: /vger/u4/cvs/linux/drivers/scsi/scsi.c,v 1.38 1997/01/19 23:07:18 davem Exp $";
  76.  */
  77. /*
  78.  * Definitions and constants.
  79.  */
  80. #define MIN_RESET_DELAY (2*HZ)
  81. /* Do not call reset on error if we just did a reset within 15 sec. */
  82. #define MIN_RESET_PERIOD (15*HZ)
  83. /*
  84.  * Macro to determine the size of SCSI command. This macro takes vendor
  85.  * unique commands into account. SCSI commands in groups 6 and 7 are
  86.  * vendor unique and we will depend upon the command length being
  87.  * supplied correctly in cmd_len.
  88.  */
  89. #define CDB_SIZE(SCpnt) ((((SCpnt->cmnd[0] >> 5) & 7) < 6) ? 
  90. COMMAND_SIZE(SCpnt->cmnd[0]) : SCpnt->cmd_len)
  91. /*
  92.  * Data declarations.
  93.  */
  94. unsigned long scsi_pid;
  95. Scsi_Cmnd *last_cmnd;
  96. /* Command group 3 is reserved and should never be used.  */
  97. const unsigned char scsi_command_size[8] =
  98. {
  99. 6, 10, 10, 12,
  100. 16, 12, 10, 10
  101. };
  102. static unsigned long serial_number;
  103. static Scsi_Cmnd *scsi_bh_queue_head;
  104. static Scsi_Cmnd *scsi_bh_queue_tail;
  105. /*
  106.  * Note - the initial logging level can be set here to log events at boot time.
  107.  * After the system is up, you may enable logging via the /proc interface.
  108.  */
  109. unsigned int scsi_logging_level;
  110. const char *const scsi_device_types[MAX_SCSI_DEVICE_CODE] =
  111. {
  112. "Direct-Access    ",
  113. "Sequential-Access",
  114. "Printer          ",
  115. "Processor        ",
  116. "WORM             ",
  117. "CD-ROM           ",
  118. "Scanner          ",
  119. "Optical Device   ",
  120. "Medium Changer   ",
  121. "Communications   ",
  122. "Unknown          ",
  123. "Unknown          ",
  124. "Unknown          ",
  125. "Enclosure        ",
  126. };
  127. /* 
  128.  * Function prototypes.
  129.  */
  130. extern void scsi_times_out(Scsi_Cmnd * SCpnt);
  131. void scsi_build_commandblocks(Scsi_Device * SDpnt);
  132. /*
  133.  * These are the interface to the old error handling code.  It should go away
  134.  * someday soon.
  135.  */
  136. extern void scsi_old_done(Scsi_Cmnd * SCpnt);
  137. extern void scsi_old_times_out(Scsi_Cmnd * SCpnt);
  138. extern int scsi_old_reset(Scsi_Cmnd *SCpnt, unsigned int flag);
  139. /* 
  140.  * Private interface into the new error handling code.
  141.  */
  142. extern int scsi_new_reset(Scsi_Cmnd *SCpnt, unsigned int flag);
  143. /*
  144.  * Function:    scsi_initialize_queue()
  145.  *
  146.  * Purpose:     Selects queue handler function for a device.
  147.  *
  148.  * Arguments:   SDpnt   - device for which we need a handler function.
  149.  *
  150.  * Returns:     Nothing
  151.  *
  152.  * Lock status: No locking assumed or required.
  153.  *
  154.  * Notes:       Most devices will end up using scsi_request_fn for the
  155.  *              handler function (at least as things are done now).
  156.  *              The "block" feature basically ensures that only one of
  157.  *              the blocked hosts is active at one time, mainly to work around
  158.  *              buggy DMA chipsets where the memory gets starved.
  159.  *              For this case, we have a special handler function, which
  160.  *              does some checks and ultimately calls scsi_request_fn.
  161.  *
  162.  *              The single_lun feature is a similar special case.
  163.  *
  164.  *              We handle these things by stacking the handlers.  The
  165.  *              special case handlers simply check a few conditions,
  166.  *              and return if they are not supposed to do anything.
  167.  *              In the event that things are OK, then they call the next
  168.  *              handler in the list - ultimately they call scsi_request_fn
  169.  *              to do the dirty deed.
  170.  */
  171. void  scsi_initialize_queue(Scsi_Device * SDpnt, struct Scsi_Host * SHpnt)
  172. {
  173. request_queue_t *q = &SDpnt->request_queue;
  174. blk_init_queue(q, scsi_request_fn);
  175. blk_queue_headactive(q, 0);
  176. q->queuedata = (void *) SDpnt;
  177. }
  178. #ifdef MODULE
  179. MODULE_PARM(scsi_logging_level, "i");
  180. MODULE_PARM_DESC(scsi_logging_level, "SCSI logging level; should be zero or nonzero");
  181. #else
  182. static int __init scsi_logging_setup(char *str)
  183. {
  184. int tmp;
  185. if (get_option(&str, &tmp) == 1) {
  186. scsi_logging_level = (tmp ? ~0 : 0);
  187. return 1;
  188. } else {
  189. printk(KERN_INFO "scsi_logging_setup : usage scsi_logging_level=n "
  190.        "(n should be 0 or non-zero)n");
  191. return 0;
  192. }
  193. }
  194. __setup("scsi_logging=", scsi_logging_setup);
  195. #endif
  196. /*
  197.  * Issue a command and wait for it to complete
  198.  */
  199.  
  200. static void scsi_wait_done(Scsi_Cmnd * SCpnt)
  201. {
  202. struct request *req;
  203. req = &SCpnt->request;
  204. req->rq_status = RQ_SCSI_DONE; /* Busy, but indicate request done */
  205. if (req->waiting != NULL) {
  206. complete(req->waiting);
  207. }
  208. }
  209. /*
  210.  * This lock protects the freelist for all devices on the system.
  211.  * We could make this finer grained by having a single lock per
  212.  * device if it is ever found that there is excessive contention
  213.  * on this lock.
  214.  */
  215. static spinlock_t device_request_lock = SPIN_LOCK_UNLOCKED;
  216. /*
  217.  * Used to protect insertion into and removal from the queue of
  218.  * commands to be processed by the bottom half handler.
  219.  */
  220. static spinlock_t scsi_bhqueue_lock = SPIN_LOCK_UNLOCKED;
  221. /*
  222.  * Function:    scsi_allocate_request
  223.  *
  224.  * Purpose:     Allocate a request descriptor.
  225.  *
  226.  * Arguments:   device    - device for which we want a request
  227.  *
  228.  * Lock status: No locks assumed to be held.  This function is SMP-safe.
  229.  *
  230.  * Returns:     Pointer to request block.
  231.  *
  232.  * Notes:       With the new queueing code, it becomes important
  233.  *              to track the difference between a command and a
  234.  *              request.  A request is a pending item in the queue that
  235.  *              has not yet reached the top of the queue.
  236.  */
  237. Scsi_Request *scsi_allocate_request(Scsi_Device * device)
  238. {
  239.    Scsi_Request *SRpnt = NULL;
  240.   
  241.    if (!device)
  242.    panic("No device passed to scsi_allocate_request().n");
  243.   
  244. SRpnt = (Scsi_Request *) kmalloc(sizeof(Scsi_Request), GFP_ATOMIC);
  245. if( SRpnt == NULL )
  246. {
  247. return NULL;
  248. }
  249. memset(SRpnt, 0, sizeof(Scsi_Request));
  250. SRpnt->sr_device = device;
  251. SRpnt->sr_host = device->host;
  252. SRpnt->sr_magic = SCSI_REQ_MAGIC;
  253. SRpnt->sr_data_direction = SCSI_DATA_UNKNOWN;
  254. return SRpnt;
  255. }
  256. /*
  257.  * Function:    scsi_release_request
  258.  *
  259.  * Purpose:     Release a request descriptor.
  260.  *
  261.  * Arguments:   device    - device for which we want a request
  262.  *
  263.  * Lock status: No locks assumed to be held.  This function is SMP-safe.
  264.  *
  265.  * Returns:     Pointer to request block.
  266.  *
  267.  * Notes:       With the new queueing code, it becomes important
  268.  *              to track the difference between a command and a
  269.  *              request.  A request is a pending item in the queue that
  270.  *              has not yet reached the top of the queue.  We still need
  271.  *              to free a request when we are done with it, of course.
  272.  */
  273. void scsi_release_request(Scsi_Request * req)
  274. {
  275. if( req->sr_command != NULL )
  276. {
  277. scsi_release_command(req->sr_command);
  278. req->sr_command = NULL;
  279. }
  280. kfree(req);
  281. }
  282. /*
  283.  * Function:    scsi_allocate_device
  284.  *
  285.  * Purpose:     Allocate a command descriptor.
  286.  *
  287.  * Arguments:   device    - device for which we want a command descriptor
  288.  *              wait      - 1 if we should wait in the event that none
  289.  *                          are available.
  290.  *              interruptible - 1 if we should unblock and return NULL
  291.  *                          in the event that we must wait, and a signal
  292.  *                          arrives.
  293.  *
  294.  * Lock status: No locks assumed to be held.  This function is SMP-safe.
  295.  *
  296.  * Returns:     Pointer to command descriptor.
  297.  *
  298.  * Notes:       Prior to the new queue code, this function was not SMP-safe.
  299.  *
  300.  *              If the wait flag is true, and we are waiting for a free
  301.  *              command block, this function will interrupt and return
  302.  *              NULL in the event that a signal arrives that needs to
  303.  *              be handled.
  304.  *
  305.  *              This function is deprecated, and drivers should be
  306.  *              rewritten to use Scsi_Request instead of Scsi_Cmnd.
  307.  */
  308. Scsi_Cmnd *scsi_allocate_device(Scsi_Device * device, int wait, 
  309.                                 int interruptable)
  310. {
  311.   struct Scsi_Host *host;
  312.    Scsi_Cmnd *SCpnt = NULL;
  313. Scsi_Device *SDpnt;
  314. unsigned long flags;
  315.   
  316.    if (!device)
  317.    panic("No device passed to scsi_allocate_device().n");
  318.   
  319.    host = device->host;
  320.   
  321. spin_lock_irqsave(&device_request_lock, flags);
  322.  
  323. while (1 == 1) {
  324. SCpnt = NULL;
  325. if (!device->device_blocked) {
  326. if (device->single_lun) {
  327. /*
  328.  * FIXME(eric) - this is not at all optimal.  Given that
  329.  * single lun devices are rare and usually slow
  330.  * (i.e. CD changers), this is good enough for now, but
  331.  * we may want to come back and optimize this later.
  332.  *
  333.  * Scan through all of the devices attached to this
  334.  * host, and see if any are active or not.  If so,
  335.  * we need to defer this command.
  336.  *
  337.  * We really need a busy counter per device.  This would
  338.  * allow us to more easily figure out whether we should
  339.  * do anything here or not.
  340.  */
  341. for (SDpnt = host->host_queue;
  342.      SDpnt;
  343.      SDpnt = SDpnt->next) {
  344. /*
  345.  * Only look for other devices on the same bus
  346.  * with the same target ID.
  347.  */
  348. if (SDpnt->channel != device->channel
  349.     || SDpnt->id != device->id
  350.     || SDpnt == device) {
  351.   continue;
  352. }
  353.                                         if( atomic_read(&SDpnt->device_active) != 0)
  354.                                         {
  355.                                                 break;
  356.                                         }
  357. }
  358. if (SDpnt) {
  359. /*
  360.  * Some other device in this cluster is busy.
  361.  * If asked to wait, we need to wait, otherwise
  362.  * return NULL.
  363.  */
  364. SCpnt = NULL;
  365. goto busy;
  366. }
  367. }
  368. /*
  369.  * Now we can check for a free command block for this device.
  370.  */
  371. for (SCpnt = device->device_queue; SCpnt; SCpnt = SCpnt->next) {
  372. if (SCpnt->request.rq_status == RQ_INACTIVE)
  373. break;
  374. }
  375. }
  376. /*
  377.  * If we couldn't find a free command block, and we have been
  378.  * asked to wait, then do so.
  379.  */
  380. if (SCpnt) {
  381. break;
  382. }
  383.       busy:
  384. /*
  385.  * If we have been asked to wait for a free block, then
  386.  * wait here.
  387.  */
  388. if (wait) {
  389.                         DECLARE_WAITQUEUE(wait, current);
  390.                         /*
  391.                          * We need to wait for a free commandblock.  We need to
  392.                          * insert ourselves into the list before we release the
  393.                          * lock.  This way if a block were released the same
  394.                          * microsecond that we released the lock, the call
  395.                          * to schedule() wouldn't block (well, it might switch,
  396.                          * but the current task will still be schedulable.
  397.                          */
  398.                         add_wait_queue(&device->scpnt_wait, &wait);
  399.                         if( interruptable ) {
  400.                                 set_current_state(TASK_INTERRUPTIBLE);
  401.                         } else {
  402.                                 set_current_state(TASK_UNINTERRUPTIBLE);
  403.                         }
  404.                         spin_unlock_irqrestore(&device_request_lock, flags);
  405. /*
  406.  * This should block until a device command block
  407.  * becomes available.
  408.  */
  409.                         schedule();
  410. spin_lock_irqsave(&device_request_lock, flags);
  411.                         remove_wait_queue(&device->scpnt_wait, &wait);
  412.                         /*
  413.                          * FIXME - Isn't this redundant??  Someone
  414.                          * else will have forced the state back to running.
  415.                          */
  416.                         set_current_state(TASK_RUNNING);
  417.                         /*
  418.                          * In the event that a signal has arrived that we need
  419.                          * to consider, then simply return NULL.  Everyone
  420.                          * that calls us should be prepared for this
  421.                          * possibility, and pass the appropriate code back
  422.                          * to the user.
  423.                          */
  424.                         if( interruptable ) {
  425.                                 if (signal_pending(current)) {
  426.                                         spin_unlock_irqrestore(&device_request_lock, flags);
  427.                                         return NULL;
  428.                                 }
  429.                         }
  430. } else {
  431.                         spin_unlock_irqrestore(&device_request_lock, flags);
  432. return NULL;
  433. }
  434. }
  435. SCpnt->request.rq_status = RQ_SCSI_BUSY;
  436. SCpnt->request.waiting = NULL; /* And no one is waiting for this
  437.  * to complete */
  438. atomic_inc(&SCpnt->host->host_active);
  439. atomic_inc(&SCpnt->device->device_active);
  440. SCpnt->buffer  = NULL;
  441. SCpnt->bufflen = 0;
  442. SCpnt->request_buffer = NULL;
  443. SCpnt->request_bufflen = 0;
  444. SCpnt->use_sg = 0; /* Reset the scatter-gather flag */
  445. SCpnt->old_use_sg = 0;
  446. SCpnt->transfersize = 0; /* No default transfer size */
  447. SCpnt->cmd_len = 0;
  448. SCpnt->sc_data_direction = SCSI_DATA_UNKNOWN;
  449. SCpnt->sc_request = NULL;
  450. SCpnt->sc_magic = SCSI_CMND_MAGIC;
  451.         SCpnt->result = 0;
  452. SCpnt->underflow = 0; /* Do not flag underflow conditions */
  453. SCpnt->old_underflow = 0;
  454. SCpnt->resid = 0;
  455. SCpnt->state = SCSI_STATE_INITIALIZING;
  456. SCpnt->owner = SCSI_OWNER_HIGHLEVEL;
  457. spin_unlock_irqrestore(&device_request_lock, flags);
  458. SCSI_LOG_MLQUEUE(5, printk("Activating command for device %d (%d)n",
  459.    SCpnt->target,
  460. atomic_read(&SCpnt->host->host_active)));
  461. return SCpnt;
  462. }
  463. inline void __scsi_release_command(Scsi_Cmnd * SCpnt)
  464. {
  465. unsigned long flags;
  466.         Scsi_Device * SDpnt;
  467. spin_lock_irqsave(&device_request_lock, flags);
  468.         SDpnt = SCpnt->device;
  469. SCpnt->request.rq_status = RQ_INACTIVE;
  470. SCpnt->state = SCSI_STATE_UNUSED;
  471. SCpnt->owner = SCSI_OWNER_NOBODY;
  472. atomic_dec(&SCpnt->host->host_active);
  473. atomic_dec(&SDpnt->device_active);
  474. SCSI_LOG_MLQUEUE(5, printk("Deactivating command for device %d (active=%d, failed=%d)n",
  475.    SCpnt->target,
  476.    atomic_read(&SCpnt->host->host_active),
  477.    SCpnt->host->host_failed));
  478. if (SCpnt->host->host_failed != 0) {
  479. SCSI_LOG_ERROR_RECOVERY(5, printk("Error handler thread %d %dn",
  480. SCpnt->host->in_recovery,
  481. SCpnt->host->eh_active));
  482. }
  483. /*
  484.  * If the host is having troubles, then look to see if this was the last
  485.  * command that might have failed.  If so, wake up the error handler.
  486.  */
  487. if (SCpnt->host->in_recovery
  488.     && !SCpnt->host->eh_active
  489.     && SCpnt->host->host_busy == SCpnt->host->host_failed) {
  490. SCSI_LOG_ERROR_RECOVERY(5, printk("Waking error handler thread (%d)n",
  491.      atomic_read(&SCpnt->host->eh_wait->count)));
  492. up(SCpnt->host->eh_wait);
  493. }
  494. spin_unlock_irqrestore(&device_request_lock, flags);
  495.         /*
  496.          * Wake up anyone waiting for this device.  Do this after we
  497.          * have released the lock, as they will need it as soon as
  498.          * they wake up.  
  499.          */
  500. wake_up(&SDpnt->scpnt_wait);
  501. }
  502. /*
  503.  * Function:    scsi_release_command
  504.  *
  505.  * Purpose:     Release a command block.
  506.  *
  507.  * Arguments:   SCpnt - command block we are releasing.
  508.  *
  509.  * Notes:       The command block can no longer be used by the caller once
  510.  *              this funciton is called.  This is in effect the inverse
  511.  *              of scsi_allocate_device.  Note that we also must perform
  512.  *              a couple of additional tasks.  We must first wake up any
  513.  *              processes that might have blocked waiting for a command
  514.  *              block, and secondly we must hit the queue handler function
  515.  *              to make sure that the device is busy.  Note - there is an
  516.  *              option to not do this - there were instances where we could
  517.  *              recurse too deeply and blow the stack if this happened
  518.  *              when we were indirectly called from the request function
  519.  *              itself.
  520.  *
  521.  *              The idea is that a lot of the mid-level internals gunk
  522.  *              gets hidden in this function.  Upper level drivers don't
  523.  *              have any chickens to wave in the air to get things to
  524.  *              work reliably.
  525.  *
  526.  *              This function is deprecated, and drivers should be
  527.  *              rewritten to use Scsi_Request instead of Scsi_Cmnd.
  528.  */
  529. void scsi_release_command(Scsi_Cmnd * SCpnt)
  530. {
  531.         request_queue_t *q;
  532.         Scsi_Device * SDpnt;
  533.         SDpnt = SCpnt->device;
  534.         __scsi_release_command(SCpnt);
  535.         /*
  536.          * Finally, hit the queue request function to make sure that
  537.          * the device is actually busy if there are requests present.
  538.          * This won't block - if the device cannot take any more, life
  539.          * will go on.  
  540.          */
  541.         q = &SDpnt->request_queue;
  542.         scsi_queue_next_request(q, NULL);                
  543. }
  544. /*
  545.  * Function:    scsi_dispatch_command
  546.  *
  547.  * Purpose:     Dispatch a command to the low-level driver.
  548.  *
  549.  * Arguments:   SCpnt - command block we are dispatching.
  550.  *
  551.  * Notes:
  552.  */
  553. int scsi_dispatch_cmd(Scsi_Cmnd * SCpnt)
  554. {
  555. #ifdef DEBUG_DELAY
  556. unsigned long clock;
  557. #endif
  558. struct Scsi_Host *host;
  559. int rtn = 0;
  560. unsigned long flags = 0;
  561. unsigned long timeout;
  562. ASSERT_LOCK(&io_request_lock, 0);
  563. #if DEBUG
  564. unsigned long *ret = 0;
  565. #ifdef __mips__
  566. __asm__ __volatile__("movet%0,$31":"=r"(ret));
  567. #else
  568. ret = __builtin_return_address(0);
  569. #endif
  570. #endif
  571. host = SCpnt->host;
  572. /* Assign a unique nonzero serial_number. */
  573. if (++serial_number == 0)
  574. serial_number = 1;
  575. SCpnt->serial_number = serial_number;
  576. SCpnt->pid = scsi_pid++;
  577. /*
  578.  * We will wait MIN_RESET_DELAY clock ticks after the last reset so
  579.  * we can avoid the drive not being ready.
  580.  */
  581. timeout = host->last_reset + MIN_RESET_DELAY;
  582. if (host->resetting && time_before(jiffies, timeout)) {
  583. int ticks_remaining = timeout - jiffies;
  584. /*
  585.  * NOTE: This may be executed from within an interrupt
  586.  * handler!  This is bad, but for now, it'll do.  The irq
  587.  * level of the interrupt handler has been masked out by the
  588.  * platform dependent interrupt handling code already, so the
  589.  * sti() here will not cause another call to the SCSI host's
  590.  * interrupt handler (assuming there is one irq-level per
  591.  * host).
  592.  */
  593. while (--ticks_remaining >= 0)
  594. mdelay(1 + 999 / HZ);
  595. host->resetting = 0;
  596. }
  597. if (host->hostt->use_new_eh_code) {
  598. scsi_add_timer(SCpnt, SCpnt->timeout_per_command, scsi_times_out);
  599. } else {
  600. scsi_add_timer(SCpnt, SCpnt->timeout_per_command,
  601.        scsi_old_times_out);
  602. }
  603. /*
  604.  * We will use a queued command if possible, otherwise we will emulate the
  605.  * queuing and calling of completion function ourselves.
  606.  */
  607. SCSI_LOG_MLQUEUE(3, printk("scsi_dispatch_cmnd (host = %d, channel = %d, target = %d, "
  608.        "command = %p, buffer = %p, nbufflen = %d, done = %p)n",
  609. SCpnt->host->host_no, SCpnt->channel, SCpnt->target, SCpnt->cmnd,
  610.     SCpnt->buffer, SCpnt->bufflen, SCpnt->done));
  611. SCpnt->state = SCSI_STATE_QUEUED;
  612. SCpnt->owner = SCSI_OWNER_LOWLEVEL;
  613. if (host->can_queue) {
  614. SCSI_LOG_MLQUEUE(3, printk("queuecommand : routine at %pn",
  615.    host->hostt->queuecommand));
  616. /*
  617.  * Use the old error handling code if we haven't converted the driver
  618.  * to use the new one yet.  Note - only the new queuecommand variant
  619.  * passes a meaningful return value.
  620.  */
  621. if (host->hostt->use_new_eh_code) {
  622. /*
  623.  * Before we queue this command, check if the command
  624.  * length exceeds what the host adapter can handle.
  625.  */
  626. if (CDB_SIZE(SCpnt) <= SCpnt->host->max_cmd_len) {
  627. spin_lock_irqsave(&io_request_lock, flags);
  628. rtn = host->hostt->queuecommand(SCpnt, scsi_done);
  629. spin_unlock_irqrestore(&io_request_lock, flags);
  630. if (rtn != 0) {
  631. scsi_delete_timer(SCpnt);
  632. scsi_mlqueue_insert(SCpnt, SCSI_MLQUEUE_HOST_BUSY);
  633. SCSI_LOG_MLQUEUE(3, printk("queuecommand : request rejectedn"));                                
  634. }
  635. } else {
  636. SCSI_LOG_MLQUEUE(3, printk("queuecommand : command too long.n"));
  637. SCpnt->result = (DID_ABORT << 16);
  638. spin_lock_irqsave(&io_request_lock, flags);
  639. scsi_done(SCpnt);
  640. spin_unlock_irqrestore(&io_request_lock, flags);
  641. rtn = 1;
  642. }
  643. } else {
  644. /*
  645.  * Before we queue this command, check if the command
  646.  * length exceeds what the host adapter can handle.
  647.  */
  648. if (CDB_SIZE(SCpnt) <= SCpnt->host->max_cmd_len) {
  649. spin_lock_irqsave(&io_request_lock, flags);
  650. host->hostt->queuecommand(SCpnt, scsi_old_done);
  651. spin_unlock_irqrestore(&io_request_lock, flags);
  652. } else {
  653. SCSI_LOG_MLQUEUE(3, printk("queuecommand : command too long.n"));
  654. SCpnt->result = (DID_ABORT << 16);
  655. spin_lock_irqsave(&io_request_lock, flags);
  656. scsi_old_done(SCpnt);
  657. spin_unlock_irqrestore(&io_request_lock, flags);
  658. rtn = 1;
  659. }
  660. }
  661. } else {
  662. int temp;
  663. SCSI_LOG_MLQUEUE(3, printk("command() :  routine at %pn", host->hostt->command));
  664.                 spin_lock_irqsave(&io_request_lock, flags);
  665. temp = host->hostt->command(SCpnt);
  666. SCpnt->result = temp;
  667. #ifdef DEBUG_DELAY
  668.                 spin_unlock_irqrestore(&io_request_lock, flags);
  669. clock = jiffies + 4 * HZ;
  670. while (time_before(jiffies, clock)) {
  671. barrier();
  672. cpu_relax();
  673. }
  674. printk("done(host = %d, result = %04x) : routine at %pn",
  675.        host->host_no, temp, host->hostt->command);
  676.                 spin_lock_irqsave(&io_request_lock, flags);
  677. #endif
  678. if (host->hostt->use_new_eh_code) {
  679. scsi_done(SCpnt);
  680. } else {
  681. scsi_old_done(SCpnt);
  682. }
  683.                 spin_unlock_irqrestore(&io_request_lock, flags);
  684. }
  685. SCSI_LOG_MLQUEUE(3, printk("leaving scsi_dispatch_cmnd()n"));
  686. return rtn;
  687. }
  688. devfs_handle_t scsi_devfs_handle;
  689. /*
  690.  * scsi_do_cmd sends all the commands out to the low-level driver.  It
  691.  * handles the specifics required for each low level driver - ie queued
  692.  * or non queued.  It also prevents conflicts when different high level
  693.  * drivers go for the same host at the same time.
  694.  */
  695. void scsi_wait_req (Scsi_Request * SRpnt, const void *cmnd ,
  696.     void *buffer, unsigned bufflen, 
  697.     int timeout, int retries)
  698. {
  699. DECLARE_COMPLETION(wait);
  700. request_queue_t *q = &SRpnt->sr_device->request_queue;
  701. SRpnt->sr_request.waiting = &wait;
  702. SRpnt->sr_request.rq_status = RQ_SCSI_BUSY;
  703. scsi_do_req (SRpnt, (void *) cmnd,
  704. buffer, bufflen, scsi_wait_done, timeout, retries);
  705. generic_unplug_device(q);
  706. wait_for_completion(&wait);
  707. SRpnt->sr_request.waiting = NULL;
  708. if( SRpnt->sr_command != NULL )
  709. {
  710. scsi_release_command(SRpnt->sr_command);
  711. SRpnt->sr_command = NULL;
  712. }
  713. }
  714.  
  715. /*
  716.  * Function:    scsi_do_req
  717.  *
  718.  * Purpose:     Queue a SCSI request
  719.  *
  720.  * Arguments:   SRpnt     - command descriptor.
  721.  *              cmnd      - actual SCSI command to be performed.
  722.  *              buffer    - data buffer.
  723.  *              bufflen   - size of data buffer.
  724.  *              done      - completion function to be run.
  725.  *              timeout   - how long to let it run before timeout.
  726.  *              retries   - number of retries we allow.
  727.  *
  728.  * Lock status: With the new queueing code, this is SMP-safe, and no locks
  729.  *              need be held upon entry.   The old queueing code the lock was
  730.  *              assumed to be held upon entry.
  731.  *
  732.  * Returns:     Nothing.
  733.  *
  734.  * Notes:       Prior to the new queue code, this function was not SMP-safe.
  735.  *              Also, this function is now only used for queueing requests
  736.  *              for things like ioctls and character device requests - this
  737.  *              is because we essentially just inject a request into the
  738.  *              queue for the device. Normal block device handling manipulates
  739.  *              the queue directly.
  740.  */
  741. void scsi_do_req(Scsi_Request * SRpnt, const void *cmnd,
  742.       void *buffer, unsigned bufflen, void (*done) (Scsi_Cmnd *),
  743.  int timeout, int retries)
  744. {
  745. Scsi_Device * SDpnt = SRpnt->sr_device;
  746. struct Scsi_Host *host = SDpnt->host;
  747. ASSERT_LOCK(&io_request_lock, 0);
  748. SCSI_LOG_MLQUEUE(4,
  749.  {
  750.  int i;
  751.  int target = SDpnt->id;
  752.  int size = COMMAND_SIZE(((const unsigned char *)cmnd)[0]);
  753.  printk("scsi_do_req (host = %d, channel = %d target = %d, "
  754.     "buffer =%p, bufflen = %d, done = %p, timeout = %d, "
  755. "retries = %d)n"
  756. "command : ", host->host_no, SDpnt->channel, target, buffer,
  757. bufflen, done, timeout, retries);
  758.  for (i  = 0; i < size; ++i)
  759.   printk("%02x  ", ((unsigned char *) cmnd)[i]);
  760.   printk("n");
  761.  });
  762. if (!host) {
  763. panic("Invalid or not present host.n");
  764. }
  765. /*
  766.  * If the upper level driver is reusing these things, then
  767.  * we should release the low-level block now.  Another one will
  768.  * be allocated later when this request is getting queued.
  769.  */
  770. if( SRpnt->sr_command != NULL )
  771. {
  772. scsi_release_command(SRpnt->sr_command);
  773. SRpnt->sr_command = NULL;
  774. }
  775. /*
  776.  * We must prevent reentrancy to the lowlevel host driver.  This prevents
  777.  * it - we enter a loop until the host we want to talk to is not busy.
  778.  * Race conditions are prevented, as interrupts are disabled in between the
  779.  * time we check for the host being not busy, and the time we mark it busy
  780.  * ourselves.
  781.  */
  782. /*
  783.  * Our own function scsi_done (which marks the host as not busy, disables
  784.  * the timeout counter, etc) will be called by us or by the
  785.  * scsi_hosts[host].queuecommand() function needs to also call
  786.  * the completion function for the high level driver.
  787.  */
  788. memcpy((void *) SRpnt->sr_cmnd, (const void *) cmnd, 
  789.        sizeof(SRpnt->sr_cmnd));
  790. SRpnt->sr_bufflen = bufflen;
  791. SRpnt->sr_buffer = buffer;
  792. SRpnt->sr_allowed = retries;
  793. SRpnt->sr_done = done;
  794. SRpnt->sr_timeout_per_command = timeout;
  795. if (SRpnt->sr_cmd_len == 0)
  796. SRpnt->sr_cmd_len = COMMAND_SIZE(SRpnt->sr_cmnd[0]);
  797. /*
  798.  * At this point, we merely set up the command, stick it in the normal
  799.  * request queue, and return.  Eventually that request will come to the
  800.  * top of the list, and will be dispatched.
  801.  */
  802. scsi_insert_special_req(SRpnt, 0);
  803. SCSI_LOG_MLQUEUE(3, printk("Leaving scsi_do_req()n"));
  804. }
  805.  
  806. /*
  807.  * Function:    scsi_init_cmd_from_req
  808.  *
  809.  * Purpose:     Queue a SCSI command
  810.  * Purpose:     Initialize a Scsi_Cmnd from a Scsi_Request
  811.  *
  812.  * Arguments:   SCpnt     - command descriptor.
  813.  *              SRpnt     - Request from the queue.
  814.  *
  815.  * Lock status: None needed.
  816.  *
  817.  * Returns:     Nothing.
  818.  *
  819.  * Notes:       Mainly transfer data from the request structure to the
  820.  *              command structure.  The request structure is allocated
  821.  *              using the normal memory allocator, and requests can pile
  822.  *              up to more or less any depth.  The command structure represents
  823.  *              a consumable resource, as these are allocated into a pool
  824.  *              when the SCSI subsystem initializes.  The preallocation is
  825.  *              required so that in low-memory situations a disk I/O request
  826.  *              won't cause the memory manager to try and write out a page.
  827.  *              The request structure is generally used by ioctls and character
  828.  *              devices.
  829.  */
  830. void scsi_init_cmd_from_req(Scsi_Cmnd * SCpnt, Scsi_Request * SRpnt)
  831. {
  832. struct Scsi_Host *host = SCpnt->host;
  833. ASSERT_LOCK(&io_request_lock, 0);
  834. SCpnt->owner = SCSI_OWNER_MIDLEVEL;
  835. SRpnt->sr_command = SCpnt;
  836. if (!host) {
  837. panic("Invalid or not present host.n");
  838. }
  839. SCpnt->cmd_len = SRpnt->sr_cmd_len;
  840. SCpnt->use_sg = SRpnt->sr_use_sg;
  841. memcpy((void *) &SCpnt->request, (const void *) &SRpnt->sr_request,
  842.        sizeof(SRpnt->sr_request));
  843. memcpy((void *) SCpnt->data_cmnd, (const void *) SRpnt->sr_cmnd, 
  844.        sizeof(SCpnt->data_cmnd));
  845. SCpnt->reset_chain = NULL;
  846. SCpnt->serial_number = 0;
  847. SCpnt->serial_number_at_timeout = 0;
  848. SCpnt->bufflen = SRpnt->sr_bufflen;
  849. SCpnt->buffer = SRpnt->sr_buffer;
  850. SCpnt->flags = 0;
  851. SCpnt->retries = 0;
  852. SCpnt->allowed = SRpnt->sr_allowed;
  853. SCpnt->done = SRpnt->sr_done;
  854. SCpnt->timeout_per_command = SRpnt->sr_timeout_per_command;
  855. SCpnt->sc_data_direction = SRpnt->sr_data_direction;
  856. SCpnt->sglist_len = SRpnt->sr_sglist_len;
  857. SCpnt->underflow = SRpnt->sr_underflow;
  858. SCpnt->sc_request = SRpnt;
  859. memcpy((void *) SCpnt->cmnd, (const void *) SRpnt->sr_cmnd, 
  860.        sizeof(SCpnt->cmnd));
  861. /* Zero the sense buffer.  Some host adapters automatically request
  862.  * sense on error.  0 is not a valid sense code.
  863.  */
  864. memset((void *) SCpnt->sense_buffer, 0, sizeof SCpnt->sense_buffer);
  865. SCpnt->request_buffer = SRpnt->sr_buffer;
  866. SCpnt->request_bufflen = SRpnt->sr_bufflen;
  867. SCpnt->old_use_sg = SCpnt->use_sg;
  868. if (SCpnt->cmd_len == 0)
  869. SCpnt->cmd_len = COMMAND_SIZE(SCpnt->cmnd[0]);
  870. SCpnt->old_cmd_len = SCpnt->cmd_len;
  871. SCpnt->sc_old_data_direction = SCpnt->sc_data_direction;
  872. SCpnt->old_underflow = SCpnt->underflow;
  873. /* Start the timer ticking.  */
  874. SCpnt->internal_timeout = NORMAL_TIMEOUT;
  875. SCpnt->abort_reason = 0;
  876. SCpnt->result = 0;
  877. SCSI_LOG_MLQUEUE(3, printk("Leaving scsi_init_cmd_from_req()n"));
  878. }
  879. /*
  880.  * Function:    scsi_do_cmd
  881.  *
  882.  * Purpose:     Queue a SCSI command
  883.  *
  884.  * Arguments:   SCpnt     - command descriptor.
  885.  *              cmnd      - actual SCSI command to be performed.
  886.  *              buffer    - data buffer.
  887.  *              bufflen   - size of data buffer.
  888.  *              done      - completion function to be run.
  889.  *              timeout   - how long to let it run before timeout.
  890.  *              retries   - number of retries we allow.
  891.  *
  892.  * Lock status: With the new queueing code, this is SMP-safe, and no locks
  893.  *              need be held upon entry.   The old queueing code the lock was
  894.  *              assumed to be held upon entry.
  895.  *
  896.  * Returns:     Nothing.
  897.  *
  898.  * Notes:       Prior to the new queue code, this function was not SMP-safe.
  899.  *              Also, this function is now only used for queueing requests
  900.  *              for things like ioctls and character device requests - this
  901.  *              is because we essentially just inject a request into the
  902.  *              queue for the device. Normal block device handling manipulates
  903.  *              the queue directly.
  904.  */
  905. void scsi_do_cmd(Scsi_Cmnd * SCpnt, const void *cmnd,
  906.       void *buffer, unsigned bufflen, void (*done) (Scsi_Cmnd *),
  907.  int timeout, int retries)
  908. {
  909. struct Scsi_Host *host = SCpnt->host;
  910. ASSERT_LOCK(&io_request_lock, 0);
  911. SCpnt->pid = scsi_pid++;
  912. SCpnt->owner = SCSI_OWNER_MIDLEVEL;
  913. SCSI_LOG_MLQUEUE(4,
  914.  {
  915.  int i;
  916.  int target = SCpnt->target;
  917.  int size = COMMAND_SIZE(((const unsigned char *)cmnd)[0]);
  918.  printk("scsi_do_cmd (host = %d, channel = %d target = %d, "
  919.     "buffer =%p, bufflen = %d, done = %p, timeout = %d, "
  920. "retries = %d)n"
  921. "command : ", host->host_no, SCpnt->channel, target, buffer,
  922. bufflen, done, timeout, retries);
  923.  for (i = 0; i < size; ++i)
  924.   printk("%02x  ", ((unsigned char *) cmnd)[i]);
  925.   printk("n");
  926.  });
  927. if (!host) {
  928. panic("Invalid or not present host.n");
  929. }
  930. /*
  931.  * We must prevent reentrancy to the lowlevel host driver.  This prevents
  932.  * it - we enter a loop until the host we want to talk to is not busy.
  933.  * Race conditions are prevented, as interrupts are disabled in between the
  934.  * time we check for the host being not busy, and the time we mark it busy
  935.  * ourselves.
  936.  */
  937. /*
  938.  * Our own function scsi_done (which marks the host as not busy, disables
  939.  * the timeout counter, etc) will be called by us or by the
  940.  * scsi_hosts[host].queuecommand() function needs to also call
  941.  * the completion function for the high level driver.
  942.  */
  943. memcpy((void *) SCpnt->data_cmnd, (const void *) cmnd, 
  944.                sizeof(SCpnt->data_cmnd));
  945. SCpnt->reset_chain = NULL;
  946. SCpnt->serial_number = 0;
  947. SCpnt->serial_number_at_timeout = 0;
  948. SCpnt->bufflen = bufflen;
  949. SCpnt->buffer = buffer;
  950. SCpnt->flags = 0;
  951. SCpnt->retries = 0;
  952. SCpnt->allowed = retries;
  953. SCpnt->done = done;
  954. SCpnt->timeout_per_command = timeout;
  955. memcpy((void *) SCpnt->cmnd, (const void *) cmnd, 
  956.                sizeof(SCpnt->cmnd));
  957. /* Zero the sense buffer.  Some host adapters automatically request
  958.  * sense on error.  0 is not a valid sense code.
  959.  */
  960. memset((void *) SCpnt->sense_buffer, 0, sizeof SCpnt->sense_buffer);
  961. SCpnt->request_buffer = buffer;
  962. SCpnt->request_bufflen = bufflen;
  963. SCpnt->old_use_sg = SCpnt->use_sg;
  964. if (SCpnt->cmd_len == 0)
  965. SCpnt->cmd_len = COMMAND_SIZE(SCpnt->cmnd[0]);
  966. SCpnt->old_cmd_len = SCpnt->cmd_len;
  967. SCpnt->sc_old_data_direction = SCpnt->sc_data_direction;
  968. SCpnt->old_underflow = SCpnt->underflow;
  969. /* Start the timer ticking.  */
  970. SCpnt->internal_timeout = NORMAL_TIMEOUT;
  971. SCpnt->abort_reason = 0;
  972. SCpnt->result = 0;
  973. /*
  974.  * At this point, we merely set up the command, stick it in the normal
  975.  * request queue, and return.  Eventually that request will come to the
  976.  * top of the list, and will be dispatched.
  977.  */
  978. scsi_insert_special_cmd(SCpnt, 0);
  979. SCSI_LOG_MLQUEUE(3, printk("Leaving scsi_do_cmd()n"));
  980. }
  981. /*
  982.  * This function is the mid-level interrupt routine, which decides how
  983.  *  to handle error conditions.  Each invocation of this function must
  984.  *  do one and *only* one of the following:
  985.  *
  986.  *      1) Insert command in BH queue.
  987.  *      2) Activate error handler for host.
  988.  *
  989.  * FIXME(eric) - I am concerned about stack overflow (still).  An
  990.  * interrupt could come while we are processing the bottom queue,
  991.  * which would cause another command to be stuffed onto the bottom
  992.  * queue, and it would in turn be processed as that interrupt handler
  993.  * is returning.  Given a sufficiently steady rate of returning
  994.  * commands, this could cause the stack to overflow.  I am not sure
  995.  * what is the most appropriate solution here - we should probably
  996.  * keep a depth count, and not process any commands while we still
  997.  * have a bottom handler active higher in the stack.
  998.  *
  999.  * There is currently code in the bottom half handler to monitor
  1000.  * recursion in the bottom handler and report if it ever happens.  If
  1001.  * this becomes a problem, it won't be hard to engineer something to
  1002.  * deal with it so that only the outer layer ever does any real
  1003.  * processing.  
  1004.  */
  1005. void scsi_done(Scsi_Cmnd * SCpnt)
  1006. {
  1007. unsigned long flags;
  1008. int tstatus;
  1009. /*
  1010.  * We don't have to worry about this one timing out any more.
  1011.  */
  1012. tstatus = scsi_delete_timer(SCpnt);
  1013. /*
  1014.  * If we are unable to remove the timer, it means that the command
  1015.  * has already timed out.  In this case, we have no choice but to
  1016.  * let the timeout function run, as we have no idea where in fact
  1017.  * that function could really be.  It might be on another processor,
  1018.  * etc, etc.
  1019.  */
  1020. if (!tstatus) {
  1021. SCpnt->done_late = 1;
  1022. return;
  1023. }
  1024. /* Set the serial numbers back to zero */
  1025. SCpnt->serial_number = 0;
  1026. /*
  1027.  * First, see whether this command already timed out.  If so, we ignore
  1028.  * the response.  We treat it as if the command never finished.
  1029.  *
  1030.  * Since serial_number is now 0, the error handler cound detect this
  1031.  * situation and avoid to call the low level driver abort routine.
  1032.  * (DB)
  1033.          *
  1034.          * FIXME(eric) - I believe that this test is now redundant, due to
  1035.          * the test of the return status of del_timer().
  1036.  */
  1037. if (SCpnt->state == SCSI_STATE_TIMEOUT) {
  1038. SCSI_LOG_MLCOMPLETE(1, printk("Ignoring completion of %p due to timeout status", SCpnt));
  1039. return;
  1040. }
  1041. spin_lock_irqsave(&scsi_bhqueue_lock, flags);
  1042. SCpnt->serial_number_at_timeout = 0;
  1043. SCpnt->state = SCSI_STATE_BHQUEUE;
  1044. SCpnt->owner = SCSI_OWNER_BH_HANDLER;
  1045. SCpnt->bh_next = NULL;
  1046. /*
  1047.  * Next, put this command in the BH queue.
  1048.  * 
  1049.  * We need a spinlock here, or compare and exchange if we can reorder incoming
  1050.  * Scsi_Cmnds, as it happens pretty often scsi_done is called multiple times
  1051.  * before bh is serviced. -jj
  1052.  *
  1053.  * We already have the io_request_lock here, since we are called from the
  1054.  * interrupt handler or the error handler. (DB)
  1055.  *
  1056.  * This may be true at the moment, but I would like to wean all of the low
  1057.  * level drivers away from using io_request_lock.   Technically they should
  1058.  * all use their own locking.  I am adding a small spinlock to protect
  1059.  * this datastructure to make it safe for that day.  (ERY)
  1060.  */
  1061. if (!scsi_bh_queue_head) {
  1062. scsi_bh_queue_head = SCpnt;
  1063. scsi_bh_queue_tail = SCpnt;
  1064. } else {
  1065. scsi_bh_queue_tail->bh_next = SCpnt;
  1066. scsi_bh_queue_tail = SCpnt;
  1067. }
  1068. spin_unlock_irqrestore(&scsi_bhqueue_lock, flags);
  1069. /*
  1070.  * Mark the bottom half handler to be run.
  1071.  */
  1072. mark_bh(SCSI_BH);
  1073. }
  1074. /*
  1075.  * Procedure:   scsi_bottom_half_handler
  1076.  *
  1077.  * Purpose:     Called after we have finished processing interrupts, it
  1078.  *              performs post-interrupt handling for commands that may
  1079.  *              have completed.
  1080.  *
  1081.  * Notes:       This is called with all interrupts enabled.  This should reduce
  1082.  *              interrupt latency, stack depth, and reentrancy of the low-level
  1083.  *              drivers.
  1084.  *
  1085.  * The io_request_lock is required in all the routine. There was a subtle
  1086.  * race condition when scsi_done is called after a command has already
  1087.  * timed out but before the time out is processed by the error handler.
  1088.  * (DB)
  1089.  *
  1090.  * I believe I have corrected this.  We simply monitor the return status of
  1091.  * del_timer() - if this comes back as 0, it means that the timer has fired
  1092.  * and that a timeout is in progress.   I have modified scsi_done() such
  1093.  * that in this instance the command is never inserted in the bottom
  1094.  * half queue.  Thus the only time we hold the lock here is when
  1095.  * we wish to atomically remove the contents of the queue.
  1096.  */
  1097. void scsi_bottom_half_handler(void)
  1098. {
  1099. Scsi_Cmnd *SCpnt;
  1100. Scsi_Cmnd *SCnext;
  1101. unsigned long flags;
  1102. while (1 == 1) {
  1103. spin_lock_irqsave(&scsi_bhqueue_lock, flags);
  1104. SCpnt = scsi_bh_queue_head;
  1105. scsi_bh_queue_head = NULL;
  1106. spin_unlock_irqrestore(&scsi_bhqueue_lock, flags);
  1107. if (SCpnt == NULL) {
  1108. return;
  1109. }
  1110. SCnext = SCpnt->bh_next;
  1111. for (; SCpnt; SCpnt = SCnext) {
  1112. SCnext = SCpnt->bh_next;
  1113. switch (scsi_decide_disposition(SCpnt)) {
  1114. case SUCCESS:
  1115. /*
  1116.  * Add to BH queue.
  1117.  */
  1118. SCSI_LOG_MLCOMPLETE(3, printk("Command finished %d %d 0x%xn", SCpnt->host->host_busy,
  1119. SCpnt->host->host_failed,
  1120.  SCpnt->result));
  1121. scsi_finish_command(SCpnt);
  1122. break;
  1123. case NEEDS_RETRY:
  1124. /*
  1125.  * We only come in here if we want to retry a command.  The
  1126.  * test to see whether the command should be retried should be
  1127.  * keeping track of the number of tries, so we don't end up looping,
  1128.  * of course.
  1129.  */
  1130. SCSI_LOG_MLCOMPLETE(3, printk("Command needs retry %d %d 0x%xn", SCpnt->host->host_busy,
  1131. SCpnt->host->host_failed, SCpnt->result));
  1132. scsi_retry_command(SCpnt);
  1133. break;
  1134. case ADD_TO_MLQUEUE:
  1135. /* 
  1136.  * This typically happens for a QUEUE_FULL message -
  1137.  * typically only when the queue depth is only
  1138.  * approximate for a given device.  Adding a command
  1139.  * to the queue for the device will prevent further commands
  1140.  * from being sent to the device, so we shouldn't end up
  1141.  * with tons of things being sent down that shouldn't be.
  1142.  */
  1143. SCSI_LOG_MLCOMPLETE(3, printk("Command rejected as device queue full, put on ml queue %pn",
  1144.                                                               SCpnt));
  1145. scsi_mlqueue_insert(SCpnt, SCSI_MLQUEUE_DEVICE_BUSY);
  1146. break;
  1147. default:
  1148. /*
  1149.  * Here we have a fatal error of some sort.  Turn it over to
  1150.  * the error handler.
  1151.  */
  1152. SCSI_LOG_MLCOMPLETE(3, printk("Command failed %p %x active=%d busy=%d failed=%dn",
  1153.     SCpnt, SCpnt->result,
  1154.   atomic_read(&SCpnt->host->host_active),
  1155.   SCpnt->host->host_busy,
  1156.       SCpnt->host->host_failed));
  1157. /*
  1158.  * Dump the sense information too.
  1159.  */
  1160. if ((status_byte(SCpnt->result) & CHECK_CONDITION) != 0) {
  1161. SCSI_LOG_MLCOMPLETE(3, print_sense("bh", SCpnt));
  1162. }
  1163. if (SCpnt->host->eh_wait != NULL) {
  1164. SCpnt->host->host_failed++;
  1165. SCpnt->owner = SCSI_OWNER_ERROR_HANDLER;
  1166. SCpnt->state = SCSI_STATE_FAILED;
  1167. SCpnt->host->in_recovery = 1;
  1168. /*
  1169.  * If the host is having troubles, then look to see if this was the last
  1170.  * command that might have failed.  If so, wake up the error handler.
  1171.  */
  1172. if (SCpnt->host->host_busy == SCpnt->host->host_failed) {
  1173. SCSI_LOG_ERROR_RECOVERY(5, printk("Waking error handler thread (%d)n",
  1174.   atomic_read(&SCpnt->host->eh_wait->count)));
  1175. up(SCpnt->host->eh_wait);
  1176. }
  1177. } else {
  1178. /*
  1179.  * We only get here if the error recovery thread has died.
  1180.  */
  1181. scsi_finish_command(SCpnt);
  1182. }
  1183. }
  1184. } /* for(; SCpnt...) */
  1185. } /* while(1==1) */
  1186. }
  1187. /*
  1188.  * Function:    scsi_retry_command
  1189.  *
  1190.  * Purpose:     Send a command back to the low level to be retried.
  1191.  *
  1192.  * Notes:       This command is always executed in the context of the
  1193.  *              bottom half handler, or the error handler thread. Low
  1194.  *              level drivers should not become re-entrant as a result of
  1195.  *              this.
  1196.  */
  1197. int scsi_retry_command(Scsi_Cmnd * SCpnt)
  1198. {
  1199. memcpy((void *) SCpnt->cmnd, (void *) SCpnt->data_cmnd,
  1200.        sizeof(SCpnt->data_cmnd));
  1201. SCpnt->request_buffer = SCpnt->buffer;
  1202. SCpnt->request_bufflen = SCpnt->bufflen;
  1203. SCpnt->use_sg = SCpnt->old_use_sg;
  1204. SCpnt->cmd_len = SCpnt->old_cmd_len;
  1205. SCpnt->sc_data_direction = SCpnt->sc_old_data_direction;
  1206. SCpnt->underflow = SCpnt->old_underflow;
  1207.         /*
  1208.          * Zero the sense information from the last time we tried
  1209.          * this command.
  1210.          */
  1211. memset((void *) SCpnt->sense_buffer, 0, sizeof SCpnt->sense_buffer);
  1212. return scsi_dispatch_cmd(SCpnt);
  1213. }
  1214. /*
  1215.  * Function:    scsi_finish_command
  1216.  *
  1217.  * Purpose:     Pass command off to upper layer for finishing of I/O
  1218.  *              request, waking processes that are waiting on results,
  1219.  *              etc.
  1220.  */
  1221. void scsi_finish_command(Scsi_Cmnd * SCpnt)
  1222. {
  1223. struct Scsi_Host *host;
  1224. Scsi_Device *device;
  1225. Scsi_Request * SRpnt;
  1226. unsigned long flags;
  1227. ASSERT_LOCK(&io_request_lock, 0);
  1228. host = SCpnt->host;
  1229. device = SCpnt->device;
  1230.         /*
  1231.          * We need to protect the decrement, as otherwise a race condition
  1232.          * would exist.  Fiddling with SCpnt isn't a problem as the
  1233.          * design only allows a single SCpnt to be active in only
  1234.          * one execution context, but the device and host structures are
  1235.          * shared.
  1236.          */
  1237. spin_lock_irqsave(&io_request_lock, flags);
  1238. host->host_busy--; /* Indicate that we are free */
  1239. device->device_busy--; /* Decrement device usage counter. */
  1240. spin_unlock_irqrestore(&io_request_lock, flags);
  1241.         /*
  1242.          * Clear the flags which say that the device/host is no longer
  1243.          * capable of accepting new commands.  These are set in scsi_queue.c
  1244.          * for both the queue full condition on a device, and for a
  1245.          * host full condition on the host.
  1246.          */
  1247.         host->host_blocked = FALSE;
  1248.         device->device_blocked = FALSE;
  1249. /*
  1250.  * If we have valid sense information, then some kind of recovery
  1251.  * must have taken place.  Make a note of this.
  1252.  */
  1253. if (scsi_sense_valid(SCpnt)) {
  1254. SCpnt->result |= (DRIVER_SENSE << 24);
  1255. }
  1256. SCSI_LOG_MLCOMPLETE(3, printk("Notifying upper driver of completion for device %d %xn",
  1257.       SCpnt->device->id, SCpnt->result));
  1258. SCpnt->owner = SCSI_OWNER_HIGHLEVEL;
  1259. SCpnt->state = SCSI_STATE_FINISHED;
  1260. /* We can get here with use_sg=0, causing a panic in the upper level (DB) */
  1261. SCpnt->use_sg = SCpnt->old_use_sg;
  1262.        /*
  1263. * If there is an associated request structure, copy the data over before we call the
  1264. * completion function.
  1265. */
  1266. SRpnt = SCpnt->sc_request;
  1267. if( SRpnt != NULL ) {
  1268.        SRpnt->sr_result = SRpnt->sr_command->result;
  1269.        if( SRpnt->sr_result != 0 ) {
  1270.        memcpy(SRpnt->sr_sense_buffer,
  1271.       SRpnt->sr_command->sense_buffer,
  1272.       sizeof(SRpnt->sr_sense_buffer));
  1273.        }
  1274. }
  1275. SCpnt->done(SCpnt);
  1276. }
  1277. static int scsi_register_host(Scsi_Host_Template *);
  1278. static int scsi_unregister_host(Scsi_Host_Template *);
  1279. /*
  1280.  * Function:    scsi_release_commandblocks()
  1281.  *
  1282.  * Purpose:     Release command blocks associated with a device.
  1283.  *
  1284.  * Arguments:   SDpnt   - device
  1285.  *
  1286.  * Returns:     Nothing
  1287.  *
  1288.  * Lock status: No locking assumed or required.
  1289.  *
  1290.  * Notes:
  1291.  */
  1292. void scsi_release_commandblocks(Scsi_Device * SDpnt)
  1293. {
  1294. Scsi_Cmnd *SCpnt, *SCnext;
  1295. unsigned long flags;
  1296.   spin_lock_irqsave(&device_request_lock, flags);
  1297. for (SCpnt = SDpnt->device_queue; SCpnt; SCpnt = SCnext) {
  1298. SDpnt->device_queue = SCnext = SCpnt->next;
  1299. kfree((char *) SCpnt);
  1300. }
  1301. SDpnt->has_cmdblocks = 0;
  1302. SDpnt->queue_depth = 0;
  1303. spin_unlock_irqrestore(&device_request_lock, flags);
  1304. }
  1305. /*
  1306.  * Function:    scsi_build_commandblocks()
  1307.  *
  1308.  * Purpose:     Allocate command blocks associated with a device.
  1309.  *
  1310.  * Arguments:   SDpnt   - device
  1311.  *
  1312.  * Returns:     Nothing
  1313.  *
  1314.  * Lock status: No locking assumed or required.
  1315.  *
  1316.  * Notes:
  1317.  */
  1318. void scsi_build_commandblocks(Scsi_Device * SDpnt)
  1319. {
  1320. unsigned long flags;
  1321. struct Scsi_Host *host = SDpnt->host;
  1322. int j;
  1323. Scsi_Cmnd *SCpnt;
  1324. spin_lock_irqsave(&device_request_lock, flags);
  1325. if (SDpnt->queue_depth == 0)
  1326. {
  1327. SDpnt->queue_depth = host->cmd_per_lun;
  1328. if (SDpnt->queue_depth == 0)
  1329. SDpnt->queue_depth = 1; /* live to fight another day */
  1330. }
  1331. SDpnt->device_queue = NULL;
  1332. for (j = 0; j < SDpnt->queue_depth; j++) {
  1333. SCpnt = (Scsi_Cmnd *)
  1334.     kmalloc(sizeof(Scsi_Cmnd),
  1335.      GFP_ATOMIC |
  1336. (host->unchecked_isa_dma ? GFP_DMA : 0));
  1337. if (NULL == SCpnt)
  1338. break; /* If not, the next line will oops ... */
  1339. memset(SCpnt, 0, sizeof(Scsi_Cmnd));
  1340. SCpnt->host = host;
  1341. SCpnt->device = SDpnt;
  1342. SCpnt->target = SDpnt->id;
  1343. SCpnt->lun = SDpnt->lun;
  1344. SCpnt->channel = SDpnt->channel;
  1345. SCpnt->request.rq_status = RQ_INACTIVE;
  1346. SCpnt->use_sg = 0;
  1347. SCpnt->old_use_sg = 0;
  1348. SCpnt->old_cmd_len = 0;
  1349. SCpnt->underflow = 0;
  1350. SCpnt->old_underflow = 0;
  1351. SCpnt->transfersize = 0;
  1352. SCpnt->resid = 0;
  1353. SCpnt->serial_number = 0;
  1354. SCpnt->serial_number_at_timeout = 0;
  1355. SCpnt->host_scribble = NULL;
  1356. SCpnt->next = SDpnt->device_queue;
  1357. SDpnt->device_queue = SCpnt;
  1358. SCpnt->state = SCSI_STATE_UNUSED;
  1359. SCpnt->owner = SCSI_OWNER_NOBODY;
  1360. }
  1361. if (j < SDpnt->queue_depth) { /* low on space (D.Gilbert 990424) */
  1362. printk(KERN_WARNING "scsi_build_commandblocks: want=%d, space for=%d blocksn",
  1363.        SDpnt->queue_depth, j);
  1364. SDpnt->queue_depth = j;
  1365. SDpnt->has_cmdblocks = (0 != j);
  1366. } else {
  1367. SDpnt->has_cmdblocks = 1;
  1368. }
  1369. spin_unlock_irqrestore(&device_request_lock, flags);
  1370. }
  1371. void __init scsi_host_no_insert(char *str, int n)
  1372. {
  1373.     Scsi_Host_Name *shn, *shn2;
  1374.     int len;
  1375.     
  1376.     len = strlen(str);
  1377.     if (len && (shn = (Scsi_Host_Name *) kmalloc(sizeof(Scsi_Host_Name), GFP_ATOMIC))) {
  1378. if ((shn->name = kmalloc(len+1, GFP_ATOMIC))) {
  1379.     strncpy(shn->name, str, len);
  1380.     shn->name[len] = 0;
  1381.     shn->host_no = n;
  1382.     shn->host_registered = 0;
  1383.     shn->loaded_as_module = 1; /* numbers shouldn't be freed in any case */
  1384.     shn->next = NULL;
  1385.     if (scsi_host_no_list) {
  1386. for (shn2 = scsi_host_no_list;shn2->next;shn2 = shn2->next)
  1387.     ;
  1388. shn2->next = shn;
  1389.     }
  1390.     else
  1391. scsi_host_no_list = shn;
  1392.     max_scsi_hosts = n+1;
  1393. }
  1394. else
  1395.     kfree((char *) shn);
  1396.     }
  1397. }
  1398. #ifdef CONFIG_PROC_FS
  1399. static int scsi_proc_info(char *buffer, char **start, off_t offset, int length)
  1400. {
  1401. Scsi_Device *scd;
  1402. struct Scsi_Host *HBA_ptr;
  1403. int size, len = 0;
  1404. off_t begin = 0;
  1405. off_t pos = 0;
  1406. /*
  1407.  * First, see if there are any attached devices or not.
  1408.  */
  1409. for (HBA_ptr = scsi_hostlist; HBA_ptr; HBA_ptr = HBA_ptr->next) {
  1410. if (HBA_ptr->host_queue != NULL) {
  1411. break;
  1412. }
  1413. }
  1414. size = sprintf(buffer + len, "Attached devices: %sn", (HBA_ptr) ? "" : "none");
  1415. len += size;
  1416. pos = begin + len;
  1417. for (HBA_ptr = scsi_hostlist; HBA_ptr; HBA_ptr = HBA_ptr->next) {
  1418. #if 0
  1419. size += sprintf(buffer + len, "scsi%2d: %sn", (int) HBA_ptr->host_no,
  1420. HBA_ptr->hostt->procname);
  1421. len += size;
  1422. pos = begin + len;
  1423. #endif
  1424. for (scd = HBA_ptr->host_queue; scd; scd = scd->next) {
  1425. proc_print_scsidevice(scd, buffer, &size, len);
  1426. len += size;
  1427. pos = begin + len;
  1428. if (pos < offset) {
  1429. len = 0;
  1430. begin = pos;
  1431. }
  1432. if (pos > offset + length)
  1433. goto stop_output;
  1434. }
  1435. }
  1436. stop_output:
  1437. *start = buffer + (offset - begin); /* Start of wanted data */
  1438. len -= (offset - begin); /* Start slop */
  1439. if (len > length)
  1440. len = length; /* Ending slop */
  1441. return (len);
  1442. }
  1443. static int proc_scsi_gen_write(struct file * file, const char * buf,
  1444.                               unsigned long length, void *data)
  1445. {
  1446. struct Scsi_Device_Template *SDTpnt;
  1447. Scsi_Device *scd;
  1448. struct Scsi_Host *HBA_ptr;
  1449. char *p;
  1450. int host, channel, id, lun;
  1451. char * buffer;
  1452. int err;
  1453. if (!buf || length>PAGE_SIZE)
  1454. return -EINVAL;
  1455. if (!(buffer = (char *) __get_free_page(GFP_KERNEL)))
  1456. return -ENOMEM;
  1457. if(copy_from_user(buffer, buf, length))
  1458. {
  1459. err =-EFAULT;
  1460. goto out;
  1461. }
  1462. err = -EINVAL;
  1463. if (length < PAGE_SIZE)
  1464. buffer[length] = '';
  1465. else if (buffer[PAGE_SIZE-1])
  1466. goto out;
  1467. if (length < 11 || strncmp("scsi", buffer, 4))
  1468. goto out;
  1469. /*
  1470.  * Usage: echo "scsi dump #N" > /proc/scsi/scsi
  1471.  * to dump status of all scsi commands.  The number is used to specify the level
  1472.  * of detail in the dump.
  1473.  */
  1474. if (!strncmp("dump", buffer + 5, 4)) {
  1475. unsigned int level;
  1476. p = buffer + 10;
  1477. if (*p == '')
  1478. goto out;
  1479. level = simple_strtoul(p, NULL, 0);
  1480. scsi_dump_status(level);
  1481. }
  1482. /*
  1483.  * Usage: echo "scsi log token #N" > /proc/scsi/scsi
  1484.  * where token is one of [error,scan,mlqueue,mlcomplete,llqueue,
  1485.  * llcomplete,hlqueue,hlcomplete]
  1486.  */
  1487. #ifdef CONFIG_SCSI_LOGGING /* { */
  1488. if (!strncmp("log", buffer + 5, 3)) {
  1489. char *token;
  1490. unsigned int level;
  1491. p = buffer + 9;
  1492. token = p;
  1493. while (*p != ' ' && *p != 't' && *p != '') {
  1494. p++;
  1495. }
  1496. if (*p == '') {
  1497. if (strncmp(token, "all", 3) == 0) {
  1498. /*
  1499.  * Turn on absolutely everything.
  1500.  */
  1501. scsi_logging_level = ~0;
  1502. } else if (strncmp(token, "none", 4) == 0) {
  1503. /*
  1504.  * Turn off absolutely everything.
  1505.  */
  1506. scsi_logging_level = 0;
  1507. } else {
  1508. goto out;
  1509. }
  1510. } else {
  1511. *p++ = '';
  1512. level = simple_strtoul(p, NULL, 0);
  1513. /*
  1514.  * Now figure out what to do with it.
  1515.  */
  1516. if (strcmp(token, "error") == 0) {
  1517. SCSI_SET_ERROR_RECOVERY_LOGGING(level);
  1518. } else if (strcmp(token, "timeout") == 0) {
  1519. SCSI_SET_TIMEOUT_LOGGING(level);
  1520. } else if (strcmp(token, "scan") == 0) {
  1521. SCSI_SET_SCAN_BUS_LOGGING(level);
  1522. } else if (strcmp(token, "mlqueue") == 0) {
  1523. SCSI_SET_MLQUEUE_LOGGING(level);
  1524. } else if (strcmp(token, "mlcomplete") == 0) {
  1525. SCSI_SET_MLCOMPLETE_LOGGING(level);
  1526. } else if (strcmp(token, "llqueue") == 0) {
  1527. SCSI_SET_LLQUEUE_LOGGING(level);
  1528. } else if (strcmp(token, "llcomplete") == 0) {
  1529. SCSI_SET_LLCOMPLETE_LOGGING(level);
  1530. } else if (strcmp(token, "hlqueue") == 0) {
  1531. SCSI_SET_HLQUEUE_LOGGING(level);
  1532. } else if (strcmp(token, "hlcomplete") == 0) {
  1533. SCSI_SET_HLCOMPLETE_LOGGING(level);
  1534. } else if (strcmp(token, "ioctl") == 0) {
  1535. SCSI_SET_IOCTL_LOGGING(level);
  1536. } else {
  1537. goto out;
  1538. }
  1539. }
  1540. printk(KERN_INFO "scsi logging level set to 0x%8.8xn", scsi_logging_level);
  1541. }
  1542. #endif /* CONFIG_SCSI_LOGGING */ /* } */
  1543. /*
  1544.  * Usage: echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi
  1545.  * with  "0 1 2 3" replaced by your "Host Channel Id Lun".
  1546.  * Consider this feature BETA.
  1547.  *     CAUTION: This is not for hotplugging your peripherals. As
  1548.  *     SCSI was not designed for this you could damage your
  1549.  *     hardware !
  1550.  * However perhaps it is legal to switch on an
  1551.  * already connected device. It is perhaps not
  1552.  * guaranteed this device doesn't corrupt an ongoing data transfer.
  1553.  */
  1554. if (!strncmp("add-single-device", buffer + 5, 17)) {
  1555. p = buffer + 23;
  1556. host = simple_strtoul(p, &p, 0);
  1557. channel = simple_strtoul(p + 1, &p, 0);
  1558. id = simple_strtoul(p + 1, &p, 0);
  1559. lun = simple_strtoul(p + 1, &p, 0);
  1560. printk(KERN_INFO "scsi singledevice %d %d %d %dn", host, channel,
  1561.        id, lun);
  1562. for (HBA_ptr = scsi_hostlist; HBA_ptr; HBA_ptr = HBA_ptr->next) {
  1563. if (HBA_ptr->host_no == host) {
  1564. break;
  1565. }
  1566. }
  1567. err = -ENXIO;
  1568. if (!HBA_ptr)
  1569. goto out;
  1570. for (scd = HBA_ptr->host_queue; scd; scd = scd->next) {
  1571. if ((scd->channel == channel
  1572.      && scd->id == id
  1573.      && scd->lun == lun)) {
  1574. break;
  1575. }
  1576. }
  1577. err = -ENOSYS;
  1578. if (scd)
  1579. goto out; /* We do not yet support unplugging */
  1580. scan_scsis(HBA_ptr, 1, channel, id, lun);
  1581. /* FIXME (DB) This assumes that the queue_depth routines can be used
  1582.    in this context as well, while they were all designed to be
  1583.    called only once after the detect routine. (DB) */
  1584. /* queue_depth routine moved to inside scan_scsis(,1,,,) so
  1585.    it is called before build_commandblocks() */
  1586. err = length;
  1587. goto out;
  1588. }
  1589. /*
  1590.  * Usage: echo "scsi remove-single-device 0 1 2 3" >/proc/scsi/scsi
  1591.  * with  "0 1 2 3" replaced by your "Host Channel Id Lun".
  1592.  *
  1593.  * Consider this feature pre-BETA.
  1594.  *
  1595.  *     CAUTION: This is not for hotplugging your peripherals. As
  1596.  *     SCSI was not designed for this you could damage your
  1597.  *     hardware and thoroughly confuse the SCSI subsystem.
  1598.  *
  1599.  */
  1600. else if (!strncmp("remove-single-device", buffer + 5, 20)) {
  1601. p = buffer + 26;
  1602. host = simple_strtoul(p, &p, 0);
  1603. channel = simple_strtoul(p + 1, &p, 0);
  1604. id = simple_strtoul(p + 1, &p, 0);
  1605. lun = simple_strtoul(p + 1, &p, 0);
  1606. for (HBA_ptr = scsi_hostlist; HBA_ptr; HBA_ptr = HBA_ptr->next) {
  1607. if (HBA_ptr->host_no == host) {
  1608. break;
  1609. }
  1610. }
  1611. err = -ENODEV;
  1612. if (!HBA_ptr)
  1613. goto out;
  1614. for (scd = HBA_ptr->host_queue; scd; scd = scd->next) {
  1615. if ((scd->channel == channel
  1616.      && scd->id == id
  1617.      && scd->lun == lun)) {
  1618. break;
  1619. }
  1620. }
  1621. if (scd == NULL)
  1622. goto out; /* there is no such device attached */
  1623. err = -EBUSY;
  1624. if (scd->access_count)
  1625. goto out;
  1626. SDTpnt = scsi_devicelist;
  1627. while (SDTpnt != NULL) {
  1628. if (SDTpnt->detach)
  1629. (*SDTpnt->detach) (scd);
  1630. SDTpnt = SDTpnt->next;
  1631. }
  1632. if (scd->attached == 0) {
  1633. /*
  1634.  * Nobody is using this device any more.
  1635.  * Free all of the command structures.
  1636.  */
  1637.                         if (HBA_ptr->hostt->revoke)
  1638.                                 HBA_ptr->hostt->revoke(scd);
  1639. devfs_unregister (scd->de);
  1640. scsi_release_commandblocks(scd);
  1641. /* Now we can remove the device structure */
  1642. if (scd->next != NULL)
  1643. scd->next->prev = scd->prev;
  1644. if (scd->prev != NULL)
  1645. scd->prev->next = scd->next;
  1646. if (HBA_ptr->host_queue == scd) {
  1647. HBA_ptr->host_queue = scd->next;
  1648. }
  1649. blk_cleanup_queue(&scd->request_queue);
  1650. kfree((char *) scd);
  1651. } else {
  1652. goto out;
  1653. }
  1654. err = 0;
  1655. }
  1656. out:
  1657. free_page((unsigned long) buffer);
  1658. return err;
  1659. }
  1660. #endif
  1661. /*
  1662.  * This entry point should be called by a driver if it is trying
  1663.  * to add a low level scsi driver to the system.
  1664.  */
  1665. static int scsi_register_host(Scsi_Host_Template * tpnt)
  1666. {
  1667. int pcount;
  1668. struct Scsi_Host *shpnt;
  1669. Scsi_Device *SDpnt;
  1670. struct Scsi_Device_Template *sdtpnt;
  1671. const char *name;
  1672. unsigned long flags;
  1673. int out_of_space = 0;
  1674. if (tpnt->next || !tpnt->detect)
  1675. return 1; /* Must be already loaded, or
  1676.  * no detect routine available
  1677.  */
  1678. /* If max_sectors isn't set, default to max */
  1679. if (!tpnt->max_sectors)
  1680. tpnt->max_sectors = MAX_SECTORS;
  1681. pcount = next_scsi_host;
  1682. MOD_INC_USE_COUNT;
  1683. /* The detect routine must carefully spinunlock/spinlock if 
  1684.    it enables interrupts, since all interrupt handlers do 
  1685.    spinlock as well.
  1686.    All lame drivers are going to fail due to the following 
  1687.    spinlock. For the time beeing let's use it only for drivers 
  1688.    using the new scsi code. NOTE: the detect routine could
  1689.    redefine the value tpnt->use_new_eh_code. (DB, 13 May 1998) */
  1690. if (tpnt->use_new_eh_code) {
  1691. spin_lock_irqsave(&io_request_lock, flags);
  1692. tpnt->present = tpnt->detect(tpnt);
  1693. spin_unlock_irqrestore(&io_request_lock, flags);
  1694. } else
  1695. tpnt->present = tpnt->detect(tpnt);
  1696. if (tpnt->present) {
  1697. if (pcount == next_scsi_host) {
  1698. if (tpnt->present > 1) {
  1699. printk(KERN_ERR "scsi: Failure to register low-level scsi driver");
  1700. scsi_unregister_host(tpnt);
  1701. return 1;
  1702. }
  1703. /* 
  1704.  * The low-level driver failed to register a driver.
  1705.  * We can do this now.
  1706.  */
  1707. if(scsi_register(tpnt, 0)==NULL)
  1708. {
  1709. printk(KERN_ERR "scsi: register failed.n");
  1710. scsi_unregister_host(tpnt);
  1711. return 1;
  1712. }
  1713. }
  1714. tpnt->next = scsi_hosts; /* Add to the linked list */
  1715. scsi_hosts = tpnt;
  1716. /* Add the new driver to /proc/scsi */
  1717. #ifdef CONFIG_PROC_FS
  1718. build_proc_dir_entries(tpnt);
  1719. #endif
  1720. /*
  1721.  * Add the kernel threads for each host adapter that will
  1722.  * handle error correction.
  1723.  */
  1724. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1725. if (shpnt->hostt == tpnt && shpnt->hostt->use_new_eh_code) {
  1726. DECLARE_MUTEX_LOCKED(sem);
  1727. shpnt->eh_notify = &sem;
  1728. kernel_thread((int (*)(void *)) scsi_error_handler,
  1729.       (void *) shpnt, 0);
  1730. /*
  1731.  * Now wait for the kernel error thread to initialize itself
  1732.  * as it might be needed when we scan the bus.
  1733.  */
  1734. down(&sem);
  1735. shpnt->eh_notify = NULL;
  1736. }
  1737. }
  1738. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1739. if (shpnt->hostt == tpnt) {
  1740. if (tpnt->info) {
  1741. name = tpnt->info(shpnt);
  1742. } else {
  1743. name = tpnt->name;
  1744. }
  1745. printk(KERN_INFO "scsi%d : %sn", /* And print a little message */
  1746.        shpnt->host_no, name);
  1747. }
  1748. }
  1749. /* The next step is to call scan_scsis here.  This generates the
  1750.  * Scsi_Devices entries
  1751.  */
  1752. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1753. if (shpnt->hostt == tpnt) {
  1754. scan_scsis(shpnt, 0, 0, 0, 0);
  1755. if (shpnt->select_queue_depths != NULL) {
  1756. (shpnt->select_queue_depths) (shpnt, shpnt->host_queue);
  1757. }
  1758. }
  1759. }
  1760. for (sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next) {
  1761. if (sdtpnt->init && sdtpnt->dev_noticed)
  1762. (*sdtpnt->init) ();
  1763. }
  1764. /*
  1765.  * Next we create the Scsi_Cmnd structures for this host 
  1766.  */
  1767. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1768. for (SDpnt = shpnt->host_queue; SDpnt; SDpnt = SDpnt->next)
  1769. if (SDpnt->host->hostt == tpnt) {
  1770. for (sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
  1771. if (sdtpnt->attach)
  1772. (*sdtpnt->attach) (SDpnt);
  1773. if (SDpnt->attached) {
  1774. scsi_build_commandblocks(SDpnt);
  1775. if (0 == SDpnt->has_cmdblocks)
  1776. out_of_space = 1;
  1777. }
  1778. }
  1779. }
  1780. /*
  1781.  * Now that we have all of the devices, resize the DMA pool,
  1782.  * as required.  */
  1783. if (!out_of_space)
  1784. scsi_resize_dma_pool();
  1785. /* This does any final handling that is required. */
  1786. for (sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next) {
  1787. if (sdtpnt->finish && sdtpnt->nr_dev) {
  1788. (*sdtpnt->finish) ();
  1789. }
  1790. }
  1791. }
  1792. #if defined(USE_STATIC_SCSI_MEMORY)
  1793. printk("SCSI memory: total %ldKb, used %ldKb, free %ldKb.n",
  1794.        (scsi_memory_upper_value - scsi_memory_lower_value) / 1024,
  1795.        (scsi_init_memory_start - scsi_memory_lower_value) / 1024,
  1796.        (scsi_memory_upper_value - scsi_init_memory_start) / 1024);
  1797. #endif
  1798. if (out_of_space) {
  1799. scsi_unregister_host(tpnt); /* easiest way to clean up?? */
  1800. return 1;
  1801. } else
  1802. return 0;
  1803. }
  1804. /*
  1805.  * Similarly, this entry point should be called by a loadable module if it
  1806.  * is trying to remove a low level scsi driver from the system.
  1807.  */
  1808. static int scsi_unregister_host(Scsi_Host_Template * tpnt)
  1809. {
  1810. int online_status;
  1811. int pcount0, pcount;
  1812. Scsi_Cmnd *SCpnt;
  1813. Scsi_Device *SDpnt;
  1814. Scsi_Device *SDpnt1;
  1815. struct Scsi_Device_Template *sdtpnt;
  1816. struct Scsi_Host *sh1;
  1817. struct Scsi_Host *shpnt;
  1818. char name[10]; /* host_no>=10^9? I don't think so. */
  1819. /* get the big kernel lock, so we don't race with open() */
  1820. lock_kernel();
  1821. /*
  1822.  * First verify that this host adapter is completely free with no pending
  1823.  * commands 
  1824.  */
  1825. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1826. for (SDpnt = shpnt->host_queue; SDpnt;
  1827.      SDpnt = SDpnt->next) {
  1828. if (SDpnt->host->hostt == tpnt
  1829.     && SDpnt->host->hostt->module
  1830.     && GET_USE_COUNT(SDpnt->host->hostt->module))
  1831. goto err_out;
  1832. /* 
  1833.  * FIXME(eric) - We need to find a way to notify the
  1834.  * low level driver that we are shutting down - via the
  1835.  * special device entry that still needs to get added. 
  1836.  *
  1837.  * Is detach interface below good enough for this?
  1838.  */
  1839. }
  1840. }
  1841. /*
  1842.  * FIXME(eric) put a spinlock on this.  We force all of the devices offline
  1843.  * to help prevent race conditions where other hosts/processors could try and
  1844.  * get in and queue a command.
  1845.  */
  1846. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1847. for (SDpnt = shpnt->host_queue; SDpnt;
  1848.      SDpnt = SDpnt->next) {
  1849. if (SDpnt->host->hostt == tpnt)
  1850. SDpnt->online = FALSE;
  1851. }
  1852. }
  1853. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1854. if (shpnt->hostt != tpnt) {
  1855. continue;
  1856. }
  1857. for (SDpnt = shpnt->host_queue; SDpnt;
  1858.      SDpnt = SDpnt->next) {
  1859. /*
  1860.  * Loop over all of the commands associated with the device.  If any of
  1861.  * them are busy, then set the state back to inactive and bail.
  1862.  */
  1863. for (SCpnt = SDpnt->device_queue; SCpnt;
  1864.      SCpnt = SCpnt->next) {
  1865. online_status = SDpnt->online;
  1866. SDpnt->online = FALSE;
  1867. if (SCpnt->request.rq_status != RQ_INACTIVE) {
  1868. printk(KERN_ERR "SCSI device not inactive - rq_status=%d, target=%d, pid=%ld, state=%d, owner=%d.n",
  1869.        SCpnt->request.rq_status, SCpnt->target, SCpnt->pid,
  1870.      SCpnt->state, SCpnt->owner);
  1871. for (SDpnt1 = shpnt->host_queue; SDpnt1;
  1872.      SDpnt1 = SDpnt1->next) {
  1873. for (SCpnt = SDpnt1->device_queue; SCpnt;
  1874.      SCpnt = SCpnt->next)
  1875. if (SCpnt->request.rq_status == RQ_SCSI_DISCONNECTING)
  1876. SCpnt->request.rq_status = RQ_INACTIVE;
  1877. }
  1878. SDpnt->online = online_status;
  1879. printk(KERN_ERR "Device busy???n");
  1880. goto err_out;
  1881. }
  1882. /*
  1883.  * No, this device is really free.  Mark it as such, and
  1884.  * continue on.
  1885.  */
  1886. SCpnt->state = SCSI_STATE_DISCONNECTING;
  1887. SCpnt->request.rq_status = RQ_SCSI_DISCONNECTING; /* Mark as busy */
  1888. }
  1889. }
  1890. }
  1891. /* Next we detach the high level drivers from the Scsi_Device structures */
  1892. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1893. if (shpnt->hostt != tpnt) {
  1894. continue;
  1895. }
  1896. for (SDpnt = shpnt->host_queue; SDpnt;
  1897.      SDpnt = SDpnt->next) {
  1898. for (sdtpnt = scsi_devicelist; sdtpnt; sdtpnt = sdtpnt->next)
  1899. if (sdtpnt->detach)
  1900. (*sdtpnt->detach) (SDpnt);
  1901. /* If something still attached, punt */
  1902. if (SDpnt->attached) {
  1903. printk(KERN_ERR "Attached usage count = %dn", SDpnt->attached);
  1904. goto err_out;
  1905. }
  1906. devfs_unregister (SDpnt->de);
  1907. }
  1908. }
  1909. /*
  1910.  * Next, kill the kernel error recovery thread for this host.
  1911.  */
  1912. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1913. if (shpnt->hostt == tpnt
  1914.     && shpnt->hostt->use_new_eh_code
  1915.     && shpnt->ehandler != NULL) {
  1916. DECLARE_MUTEX_LOCKED(sem);
  1917. shpnt->eh_notify = &sem;
  1918. send_sig(SIGHUP, shpnt->ehandler, 1);
  1919. down(&sem);
  1920. shpnt->eh_notify = NULL;
  1921. }
  1922. }
  1923. /* Next we free up the Scsi_Cmnd structures for this host */
  1924. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  1925. if (shpnt->hostt != tpnt) {
  1926. continue;
  1927. }
  1928. for (SDpnt = shpnt->host_queue; SDpnt;
  1929.      SDpnt = shpnt->host_queue) {
  1930. scsi_release_commandblocks(SDpnt);
  1931. blk_cleanup_queue(&SDpnt->request_queue);
  1932. /* Next free up the Scsi_Device structures for this host */
  1933. shpnt->host_queue = SDpnt->next;
  1934. kfree((char *) SDpnt);
  1935. }
  1936. }
  1937. /* Next we go through and remove the instances of the individual hosts
  1938.  * that were detected */
  1939. pcount0 = next_scsi_host;
  1940. for (shpnt = scsi_hostlist; shpnt; shpnt = sh1) {
  1941. sh1 = shpnt->next;
  1942. if (shpnt->hostt != tpnt)
  1943. continue;
  1944. pcount = next_scsi_host;
  1945. /* Remove the /proc/scsi directory entry */
  1946. sprintf(name,"%d",shpnt->host_no);
  1947. remove_proc_entry(name, tpnt->proc_dir);
  1948. if (tpnt->release)
  1949. (*tpnt->release) (shpnt);
  1950. else {
  1951. /* This is the default case for the release function.
  1952.  * It should do the right thing for most correctly
  1953.  * written host adapters.
  1954.  */
  1955. if (shpnt->irq)
  1956. free_irq(shpnt->irq, NULL);
  1957. if (shpnt->dma_channel != 0xff)
  1958. free_dma(shpnt->dma_channel);
  1959. if (shpnt->io_port && shpnt->n_io_port)
  1960. release_region(shpnt->io_port, shpnt->n_io_port);
  1961. }
  1962. if (pcount == next_scsi_host)
  1963. scsi_unregister(shpnt);
  1964. tpnt->present--;
  1965. }
  1966. /*
  1967.  * If there are absolutely no more hosts left, it is safe
  1968.  * to completely nuke the DMA pool.  The resize operation will
  1969.  * do the right thing and free everything.
  1970.  */
  1971. if (!scsi_hosts)
  1972. scsi_resize_dma_pool();
  1973. if (pcount0 != next_scsi_host)
  1974. printk(KERN_INFO "scsi : %d host%s left.n", next_scsi_host,
  1975.        (next_scsi_host == 1) ? "" : "s");
  1976. #if defined(USE_STATIC_SCSI_MEMORY)
  1977. printk("SCSI memory: total %ldKb, used %ldKb, free %ldKb.n",
  1978.        (scsi_memory_upper_value - scsi_memory_lower_value) / 1024,
  1979.        (scsi_init_memory_start - scsi_memory_lower_value) / 1024,
  1980.        (scsi_memory_upper_value - scsi_init_memory_start) / 1024);
  1981. #endif
  1982. /*
  1983.  * Remove it from the linked list and /proc if all
  1984.  * hosts were successfully removed (ie preset == 0)
  1985.  */
  1986. if (!tpnt->present) {
  1987. Scsi_Host_Template **SHTp = &scsi_hosts;
  1988. Scsi_Host_Template *SHT;
  1989. while ((SHT = *SHTp) != NULL) {
  1990. if (SHT == tpnt) {
  1991. *SHTp = SHT->next;
  1992. remove_proc_entry(tpnt->proc_name, proc_scsi);
  1993. break;
  1994. }
  1995. SHTp = &SHT->next;
  1996. }
  1997. }
  1998. MOD_DEC_USE_COUNT;
  1999. unlock_kernel();
  2000. return 0;
  2001. err_out:
  2002. unlock_kernel();
  2003. return -1;
  2004. }
  2005. static int scsi_unregister_device(struct Scsi_Device_Template *tpnt);
  2006. /*
  2007.  * This entry point should be called by a loadable module if it is trying
  2008.  * add a high level scsi driver to the system.
  2009.  */
  2010. static int scsi_register_device_module(struct Scsi_Device_Template *tpnt)
  2011. {
  2012. Scsi_Device *SDpnt;
  2013. struct Scsi_Host *shpnt;
  2014. int out_of_space = 0;
  2015. if (tpnt->next)
  2016. return 1;
  2017. scsi_register_device(tpnt);
  2018. /*
  2019.  * First scan the devices that we know about, and see if we notice them.
  2020.  */
  2021. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  2022. for (SDpnt = shpnt->host_queue; SDpnt;
  2023.      SDpnt = SDpnt->next) {
  2024. if (tpnt->detect)
  2025. SDpnt->detected = (*tpnt->detect) (SDpnt);
  2026. }
  2027. }
  2028. /*
  2029.  * If any of the devices would match this driver, then perform the
  2030.  * init function.
  2031.  */
  2032. if (tpnt->init && tpnt->dev_noticed) {
  2033. if ((*tpnt->init) ()) {
  2034. for (shpnt = scsi_hostlist; shpnt;
  2035.      shpnt = shpnt->next) {
  2036. for (SDpnt = shpnt->host_queue; SDpnt;
  2037.      SDpnt = SDpnt->next) {
  2038. SDpnt->detected = 0;
  2039. }
  2040. }
  2041. scsi_deregister_device(tpnt);
  2042. return 1;
  2043. }
  2044. }
  2045. /*
  2046.  * Now actually connect the devices to the new driver.
  2047.  */
  2048. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  2049. for (SDpnt = shpnt->host_queue; SDpnt;
  2050.      SDpnt = SDpnt->next) {
  2051. SDpnt->attached += SDpnt->detected;
  2052. SDpnt->detected = 0;
  2053. if (tpnt->attach)
  2054. (*tpnt->attach) (SDpnt);
  2055. /*
  2056.  * If this driver attached to the device, and don't have any
  2057.  * command blocks for this device, allocate some.
  2058.  */
  2059. if (SDpnt->attached && SDpnt->has_cmdblocks == 0) {
  2060. SDpnt->online = TRUE;
  2061. scsi_build_commandblocks(SDpnt);
  2062. if (0 == SDpnt->has_cmdblocks)
  2063. out_of_space = 1;
  2064. }
  2065. }
  2066. }
  2067. /*
  2068.  * This does any final handling that is required.
  2069.  */
  2070. if (tpnt->finish && tpnt->nr_dev)
  2071. (*tpnt->finish) ();
  2072. if (!out_of_space)
  2073. scsi_resize_dma_pool();
  2074. MOD_INC_USE_COUNT;
  2075. if (out_of_space) {
  2076. scsi_unregister_device(tpnt); /* easiest way to clean up?? */
  2077. return 1;
  2078. } else
  2079. return 0;
  2080. }
  2081. static int scsi_unregister_device(struct Scsi_Device_Template *tpnt)
  2082. {
  2083. Scsi_Device *SDpnt;
  2084. struct Scsi_Host *shpnt;
  2085. lock_kernel();
  2086. /*
  2087.  * If we are busy, this is not going to fly.
  2088.  */
  2089. if (GET_USE_COUNT(tpnt->module) != 0)
  2090. goto error_out;
  2091. /*
  2092.  * Next, detach the devices from the driver.
  2093.  */
  2094. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  2095. for (SDpnt = shpnt->host_queue; SDpnt;
  2096.      SDpnt = SDpnt->next) {
  2097. if (tpnt->detach)
  2098. (*tpnt->detach) (SDpnt);
  2099. if (SDpnt->attached == 0) {
  2100. SDpnt->online = FALSE;
  2101. /*
  2102.  * Nobody is using this device any more.  Free all of the
  2103.  * command structures.
  2104.  */
  2105. scsi_release_commandblocks(SDpnt);
  2106. }
  2107. }
  2108. }
  2109. /*
  2110.  * Extract the template from the linked list.
  2111.  */
  2112. scsi_deregister_device(tpnt);
  2113. MOD_DEC_USE_COUNT;
  2114. unlock_kernel();
  2115. /*
  2116.  * Final cleanup for the driver is done in the driver sources in the
  2117.  * cleanup function.
  2118.  */
  2119. return 0;
  2120. error_out:
  2121. unlock_kernel();
  2122. return -1;
  2123. }
  2124. /* This function should be called by drivers which needs to register
  2125.  * with the midlevel scsi system. As of 2.4.0-test9pre3 this is our
  2126.  * main device/hosts register function /mathiasen
  2127.  */
  2128. int scsi_register_module(int module_type, void *ptr)
  2129. {
  2130. switch (module_type) {
  2131. case MODULE_SCSI_HA:
  2132. return scsi_register_host((Scsi_Host_Template *) ptr);
  2133. /* Load upper level device handler of some kind */
  2134. case MODULE_SCSI_DEV:
  2135. #ifdef CONFIG_KMOD
  2136. if (scsi_hosts == NULL)
  2137. request_module("scsi_hostadapter");
  2138. #endif
  2139. return scsi_register_device_module((struct Scsi_Device_Template *) ptr);
  2140. /* The rest of these are not yet implemented */
  2141. /* Load constants.o */
  2142. case MODULE_SCSI_CONST:
  2143. /* Load specialized ioctl handler for some device.  Intended for
  2144.  * cdroms that have non-SCSI2 audio command sets. */
  2145. case MODULE_SCSI_IOCTL:
  2146. default:
  2147. return 1;
  2148. }
  2149. }
  2150. /* Reverse the actions taken above
  2151.  */
  2152. int scsi_unregister_module(int module_type, void *ptr)
  2153. {
  2154. int retval = 0;
  2155. switch (module_type) {
  2156. case MODULE_SCSI_HA:
  2157. retval = scsi_unregister_host((Scsi_Host_Template *) ptr);
  2158. break;
  2159. case MODULE_SCSI_DEV:
  2160. retval = scsi_unregister_device((struct Scsi_Device_Template *)ptr);
  2161.   break;
  2162. /* The rest of these are not yet implemented. */
  2163. case MODULE_SCSI_CONST:
  2164. case MODULE_SCSI_IOCTL:
  2165. break;
  2166. default:;
  2167. }
  2168. return retval;
  2169. }
  2170. #ifdef CONFIG_PROC_FS
  2171. /*
  2172.  * Function:    scsi_dump_status
  2173.  *
  2174.  * Purpose:     Brain dump of scsi system, used for problem solving.
  2175.  *
  2176.  * Arguments:   level - used to indicate level of detail.
  2177.  *
  2178.  * Notes:       The level isn't used at all yet, but we need to find some way
  2179.  *              of sensibly logging varying degrees of information.  A quick one-line
  2180.  *              display of each command, plus the status would be most useful.
  2181.  *
  2182.  *              This does depend upon CONFIG_SCSI_LOGGING - I do want some way of turning
  2183.  *              it all off if the user wants a lean and mean kernel.  It would probably
  2184.  *              also be useful to allow the user to specify one single host to be dumped.
  2185.  *              A second argument to the function would be useful for that purpose.
  2186.  *
  2187.  *              FIXME - some formatting of the output into tables would be very handy.
  2188.  */
  2189. static void scsi_dump_status(int level)
  2190. {
  2191. #ifdef CONFIG_SCSI_LOGGING /* { */
  2192. int i;
  2193. struct Scsi_Host *shpnt;
  2194. Scsi_Cmnd *SCpnt;
  2195. Scsi_Device *SDpnt;
  2196. printk(KERN_INFO "Dump of scsi host parameters:n");
  2197. i = 0;
  2198. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  2199. printk(KERN_INFO " %d %d %d : %d %dn",
  2200.        shpnt->host_failed,
  2201.        shpnt->host_busy,
  2202.        atomic_read(&shpnt->host_active),
  2203.        shpnt->host_blocked,
  2204.        shpnt->host_self_blocked);
  2205. }
  2206. printk(KERN_INFO "nn");
  2207. printk(KERN_INFO "Dump of scsi command parameters:n");
  2208. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  2209. printk(KERN_INFO "h:c:t:l (dev sect nsect cnumsec sg) (ret all flg) (to/cmd to ito) cmd snse resultn");
  2210. for (SDpnt = shpnt->host_queue; SDpnt; SDpnt = SDpnt->next) {
  2211. for (SCpnt = SDpnt->device_queue; SCpnt; SCpnt = SCpnt->next) {
  2212. /*  (0) h:c:t:l (dev sect nsect cnumsec sg) (ret all flg) (to/cmd to ito) cmd snse result %d %x      */
  2213. printk(KERN_INFO "(%3d) %2d:%1d:%2d:%2d (%6s %4ld %4ld %4ld %4x %1d) (%1d %1d 0x%2x) (%4d %4d %4d) 0x%2.2x 0x%2.2x 0x%8.8xn",
  2214.        i++,
  2215.        SCpnt->host->host_no,
  2216.        SCpnt->channel,
  2217.        SCpnt->target,
  2218.        SCpnt->lun,
  2219.        kdevname(SCpnt->request.rq_dev),
  2220.        SCpnt->request.sector,
  2221.        SCpnt->request.nr_sectors,
  2222.        SCpnt->request.current_nr_sectors,
  2223.        SCpnt->request.rq_status,
  2224.        SCpnt->use_sg,
  2225.        SCpnt->retries,
  2226.        SCpnt->allowed,
  2227.        SCpnt->flags,
  2228.        SCpnt->timeout_per_command,
  2229.        SCpnt->timeout,
  2230.        SCpnt->internal_timeout,
  2231.        SCpnt->cmnd[0],
  2232.        SCpnt->sense_buffer[2],
  2233.        SCpnt->result);
  2234. }
  2235. }
  2236. }
  2237. for (shpnt = scsi_hostlist; shpnt; shpnt = shpnt->next) {
  2238. for (SDpnt = shpnt->host_queue; SDpnt; SDpnt = SDpnt->next) {
  2239. /* Now dump the request lists for each block device */
  2240. printk(KERN_INFO "Dump of pending block device requestsn");
  2241. for (i = 0; i < MAX_BLKDEV; i++) {
  2242. struct list_head * queue_head;
  2243. queue_head = &blk_dev[i].request_queue.queue_head;
  2244. if (!list_empty(queue_head)) {
  2245. struct request *req;
  2246. struct list_head * entry;
  2247. printk(KERN_INFO "%d: ", i);
  2248. entry = queue_head->next;
  2249. do {
  2250. req = blkdev_entry_to_request(entry);
  2251. printk("(%s %d %ld %ld %ld) ",
  2252.    kdevname(req->rq_dev),
  2253.        req->cmd,
  2254.        req->sector,
  2255.        req->nr_sectors,
  2256. req->current_nr_sectors);
  2257. } while ((entry = entry->next) != queue_head);
  2258. printk("n");
  2259. }
  2260. }
  2261. }
  2262. }
  2263. #endif /* CONFIG_SCSI_LOGGING */ /* } */
  2264. }
  2265. #endif /* CONFIG_PROC_FS */
  2266. static int __init scsi_host_no_init (char *str)
  2267. {
  2268.     static int next_no = 0;
  2269.     char *temp;
  2270.     while (str) {
  2271. temp = str;
  2272. while (*temp && (*temp != ':') && (*temp != ','))
  2273.     temp++;
  2274. if (!*temp)
  2275.     temp = NULL;
  2276. else
  2277.     *temp++ = 0;
  2278. scsi_host_no_insert(str, next_no);
  2279. str = temp;
  2280. next_no++;
  2281.     }
  2282.     return 1;
  2283. }
  2284. static char *scsihosts;
  2285. MODULE_PARM(scsihosts, "s");
  2286. MODULE_DESCRIPTION("SCSI core");
  2287. MODULE_LICENSE("GPL");
  2288. #ifndef MODULE
  2289. int __init scsi_setup(char *str)
  2290. {
  2291. scsihosts = str;
  2292. return 1;
  2293. }
  2294. __setup("scsihosts=", scsi_setup);
  2295. #endif
  2296. static int __init init_scsi(void)
  2297. {
  2298. struct proc_dir_entry *generic;
  2299. printk(KERN_INFO "SCSI subsystem driver " REVISION "n");
  2300.         if( scsi_init_minimal_dma_pool() != 0 )
  2301.         {
  2302.                 return 1;
  2303.         }
  2304. /*
  2305.  * This makes /proc/scsi and /proc/scsi/scsi visible.
  2306.  */
  2307. #ifdef CONFIG_PROC_FS
  2308. proc_scsi = proc_mkdir("scsi", 0);
  2309. if (!proc_scsi) {
  2310. printk (KERN_ERR "cannot init /proc/scsin");
  2311. return -ENOMEM;
  2312. }
  2313. generic = create_proc_info_entry ("scsi/scsi", 0, 0, scsi_proc_info);
  2314. if (!generic) {
  2315. printk (KERN_ERR "cannot init /proc/scsi/scsin");
  2316. remove_proc_entry("scsi", 0);
  2317. return -ENOMEM;
  2318. }
  2319. generic->write_proc = proc_scsi_gen_write;
  2320. #endif
  2321.         scsi_devfs_handle = devfs_mk_dir (NULL, "scsi", NULL);
  2322.         if (scsihosts)
  2323. printk(KERN_INFO "scsi: host order: %sn", scsihosts);
  2324. scsi_host_no_init (scsihosts);
  2325. /*
  2326.  * This is where the processing takes place for most everything
  2327.  * when commands are completed.
  2328.  */
  2329. init_bh(SCSI_BH, scsi_bottom_half_handler);
  2330. return 0;
  2331. }
  2332. static void __exit exit_scsi(void)
  2333. {
  2334. Scsi_Host_Name *shn, *shn2 = NULL;
  2335. remove_bh(SCSI_BH);
  2336.         devfs_unregister (scsi_devfs_handle);
  2337.         for (shn = scsi_host_no_list;shn;shn = shn->next) {
  2338. if (shn->name)
  2339. kfree(shn->name);
  2340.                 if (shn2)
  2341. kfree (shn2);
  2342.                 shn2 = shn;
  2343.         }
  2344.         if (shn2)
  2345. kfree (shn2);
  2346. #ifdef CONFIG_PROC_FS
  2347. /* No, we're not here anymore. Don't show the /proc/scsi files. */
  2348. remove_proc_entry ("scsi/scsi", 0);
  2349. remove_proc_entry ("scsi", 0);
  2350. #endif
  2351. /*
  2352.  * Free up the DMA pool.
  2353.  */
  2354. scsi_resize_dma_pool();
  2355. }
  2356. module_init(init_scsi);
  2357. module_exit(exit_scsi);
  2358. /*
  2359.  * Function:    scsi_get_host_dev()
  2360.  *
  2361.  * Purpose:     Create a Scsi_Device that points to the host adapter itself.
  2362.  *
  2363.  * Arguments:   SHpnt   - Host that needs a Scsi_Device
  2364.  *
  2365.  * Lock status: None assumed.
  2366.  *
  2367.  * Returns:     The Scsi_Device or NULL
  2368.  *
  2369.  * Notes:
  2370.  */
  2371. Scsi_Device * scsi_get_host_dev(struct Scsi_Host * SHpnt)
  2372. {
  2373.         Scsi_Device * SDpnt;
  2374.         /*
  2375.          * Attach a single Scsi_Device to the Scsi_Host - this should
  2376.          * be made to look like a "pseudo-device" that points to the
  2377.          * HA itself.  For the moment, we include it at the head of
  2378.          * the host_queue itself - I don't think we want to show this
  2379.          * to the HA in select_queue_depths(), as this would probably confuse
  2380.          * matters.
  2381.          * Note - this device is not accessible from any high-level
  2382.          * drivers (including generics), which is probably not
  2383.          * optimal.  We can add hooks later to attach 
  2384.          */
  2385.         SDpnt = (Scsi_Device *) kmalloc(sizeof(Scsi_Device),
  2386.                                         GFP_ATOMIC);
  2387.         if(SDpnt == NULL)
  2388.          return NULL;
  2389.         
  2390.         memset(SDpnt, 0, sizeof(Scsi_Device));
  2391.         SDpnt->host = SHpnt;
  2392.         SDpnt->id = SHpnt->this_id;
  2393.         SDpnt->type = -1;
  2394.         SDpnt->queue_depth = 1;
  2395.         
  2396. scsi_build_commandblocks(SDpnt);
  2397. scsi_initialize_queue(SDpnt, SHpnt);
  2398. SDpnt->online = TRUE;
  2399.         /*
  2400.          * Initialize the object that we will use to wait for command blocks.
  2401.          */
  2402. init_waitqueue_head(&SDpnt->scpnt_wait);
  2403.         return SDpnt;
  2404. }
  2405. /*
  2406.  * Function:    scsi_free_host_dev()
  2407.  *
  2408.  * Purpose:     Create a Scsi_Device that points to the host adapter itself.
  2409.  *
  2410.  * Arguments:   SHpnt   - Host that needs a Scsi_Device
  2411.  *
  2412.  * Lock status: None assumed.
  2413.  *
  2414.  * Returns:     Nothing
  2415.  *
  2416.  * Notes:
  2417.  */
  2418. void scsi_free_host_dev(Scsi_Device * SDpnt)
  2419. {
  2420.         if( (unsigned char) SDpnt->id != (unsigned char) SDpnt->host->this_id )
  2421.         {
  2422.                 panic("Attempt to delete wrong devicen");
  2423.         }
  2424.         blk_cleanup_queue(&SDpnt->request_queue);
  2425.         /*
  2426.          * We only have a single SCpnt attached to this device.  Free
  2427.          * it now.
  2428.          */
  2429. scsi_release_commandblocks(SDpnt);
  2430.         kfree(SDpnt);
  2431. }
  2432. /*
  2433.  * Function: scsi_reset_provider_done_command
  2434.  *
  2435.  * Purpose: Dummy done routine.
  2436.  *
  2437.  * Notes: Some low level drivers will call scsi_done and end up here,
  2438.  * others won't bother.
  2439.  * We don't want the bogus command used for the bus/device
  2440.  * reset to find its way into the mid-layer so we intercept
  2441.  * it here.
  2442.  */
  2443. static void
  2444. scsi_reset_provider_done_command(Scsi_Cmnd *SCpnt)
  2445. {
  2446. }
  2447. /*
  2448.  * Function: scsi_reset_provider
  2449.  *
  2450.  * Purpose: Send requested reset to a bus or device at any phase.
  2451.  *
  2452.  * Arguments: device - device to send reset to
  2453.  * flag - reset type (see scsi.h)
  2454.  *
  2455.  * Returns: SUCCESS/FAILURE.
  2456.  *
  2457.  * Notes: This is used by the SCSI Generic driver to provide
  2458.  * Bus/Device reset capability.
  2459.  */
  2460. int
  2461. scsi_reset_provider(Scsi_Device *dev, int flag)
  2462. {
  2463. Scsi_Cmnd SC, *SCpnt = &SC;
  2464. int rtn;
  2465. memset(&SCpnt->eh_timeout, 0, sizeof(SCpnt->eh_timeout));
  2466. SCpnt->host                     = dev->host;
  2467. SCpnt->device                   = dev;
  2468. SCpnt->target                   = dev->id;
  2469. SCpnt->lun                      = dev->lun;
  2470. SCpnt->channel                  = dev->channel;
  2471. SCpnt->request.rq_status        = RQ_SCSI_BUSY;
  2472. SCpnt->request.waiting         = NULL;
  2473. SCpnt->use_sg                   = 0;
  2474. SCpnt->old_use_sg               = 0;
  2475. SCpnt->old_cmd_len              = 0;
  2476. SCpnt->underflow                = 0;
  2477. SCpnt->transfersize             = 0;
  2478. SCpnt->resid = 0;
  2479. SCpnt->serial_number            = 0;
  2480. SCpnt->serial_number_at_timeout = 0;
  2481. SCpnt->host_scribble            = NULL;
  2482. SCpnt->next                     = NULL;
  2483. SCpnt->state                    = SCSI_STATE_INITIALIZING;
  2484. SCpnt->owner       = SCSI_OWNER_MIDLEVEL;
  2485.     
  2486. memset(&SCpnt->cmnd, '', sizeof(SCpnt->cmnd));
  2487.     
  2488. SCpnt->scsi_done = scsi_reset_provider_done_command;
  2489. SCpnt->done = NULL;
  2490. SCpnt->reset_chain = NULL;
  2491.         
  2492. SCpnt->buffer = NULL;
  2493. SCpnt->bufflen = 0;
  2494. SCpnt->request_buffer = NULL;
  2495. SCpnt->request_bufflen = 0;
  2496. SCpnt->internal_timeout = NORMAL_TIMEOUT;
  2497. SCpnt->abort_reason = DID_ABORT;
  2498. SCpnt->cmd_len = 0;
  2499. SCpnt->sc_data_direction = SCSI_DATA_UNKNOWN;
  2500. SCpnt->sc_request = NULL;
  2501. SCpnt->sc_magic = SCSI_CMND_MAGIC;
  2502. /*
  2503.  * Sometimes the command can get back into the timer chain,
  2504.  * so use the pid as an identifier.
  2505.  */
  2506. SCpnt->pid = 0;
  2507. if (dev->host->hostt->use_new_eh_code) {
  2508. rtn = scsi_new_reset(SCpnt, flag);
  2509. } else {
  2510. unsigned long flags;
  2511. spin_lock_irqsave(&io_request_lock, flags);
  2512. rtn = scsi_old_reset(SCpnt, flag);
  2513. spin_unlock_irqrestore(&io_request_lock, flags);
  2514. }
  2515. scsi_delete_timer(SCpnt);
  2516. return rtn;
  2517. }
  2518. /*
  2519.  * Overrides for Emacs so that we follow Linus's tabbing style.
  2520.  * Emacs will notice this stuff at the end of the file and automatically
  2521.  * adjust the settings for this buffer only.  This must remain at the end
  2522.  * of the file.
  2523.  * ---------------------------------------------------------------------------
  2524.  * Local variables:
  2525.  * c-indent-level: 4
  2526.  * c-brace-imaginary-offset: 0
  2527.  * c-brace-offset: -4
  2528.  * c-argdecl-indent: 4
  2529.  * c-label-offset: -4
  2530.  * c-continued-statement-offset: 4
  2531.  * c-continued-brace-offset: 0
  2532.  * indent-tabs-mode: nil
  2533.  * tab-width: 8
  2534.  * End:
  2535.  */