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

嵌入式Linux

开发平台:

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