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

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef NDEBUG
  2. #define NDEBUG (NDEBUG_RESTART_SELECT | NDEBUG_ABORT)
  3. #endif
  4. /* 
  5.  * NCR 5380 generic driver routines.  These should make it *trivial*
  6.  *      to implement 5380 SCSI drivers under Linux with a non-trantor
  7.  *      architecture.
  8.  *
  9.  *      Note that these routines also work with NR53c400 family chips.
  10.  *
  11.  * Copyright 1993, Drew Eckhardt
  12.  *      Visionary Computing 
  13.  *      (Unix and Linux consulting and custom programming)
  14.  *      drew@colorado.edu
  15.  *      +1 (303) 666-5836
  16.  *
  17.  * DISTRIBUTION RELEASE 6. 
  18.  *
  19.  * For more information, please consult 
  20.  *
  21.  * NCR 5380 Family
  22.  * SCSI Protocol Controller
  23.  * Databook
  24.  *
  25.  * NCR Microelectronics
  26.  * 1635 Aeroplaza Drive
  27.  * Colorado Springs, CO 80916
  28.  * 1+ (719) 578-3400
  29.  * 1+ (800) 334-5454
  30.  */
  31. /*
  32.  * $Log: NCR5380.c,v $
  33.  * Revision 1.10 1998/9/2 Alan Cox
  34.  * (alan@redhat.com)
  35.  * Fixed up the timer lockups reported so far. Things still suck. Looking 
  36.  * forward to 2.3 and per device request queues. Then it'll be possible to
  37.  * SMP thread this beast and improve life no end.
  38.  
  39.  * Revision 1.9  1997/7/27 Ronald van Cuijlenborg
  40.  * (ronald.van.cuijlenborg@tip.nl or nutty@dds.nl)
  41.  * (hopefully) fixed and enhanced USLEEP
  42.  * added support for DTC3181E card (for Mustek scanner)
  43.  *
  44.  * Revision 1.8 Ingmar Baumgart
  45.  * (ingmar@gonzo.schwaben.de)
  46.  * added support for NCR53C400a card
  47.  *
  48.  * Revision 1.7  1996/3/2       Ray Van Tassle (rayvt@comm.mot.com)
  49.  * added proc_info
  50.  * added support needed for DTC 3180/3280
  51.  * fixed a couple of bugs
  52.  *
  53.  * Revision 1.5  1994/01/19  09:14:57  drew
  54.  * Fixed udelay() hack that was being used on DATAOUT phases
  55.  * instead of a proper wait for the final handshake.
  56.  *
  57.  * Revision 1.4  1994/01/19  06:44:25  drew
  58.  * *** empty log message ***
  59.  *
  60.  * Revision 1.3  1994/01/19  05:24:40  drew
  61.  * Added support for TCR LAST_BYTE_SENT bit.
  62.  *
  63.  * Revision 1.2  1994/01/15  06:14:11  drew
  64.  * REAL DMA support, bug fixes.
  65.  *
  66.  * Revision 1.1  1994/01/15  06:00:54  drew
  67.  * Initial revision
  68.  *
  69.  */
  70. /*
  71.  * Further development / testing that should be done : 
  72.  * 1.  Cleanup the NCR5380_transfer_dma function and DMA operation complete
  73.  *     code so that everything does the same thing that's done at the 
  74.  *     end of a pseudo-DMA read operation.
  75.  *
  76.  * 2.  Fix REAL_DMA (interrupt driven, polled works fine) -
  77.  *     basically, transfer size needs to be reduced by one 
  78.  *     and the last byte read as is done with PSEUDO_DMA.
  79.  * 
  80.  * 4.  Test SCSI-II tagged queueing (I have no devices which support 
  81.  *      tagged queueing)
  82.  *
  83.  * 5.  Test linked command handling code after Eric is ready with 
  84.  *      the high level code.
  85.  */
  86. #if (NDEBUG & NDEBUG_LISTS)
  87. #define LIST(x,y) {printk("LINE:%d   Adding %p to %pn", __LINE__, (void*)(x), (void*)(y)); if ((x)==(y)) udelay(5); }
  88. #define REMOVE(w,x,y,z) {printk("LINE:%d   Removing: %p->%p  %p->%p n", __LINE__, (void*)(w), (void*)(x), (void*)(y), (void*)(z)); if ((x)==(y)) udelay(5); }
  89. #else
  90. #define LIST(x,y)
  91. #define REMOVE(w,x,y,z)
  92. #endif
  93. #ifndef notyet
  94. #undef LINKED
  95. #undef REAL_DMA
  96. #endif
  97. #ifdef REAL_DMA_POLL
  98. #undef READ_OVERRUNS
  99. #define READ_OVERRUNS
  100. #endif
  101. #ifdef BOARD_REQUIRES_NO_DELAY
  102. #define io_recovery_delay(x)
  103. #else
  104. #define io_recovery_delay(x) udelay(x)
  105. #endif
  106. /*
  107.  * Design
  108.  * Issues :
  109.  *
  110.  * The other Linux SCSI drivers were written when Linux was Intel PC-only,
  111.  * and specifically for each board rather than each chip.  This makes their
  112.  * adaptation to platforms like the Mac (Some of which use NCR5380's)
  113.  * more difficult than it has to be.
  114.  *
  115.  * Also, many of the SCSI drivers were written before the command queuing
  116.  * routines were implemented, meaning their implementations of queued 
  117.  * commands were hacked on rather than designed in from the start.
  118.  *
  119.  * When I designed the Linux SCSI drivers I figured that 
  120.  * while having two different SCSI boards in a system might be useful
  121.  * for debugging things, two of the same type wouldn't be used.
  122.  * Well, I was wrong and a number of users have mailed me about running
  123.  * multiple high-performance SCSI boards in a server.
  124.  *
  125.  * Finally, when I get questions from users, I have no idea what 
  126.  * revision of my driver they are running.
  127.  *
  128.  * This driver attempts to address these problems :
  129.  * This is a generic 5380 driver.  To use it on a different platform, 
  130.  * one simply writes appropriate system specific macros (ie, data
  131.  * transfer - some PC's will use the I/O bus, 68K's must use 
  132.  * memory mapped) and drops this file in their 'C' wrapper.
  133.  *
  134.  * As far as command queueing, two queues are maintained for 
  135.  * each 5380 in the system - commands that haven't been issued yet,
  136.  * and commands that are currently executing.  This means that an 
  137.  * unlimited number of commands may be queued, letting 
  138.  * more commands propagate from the higher driver levels giving higher 
  139.  * throughput.  Note that both I_T_L and I_T_L_Q nexuses are supported, 
  140.  * allowing multiple commands to propagate all the way to a SCSI-II device 
  141.  * while a command is already executing.
  142.  *
  143.  * To solve the multiple-boards-in-the-same-system problem, 
  144.  * there is a separate instance structure for each instance
  145.  * of a 5380 in the system.  So, multiple NCR5380 drivers will
  146.  * be able to coexist with appropriate changes to the high level
  147.  * SCSI code.  
  148.  *
  149.  * A NCR5380_PUBLIC_REVISION macro is provided, with the release
  150.  * number (updated for each public release) printed by the 
  151.  * NCR5380_print_options command, which should be called from the 
  152.  * wrapper detect function, so that I know what release of the driver
  153.  * users are using.
  154.  *
  155.  * Issues specific to the NCR5380 : 
  156.  *
  157.  * When used in a PIO or pseudo-dma mode, the NCR5380 is a braindead 
  158.  * piece of hardware that requires you to sit in a loop polling for 
  159.  * the REQ signal as long as you are connected.  Some devices are 
  160.  * brain dead (ie, many TEXEL CD ROM drives) and won't disconnect 
  161.  * while doing long seek operations.
  162.  * 
  163.  * The workaround for this is to keep track of devices that have
  164.  * disconnected.  If the device hasn't disconnected, for commands that
  165.  * should disconnect, we do something like 
  166.  *
  167.  * while (!REQ is asserted) { sleep for N usecs; poll for M usecs }
  168.  * 
  169.  * Some tweaking of N and M needs to be done.  An algorithm based 
  170.  * on "time to data" would give the best results as long as short time
  171.  * to datas (ie, on the same track) were considered, however these 
  172.  * broken devices are the exception rather than the rule and I'd rather
  173.  * spend my time optimizing for the normal case.
  174.  *
  175.  * Architecture :
  176.  *
  177.  * At the heart of the design is a coroutine, NCR5380_main,
  178.  * which is started when not running by the interrupt handler,
  179.  * timer, and queue command function.  It attempts to establish
  180.  * I_T_L or I_T_L_Q nexuses by removing the commands from the 
  181.  * issue queue and calling NCR5380_select() if a nexus 
  182.  * is not established. 
  183.  *
  184.  * Once a nexus is established, the NCR5380_information_transfer()
  185.  * phase goes through the various phases as instructed by the target.
  186.  * if the target goes into MSG IN and sends a DISCONNECT message,
  187.  * the command structure is placed into the per instance disconnected
  188.  * queue, and NCR5380_main tries to find more work.  If the target is 
  189.  * idle for too long, the system will try to sleep.
  190.  *
  191.  * If a command has disconnected, eventually an interrupt will trigger,
  192.  * calling NCR5380_intr()  which will in turn call NCR5380_reselect
  193.  * to reestablish a nexus.  This will run main if necessary.
  194.  *
  195.  * On command termination, the done function will be called as 
  196.  * appropriate.
  197.  *
  198.  * SCSI pointers are maintained in the SCp field of SCSI command 
  199.  * structures, being initialized after the command is connected
  200.  * in NCR5380_select, and set as appropriate in NCR5380_information_transfer.
  201.  * Note that in violation of the standard, an implicit SAVE POINTERS operation
  202.  * is done, since some BROKEN disks fail to issue an explicit SAVE POINTERS.
  203.  */
  204. /*
  205.  * Using this file :
  206.  * This file a skeleton Linux SCSI driver for the NCR 5380 series
  207.  * of chips.  To use it, you write an architecture specific functions 
  208.  * and macros and include this file in your driver.
  209.  *
  210.  * These macros control options : 
  211.  * AUTOPROBE_IRQ - if defined, the NCR5380_probe_irq() function will be 
  212.  *      defined.
  213.  * 
  214.  * AUTOSENSE - if defined, REQUEST SENSE will be performed automatically
  215.  *      for commands that return with a CHECK CONDITION status. 
  216.  *
  217.  * DIFFERENTIAL - if defined, NCR53c81 chips will use external differential
  218.  *      transceivers. 
  219.  *
  220.  * DONT_USE_INTR - if defined, never use interrupts, even if we probe or
  221.  *      override-configure an IRQ.
  222.  *
  223.  * LIMIT_TRANSFERSIZE - if defined, limit the pseudo-dma transfers to 512
  224.  *      bytes at a time.  Since interrupts are disabled by default during
  225.  *      these transfers, we might need this to give reasonable interrupt
  226.  *      service time if the transfer size gets too large.
  227.  *
  228.  * LINKED - if defined, linked commands are supported.
  229.  *
  230.  * PSEUDO_DMA - if defined, PSEUDO DMA is used during the data transfer phases.
  231.  *
  232.  * REAL_DMA - if defined, REAL DMA is used during the data transfer phases.
  233.  *
  234.  * REAL_DMA_POLL - if defined, REAL DMA is used but the driver doesn't
  235.  *      rely on phase mismatch and EOP interrupts to determine end 
  236.  *      of phase.
  237.  *
  238.  * UNSAFE - leave interrupts enabled during pseudo-DMA transfers.  You
  239.  *          only really want to use this if you're having a problem with
  240.  *          dropped characters during high speed communications, and even
  241.  *          then, you're going to be better off twiddling with transfersize
  242.  *          in the high level code.
  243.  *
  244.  * Defaults for these will be provided although the user may want to adjust 
  245.  * these to allocate CPU resources to the SCSI driver or "real" code.
  246.  * 
  247.  * USLEEP_SLEEP - amount of time, in jiffies, to sleep
  248.  *
  249.  * USLEEP_POLL - amount of time, in jiffies, to poll
  250.  *
  251.  * These macros MUST be defined :
  252.  * NCR5380_local_declare() - declare any local variables needed for your
  253.  *      transfer routines.
  254.  *
  255.  * NCR5380_setup(instance) - initialize any local variables needed from a given
  256.  *      instance of the host adapter for NCR5380_{read,write,pread,pwrite}
  257.  * 
  258.  * NCR5380_read(register)  - read from the specified register
  259.  *
  260.  * NCR5380_write(register, value) - write to the specific register 
  261.  *
  262.  * NCR5380_implementation_fields  - additional fields needed for this 
  263.  *      specific implementation of the NCR5380
  264.  *
  265.  * Either real DMA *or* pseudo DMA may be implemented
  266.  * REAL functions : 
  267.  * NCR5380_REAL_DMA should be defined if real DMA is to be used.
  268.  * Note that the DMA setup functions should return the number of bytes 
  269.  *      that they were able to program the controller for.
  270.  *
  271.  * Also note that generic i386/PC versions of these macros are 
  272.  *      available as NCR5380_i386_dma_write_setup,
  273.  *      NCR5380_i386_dma_read_setup, and NCR5380_i386_dma_residual.
  274.  *
  275.  * NCR5380_dma_write_setup(instance, src, count) - initialize
  276.  * NCR5380_dma_read_setup(instance, dst, count) - initialize
  277.  * NCR5380_dma_residual(instance); - residual count
  278.  *
  279.  * PSEUDO functions :
  280.  * NCR5380_pwrite(instance, src, count)
  281.  * NCR5380_pread(instance, dst, count);
  282.  *
  283.  * If nothing specific to this implementation needs doing (ie, with external
  284.  * hardware), you must also define 
  285.  *  
  286.  * NCR5380_queue_command
  287.  * NCR5380_reset
  288.  * NCR5380_abort
  289.  * NCR5380_proc_info
  290.  *
  291.  * to be the global entry points into the specific driver, ie 
  292.  * #define NCR5380_queue_command t128_queue_command.
  293.  *
  294.  * If this is not done, the routines will be defined as static functions
  295.  * with the NCR5380* names and the user must provide a globally
  296.  * accessible wrapper function.
  297.  *
  298.  * The generic driver is initialized by calling NCR5380_init(instance),
  299.  * after setting the appropriate host specific fields and ID.  If the 
  300.  * driver wishes to autoprobe for an IRQ line, the NCR5380_probe_irq(instance,
  301.  * possible) function may be used.  Before the specific driver initialization
  302.  * code finishes, NCR5380_print_options should be called.
  303.  */
  304. static int do_abort(struct Scsi_Host *host);
  305. static void do_reset(struct Scsi_Host *host);
  306. static struct Scsi_Host *first_instance = NULL;
  307. static Scsi_Host_Template *the_template = NULL;
  308. static struct timer_list usleep_timer;
  309. /*
  310.  * initialize_SCp - init the scsi pointer field
  311.  * @cmd: command block to set up
  312.  *
  313.  * Set up the internal fields in the SCSI command.
  314.  */
  315. static __inline__ void initialize_SCp(Scsi_Cmnd * cmd)
  316. {
  317. /* 
  318.  * Initialize the Scsi Pointer field so that all of the commands in the 
  319.  * various queues are valid.
  320.  */
  321. if (cmd->use_sg) {
  322. cmd->SCp.buffer = (struct scatterlist *) cmd->buffer;
  323. cmd->SCp.buffers_residual = cmd->use_sg - 1;
  324. cmd->SCp.ptr = (char *) cmd->SCp.buffer->address;
  325. cmd->SCp.this_residual = cmd->SCp.buffer->length;
  326. } else {
  327. cmd->SCp.buffer = NULL;
  328. cmd->SCp.buffers_residual = 0;
  329. cmd->SCp.ptr = (char *) cmd->request_buffer;
  330. cmd->SCp.this_residual = cmd->request_bufflen;
  331. }
  332. }
  333. #include <linux/delay.h>
  334. #ifdef NDEBUG
  335. static struct {
  336. unsigned char mask;
  337. const char *name;
  338. } signals[] = { 
  339. {SR_DBP, "PARITY"}, 
  340. {SR_RST, "RST"}, 
  341. {SR_BSY, "BSY"}, 
  342. {SR_REQ, "REQ"}, 
  343. {SR_MSG, "MSG"}, 
  344. {SR_CD, "CD"}, 
  345. {SR_IO, "IO"}, 
  346. {SR_SEL, "SEL"}, 
  347. {0, NULL}
  348. }, 
  349. basrs[] = {
  350. {BASR_ATN, "ATN"}, 
  351. {BASR_ACK, "ACK"}, 
  352. {0, NULL}
  353. }, 
  354. icrs[] = { 
  355. {ICR_ASSERT_RST, "ASSERT RST"}, 
  356. {ICR_ASSERT_ACK, "ASSERT ACK"}, 
  357. {ICR_ASSERT_BSY, "ASSERT BSY"}, 
  358. {ICR_ASSERT_SEL, "ASSERT SEL"}, 
  359. {ICR_ASSERT_ATN, "ASSERT ATN"}, 
  360. {ICR_ASSERT_DATA, "ASSERT DATA"}, 
  361. {0, NULL}
  362. }, 
  363. mrs[] = { 
  364. {MR_BLOCK_DMA_MODE, "MODE BLOCK DMA"}, 
  365. {MR_TARGET, "MODE TARGET"}, 
  366. {MR_ENABLE_PAR_CHECK, "MODE PARITY CHECK"}, 
  367. {MR_ENABLE_PAR_INTR, "MODE PARITY INTR"}, 
  368. {MR_MONITOR_BSY, "MODE MONITOR BSY"}, 
  369. {MR_DMA_MODE, "MODE DMA"}, 
  370. {MR_ARBITRATE, "MODE ARBITRATION"}, 
  371. {0, NULL}
  372. };
  373. /**
  374.  * NCR5380_print - print scsi bus signals
  375.  * @instance: adapter state to dump
  376.  *
  377.  * Print the SCSI bus signals for debugging purposes
  378.  *
  379.  * Locks: none
  380.  */
  381. static void NCR5380_print(struct Scsi_Host *instance)
  382. {
  383. NCR5380_local_declare();
  384. unsigned long flags;
  385. unsigned char status, data, basr, mr, icr, i;
  386. NCR5380_setup(instance);
  387. /* FIXME - this needs proper locking */
  388. save_flags(flags);
  389. cli();
  390. data = NCR5380_read(CURRENT_SCSI_DATA_REG);
  391. status = NCR5380_read(STATUS_REG);
  392. mr = NCR5380_read(MODE_REG);
  393. icr = NCR5380_read(INITIATOR_COMMAND_REG);
  394. basr = NCR5380_read(BUS_AND_STATUS_REG);
  395. restore_flags(flags);
  396. printk("STATUS_REG: %02x ", status);
  397. for (i = 0; signals[i].mask; ++i)
  398. if (status & signals[i].mask)
  399. printk(",%s", signals[i].name);
  400. printk("nBASR: %02x ", basr);
  401. for (i = 0; basrs[i].mask; ++i)
  402. if (basr & basrs[i].mask)
  403. printk(",%s", basrs[i].name);
  404. printk("nICR: %02x ", icr);
  405. for (i = 0; icrs[i].mask; ++i)
  406. if (icr & icrs[i].mask)
  407. printk(",%s", icrs[i].name);
  408. printk("nMODE: %02x ", mr);
  409. for (i = 0; mrs[i].mask; ++i)
  410. if (mr & mrs[i].mask)
  411. printk(",%s", mrs[i].name);
  412. printk("n");
  413. }
  414. static struct {
  415. unsigned char value;
  416. const char *name;
  417. } phases[] = {
  418. {PHASE_DATAOUT, "DATAOUT"}, 
  419. {PHASE_DATAIN, "DATAIN"}, 
  420. {PHASE_CMDOUT, "CMDOUT"}, 
  421. {PHASE_STATIN, "STATIN"}, 
  422. {PHASE_MSGOUT, "MSGOUT"}, 
  423. {PHASE_MSGIN, "MSGIN"}, 
  424. {PHASE_UNKNOWN, "UNKNOWN"}
  425. };
  426. /* 
  427.  * NCR5380_print_phase - show SCSI phase
  428.  * @instance: adapter to dump
  429.  *
  430.  *  Print the current SCSI phase for debugging purposes
  431.  *
  432.  * Locks: none
  433.  */
  434. static void NCR5380_print_phase(struct Scsi_Host *instance)
  435. {
  436. NCR5380_local_declare();
  437. unsigned char status;
  438. int i;
  439. NCR5380_setup(instance);
  440. status = NCR5380_read(STATUS_REG);
  441. if (!(status & SR_REQ))
  442. printk("scsi%d : REQ not asserted, phase unknown.n", instance->host_no);
  443. else {
  444. for (i = 0; (phases[i].value != PHASE_UNKNOWN) && (phases[i].value != (status & PHASE_MASK)); ++i);
  445. printk("scsi%d : phase %sn", instance->host_no, phases[i].name);
  446. }
  447. }
  448. #endif
  449. /*
  450.  * We need to have our coroutine active given these constraints : 
  451.  * 1.  The mutex flag, main_running, can only be set when the main 
  452.  *     routine can actually process data, otherwise SCSI commands
  453.  *     will never get issued.
  454.  *
  455.  * 2.  NCR5380_main() shouldn't be called before it has exited, because
  456.  *     other drivers have had kernel stack overflows in similar
  457.  *     situations.
  458.  *
  459.  * 3.  We don't want to inline NCR5380_main() because of space concerns,
  460.  *     even though it is only called in two places.
  461.  *
  462.  * So, the solution is to set the mutex in an inline wrapper for the 
  463.  * main coroutine, and have the main coroutine exit with interrupts 
  464.  * disabled after the final search through the queues so that no race 
  465.  * conditions are possible.
  466.  */
  467. static unsigned long main_running = 0;
  468. /* 
  469.  * Function : run_main(void)
  470.  * 
  471.  * Purpose : insure that the coroutine is running and will process our 
  472.  *      request.  main_running is checked/set here (in an inline function)
  473.  *      rather than in NCR5380_main itself to reduce the chances of stack
  474.  *      overflow.
  475.  *
  476.  */
  477. static __inline__ void run_main(void)
  478. {
  479. if (!test_and_set_bit(0, &main_running))
  480. NCR5380_main();
  481. }
  482. /*
  483.  * These need tweaking, and would probably work best as per-device 
  484.  * flags initialized differently for disk, tape, cd, etc devices.
  485.  * People with broken devices are free to experiment as to what gives
  486.  * the best results for them.
  487.  *
  488.  * USLEEP_SLEEP should be a minimum seek time.
  489.  *
  490.  * USLEEP_POLL should be a maximum rotational latency.
  491.  */
  492. #ifndef USLEEP_SLEEP
  493. /* 20 ms (reasonable hard disk speed) */
  494. #define USLEEP_SLEEP (20*HZ/1000)
  495. #endif
  496. /* 300 RPM (floppy speed) */
  497. #ifndef USLEEP_POLL
  498. #define USLEEP_POLL (200*HZ/1000)
  499. #endif
  500. #ifndef USLEEP_WAITLONG
  501. /* RvC: (reasonable time to wait on select error) */
  502. #define USLEEP_WAITLONG USLEEP_SLEEP
  503. #endif
  504. static struct Scsi_Host *expires_first = NULL;
  505. /* 
  506.  * Function : int should_disconnect (unsigned char cmd)
  507.  *
  508.  * Purpose : decide weather a command would normally disconnect or 
  509.  *      not, since if it won't disconnect we should go to sleep.
  510.  *
  511.  * Input : cmd - opcode of SCSI command
  512.  *
  513.  * Returns : DISCONNECT_LONG if we should disconnect for a really long 
  514.  *      time (ie always, sleep, look for REQ active, sleep), 
  515.  *      DISCONNECT_TIME_TO_DATA if we would only disconnect for a normal
  516.  *      time-to-data delay, DISCONNECT_NONE if this command would return
  517.  *      immediately.
  518.  *
  519.  *      Future sleep algorithms based on time to data can exploit 
  520.  *      something like this so they can differentiate between "normal" 
  521.  *      (ie, read, write, seek) and unusual commands (ie, * format).
  522.  *
  523.  * Note : We don't deal with commands that handle an immediate disconnect,
  524.  *        
  525.  */
  526. static int should_disconnect(unsigned char cmd)
  527. {
  528. switch (cmd) {
  529. case READ_6:
  530. case WRITE_6:
  531. case SEEK_6:
  532. case READ_10:
  533. case WRITE_10:
  534. case SEEK_10:
  535. return DISCONNECT_TIME_TO_DATA;
  536. case FORMAT_UNIT:
  537. case SEARCH_HIGH:
  538. case SEARCH_LOW:
  539. case SEARCH_EQUAL:
  540. return DISCONNECT_LONG;
  541. default:
  542. return DISCONNECT_NONE;
  543. }
  544. }
  545. /*
  546.  * Assumes instance->time_expires has been set in higher level code.
  547.  *
  548.  * Locks: Caller must hold io_request_lock
  549.  */
  550. static int NCR5380_set_timer(struct Scsi_Host *instance)
  551. {
  552. struct Scsi_Host *tmp, **prev;
  553. if (((struct NCR5380_hostdata *) (instance->hostdata))->next_timer) {
  554. return -1;
  555. }
  556. for (prev = &expires_first, tmp = expires_first; tmp; prev = &(((struct NCR5380_hostdata *) tmp->hostdata)->next_timer), tmp = ((struct NCR5380_hostdata *) tmp->hostdata)->next_timer)
  557. if (((struct NCR5380_hostdata *) instance->hostdata)->time_expires < ((struct NCR5380_hostdata *) tmp->hostdata)->time_expires)
  558. break;
  559. ((struct NCR5380_hostdata *) instance->hostdata)->next_timer = tmp;
  560. *prev = instance;
  561. mod_timer(&usleep_timer, ((struct NCR5380_hostdata *) expires_first->hostdata)->time_expires);
  562. return 0;
  563. }
  564. /**
  565.  * NCR5380_timer_fn - handle polled timeouts
  566.  * @unused: unused
  567.  *
  568.  * Walk the list of controllers, find which controllers have exceeded
  569.  * their expiry timeout and then schedule the processing co-routine to
  570.  * do the real work.
  571.  *
  572.  * Doing something about unwanted reentrancy here might be useful 
  573.  *
  574.  * Locks: disables irqs, takes and frees io_request_lock
  575.  */
  576.  
  577. static void NCR5380_timer_fn(unsigned long unused)
  578. {
  579. struct Scsi_Host *instance;
  580. spin_lock_irq(&io_request_lock);
  581. for (; expires_first && time_before_eq(((struct NCR5380_hostdata *) expires_first->hostdata)->time_expires, jiffies);) {
  582. instance = ((struct NCR5380_hostdata *) expires_first->hostdata)->next_timer;
  583. ((struct NCR5380_hostdata *) expires_first->hostdata)->next_timer = NULL;
  584. ((struct NCR5380_hostdata *) expires_first->hostdata)->time_expires = 0;
  585. expires_first = instance;
  586. }
  587. del_timer(&usleep_timer);
  588. if (expires_first) {
  589. usleep_timer.expires = ((struct NCR5380_hostdata *) expires_first->hostdata)->time_expires;
  590. add_timer(&usleep_timer);
  591. }
  592. run_main();
  593. spin_unlock_irq(&io_request_lock);
  594. }
  595. /**
  596.  * NCR5380_all_init - global setup
  597.  *
  598.  * Set up the global values and timers needed by the NCR5380 driver
  599.  */
  600.  
  601. static inline void NCR5380_all_init(void)
  602. {
  603. static int done = 0;
  604. if (!done) {
  605. dprintk(NDEBUG_INIT, ("scsi : NCR5380_all_init()n"));
  606. done = 1;
  607. init_timer(&usleep_timer);
  608. usleep_timer.function = NCR5380_timer_fn;
  609. }
  610. }
  611. static int probe_irq __initdata = 0;
  612. /**
  613.  * probe_intr - helper for IRQ autoprobe
  614.  * @irq: interrupt number
  615.  * @dev_id: unused
  616.  * @regs: unused
  617.  *
  618.  * Set a flag to indicate the IRQ in question was received. This is
  619.  * used by the IRQ probe code.
  620.  */
  621.  
  622. static void __init probe_intr(int irq, void *dev_id, struct pt_regs *regs)
  623. {
  624. probe_irq = irq;
  625. }
  626. /**
  627.  * NCR5380_probe_irq - find the IRQ of an NCR5380
  628.  * @instance: NCR5380 controller
  629.  * @possible: bitmask of ISA IRQ lines
  630.  *
  631.  * Autoprobe for the IRQ line used by the NCR5380 by triggering an IRQ
  632.  * and then looking to see what interrupt actually turned up.
  633.  *
  634.  * Locks: none, irqs must be enabled on entry
  635.  */
  636. static int __init NCR5380_probe_irq(struct Scsi_Host *instance, int possible)
  637. {
  638. NCR5380_local_declare();
  639. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
  640. unsigned long timeout;
  641. int trying_irqs, i, mask;
  642. NCR5380_setup(instance);
  643. for (trying_irqs = i = 0, mask = 1; i < 16; ++i, mask <<= 1)
  644. if ((mask & possible) && (request_irq(i, &probe_intr, SA_INTERRUPT, "NCR-probe", NULL) == 0))
  645. trying_irqs |= mask;
  646. timeout = jiffies + (250 * HZ / 1000);
  647. probe_irq = IRQ_NONE;
  648. /*
  649.  * A interrupt is triggered whenever BSY = false, SEL = true
  650.  * and a bit set in the SELECT_ENABLE_REG is asserted on the 
  651.  * SCSI bus.
  652.  *
  653.  * Note that the bus is only driven when the phase control signals
  654.  * (I/O, C/D, and MSG) match those in the TCR, so we must reset that
  655.  * to zero.
  656.  */
  657. NCR5380_write(TARGET_COMMAND_REG, 0);
  658. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  659. NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask);
  660. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_SEL);
  661. while (probe_irq == IRQ_NONE && time_before(jiffies, timeout))
  662. barrier();
  663. NCR5380_write(SELECT_ENABLE_REG, 0);
  664. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  665. for (i = 0, mask = 1; i < 16; ++i, mask <<= 1)
  666. if (trying_irqs & mask)
  667. free_irq(i, NULL);
  668. return probe_irq;
  669. }
  670. /**
  671.  * NCR58380_print_options - show options
  672.  * @instance: unused for now
  673.  *
  674.  * Called by probe code indicating the NCR5380 driver options that 
  675.  * were selected. At some point this will switch to runtime options
  676.  * read from the adapter in question
  677.  *
  678.  * Locks: none
  679.  */
  680. static void __init NCR5380_print_options(struct Scsi_Host *instance)
  681. {
  682. printk(" generic options"
  683. #ifdef AUTOPROBE_IRQ
  684.        " AUTOPROBE_IRQ"
  685. #endif
  686. #ifdef AUTOSENSE
  687.        " AUTOSENSE"
  688. #endif
  689. #ifdef DIFFERENTIAL
  690.        " DIFFERENTIAL"
  691. #endif
  692. #ifdef REAL_DMA
  693.        " REAL DMA"
  694. #endif
  695. #ifdef REAL_DMA_POLL
  696.        " REAL DMA POLL"
  697. #endif
  698. #ifdef PARITY
  699.        " PARITY"
  700. #endif
  701. #ifdef PSEUDO_DMA
  702.        " PSEUDO DMA"
  703. #endif
  704. #ifdef UNSAFE
  705.        " UNSAFE "
  706. #endif
  707.     );
  708. printk(" USLEEP, USLEEP_POLL=%d USLEEP_SLEEP=%d", USLEEP_POLL, USLEEP_SLEEP);
  709. printk(" generic release=%d", NCR5380_PUBLIC_RELEASE);
  710. if (((struct NCR5380_hostdata *) instance->hostdata)->flags & FLAG_NCR53C400) {
  711. printk(" ncr53c400 release=%d", NCR53C400_PUBLIC_RELEASE);
  712. }
  713. }
  714. /**
  715.  * NCR5380_print_status  - dump controller info
  716.  * @instance: controller to dump
  717.  *
  718.  * Print commands in the various queues, called from NCR5380_abort 
  719.  * and NCR5380_debug to aid debugging.
  720.  *
  721.  * Locks: called functions disable irqs, missing queue lock in proc call
  722.  */
  723. static void NCR5380_print_status(struct Scsi_Host *instance)
  724. {
  725. static char pr_bfr[512];
  726. char *start;
  727. int len;
  728. printk("NCR5380 : coroutine is%s running.n", main_running ? "" : "n't");
  729. NCR5380_dprint(NDEBUG_ANY, instance);
  730. NCR5380_dprint_phase(NDEBUG_ANY, instance);
  731. len = NCR5380_proc_info(pr_bfr, &start, 0, sizeof(pr_bfr), instance->host_no, 0);
  732. pr_bfr[len] = 0;
  733. printk("n%sn", pr_bfr);
  734. }
  735. /******************************************/
  736. /*
  737.  * /proc/scsi/[dtc pas16 t128 generic]/[0-ASC_NUM_BOARD_SUPPORTED]
  738.  *
  739.  * *buffer: I/O buffer
  740.  * **start: if inout == FALSE pointer into buffer where user read should start
  741.  * offset: current offset
  742.  * length: length of buffer
  743.  * hostno: Scsi_Host host_no
  744.  * inout: TRUE - user is writing; FALSE - user is reading
  745.  *
  746.  * Return the number of bytes read from or written
  747.  */
  748. #undef SPRINTF
  749. #define SPRINTF(args...) do { if(pos < buffer + length-80) pos += sprintf(pos, ## args); } while(0)
  750. static
  751. char *lprint_Scsi_Cmnd(Scsi_Cmnd * cmd, char *pos, char *buffer, int length);
  752. static
  753. char *lprint_command(unsigned char *cmd, char *pos, char *buffer, int len);
  754. static
  755. char *lprint_opcode(int opcode, char *pos, char *buffer, int length);
  756. #ifndef NCR5380_proc_info
  757. static
  758. #endif
  759. int NCR5380_proc_info(char *buffer, char **start, off_t offset, int length, int hostno, int inout)
  760. {
  761. char *pos = buffer;
  762. struct Scsi_Host *instance;
  763. struct NCR5380_hostdata *hostdata;
  764. Scsi_Cmnd *ptr;
  765. for (instance = first_instance; instance && instance->host_no != hostno; instance = instance->next);
  766. if (!instance)
  767. return (-ESRCH);
  768. hostdata = (struct NCR5380_hostdata *) instance->hostdata;
  769. if (inout) { /* Has data been written to the file ? */
  770. #ifdef DTC_PUBLIC_RELEASE
  771. dtc_wmaxi = dtc_maxi = 0;
  772. #endif
  773. #ifdef PAS16_PUBLIC_RELEASE
  774. pas_wmaxi = pas_maxi = 0;
  775. #endif
  776. return (-ENOSYS); /* Currently this is a no-op */
  777. }
  778. SPRINTF("NCR5380 core release=%d.   ", NCR5380_PUBLIC_RELEASE);
  779. if (((struct NCR5380_hostdata *) instance->hostdata)->flags & FLAG_NCR53C400)
  780. SPRINTF("ncr53c400 release=%d.  ", NCR53C400_PUBLIC_RELEASE);
  781. #ifdef DTC_PUBLIC_RELEASE
  782. SPRINTF("DTC 3180/3280 release %d", DTC_PUBLIC_RELEASE);
  783. #endif
  784. #ifdef T128_PUBLIC_RELEASE
  785. SPRINTF("T128 release %d", T128_PUBLIC_RELEASE);
  786. #endif
  787. #ifdef GENERIC_NCR5380_PUBLIC_RELEASE
  788. SPRINTF("Generic5380 release %d", GENERIC_NCR5380_PUBLIC_RELEASE);
  789. #endif
  790. #ifdef PAS16_PUBLIC_RELEASE
  791. SPRINTF("PAS16 release=%d", PAS16_PUBLIC_RELEASE);
  792. #endif
  793. SPRINTF("nBase Addr: 0x%05lX    ", (long) instance->base);
  794. SPRINTF("io_port: %04x      ", (int) instance->io_port);
  795. if (instance->irq == IRQ_NONE)
  796. SPRINTF("IRQ: None.n");
  797. else
  798. SPRINTF("IRQ: %d.n", instance->irq);
  799. #ifdef DTC_PUBLIC_RELEASE
  800. SPRINTF("Highwater I/O busy_spin_counts -- write: %d  read: %dn", dtc_wmaxi, dtc_maxi);
  801. #endif
  802. #ifdef PAS16_PUBLIC_RELEASE
  803. SPRINTF("Highwater I/O busy_spin_counts -- write: %d  read: %dn", pas_wmaxi, pas_maxi);
  804. #endif
  805. spin_lock_irq(&io_request_lock);
  806. SPRINTF("NCR5380 : coroutine is%s running.n", main_running ? "" : "n't");
  807. if (!hostdata->connected)
  808. SPRINTF("scsi%d: no currently connected commandn", instance->host_no);
  809. else
  810. pos = lprint_Scsi_Cmnd((Scsi_Cmnd *) hostdata->connected, pos, buffer, length);
  811. SPRINTF("scsi%d: issue_queuen", instance->host_no);
  812. for (ptr = (Scsi_Cmnd *) hostdata->issue_queue; ptr; ptr = (Scsi_Cmnd *) ptr->host_scribble)
  813. pos = lprint_Scsi_Cmnd(ptr, pos, buffer, length);
  814. SPRINTF("scsi%d: disconnected_queuen", instance->host_no);
  815. for (ptr = (Scsi_Cmnd *) hostdata->disconnected_queue; ptr; ptr = (Scsi_Cmnd *) ptr->host_scribble)
  816. pos = lprint_Scsi_Cmnd(ptr, pos, buffer, length);
  817. spin_unlock_irq(&io_request_lock);
  818. *start = buffer;
  819. if (pos - buffer < offset)
  820. return 0;
  821. else if (pos - buffer - offset < length)
  822. return pos - buffer - offset;
  823. return length;
  824. }
  825. static
  826. char *lprint_Scsi_Cmnd(Scsi_Cmnd * cmd, char *pos, char *buffer, int length)
  827. {
  828. SPRINTF("scsi%d : destination target %d, lun %dn", cmd->host->host_no, cmd->target, cmd->lun);
  829. SPRINTF("        command = ");
  830. pos = lprint_command(cmd->cmnd, pos, buffer, length);
  831. return (pos);
  832. }
  833. static
  834. char *lprint_command(unsigned char *command, char *pos, char *buffer, int length)
  835. {
  836. int i, s;
  837. pos = lprint_opcode(command[0], pos, buffer, length);
  838. for (i = 1, s = COMMAND_SIZE(command[0]); i < s; ++i)
  839. SPRINTF("%02x ", command[i]);
  840. SPRINTF("n");
  841. return (pos);
  842. }
  843. static
  844. char *lprint_opcode(int opcode, char *pos, char *buffer, int length)
  845. {
  846. SPRINTF("%2d (0x%02x)", opcode, opcode);
  847. return (pos);
  848. }
  849. /**
  850.  * NCR5380_init - initialise an NCR5380
  851.  * @instance: adapter to configure
  852.  * @flags: control flags
  853.  *
  854.  * Initializes *instance and corresponding 5380 chip,
  855.  *      with flags OR'd into the initial flags value.
  856.  *
  857.  * Notes : I assume that the host, hostno, and id bits have been
  858.  *      set correctly.  I don't care about the irq and other fields. 
  859.  *
  860.  * Locks: interrupts must be enabled when we are called 
  861.  */
  862. static void __init NCR5380_init(struct Scsi_Host *instance, int flags)
  863. {
  864. NCR5380_local_declare();
  865. int i, pass;
  866. unsigned long timeout;
  867. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
  868. if(in_interrupt())
  869. printk(KERN_ERR "NCR5380_init called with interrupts off!n");
  870. /* 
  871.  * On NCR53C400 boards, NCR5380 registers are mapped 8 past 
  872.  * the base address.
  873.  */
  874. #ifdef NCR53C400
  875. if (flags & FLAG_NCR53C400)
  876. instance->NCR5380_instance_name += NCR53C400_address_adjust;
  877. #endif
  878. NCR5380_setup(instance);
  879. NCR5380_all_init();
  880. hostdata->aborted = 0;
  881. hostdata->id_mask = 1 << instance->this_id;
  882. for (i = hostdata->id_mask; i <= 0x80; i <<= 1)
  883. if (i > hostdata->id_mask)
  884. hostdata->id_higher_mask |= i;
  885. for (i = 0; i < 8; ++i)
  886. hostdata->busy[i] = 0;
  887. #ifdef REAL_DMA
  888. hostdata->dmalen = 0;
  889. #endif
  890. hostdata->targets_present = 0;
  891. hostdata->connected = NULL;
  892. hostdata->issue_queue = NULL;
  893. hostdata->disconnected_queue = NULL;
  894. #ifdef NCR5380_STATS
  895. for (i = 0; i < 8; ++i) {
  896. hostdata->time_read[i] = 0;
  897. hostdata->time_write[i] = 0;
  898. hostdata->bytes_read[i] = 0;
  899. hostdata->bytes_write[i] = 0;
  900. }
  901. hostdata->timebase = 0;
  902. hostdata->pendingw = 0;
  903. hostdata->pendingr = 0;
  904. #endif
  905. /* The CHECK code seems to break the 53C400. Will check it later maybe */
  906. if (flags & FLAG_NCR53C400)
  907. hostdata->flags = FLAG_HAS_LAST_BYTE_SENT | flags;
  908. else
  909. hostdata->flags = FLAG_CHECK_LAST_BYTE_SENT | flags;
  910. if (!the_template) {
  911. the_template = instance->hostt;
  912. first_instance = instance;
  913. }
  914. hostdata->time_expires = 0;
  915. hostdata->next_timer = NULL;
  916. #ifndef AUTOSENSE
  917. if ((instance->cmd_per_lun > 1) || instance->can_queue > 1)
  918.     printk(KERN_WARNING "scsi%d : WARNING : support for multiple outstanding commands enabledn" "         without AUTOSENSE option, contingent allegiance conditions mayn"
  919.         "         be incorrectly cleared.n", instance->host_no);
  920. #endif /* def AUTOSENSE */
  921. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  922. NCR5380_write(MODE_REG, MR_BASE);
  923. NCR5380_write(TARGET_COMMAND_REG, 0);
  924. NCR5380_write(SELECT_ENABLE_REG, 0);
  925. #ifdef NCR53C400
  926. if (hostdata->flags & FLAG_NCR53C400) {
  927. NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE);
  928. }
  929. #endif
  930. /* 
  931.  * Detect and correct bus wedge problems.
  932.  *
  933.  * If the system crashed, it may have crashed in a state 
  934.  * where a SCSI command was still executing, and the 
  935.  * SCSI bus is not in a BUS FREE STATE.
  936.  *
  937.  * If this is the case, we'll try to abort the currently
  938.  * established nexus which we know nothing about, and that
  939.  * failing, do a hard reset of the SCSI bus 
  940.  */
  941. for (pass = 1; (NCR5380_read(STATUS_REG) & SR_BSY) && pass <= 6; ++pass) {
  942. switch (pass) {
  943. case 1:
  944. case 3:
  945. case 5:
  946. printk("scsi%d: SCSI bus busy, waiting up to five secondsn", instance->host_no);
  947. timeout = jiffies + 5 * HZ;
  948. while (time_before(jiffies, timeout) && (NCR5380_read(STATUS_REG) & SR_BSY));
  949. break;
  950. case 2:
  951. printk("scsi%d: bus busy, attempting abortn", instance->host_no);
  952. do_abort(instance);
  953. break;
  954. case 4:
  955. printk("scsi%d: bus busy, attempting resetn", instance->host_no);
  956. do_reset(instance);
  957. break;
  958. case 6:
  959. printk("scsi%d: bus locked solid or invalid overriden", instance->host_no);
  960. }
  961. }
  962. }
  963. /**
  964.  * NCR5380_queue_command  - queue a command
  965.  * @cmd: SCSI command
  966.  * @done: completion handler
  967.  *
  968.  *      cmd is added to the per instance issue_queue, with minor 
  969.  *      twiddling done to the host specific fields of cmd.  If the 
  970.  *      main coroutine is not running, it is restarted.
  971.  *
  972.  * Locks: io_request lock held by caller. Called functions drop and
  973.  * retake this lock. Called functions take dma lock.
  974.  */
  975. /* Only make static if a wrapper function is used */
  976. #ifndef NCR5380_queue_command
  977. static
  978. #endif
  979. int NCR5380_queue_command(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)) {
  980. struct Scsi_Host *instance = cmd->host;
  981. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
  982. Scsi_Cmnd *tmp;
  983. #if (NDEBUG & NDEBUG_NO_WRITE)
  984. switch (cmd->cmnd[0]) {
  985. case WRITE_6:
  986. case WRITE_10:
  987. printk("scsi%d : WRITE attempted with NO_WRITE debugging flag setn", instance->host_no);
  988. cmd->result = (DID_ERROR << 16);
  989. done(cmd);
  990. return 0;
  991. }
  992. #endif /* (NDEBUG & NDEBUG_NO_WRITE) */
  993. #ifdef NCR5380_STATS
  994. switch (cmd->cmnd[0]) {
  995. case WRITE:
  996. case WRITE_6:
  997. case WRITE_10:
  998. hostdata->time_write[cmd->target] -= (jiffies - hostdata->timebase);
  999. hostdata->bytes_write[cmd->target] += cmd->request_bufflen;
  1000. hostdata->pendingw++;
  1001. break;
  1002. case READ:
  1003. case READ_6:
  1004. case READ_10:
  1005. hostdata->time_read[cmd->target] -= (jiffies - hostdata->timebase);
  1006. hostdata->bytes_read[cmd->target] += cmd->request_bufflen;
  1007. hostdata->pendingr++;
  1008. break;
  1009. }
  1010. #endif
  1011. /* 
  1012.  * We use the host_scribble field as a pointer to the next command  
  1013.  * in a queue 
  1014.  */
  1015. cmd->host_scribble = NULL;
  1016. cmd->scsi_done = done;
  1017. cmd->result = 0;
  1018. /* 
  1019.  * Insert the cmd into the issue queue. Note that REQUEST SENSE 
  1020.  * commands are added to the head of the queue since any command will
  1021.  * clear the contingent allegiance condition that exists and the 
  1022.  * sense data is only guaranteed to be valid while the condition exists.
  1023.  */
  1024. if (!(hostdata->issue_queue) || (cmd->cmnd[0] == REQUEST_SENSE)) {
  1025. LIST(cmd, hostdata->issue_queue);
  1026. cmd->host_scribble = (unsigned char *) hostdata->issue_queue;
  1027. hostdata->issue_queue = cmd;
  1028. } else {
  1029. for (tmp = (Scsi_Cmnd *) hostdata->issue_queue; tmp->host_scribble; tmp = (Scsi_Cmnd *) tmp->host_scribble);
  1030. LIST(cmd, tmp);
  1031. tmp->host_scribble = (unsigned char *) cmd;
  1032. }
  1033. dprintk(NDEBUG_QUEUES, ("scsi%d : command added to %s of queuen", instance->host_no, (cmd->cmnd[0] == REQUEST_SENSE) ? "head" : "tail"));
  1034. /* Run the coroutine if it isn't already running. */
  1035. run_main();
  1036. return 0;
  1037. }
  1038. /**
  1039.  * NCR5380_main - NCR state machines
  1040.  *
  1041.  * NCR5380_main is a coroutine that runs as long as more work can 
  1042.  *      be done on the NCR5380 host adapters in a system.  Both 
  1043.  *      NCR5380_queue_command() and NCR5380_intr() will try to start it 
  1044.  *      in case it is not running.
  1045.  * 
  1046.  * Locks; The caller must hold the io_request_lock. The lock will still be
  1047.  * held on return but may be dropped while running. Called functions take
  1048.  * the DMA lock.
  1049.  */
  1050. static void NCR5380_main(void) {
  1051. Scsi_Cmnd *tmp, *prev;
  1052. struct Scsi_Host *instance;
  1053. struct NCR5380_hostdata *hostdata;
  1054. int done;
  1055. /*
  1056.  * We run (with interrupts disabled) until we're sure that none of 
  1057.  * the host adapters have anything that can be done, at which point 
  1058.  * we set main_running to 0 and exit.
  1059.  *
  1060.  * Interrupts are enabled before doing various other internal 
  1061.  * instructions, after we've decided that we need to run through
  1062.  * the loop again.
  1063.  *
  1064.  * this should prevent any race conditions.
  1065.  */
  1066. do {
  1067. /* Lock held here */
  1068. done = 1;
  1069. for (instance = first_instance; instance && instance->hostt == the_template; instance = instance->next) {
  1070. hostdata = (struct NCR5380_hostdata *) instance->hostdata;
  1071. /* Lock held here */
  1072. if (!hostdata->connected && !hostdata->selecting) {
  1073. dprintk(NDEBUG_MAIN, ("scsi%d : not connectedn", instance->host_no));
  1074. /*
  1075.  * Search through the issue_queue for a command destined
  1076.  * for a target that's not busy.
  1077.  */
  1078. for (tmp = (Scsi_Cmnd *) hostdata->issue_queue, prev = NULL; tmp; prev = tmp, tmp = (Scsi_Cmnd *) tmp->host_scribble) 
  1079. {
  1080. if (prev != tmp)
  1081. dprintk(NDEBUG_LISTS, ("MAIN tmp=%p   target=%d   busy=%d lun=%dn", tmp, tmp->target, hostdata->busy[tmp->target], tmp->lun));
  1082. /*  When we find one, remove it from the issue queue. */
  1083. if (!(hostdata->busy[tmp->target] & (1 << tmp->lun))) {
  1084. if (prev) {
  1085. REMOVE(prev, prev->host_scribble, tmp, tmp->host_scribble);
  1086. prev->host_scribble = tmp->host_scribble;
  1087. } else {
  1088. REMOVE(-1, hostdata->issue_queue, tmp, tmp->host_scribble);
  1089. hostdata->issue_queue = (Scsi_Cmnd *) tmp->host_scribble;
  1090. }
  1091. tmp->host_scribble = NULL;
  1092. /* 
  1093.  * Attempt to establish an I_T_L nexus here. 
  1094.  * On success, instance->hostdata->connected is set.
  1095.  * On failure, we must add the command back to the
  1096.  *   issue queue so we can keep trying. 
  1097.  */
  1098. dprintk(NDEBUG_MAIN|NDEBUG_QUEUES, ("scsi%d : main() : command for target %d lun %d removed from issue_queuen", instance->host_no, tmp->target, tmp->lun));
  1099. /*
  1100.  * A successful selection is defined as one that 
  1101.  * leaves us with the command connected and 
  1102.  * in hostdata->connected, OR has terminated the
  1103.  * command.
  1104.  *
  1105.  * With successful commands, we fall through
  1106.  * and see if we can do an information transfer,
  1107.  * with failures we will restart.
  1108.  */
  1109. hostdata->selecting = 0;
  1110. /* RvC: have to preset this to indicate a new command is being performed */
  1111. if (!NCR5380_select(instance, tmp,
  1112.     /* 
  1113.      * REQUEST SENSE commands are issued without tagged
  1114.      * queueing, even on SCSI-II devices because the 
  1115.      * contingent allegiance condition exists for the 
  1116.      * entire unit.
  1117.      */
  1118.     (tmp->cmnd[0] == REQUEST_SENSE) ? TAG_NONE : TAG_NEXT)) {
  1119. break;
  1120. } else {
  1121. LIST(tmp, hostdata->issue_queue);
  1122. tmp->host_scribble = (unsigned char *) hostdata->issue_queue;
  1123. hostdata->issue_queue = tmp;
  1124. done = 0;
  1125. dprintk(NDEBUG_MAIN|NDEBUG_QUEUES, ("scsi%d : main(): select() failed, returned to issue_queuen", instance->host_no));
  1126. }
  1127. /* lock held here still */
  1128. } /* if target/lun is not busy */
  1129. } /* for */
  1130. /* exited locked */
  1131. } /* if (!hostdata->connected) */
  1132. if (hostdata->selecting) {
  1133. tmp = (Scsi_Cmnd *) hostdata->selecting;
  1134. /* Selection will drop and retake the lock */
  1135. if (!NCR5380_select(instance, tmp, (tmp->cmnd[0] == REQUEST_SENSE) ? TAG_NONE : TAG_NEXT)) {
  1136. /* Ok ?? */
  1137. } else {
  1138. /* RvC: device failed, so we wait a long time
  1139.    this is needed for Mustek scanners, that
  1140.    do not respond to commands immediately
  1141.    after a scan */
  1142. printk(KERN_DEBUG "scsi%d: device %d did not respond in timen", instance->host_no, tmp->target);
  1143. //spin_lock_irq(&io_request_lock);
  1144. LIST(tmp, hostdata->issue_queue);
  1145. tmp->host_scribble = (unsigned char *) hostdata->issue_queue;
  1146. hostdata->issue_queue = tmp;
  1147. //spin_unlock_irq(&io_request_lock);
  1148. hostdata->time_expires = jiffies + USLEEP_WAITLONG;
  1149. NCR5380_set_timer(instance);
  1150. }
  1151. } /* if hostdata->selecting */
  1152. if (hostdata->connected
  1153. #ifdef REAL_DMA
  1154.     && !hostdata->dmalen
  1155. #endif
  1156.     && (!hostdata->time_expires || time_before_eq(hostdata->time_expires, jiffies))
  1157.     ) {
  1158. dprintk(NDEBUG_MAIN, ("scsi%d : main() : performing information transfern", instance->host_no));
  1159. NCR5380_information_transfer(instance);
  1160. dprintk(NDEBUG_MAIN, ("scsi%d : main() : done set falsen", instance->host_no));
  1161. done = 0;
  1162. } else
  1163. break;
  1164. } /* for instance */
  1165. } while (!done);
  1166. /* Exit lock held */
  1167. clear_bit(0, &main_running);
  1168. }
  1169. #ifndef DONT_USE_INTR
  1170. #include <linux/blk.h>
  1171. #include <linux/spinlock.h>
  1172. /**
  1173.  *  NCR5380_intr - generic NCR5380 irq handler
  1174.  *
  1175.  * Handle interrupts, reestablishing I_T_L or I_T_L_Q nexuses
  1176.  *      from the disconnected queue, and restarting NCR5380_main() 
  1177.  *      as required.
  1178.  *
  1179.  * Locks: caller must hold the io_request lock.
  1180.  */
  1181. static void NCR5380_intr(int irq, void *dev_id, struct pt_regs *regs) {
  1182. NCR5380_local_declare();
  1183. struct Scsi_Host *instance;
  1184. int done;
  1185. unsigned char basr;
  1186. dprintk(NDEBUG_INTR, ("scsi : NCR5380 irq %d triggeredn", irq));
  1187. do {
  1188. done = 1;
  1189. for (instance = first_instance; instance && (instance->hostt == the_template); instance = instance->next)
  1190. if (instance->irq == irq) {
  1191. /* Look for pending interrupts */
  1192. NCR5380_setup(instance);
  1193. basr = NCR5380_read(BUS_AND_STATUS_REG);
  1194. /* XXX dispatch to appropriate routine if found and done=0 */
  1195. if (basr & BASR_IRQ) {
  1196. NCR5380_dprint(NDEBUG_INTR, instance);
  1197. if ((NCR5380_read(STATUS_REG) & (SR_SEL | SR_IO)) == (SR_SEL | SR_IO)) {
  1198. done = 0;
  1199. dprintk(NDEBUG_INTR, ("scsi%d : SEL interruptn", instance->host_no));
  1200. NCR5380_reselect(instance);
  1201. (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
  1202. } else if (basr & BASR_PARITY_ERROR) {
  1203. dprintk(NDEBUG_INTR, ("scsi%d : PARITY interruptn", instance->host_no));
  1204. (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
  1205. } else if ((NCR5380_read(STATUS_REG) & SR_RST) == SR_RST) {
  1206. dprintk(NDEBUG_INTR, ("scsi%d : RESET interruptn", instance->host_no));
  1207. (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
  1208. } else {
  1209. #if defined(REAL_DMA)
  1210. /*
  1211.  * We should only get PHASE MISMATCH and EOP interrupts
  1212.  * if we have DMA enabled, so do a sanity check based on
  1213.  * the current setting of the MODE register.
  1214.  */
  1215. if ((NCR5380_read(MODE_REG) & MR_DMA) && ((basr & BASR_END_DMA_TRANSFER) || !(basr & BASR_PHASE_MATCH))) {
  1216. int transfered;
  1217. if (!hostdata->connected)
  1218. panic("scsi%d : received end of DMA interrupt with no connected cmdn", instance->hostno);
  1219. transfered = (hostdata->dmalen - NCR5380_dma_residual(instance));
  1220. hostdata->connected->SCp.this_residual -= transferred;
  1221. hostdata->connected->SCp.ptr += transferred;
  1222. hostdata->dmalen = 0;
  1223. (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
  1224. #if NCR_TIMEOUT
  1225. {
  1226. unsigned long timeout = jiffies + NCR_TIMEOUT;
  1227. spin_unlock_irq(&io_request_lock);
  1228. while (NCR5380_read(BUS_AND_STATUS_REG) & BASR_ACK && time_before(jiffies, timeout));
  1229. spin_lock_irq(&io_request_lock);
  1230. if (time_after_eq(jiffies, timeout))
  1231. printk("scsi%d: timeout at NCR5380.c:%dn", host->host_no, __LINE__);
  1232. }
  1233. #else /* NCR_TIMEOUT */
  1234. while (NCR5380_read(BUS_AND_STATUS_REG) & BASR_ACK);
  1235. #endif
  1236. NCR5380_write(MODE_REG, MR_BASE);
  1237. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  1238. }
  1239. #else
  1240. dprintk(NDEBUG_INTR, ("scsi : unknown interrupt, BASR 0x%X, MR 0x%X, SR 0x%xn", basr, NCR5380_read(MODE_REG), NCR5380_read(STATUS_REG)));
  1241. (void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
  1242. #endif
  1243. }
  1244. } /* if BASR_IRQ */
  1245. if (!done)
  1246. run_main();
  1247. } /* if (instance->irq == irq) */
  1248. } while (!done);
  1249. }
  1250. /**
  1251.  * do_NCR5380_intr
  1252.  * @irq: interrupt number
  1253.  * @dev_id: device info
  1254.  * @regs: registers (unused)
  1255.  *
  1256.  * Takes the io_request_lock and invokes the generic NCR5380 interrupt
  1257.  * handler code
  1258.  *
  1259.  * Locks: takes and releases the io_request lock
  1260.  */
  1261. static void do_NCR5380_intr(int irq, void *dev_id, struct pt_regs *regs) {
  1262. unsigned long flags;
  1263.  spin_lock_irqsave(&io_request_lock, flags);
  1264.  NCR5380_intr(irq, dev_id, regs);
  1265.  spin_unlock_irqrestore(&io_request_lock, flags);
  1266. }
  1267. #endif
  1268. /**
  1269.  * collect_stats - collect stats on a scsi command
  1270.  * @hostdata: adapter 
  1271.  * @cmd: command being issued
  1272.  *
  1273.  * Update the statistical data by parsing the command in question
  1274.  */
  1275.  
  1276. static void collect_stats(struct NCR5380_hostdata *hostdata, Scsi_Cmnd * cmd) 
  1277. {
  1278. #ifdef NCR5380_STATS
  1279. switch (cmd->cmnd[0]) {
  1280. case WRITE:
  1281. case WRITE_6:
  1282. case WRITE_10:
  1283. hostdata->time_write[cmd->target] += (jiffies - hostdata->timebase);
  1284. hostdata->pendingw--;
  1285. break;
  1286. case READ:
  1287. case READ_6:
  1288. case READ_10:
  1289. hostdata->time_read[cmd->target] += (jiffies - hostdata->timebase);
  1290. hostdata->pendingr--;
  1291. break;
  1292. }
  1293. #endif
  1294. }
  1295. /* 
  1296.  * Function : int NCR5380_select (struct Scsi_Host *instance, Scsi_Cmnd *cmd, 
  1297.  *      int tag);
  1298.  *
  1299.  * Purpose : establishes I_T_L or I_T_L_Q nexus for new or existing command,
  1300.  *      including ARBITRATION, SELECTION, and initial message out for 
  1301.  *      IDENTIFY and queue messages. 
  1302.  *
  1303.  * Inputs : instance - instantiation of the 5380 driver on which this 
  1304.  *      target lives, cmd - SCSI command to execute, tag - set to TAG_NEXT for 
  1305.  *      new tag, TAG_NONE for untagged queueing, otherwise set to the tag for 
  1306.  *      the command that is presently connected.
  1307.  * 
  1308.  * Returns : -1 if selection could not execute for some reason,
  1309.  *      0 if selection succeeded or failed because the target 
  1310.  *      did not respond.
  1311.  *
  1312.  * Side effects : 
  1313.  *      If bus busy, arbitration failed, etc, NCR5380_select() will exit 
  1314.  *              with registers as they should have been on entry - ie
  1315.  *              SELECT_ENABLE will be set appropriately, the NCR5380
  1316.  *              will cease to drive any SCSI bus signals.
  1317.  *
  1318.  *      If successful : I_T_L or I_T_L_Q nexus will be established, 
  1319.  *              instance->connected will be set to cmd.  
  1320.  *              SELECT interrupt will be disabled.
  1321.  *
  1322.  *      If failed (no target) : cmd->scsi_done() will be called, and the 
  1323.  *              cmd->result host byte set to DID_BAD_TARGET.
  1324.  *
  1325.  * Locks: caller holds io_request_lock
  1326.  */
  1327.  
  1328. static int NCR5380_select(struct Scsi_Host *instance, Scsi_Cmnd * cmd, int tag) 
  1329. {
  1330. NCR5380_local_declare();
  1331. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
  1332. unsigned char tmp[3], phase;
  1333. unsigned char *data;
  1334. int len;
  1335. unsigned long timeout;
  1336. unsigned char value;
  1337. NCR5380_setup(instance);
  1338. if (hostdata->selecting) {
  1339. goto part2; /* RvC: sorry prof. Dijkstra, but it keeps the
  1340.    rest of the code nearly the same */
  1341. }
  1342. hostdata->restart_select = 0;
  1343. NCR5380_dprint(NDEBUG_ARBITRATION, instance);
  1344. dprintk(NDEBUG_ARBITRATION, ("scsi%d : starting arbitration, id = %dn", instance->host_no, instance->this_id));
  1345. /* 
  1346.  * Set the phase bits to 0, otherwise the NCR5380 won't drive the 
  1347.  * data bus during SELECTION.
  1348.  */
  1349. NCR5380_write(TARGET_COMMAND_REG, 0);
  1350. /* 
  1351.  * Start arbitration.
  1352.  */
  1353. NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask);
  1354. NCR5380_write(MODE_REG, MR_ARBITRATE);
  1355. /* Wait for arbitration logic to complete */
  1356. #if NCR_TIMEOUT
  1357. {
  1358. unsigned long timeout = jiffies + 2 * NCR_TIMEOUT;
  1359. spin_unlock_irq(&io_request_lock);
  1360. while (!(NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_PROGRESS)
  1361.        && time_before(jiffies, timeout));
  1362. spin_lock_irq(&io_request_lock);
  1363. if (time_after_eq(jiffies, timeout)) {
  1364. printk("scsi: arbitration timeout at %dn", __LINE__);
  1365. NCR5380_write(MODE_REG, MR_BASE);
  1366. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  1367. return -1;
  1368. }
  1369. }
  1370. #else /* NCR_TIMEOUT */
  1371. while (!(NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_PROGRESS));
  1372. #endif
  1373. dprintk(NDEBUG_ARBITRATION, ("scsi%d : arbitration completen", instance->host_no));
  1374. /* 
  1375.  * The arbitration delay is 2.2us, but this is a minimum and there is 
  1376.  * no maximum so we can safely sleep for ceil(2.2) usecs to accommodate
  1377.  * the integral nature of udelay().
  1378.  *
  1379.  */
  1380. udelay(3);
  1381. /* Check for lost arbitration */
  1382. if ((NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST) || (NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_higher_mask) || (NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST)) {
  1383. NCR5380_write(MODE_REG, MR_BASE);
  1384. dprintk(NDEBUG_ARBITRATION, ("scsi%d : lost arbitration, deasserting MR_ARBITRATEn", instance->host_no));
  1385. return -1;
  1386. }
  1387. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_SEL);
  1388. if (!(hostdata->flags & FLAG_DTC3181E) &&
  1389.     /* RvC: DTC3181E has some trouble with this
  1390.      *      so we simply removed it. Seems to work with
  1391.      *      only Mustek scanner attached
  1392.      */
  1393.     (NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST)) {
  1394. NCR5380_write(MODE_REG, MR_BASE);
  1395. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  1396. dprintk(NDEBUG_ARBITRATION, ("scsi%d : lost arbitration, deasserting ICR_ASSERT_SELn", instance->host_no));
  1397. return -1;
  1398. }
  1399. /* 
  1400.  * Again, bus clear + bus settle time is 1.2us, however, this is 
  1401.  * a minimum so we'll udelay ceil(1.2)
  1402.  */
  1403. udelay(2);
  1404. dprintk(NDEBUG_ARBITRATION, ("scsi%d : won arbitrationn", instance->host_no));
  1405. /* 
  1406.  * Now that we have won arbitration, start Selection process, asserting 
  1407.  * the host and target ID's on the SCSI bus.
  1408.  */
  1409. NCR5380_write(OUTPUT_DATA_REG, (hostdata->id_mask | (1 << cmd->target)));
  1410. /* 
  1411.  * Raise ATN while SEL is true before BSY goes false from arbitration,
  1412.  * since this is the only way to guarantee that we'll get a MESSAGE OUT
  1413.  * phase immediately after selection.
  1414.  */
  1415. NCR5380_write(INITIATOR_COMMAND_REG, (ICR_BASE | ICR_ASSERT_BSY | ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_SEL));
  1416. NCR5380_write(MODE_REG, MR_BASE);
  1417. /* 
  1418.  * Reselect interrupts must be turned off prior to the dropping of BSY,
  1419.  * otherwise we will trigger an interrupt.
  1420.  */
  1421. NCR5380_write(SELECT_ENABLE_REG, 0);
  1422. /*
  1423.  * The initiator shall then wait at least two deskew delays and release 
  1424.  * the BSY signal.
  1425.  */
  1426. udelay(1); /* wingel -- wait two bus deskew delay >2*45ns */
  1427. /* Reset BSY */
  1428. NCR5380_write(INITIATOR_COMMAND_REG, (ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_SEL));
  1429. /* 
  1430.  * Something weird happens when we cease to drive BSY - looks
  1431.  * like the board/chip is letting us do another read before the 
  1432.  * appropriate propagation delay has expired, and we're confusing
  1433.  * a BSY signal from ourselves as the target's response to SELECTION.
  1434.  *
  1435.  * A small delay (the 'C++' frontend breaks the pipeline with an
  1436.  * unnecessary jump, making it work on my 386-33/Trantor T128, the
  1437.  * tighter 'C' code breaks and requires this) solves the problem - 
  1438.  * the 1 us delay is arbitrary, and only used because this delay will 
  1439.  * be the same on other platforms and since it works here, it should 
  1440.  * work there.
  1441.  *
  1442.  * wingel suggests that this could be due to failing to wait
  1443.  * one deskew delay.
  1444.  */
  1445. udelay(1);
  1446. dprintk(NDEBUG_SELECTION, ("scsi%d : selecting target %dn", instance->host_no, cmd->target));
  1447. /* 
  1448.  * The SCSI specification calls for a 250 ms timeout for the actual 
  1449.  * selection.
  1450.  */
  1451. timeout = jiffies + (250 * HZ / 1000);
  1452. /* 
  1453.  * XXX very interesting - we're seeing a bounce where the BSY we 
  1454.  * asserted is being reflected / still asserted (propagation delay?)
  1455.  * and it's detecting as true.  Sigh.
  1456.  */
  1457. hostdata->select_time = 0; /* we count the clock ticks at which we polled */
  1458. hostdata->selecting = cmd;
  1459. part2:
  1460. /* RvC: here we enter after a sleeping period, or immediately after
  1461.    execution of part 1
  1462.    we poll only once ech clock tick */
  1463. value = NCR5380_read(STATUS_REG) & (SR_BSY | SR_IO);
  1464. if (!value && (hostdata->select_time < 25)) {
  1465. /* RvC: we still must wait for a device response */
  1466. hostdata->select_time++; /* after 25 ticks the device has failed */
  1467. hostdata->time_expires = jiffies + 1;
  1468. NCR5380_set_timer(instance);
  1469. return 0; /* RvC: we return here with hostdata->selecting set,
  1470.    to go to sleep */
  1471. }
  1472. hostdata->selecting = 0; /* clear this pointer, because we passed the
  1473.    waiting period */
  1474. if ((NCR5380_read(STATUS_REG) & (SR_SEL | SR_IO)) == (SR_SEL | SR_IO)) {
  1475. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  1476. NCR5380_reselect(instance);
  1477. printk("scsi%d : reselection after won arbitration?n", instance->host_no);
  1478. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  1479. return -1;
  1480. }
  1481. /* 
  1482.  * No less than two deskew delays after the initiator detects the 
  1483.  * BSY signal is true, it shall release the SEL signal and may 
  1484.  * change the DATA BUS.                                     -wingel
  1485.  */
  1486. udelay(1);
  1487. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
  1488. if (!(NCR5380_read(STATUS_REG) & SR_BSY)) {
  1489. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  1490. if (hostdata->targets_present & (1 << cmd->target)) {
  1491. printk("scsi%d : weirdnessn", instance->host_no);
  1492. if (hostdata->restart_select)
  1493. printk("trestart selectn");
  1494. NCR5380_dprint(NDEBUG_SELECTION, instance);
  1495. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  1496. return -1;
  1497. }
  1498. cmd->result = DID_BAD_TARGET << 16;
  1499. collect_stats(hostdata, cmd);
  1500. cmd->scsi_done(cmd);
  1501. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  1502. dprintk(NDEBUG_SELECTION, ("scsi%d : target did not respond within 250msn", instance->host_no));
  1503. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  1504. return 0;
  1505. }
  1506. hostdata->targets_present |= (1 << cmd->target);
  1507. /*
  1508.  * Since we followed the SCSI spec, and raised ATN while SEL 
  1509.  * was true but before BSY was false during selection, the information
  1510.  * transfer phase should be a MESSAGE OUT phase so that we can send the
  1511.  * IDENTIFY message.
  1512.  * 
  1513.  * If SCSI-II tagged queuing is enabled, we also send a SIMPLE_QUEUE_TAG
  1514.  * message (2 bytes) with a tag ID that we increment with every command
  1515.  * until it wraps back to 0.
  1516.  *
  1517.  * XXX - it turns out that there are some broken SCSI-II devices,
  1518.  *       which claim to support tagged queuing but fail when more than
  1519.  *       some number of commands are issued at once.
  1520.  */
  1521. /* Wait for start of REQ/ACK handshake */
  1522. #ifdef NCR_TIMEOUT
  1523. {
  1524. unsigned long timeout = jiffies + NCR_TIMEOUT;
  1525. spin_unlock_irq(&io_request_lock);
  1526. while (!(NCR5380_read(STATUS_REG) & SR_REQ) && time_before(jiffies, timeout));
  1527. spin_lock_irq(&io_request_lock);
  1528. if (time_after_eq(jiffies, timeout)) {
  1529. printk("scsi%d: timeout at NCR5380.c:%dn", instance->host_no, __LINE__);
  1530. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  1531. return -1;
  1532. }
  1533. }
  1534. #else /* NCR_TIMEOUT */
  1535. while (!(NCR5380_read(STATUS_REG) & SR_REQ));
  1536. #endif /* def NCR_TIMEOUT */
  1537. dprintk(NDEBUG_SELECTION, ("scsi%d : target %d selected, going into MESSAGE OUT phase.n", instance->host_no, cmd->target));
  1538. tmp[0] = IDENTIFY(((instance->irq == IRQ_NONE) ? 0 : 1), cmd->lun);
  1539. len = 1;
  1540. cmd->tag = 0;
  1541. /* Send message(s) */
  1542. data = tmp;
  1543. phase = PHASE_MSGOUT;
  1544. NCR5380_transfer_pio(instance, &phase, &len, &data);
  1545. dprintk(NDEBUG_SELECTION, ("scsi%d : nexus established.n", instance->host_no));
  1546. /* XXX need to handle errors here */
  1547. hostdata->connected = cmd;
  1548. hostdata->busy[cmd->target] |= (1 << cmd->lun);
  1549. initialize_SCp(cmd);
  1550. return 0;
  1551. }
  1552. /* 
  1553.  * Function : int NCR5380_transfer_pio (struct Scsi_Host *instance, 
  1554.  *      unsigned char *phase, int *count, unsigned char **data)
  1555.  *
  1556.  * Purpose : transfers data in given phase using polled I/O
  1557.  *
  1558.  * Inputs : instance - instance of driver, *phase - pointer to 
  1559.  *      what phase is expected, *count - pointer to number of 
  1560.  *      bytes to transfer, **data - pointer to data pointer.
  1561.  * 
  1562.  * Returns : -1 when different phase is entered without transferring
  1563.  *      maximum number of bytes, 0 if all bytes or transfered or exit
  1564.  *      is in same phase.
  1565.  *
  1566.  *      Also, *phase, *count, *data are modified in place.
  1567.  *
  1568.  * XXX Note : handling for bus free may be useful.
  1569.  */
  1570. /*
  1571.  * Note : this code is not as quick as it could be, however it 
  1572.  * IS 100% reliable, and for the actual data transfer where speed
  1573.  * counts, we will always do a pseudo DMA or DMA transfer.
  1574.  */
  1575. static int NCR5380_transfer_pio(struct Scsi_Host *instance, unsigned char *phase, int *count, unsigned char **data) {
  1576. NCR5380_local_declare();
  1577. unsigned char p = *phase, tmp;
  1578. int c = *count;
  1579. unsigned char *d = *data;
  1580. /*
  1581.  *      RvC: some administrative data to process polling time
  1582.  */
  1583. int break_allowed = 0;
  1584. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
  1585. NCR5380_setup(instance);
  1586. if (!(p & SR_IO))
  1587. dprintk(NDEBUG_PIO, ("scsi%d : pio write %d bytesn", instance->host_no, c));
  1588. else
  1589. dprintk(NDEBUG_PIO, ("scsi%d : pio read %d bytesn", instance->host_no, c));
  1590. /* 
  1591.  * The NCR5380 chip will only drive the SCSI bus when the 
  1592.  * phase specified in the appropriate bits of the TARGET COMMAND
  1593.  * REGISTER match the STATUS REGISTER
  1594.  */
  1595.  NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p));
  1596. /* RvC: don't know if this is necessary, but other SCSI I/O is short
  1597.  *      so breaks are not necessary there
  1598.  */
  1599. if ((p == PHASE_DATAIN) || (p == PHASE_DATAOUT)) {
  1600. break_allowed = 1;
  1601. }
  1602. do {
  1603. /* 
  1604.  * Wait for assertion of REQ, after which the phase bits will be 
  1605.  * valid 
  1606.  */
  1607. /* RvC: we simply poll once, after that we stop temporarily
  1608.  *      and let the device buffer fill up
  1609.  *      if breaking is not allowed, we keep polling as long as needed
  1610.  */
  1611. while (!((tmp = NCR5380_read(STATUS_REG)) & SR_REQ) && !break_allowed);
  1612. if (!(tmp & SR_REQ)) {
  1613. /* timeout condition */
  1614. hostdata->time_expires = jiffies + USLEEP_SLEEP;
  1615. NCR5380_set_timer(instance);
  1616. break;
  1617. }
  1618. dprintk(NDEBUG_HANDSHAKE, ("scsi%d : REQ detectedn", instance->host_no));
  1619. /* Check for phase mismatch */
  1620. if ((tmp & PHASE_MASK) != p) {
  1621. dprintk(NDEBUG_HANDSHAKE, ("scsi%d : phase mismatchn", instance->host_no));
  1622. NCR5380_dprint_phase(NDEBUG_HANDSHAKE, instance);
  1623. break;
  1624. }
  1625. /* Do actual transfer from SCSI bus to / from memory */
  1626. if (!(p & SR_IO))
  1627. NCR5380_write(OUTPUT_DATA_REG, *d);
  1628. else
  1629. *d = NCR5380_read(CURRENT_SCSI_DATA_REG);
  1630. ++d;
  1631. /* 
  1632.  * The SCSI standard suggests that in MSGOUT phase, the initiator
  1633.  * should drop ATN on the last byte of the message phase
  1634.  * after REQ has been asserted for the handshake but before
  1635.  * the initiator raises ACK.
  1636.  */
  1637. if (!(p & SR_IO)) {
  1638. if (!((p & SR_MSG) && c > 1)) {
  1639. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA);
  1640. NCR5380_dprint(NDEBUG_PIO, instance);
  1641. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ACK);
  1642. } else {
  1643. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ATN);
  1644. NCR5380_dprint(NDEBUG_PIO, instance);
  1645. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
  1646. }
  1647. } else {
  1648. NCR5380_dprint(NDEBUG_PIO, instance);
  1649. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ACK);
  1650. }
  1651. while (NCR5380_read(STATUS_REG) & SR_REQ);
  1652. dprintk(NDEBUG_HANDSHAKE, ("scsi%d : req false, handshake completen", instance->host_no));
  1653. /*
  1654.  * We have several special cases to consider during REQ/ACK handshaking : 
  1655.  * 1.  We were in MSGOUT phase, and we are on the last byte of the 
  1656.  *      message.  ATN must be dropped as ACK is dropped.
  1657.  *
  1658.  * 2.  We are in a MSGIN phase, and we are on the last byte of the  
  1659.  *      message.  We must exit with ACK asserted, so that the calling
  1660.  *      code may raise ATN before dropping ACK to reject the message.
  1661.  *
  1662.  * 3.  ACK and ATN are clear and the target may proceed as normal.
  1663.  */
  1664. if (!(p == PHASE_MSGIN && c == 1)) {
  1665. if (p == PHASE_MSGOUT && c > 1)
  1666. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
  1667. else
  1668. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  1669. }
  1670. } while (--c);
  1671. dprintk(NDEBUG_PIO, ("scsi%d : residual %dn", instance->host_no, c));
  1672. *count = c;
  1673. *data = d;
  1674. tmp = NCR5380_read(STATUS_REG);
  1675. if (tmp & SR_REQ)
  1676. *phase = tmp & PHASE_MASK;
  1677. else
  1678. *phase = PHASE_UNKNOWN;
  1679. if (!c || (*phase == p))
  1680. return 0;
  1681. else
  1682. return -1;
  1683. }
  1684. /**
  1685.  * do_reset - issue a reset command
  1686.  * @host: adapter to reset
  1687.  *
  1688.  * Issue a reset sequence to the NCR5380 and try and get the bus
  1689.  * back into sane shape.
  1690.  *
  1691.  * Locks: caller holds io_request lock
  1692.  */
  1693.  
  1694. static void do_reset(struct Scsi_Host *host) {
  1695. NCR5380_local_declare();
  1696. NCR5380_setup(host);
  1697. NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(NCR5380_read(STATUS_REG) & PHASE_MASK));
  1698. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_RST);
  1699. udelay(25);
  1700. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  1701. }
  1702. /*
  1703.  * Function : do_abort (Scsi_Host *host)
  1704.  * 
  1705.  * Purpose : abort the currently established nexus.  Should only be 
  1706.  *      called from a routine which can drop into a 
  1707.  * 
  1708.  * Returns : 0 on success, -1 on failure.
  1709.  *
  1710.  * Locks: io_request lock held by caller
  1711.  */
  1712. static int do_abort(struct Scsi_Host *host) {
  1713. NCR5380_local_declare();
  1714. unsigned char tmp, *msgptr, phase;
  1715. int len;
  1716. NCR5380_setup(host);
  1717. /* Request message out phase */
  1718. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
  1719. /* 
  1720.  * Wait for the target to indicate a valid phase by asserting 
  1721.  * REQ.  Once this happens, we'll have either a MSGOUT phase 
  1722.  * and can immediately send the ABORT message, or we'll have some 
  1723.  * other phase and will have to source/sink data.
  1724.  * 
  1725.  * We really don't care what value was on the bus or what value
  1726.  * the target sees, so we just handshake.
  1727.  */
  1728. while (!(tmp = NCR5380_read(STATUS_REG)) & SR_REQ);
  1729. NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp));
  1730. if ((tmp & PHASE_MASK) != PHASE_MSGOUT) {
  1731. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
  1732. while (NCR5380_read(STATUS_REG) & SR_REQ);
  1733. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
  1734. }
  1735. tmp = ABORT;
  1736. msgptr = &tmp;
  1737. len = 1;
  1738. phase = PHASE_MSGOUT;
  1739. NCR5380_transfer_pio(host, &phase, &len, &msgptr);
  1740. /*
  1741.  * If we got here, and the command completed successfully,
  1742.  * we're about to go into bus free state.
  1743.  */
  1744. return len ? -1 : 0;
  1745. }
  1746. #if defined(REAL_DMA) || defined(PSEUDO_DMA) || defined (REAL_DMA_POLL)
  1747. /* 
  1748.  * Function : int NCR5380_transfer_dma (struct Scsi_Host *instance, 
  1749.  *      unsigned char *phase, int *count, unsigned char **data)
  1750.  *
  1751.  * Purpose : transfers data in given phase using either real
  1752.  *      or pseudo DMA.
  1753.  *
  1754.  * Inputs : instance - instance of driver, *phase - pointer to 
  1755.  *      what phase is expected, *count - pointer to number of 
  1756.  *      bytes to transfer, **data - pointer to data pointer.
  1757.  * 
  1758.  * Returns : -1 when different phase is entered without transferring
  1759.  *      maximum number of bytes, 0 if all bytes or transfered or exit
  1760.  *      is in same phase.
  1761.  *
  1762.  *      Also, *phase, *count, *data are modified in place.
  1763.  *
  1764.  * Locks: io_request lock held by caller
  1765.  */
  1766. static int NCR5380_transfer_dma(struct Scsi_Host *instance, unsigned char *phase, int *count, unsigned char **data) {
  1767. NCR5380_local_declare();
  1768. register int c = *count;
  1769. register unsigned char p = *phase;
  1770. register unsigned char *d = *data;
  1771. unsigned char tmp;
  1772. int foo;
  1773. #if defined(REAL_DMA_POLL)
  1774. int cnt, toPIO;
  1775. unsigned char saved_data = 0, overrun = 0, residue;
  1776. #endif
  1777. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
  1778. NCR5380_setup(instance);
  1779. if ((tmp = (NCR5380_read(STATUS_REG) & PHASE_MASK)) != p) {
  1780. *phase = tmp;
  1781. return -1;
  1782. }
  1783. #if defined(REAL_DMA) || defined(REAL_DMA_POLL)
  1784. #ifdef READ_OVERRUNS
  1785. if (p & SR_IO) {
  1786. c -= 2;
  1787. }
  1788. #endif
  1789. dprintk(NDEBUG_DMA, ("scsi%d : initializing DMA channel %d for %s, %d bytes %s %0xn", instance->host_no, instance->dma_channel, (p & SR_IO) ? "reading" : "writing", c, (p & SR_IO) ? "to" : "from", (unsigned) d));
  1790. hostdata->dma_len = (p & SR_IO) ? NCR5380_dma_read_setup(instance, d, c) : NCR5380_dma_write_setup(instance, d, c);
  1791. #endif
  1792. NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p));
  1793. #ifdef REAL_DMA
  1794. NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE | MR_ENABLE_EOP_INTR | MR_MONITOR_BSY);
  1795. #elif defined(REAL_DMA_POLL)
  1796. NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE);
  1797. #else
  1798. /*
  1799.  * Note : on my sample board, watch-dog timeouts occurred when interrupts
  1800.  * were not disabled for the duration of a single DMA transfer, from 
  1801.  * before the setting of DMA mode to after transfer of the last byte.
  1802.  */
  1803. #if defined(PSEUDO_DMA) && defined(UNSAFE)
  1804. spin_unlock_irq(&io_request_lock);
  1805. #endif
  1806. /* KLL May need eop and parity in 53c400 */
  1807. if (hostdata->flags & FLAG_NCR53C400)
  1808. NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE | MR_ENABLE_PAR_CHECK | MR_ENABLE_PAR_INTR | MR_ENABLE_EOP_INTR | MR_DMA_MODE | MR_MONITOR_BSY);
  1809. else
  1810. NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE);
  1811. #endif /* def REAL_DMA */
  1812. dprintk(NDEBUG_DMA, ("scsi%d : mode reg = 0x%Xn", instance->host_no, NCR5380_read(MODE_REG)));
  1813. /* 
  1814.  * On the PAS16 at least I/O recovery delays are not needed here.
  1815.  * Everyone else seems to want them.
  1816.  */
  1817. if (p & SR_IO) {
  1818. io_recovery_delay(1);
  1819. NCR5380_write(START_DMA_INITIATOR_RECEIVE_REG, 0);
  1820. } else {
  1821. io_recovery_delay(1);
  1822. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA);
  1823. io_recovery_delay(1);
  1824. NCR5380_write(START_DMA_SEND_REG, 0);
  1825. io_recovery_delay(1);
  1826. }
  1827. #if defined(REAL_DMA_POLL)
  1828. do {
  1829. tmp = NCR5380_read(BUS_AND_STATUS_REG);
  1830. } while ((tmp & BASR_PHASE_MATCH) && !(tmp & (BASR_BUSY_ERROR | BASR_END_DMA_TRANSFER)));
  1831. /*
  1832.    At this point, either we've completed DMA, or we have a phase mismatch,
  1833.    or we've unexpectedly lost BUSY (which is a real error).
  1834.    For write DMAs, we want to wait until the last byte has been
  1835.    transferred out over the bus before we turn off DMA mode.  Alas, there
  1836.    seems to be no terribly good way of doing this on a 5380 under all
  1837.    conditions.  For non-scatter-gather operations, we can wait until REQ
  1838.    and ACK both go false, or until a phase mismatch occurs.  Gather-writes
  1839.    are nastier, since the device will be expecting more data than we
  1840.    are prepared to send it, and REQ will remain asserted.  On a 53C8[01] we
  1841.    could test LAST BIT SENT to assure transfer (I imagine this is precisely
  1842.    why this signal was added to the newer chips) but on the older 538[01]
  1843.    this signal does not exist.  The workaround for this lack is a watchdog;
  1844.    we bail out of the wait-loop after a modest amount of wait-time if
  1845.    the usual exit conditions are not met.  Not a terribly clean or
  1846.    correct solution :-%
  1847.    Reads are equally tricky due to a nasty characteristic of the NCR5380.
  1848.    If the chip is in DMA mode for an READ, it will respond to a target's
  1849.    REQ by latching the SCSI data into the INPUT DATA register and asserting
  1850.    ACK, even if it has _already_ been notified by the DMA controller that
  1851.    the current DMA transfer has completed!  If the NCR5380 is then taken
  1852.    out of DMA mode, this already-acknowledged byte is lost.
  1853.    This is not a problem for "one DMA transfer per command" reads, because
  1854.    the situation will never arise... either all of the data is DMA'ed
  1855.    properly, or the target switches to MESSAGE IN phase to signal a
  1856.    disconnection (either operation bringing the DMA to a clean halt).
  1857.    However, in order to handle scatter-reads, we must work around the
  1858.    problem.  The chosen fix is to DMA N-2 bytes, then check for the
  1859.    condition before taking the NCR5380 out of DMA mode.  One or two extra
  1860.    bytes are transferred via PIO as necessary to fill out the original
  1861.    request.
  1862.  */
  1863. if (p & SR_IO) {
  1864. #ifdef READ_OVERRUNS
  1865. udelay(10);
  1866. if (((NCR5380_read(BUS_AND_STATUS_REG) & (BASR_PHASE_MATCH | BASR_ACK)) == (BASR_PHASE_MATCH | BASR_ACK))) {
  1867. saved_data = NCR5380_read(INPUT_DATA_REGISTER);
  1868. overrun = 1;
  1869. }
  1870. #endif
  1871. } else {
  1872. int limit = 100;
  1873. while (((tmp = NCR5380_read(BUS_AND_STATUS_REG)) & BASR_ACK) || (NCR5380_read(STATUS_REG) & SR_REQ)) {
  1874. if (!(tmp & BASR_PHASE_MATCH))
  1875. break;
  1876. if (--limit < 0)
  1877. break;
  1878. }
  1879. }
  1880. dprintk(NDEBUG_DMA, ("scsi%d : polled DMA transfer complete, basr 0x%X, sr 0x%Xn", instance->host_no, tmp, NCR5380_read(STATUS_REG)));
  1881. NCR5380_write(MODE_REG, MR_BASE);
  1882. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  1883. residue = NCR5380_dma_residual(instance);
  1884. c -= residue;
  1885. *count -= c;
  1886. *data += c;
  1887. *phase = NCR5380_read(STATUS_REG) & PHASE_MASK;
  1888. #ifdef READ_OVERRUNS
  1889. if (*phase == p && (p & SR_IO) && residue == 0) {
  1890. if (overrun) {
  1891. dprintk(NDEBUG_DMA, ("Got an input overrun, using saved byten"));
  1892. **data = saved_data;
  1893. *data += 1;
  1894. *count -= 1;
  1895. cnt = toPIO = 1;
  1896. } else {
  1897. printk("No overrun??n");
  1898. cnt = toPIO = 2;
  1899. }
  1900. dprintk(NDEBUG_DMA, ("Doing %d-byte PIO to 0x%Xn", cnt, *data));
  1901. NCR5380_transfer_pio(instance, phase, &cnt, data);
  1902. *count -= toPIO - cnt;
  1903. }
  1904. #endif
  1905. dprintk(NDEBUG_DMA, ("Return with data ptr = 0x%X, count %d, last 0x%X, next 0x%Xn", *data, *count, *(*data + *count - 1), *(*data + *count)));
  1906. return 0;
  1907. #elif defined(REAL_DMA)
  1908. return 0;
  1909. #else /* defined(REAL_DMA_POLL) */
  1910. if (p & SR_IO) {
  1911. #ifdef DMA_WORKS_RIGHT
  1912. foo = NCR5380_pread(instance, d, c);
  1913. #else
  1914. int diff = 1;
  1915. if (hostdata->flags & FLAG_NCR53C400) {
  1916. diff = 0;
  1917. }
  1918. if (!(foo = NCR5380_pread(instance, d, c - diff))) {
  1919. /*
  1920.  * We can't disable DMA mode after successfully transferring 
  1921.  * what we plan to be the last byte, since that would open up
  1922.  * a race condition where if the target asserted REQ before 
  1923.  * we got the DMA mode reset, the NCR5380 would have latched
  1924.  * an additional byte into the INPUT DATA register and we'd
  1925.  * have dropped it.
  1926.  * 
  1927.  * The workaround was to transfer one fewer bytes than we 
  1928.  * intended to with the pseudo-DMA read function, wait for 
  1929.  * the chip to latch the last byte, read it, and then disable
  1930.  * pseudo-DMA mode.
  1931.  * 
  1932.  * After REQ is asserted, the NCR5380 asserts DRQ and ACK.
  1933.  * REQ is deasserted when ACK is asserted, and not reasserted
  1934.  * until ACK goes false.  Since the NCR5380 won't lower ACK
  1935.  * until DACK is asserted, which won't happen unless we twiddle
  1936.  * the DMA port or we take the NCR5380 out of DMA mode, we 
  1937.  * can guarantee that we won't handshake another extra 
  1938.  * byte.
  1939.  */
  1940. if (!(hostdata->flags & FLAG_NCR53C400)) {
  1941. while (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_DRQ));
  1942. /* Wait for clean handshake */
  1943. while (NCR5380_read(STATUS_REG) & SR_REQ);
  1944. d[c - 1] = NCR5380_read(INPUT_DATA_REG);
  1945. }
  1946. }
  1947. #endif
  1948. } else {
  1949. #ifdef DMA_WORKS_RIGHT
  1950. foo = NCR5380_pwrite(instance, d, c);
  1951. #else
  1952. int timeout;
  1953. dprintk(NDEBUG_C400_PWRITE, ("About to pwrite %d bytesn", c));
  1954. if (!(foo = NCR5380_pwrite(instance, d, c))) {
  1955. /*
  1956.  * Wait for the last byte to be sent.  If REQ is being asserted for 
  1957.  * the byte we're interested, we'll ACK it and it will go false.  
  1958.  */
  1959. if (!(hostdata->flags & FLAG_HAS_LAST_BYTE_SENT)) {
  1960. timeout = 20000;
  1961. while (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_DRQ) && (NCR5380_read(BUS_AND_STATUS_REG) & BASR_PHASE_MATCH));
  1962. if (!timeout)
  1963. dprintk(NDEBUG_LAST_BYTE_SENT, ("scsi%d : timed out on last byten", instance->host_no));
  1964. if (hostdata->flags & FLAG_CHECK_LAST_BYTE_SENT) {
  1965. hostdata->flags &= ~FLAG_CHECK_LAST_BYTE_SENT;
  1966. if (NCR5380_read(TARGET_COMMAND_REG) & TCR_LAST_BYTE_SENT) {
  1967. hostdata->flags |= FLAG_HAS_LAST_BYTE_SENT;
  1968. dprintk(NDEBUG_LAST_WRITE_SENT, ("scsi%d : last bit sent worksn", instance->host_no));
  1969. }
  1970. }
  1971. } else {
  1972. dprintk(NDEBUG_C400_PWRITE, ("Waiting for LASTBYTEn"));
  1973. while (!(NCR5380_read(TARGET_COMMAND_REG) & TCR_LAST_BYTE_SENT));
  1974. dprintk(NDEBUG_C400_PWRITE, ("Got LASTBYTEn"));
  1975. }
  1976. }
  1977. #endif
  1978. }
  1979. NCR5380_write(MODE_REG, MR_BASE);
  1980. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  1981. if ((!(p & SR_IO)) && (hostdata->flags & FLAG_NCR53C400)) {
  1982. dprintk(NDEBUG_C400_PWRITE, ("53C400w: Checking for IRQn"));
  1983. if (NCR5380_read(BUS_AND_STATUS_REG) & BASR_IRQ) {
  1984. dprintk(NDEBUG_C400_PWRITE, ("53C400w:    got it, reading reset interrupt regn"));
  1985. NCR5380_read(RESET_PARITY_INTERRUPT_REG);
  1986. } else {
  1987. printk("53C400w:    IRQ NOT THERE!n");
  1988. }
  1989. }
  1990. *data = d + c;
  1991. *count = 0;
  1992. *phase = NCR5380_read(STATUS_REG) & PHASE_MASK;
  1993. #if defined(PSEUDO_DMA) && defined(UNSAFE)
  1994. spin_lock_irq(&io_request_lock);
  1995. #endif /* defined(REAL_DMA_POLL) */
  1996. return foo;
  1997. #endif /* def REAL_DMA */
  1998. }
  1999. #endif /* defined(REAL_DMA) | defined(PSEUDO_DMA) */
  2000. /*
  2001.  * Function : NCR5380_information_transfer (struct Scsi_Host *instance)
  2002.  *
  2003.  * Purpose : run through the various SCSI phases and do as the target 
  2004.  *      directs us to.  Operates on the currently connected command, 
  2005.  *      instance->connected.
  2006.  *
  2007.  * Inputs : instance, instance for which we are doing commands
  2008.  *
  2009.  * Side effects : SCSI things happen, the disconnected queue will be 
  2010.  *      modified if a command disconnects, *instance->connected will
  2011.  *      change.
  2012.  *
  2013.  * XXX Note : we need to watch for bus free or a reset condition here 
  2014.  *      to recover from an unexpected bus free condition.
  2015.  *
  2016.  * Locks: io_request_lock held by caller
  2017.  */
  2018. static void NCR5380_information_transfer(struct Scsi_Host *instance) {
  2019. NCR5380_local_declare();
  2020. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *)instance->hostdata;
  2021. unsigned char msgout = NOP;
  2022. int sink = 0;
  2023. int len;
  2024. #if defined(PSEUDO_DMA) || defined(REAL_DMA_POLL)
  2025. int transfersize;
  2026. #endif
  2027. unsigned char *data;
  2028. unsigned char phase, tmp, extended_msg[10], old_phase = 0xff;
  2029. Scsi_Cmnd *cmd = (Scsi_Cmnd *) hostdata->connected;
  2030. /* RvC: we need to set the end of the polling time */
  2031. unsigned long poll_time = jiffies + USLEEP_POLL;
  2032. NCR5380_setup(instance);
  2033. while (1) {
  2034. tmp = NCR5380_read(STATUS_REG);
  2035. /* We only have a valid SCSI phase when REQ is asserted */
  2036. if (tmp & SR_REQ) {
  2037. phase = (tmp & PHASE_MASK);
  2038. if (phase != old_phase) {
  2039. old_phase = phase;
  2040. NCR5380_dprint_phase(NDEBUG_INFORMATION, instance);
  2041. }
  2042. if (sink && (phase != PHASE_MSGOUT)) {
  2043. NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp));
  2044. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
  2045. while (NCR5380_read(STATUS_REG) & SR_REQ);
  2046. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
  2047. sink = 0;
  2048. continue;
  2049. }
  2050. switch (phase) {
  2051. case PHASE_DATAIN:
  2052. case PHASE_DATAOUT:
  2053. #if (NDEBUG & NDEBUG_NO_DATAOUT)
  2054. printk("scsi%d : NDEBUG_NO_DATAOUT set, attempted DATAOUT abortedn", instance->host_no);
  2055. sink = 1;
  2056. do_abort(instance);
  2057. cmd->result = DID_ERROR << 16;
  2058. cmd->done(cmd);
  2059. return;
  2060. #endif
  2061. /* 
  2062.  * If there is no room left in the current buffer in the
  2063.  * scatter-gather list, move onto the next one.
  2064.  */
  2065. if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) {
  2066. ++cmd->SCp.buffer;
  2067. --cmd->SCp.buffers_residual;
  2068. cmd->SCp.this_residual = cmd->SCp.buffer->length;
  2069. cmd->SCp.ptr = cmd->SCp.buffer->address;
  2070. dprintk(NDEBUG_INFORMATION, ("scsi%d : %d bytes and %d buffers leftn", instance->host_no, cmd->SCp.this_residual, cmd->SCp.buffers_residual));
  2071. }
  2072. /*
  2073.  * The preferred transfer method is going to be 
  2074.  * PSEUDO-DMA for systems that are strictly PIO,
  2075.  * since we can let the hardware do the handshaking.
  2076.  *
  2077.  * For this to work, we need to know the transfersize
  2078.  * ahead of time, since the pseudo-DMA code will sit
  2079.  * in an unconditional loop.
  2080.  */
  2081. #if defined(PSEUDO_DMA) || defined(REAL_DMA_POLL)
  2082. /* KLL
  2083.  * PSEUDO_DMA is defined here. If this is the g_NCR5380
  2084.  * driver then it will always be defined, so the
  2085.  * FLAG_NO_PSEUDO_DMA is used to inhibit PDMA in the base
  2086.  * NCR5380 case.  I think this is a fairly clean solution.
  2087.  * We supplement these 2 if's with the flag.
  2088.  */
  2089. #ifdef NCR5380_dma_xfer_len
  2090. if (!cmd->device->borken && !(hostdata->flags & FLAG_NO_PSEUDO_DMA) && (transfersize = NCR5380_dma_xfer_len(instance, cmd)) != 0) {
  2091. #else
  2092. transfersize = cmd->transfersize;
  2093. #ifdef LIMIT_TRANSFERSIZE /* If we have problems with interrupt service */
  2094. if (transfersize > 512)
  2095. transfersize = 512;
  2096. #endif /* LIMIT_TRANSFERSIZE */
  2097. if (!cmd->device->borken && transfersize && !(hostdata->flags & FLAG_NO_PSEUDO_DMA) && cmd->SCp.this_residual && !(cmd->SCp.this_residual % transfersize)) {
  2098. /* Limit transfers to 32K, for xx400 & xx406
  2099.  * pseudoDMA that transfers in 128 bytes blocks. */
  2100. if (transfersize > 32 * 1024)
  2101. transfersize = 32 * 1024;
  2102. #endif
  2103. len = transfersize;
  2104. if (NCR5380_transfer_dma(instance, &phase, &len, (unsigned char **) &cmd->SCp.ptr)) {
  2105. /*
  2106.  * If the watchdog timer fires, all future accesses to this
  2107.  * device will use the polled-IO.
  2108.  */
  2109. printk("scsi%d : switching target %d lun %d to slow handshaken", instance->host_no, cmd->target, cmd->lun);
  2110. cmd->device->borken = 1;
  2111. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
  2112. sink = 1;
  2113. do_abort(instance);
  2114. cmd->result = DID_ERROR << 16;
  2115. cmd->done(cmd);
  2116. /* XXX - need to source or sink data here, as appropriate */
  2117. } else
  2118. cmd->SCp.this_residual -= transfersize - len;
  2119. } else
  2120. #endif /* defined(PSEUDO_DMA) || defined(REAL_DMA_POLL) */
  2121. NCR5380_transfer_pio(instance, &phase, (int *) &cmd->SCp.this_residual, (unsigned char **)
  2122.      &cmd->SCp.ptr);
  2123. break;
  2124. case PHASE_MSGIN:
  2125. len = 1;
  2126. data = &tmp;
  2127. NCR5380_transfer_pio(instance, &phase, &len, &data);
  2128. cmd->SCp.Message = tmp;
  2129. switch (tmp) {
  2130. /*
  2131.  * Linking lets us reduce the time required to get the 
  2132.  * next command out to the device, hopefully this will
  2133.  * mean we don't waste another revolution due to the delays
  2134.  * required by ARBITRATION and another SELECTION.
  2135.  *
  2136.  * In the current implementation proposal, low level drivers
  2137.  * merely have to start the next command, pointed to by 
  2138.  * next_link, done() is called as with unlinked commands.
  2139.  */
  2140. #ifdef LINKED
  2141. case LINKED_CMD_COMPLETE:
  2142. case LINKED_FLG_CMD_COMPLETE:
  2143. /* Accept message by clearing ACK */
  2144. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2145. dprintk(NDEBUG_LINKED, ("scsi%d : target %d lun %d linked command complete.n", instance->host_no, cmd->target, cmd->lun));
  2146. /* 
  2147.  * Sanity check : A linked command should only terminate with
  2148.  * one of these messages if there are more linked commands
  2149.  * available.
  2150.  */
  2151. if (!cmd->next_link) {
  2152. printk("scsi%d : target %d lun %d linked command complete, no next_linkn" instance->host_no, cmd->target, cmd->lun);
  2153. sink = 1;
  2154. do_abort(instance);
  2155. return;
  2156. }
  2157. initialize_SCp(cmd->next_link);
  2158. /* The next command is still part of this process */
  2159. cmd->next_link->tag = cmd->tag;
  2160. cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
  2161. dprintk(NDEBUG_LINKED, ("scsi%d : target %d lun %d linked request done, calling scsi_done().n", instance->host_no, cmd->target, cmd->lun));
  2162. collect_stats(hostdata, cmd);
  2163. cmd->scsi_done(cmd);
  2164. cmd = hostdata->connected;
  2165. break;
  2166. #endif /* def LINKED */
  2167. case ABORT:
  2168. case COMMAND_COMPLETE:
  2169. /* Accept message by clearing ACK */
  2170. sink = 1;
  2171. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2172. hostdata->connected = NULL;
  2173. dprintk(NDEBUG_QUEUES, ("scsi%d : command for target %d, lun %d completedn", instance->host_no, cmd->target, cmd->lun));
  2174. hostdata->busy[cmd->target] &= ~(1 << cmd->lun);
  2175. /* 
  2176.  * I'm not sure what the correct thing to do here is : 
  2177.  * 
  2178.  * If the command that just executed is NOT a request 
  2179.  * sense, the obvious thing to do is to set the result
  2180.  * code to the values of the stored parameters.
  2181.  * 
  2182.  * If it was a REQUEST SENSE command, we need some way 
  2183.  * to differentiate between the failure code of the original
  2184.  * and the failure code of the REQUEST sense - the obvious
  2185.  * case is success, where we fall through and leave the result
  2186.  * code unchanged.
  2187.  * 
  2188.  * The non-obvious place is where the REQUEST SENSE failed 
  2189.  */
  2190. if (cmd->cmnd[0] != REQUEST_SENSE)
  2191. cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
  2192. else if (cmd->SCp.Status != GOOD)
  2193. cmd->result = (cmd->result & 0x00ffff) | (DID_ERROR << 16);
  2194. #ifdef AUTOSENSE
  2195. if ((cmd->cmnd[0] != REQUEST_SENSE) && (cmd->SCp.Status == CHECK_CONDITION)) {
  2196. dprintk(NDEBUG_AUTOSENSE, ("scsi%d : performing request sensen", instance->host_no));
  2197. cmd->cmnd[0] = REQUEST_SENSE;
  2198. cmd->cmnd[1] &= 0xe0;
  2199. cmd->cmnd[2] = 0;
  2200. cmd->cmnd[3] = 0;
  2201. cmd->cmnd[4] = sizeof(cmd->sense_buffer);
  2202. cmd->cmnd[5] = 0;
  2203. cmd->SCp.buffer = NULL;
  2204. cmd->SCp.buffers_residual = 0;
  2205. cmd->SCp.ptr = (char *) cmd->sense_buffer;
  2206. cmd->SCp.this_residual = sizeof(cmd->sense_buffer);
  2207. LIST(cmd, hostdata->issue_queue);
  2208. cmd->host_scribble = (unsigned char *)
  2209.     hostdata->issue_queue;
  2210. hostdata->issue_queue = (Scsi_Cmnd *) cmd;
  2211. dprintk(NDEBUG_QUEUES, ("scsi%d : REQUEST SENSE added to head of issue queuen", instance->host_no));
  2212. } else {
  2213. #endif /* def AUTOSENSE */
  2214. collect_stats(hostdata, cmd);
  2215. cmd->scsi_done(cmd);
  2216. }
  2217. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  2218. /* 
  2219.  * Restore phase bits to 0 so an interrupted selection, 
  2220.  * arbitration can resume.
  2221.  */
  2222. NCR5380_write(TARGET_COMMAND_REG, 0);
  2223. while ((NCR5380_read(STATUS_REG) & SR_BSY) && !hostdata->connected)
  2224. barrier();
  2225. return;
  2226. case MESSAGE_REJECT:
  2227. /* Accept message by clearing ACK */
  2228. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2229. switch (hostdata->last_message) {
  2230. case HEAD_OF_QUEUE_TAG:
  2231. case ORDERED_QUEUE_TAG:
  2232. case SIMPLE_QUEUE_TAG:
  2233. cmd->device->tagged_queue = 0;
  2234. hostdata->busy[cmd->target] |= (1 << cmd->lun);
  2235. break;
  2236. default:
  2237. break;
  2238. }
  2239. case DISCONNECT:{
  2240. /* Accept message by clearing ACK */
  2241. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2242. cmd->device->disconnect = 1;
  2243. LIST(cmd, hostdata->disconnected_queue);
  2244. cmd->host_scribble = (unsigned char *)
  2245.     hostdata->disconnected_queue;
  2246. hostdata->connected = NULL;
  2247. hostdata->disconnected_queue = cmd;
  2248. dprintk(NDEBUG_QUEUES, ("scsi%d : command for target %d lun %d was moved from connected to" "  the disconnected_queuen", instance->host_no, cmd->target, cmd->lun));
  2249. /* 
  2250.  * Restore phase bits to 0 so an interrupted selection, 
  2251.  * arbitration can resume.
  2252.  */
  2253. NCR5380_write(TARGET_COMMAND_REG, 0);
  2254. /* Enable reselect interrupts */
  2255. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  2256. /* Wait for bus free to avoid nasty timeouts */
  2257. while ((NCR5380_read(STATUS_REG) & SR_BSY) && !hostdata->connected)
  2258. barrier();
  2259. return;
  2260. }
  2261. /* 
  2262.  * The SCSI data pointer is *IMPLICITLY* saved on a disconnect
  2263.  * operation, in violation of the SCSI spec so we can safely 
  2264.  * ignore SAVE/RESTORE pointers calls.
  2265.  *
  2266.  * Unfortunately, some disks violate the SCSI spec and 
  2267.  * don't issue the required SAVE_POINTERS message before
  2268.  * disconnecting, and we have to break spec to remain 
  2269.  * compatible.
  2270.  */
  2271. case SAVE_POINTERS:
  2272. case RESTORE_POINTERS:
  2273. /* Accept message by clearing ACK */
  2274. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2275. break;
  2276. case EXTENDED_MESSAGE:
  2277. /* 
  2278.  * Extended messages are sent in the following format :
  2279.  * Byte         
  2280.  * 0            EXTENDED_MESSAGE == 1
  2281.  * 1            length (includes one byte for code, doesn't 
  2282.  *              include first two bytes)
  2283.  * 2            code
  2284.  * 3..length+1  arguments
  2285.  *
  2286.  * Start the extended message buffer with the EXTENDED_MESSAGE
  2287.  * byte, since print_msg() wants the whole thing.  
  2288.  */
  2289. extended_msg[0] = EXTENDED_MESSAGE;
  2290. /* Accept first byte by clearing ACK */
  2291. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2292. dprintk(NDEBUG_EXTENDED, ("scsi%d : receiving extended messagen", instance->host_no));
  2293. len = 2;
  2294. data = extended_msg + 1;
  2295. phase = PHASE_MSGIN;
  2296. NCR5380_transfer_pio(instance, &phase, &len, &data);
  2297. dprintk(NDEBUG_EXTENDED, ("scsi%d : length=%d, code=0x%02xn", instance->host_no, (int) extended_msg[1], (int) extended_msg[2]));
  2298. if (!len && extended_msg[1] <= (sizeof(extended_msg) - 1)) {
  2299. /* Accept third byte by clearing ACK */
  2300. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2301. len = extended_msg[1] - 1;
  2302. data = extended_msg + 3;
  2303. phase = PHASE_MSGIN;
  2304. NCR5380_transfer_pio(instance, &phase, &len, &data);
  2305. dprintk(NDEBUG_EXTENDED, ("scsi%d : message received, residual %dn", instance->host_no, len));
  2306. switch (extended_msg[2]) {
  2307. case EXTENDED_SDTR:
  2308. case EXTENDED_WDTR:
  2309. case EXTENDED_MODIFY_DATA_POINTER:
  2310. case EXTENDED_EXTENDED_IDENTIFY:
  2311. tmp = 0;
  2312. }
  2313. } else if (len) {
  2314. printk("scsi%d: error receiving extended messagen", instance->host_no);
  2315. tmp = 0;
  2316. } else {
  2317. printk("scsi%d: extended message code %02x length %d is too longn", instance->host_no, extended_msg[2], extended_msg[1]);
  2318. tmp = 0;
  2319. }
  2320. /* Fall through to reject message */
  2321. /* 
  2322.  * If we get something weird that we aren't expecting, 
  2323.  * reject it.
  2324.  */
  2325. default:
  2326. if (!tmp) {
  2327. printk("scsi%d: rejecting message ", instance->host_no);
  2328. print_msg(extended_msg);
  2329. printk("n");
  2330. } else if (tmp != EXTENDED_MESSAGE)
  2331. printk("scsi%d: rejecting unknown message %02x from target %d, lun %dn", instance->host_no, tmp, cmd->target, cmd->lun);
  2332. else
  2333. printk("scsi%d: rejecting unknown extended message code %02x, length %d from target %d, lun %dn", instance->host_no, extended_msg[1], extended_msg[0], cmd->target, cmd->lun);
  2334. msgout = MESSAGE_REJECT;
  2335. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
  2336. break;
  2337. } /* switch (tmp) */
  2338. break;
  2339. case PHASE_MSGOUT:
  2340. len = 1;
  2341. data = &msgout;
  2342. hostdata->last_message = msgout;
  2343. NCR5380_transfer_pio(instance, &phase, &len, &data);
  2344. if (msgout == ABORT) {
  2345. hostdata->busy[cmd->target] &= ~(1 << cmd->lun);
  2346. hostdata->connected = NULL;
  2347. cmd->result = DID_ERROR << 16;
  2348. collect_stats(hostdata, cmd);
  2349. cmd->scsi_done(cmd);
  2350. NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
  2351. return;
  2352. }
  2353. msgout = NOP;
  2354. break;
  2355. case PHASE_CMDOUT:
  2356. len = cmd->cmd_len;
  2357. data = cmd->cmnd;
  2358. /* 
  2359.  * XXX for performance reasons, on machines with a 
  2360.  * PSEUDO-DMA architecture we should probably 
  2361.  * use the dma transfer function.  
  2362.  */
  2363. NCR5380_transfer_pio(instance, &phase, &len, &data);
  2364. if (!cmd->device->disconnect && should_disconnect(cmd->cmnd[0])) {
  2365. hostdata->time_expires = jiffies + USLEEP_SLEEP;
  2366. dprintk(NDEBUG_USLEEP, ("scsi%d : issued command, sleeping until %uln", instance->host_no, hostdata->time_expires));
  2367. NCR5380_set_timer(instance);
  2368. return;
  2369. }
  2370. break;
  2371. case PHASE_STATIN:
  2372. len = 1;
  2373. data = &tmp;
  2374. NCR5380_transfer_pio(instance, &phase, &len, &data);
  2375. cmd->SCp.Status = tmp;
  2376. break;
  2377. default:
  2378. printk("scsi%d : unknown phasen", instance->host_no);
  2379. NCR5380_dprint(NDEBUG_ALL, instance);
  2380. } /* switch(phase) */
  2381. } /* if (tmp * SR_REQ) */
  2382. else {
  2383. /* RvC: go to sleep if polling time expired
  2384.  */
  2385. if (!cmd->device->disconnect && time_after_eq(jiffies, poll_time)) {
  2386. hostdata->time_expires = jiffies + USLEEP_SLEEP;
  2387. dprintk(NDEBUG_USLEEP, ("scsi%d : poll timed out, sleeping until %uln", instance->host_no, hostdata->time_expires));
  2388. NCR5380_set_timer(instance);
  2389. return;
  2390. }
  2391. }
  2392. } /* while (1) */
  2393. }
  2394. /*
  2395.  * Function : void NCR5380_reselect (struct Scsi_Host *instance)
  2396.  *
  2397.  * Purpose : does reselection, initializing the instance->connected 
  2398.  *      field to point to the Scsi_Cmnd for which the I_T_L or I_T_L_Q 
  2399.  *      nexus has been reestablished,
  2400.  *      
  2401.  * Inputs : instance - this instance of the NCR5380.
  2402.  *
  2403.  * Locks: io_request_lock held by caller
  2404.  */
  2405. static void NCR5380_reselect(struct Scsi_Host *instance) {
  2406. NCR5380_local_declare();
  2407. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *)
  2408.  instance->hostdata;
  2409. unsigned char target_mask;
  2410. unsigned char lun, phase;
  2411. int len;
  2412. unsigned char msg[3];
  2413. unsigned char *data;
  2414. Scsi_Cmnd *tmp = NULL, *prev;
  2415. int abort = 0;
  2416. NCR5380_setup(instance);
  2417. /*
  2418.  * Disable arbitration, etc. since the host adapter obviously
  2419.  * lost, and tell an interrupted NCR5380_select() to restart.
  2420.  */
  2421. NCR5380_write(MODE_REG, MR_BASE);
  2422. hostdata->restart_select = 1;
  2423. target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask);
  2424. dprintk(NDEBUG_SELECTION, ("scsi%d : reselectn", instance->host_no));
  2425. /* 
  2426.  * At this point, we have detected that our SCSI ID is on the bus,
  2427.  * SEL is true and BSY was false for at least one bus settle delay
  2428.  * (400 ns).
  2429.  *
  2430.  * We must assert BSY ourselves, until the target drops the SEL
  2431.  * signal.
  2432.  */
  2433. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_BSY);
  2434. while (NCR5380_read(STATUS_REG) & SR_SEL);
  2435. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2436. /*
  2437.  * Wait for target to go into MSGIN.
  2438.  */
  2439. while (!(NCR5380_read(STATUS_REG) & SR_REQ));
  2440. len = 1;
  2441. data = msg;
  2442. phase = PHASE_MSGIN;
  2443. NCR5380_transfer_pio(instance, &phase, &len, &data);
  2444. if (!msg[0] & 0x80) {
  2445. printk("scsi%d : expecting IDENTIFY message, got ", instance->host_no);
  2446. print_msg(msg);
  2447. abort = 1;
  2448. } else {
  2449. /* Accept message by clearing ACK */
  2450. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2451. lun = (msg[0] & 0x07);
  2452. /* 
  2453.  * We need to add code for SCSI-II to track which devices have
  2454.  * I_T_L_Q nexuses established, and which have simple I_T_L
  2455.  * nexuses so we can chose to do additional data transfer.
  2456.  */
  2457. /* 
  2458.  * Find the command corresponding to the I_T_L or I_T_L_Q  nexus we 
  2459.  * just reestablished, and remove it from the disconnected queue.
  2460.  */
  2461. for (tmp = (Scsi_Cmnd *) hostdata->disconnected_queue, prev = NULL; tmp; prev = tmp, tmp = (Scsi_Cmnd *) tmp->host_scribble)
  2462. if ((target_mask == (1 << tmp->target)) && (lun == tmp->lun)
  2463.     ) {
  2464. if (prev) {
  2465. REMOVE(prev, prev->host_scribble, tmp, tmp->host_scribble);
  2466. prev->host_scribble = tmp->host_scribble;
  2467. } else {
  2468. REMOVE(-1, hostdata->disconnected_queue, tmp, tmp->host_scribble);
  2469. hostdata->disconnected_queue = (Scsi_Cmnd *) tmp->host_scribble;
  2470. }
  2471. tmp->host_scribble = NULL;
  2472. break;
  2473. }
  2474. if (!tmp) {
  2475. printk("scsi%d : warning : target bitmask %02x lun %d not in disconnect_queue.n", instance->host_no, target_mask, lun);
  2476. /* 
  2477.  * Since we have an established nexus that we can't do anything with,
  2478.  * we must abort it.  
  2479.  */
  2480. abort = 1;
  2481. }
  2482. }
  2483. if (abort) {
  2484. do_abort(instance);
  2485. } else {
  2486. hostdata->connected = tmp;
  2487. dprintk(NDEBUG_RESELECTION, ("scsi%d : nexus established, target = %d, lun = %d, tag = %dn", instance->host_no, tmp->target, tmp->lun, tmp->tag));
  2488. }
  2489. }
  2490. /*
  2491.  * Function : void NCR5380_dma_complete (struct Scsi_Host *instance)
  2492.  *
  2493.  * Purpose : called by interrupt handler when DMA finishes or a phase
  2494.  *      mismatch occurs (which would finish the DMA transfer).  
  2495.  *
  2496.  * Inputs : instance - this instance of the NCR5380.
  2497.  *
  2498.  * Returns : pointer to the Scsi_Cmnd structure for which the I_T_L
  2499.  *      nexus has been reestablished, on failure NULL is returned.
  2500.  */
  2501. #ifdef REAL_DMA
  2502. static void NCR5380_dma_complete(NCR5380_instance * instance) {
  2503. NCR5380_local_declare();
  2504. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata * instance->hostdata);
  2505. int transferred;
  2506. NCR5380_setup(instance);
  2507. /*
  2508.  * XXX this might not be right.
  2509.  *
  2510.  * Wait for final byte to transfer, ie wait for ACK to go false.
  2511.  *
  2512.  * We should use the Last Byte Sent bit, unfortunately this is 
  2513.  * not available on the 5380/5381 (only the various CMOS chips)
  2514.  */
  2515. while (NCR5380_read(BUS_AND_STATUS_REG) & BASR_ACK);
  2516. NCR5380_write(MODE_REG, MR_BASE);
  2517. NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
  2518. /*
  2519.  * The only places we should see a phase mismatch and have to send
  2520.  * data from the same set of pointers will be the data transfer
  2521.  * phases.  So, residual, requested length are only important here.
  2522.  */
  2523. if (!(hostdata->connected->SCp.phase & SR_CD)) {
  2524. transferred = instance->dmalen - NCR5380_dma_residual();
  2525. hostdata->connected->SCp.this_residual -= transferred;
  2526. hostdata->connected->SCp.ptr += transferred;
  2527. }
  2528. }
  2529. #endif /* def REAL_DMA */
  2530. /*
  2531.  * Function : int NCR5380_abort (Scsi_Cmnd *cmd)
  2532.  *
  2533.  * Purpose : abort a command
  2534.  *
  2535.  * Inputs : cmd - the Scsi_Cmnd to abort, code - code to set the 
  2536.  *      host byte of the result field to, if zero DID_ABORTED is 
  2537.  *      used.
  2538.  *
  2539.  * Returns : 0 - success, -1 on failure.
  2540.  *
  2541.  * XXX - there is no way to abort the command that is currently 
  2542.  * connected, you have to wait for it to complete.  If this is 
  2543.  * a problem, we could implement longjmp() / setjmp(), setjmp()
  2544.  * called where the loop started in NCR5380_main().
  2545.  *
  2546.  * Locks: io_request_lock held by caller
  2547.  */
  2548. #ifndef NCR5380_abort
  2549. static
  2550. #endif
  2551. int NCR5380_abort(Scsi_Cmnd * cmd) {
  2552. NCR5380_local_declare();
  2553. struct Scsi_Host *instance = cmd->host;
  2554. struct NCR5380_hostdata *hostdata = (struct NCR5380_hostdata *) instance->hostdata;
  2555. Scsi_Cmnd *tmp, **prev;
  2556. printk("scsi%d : aborting commandn", instance->host_no);
  2557. print_Scsi_Cmnd(cmd);
  2558. NCR5380_print_status(instance);
  2559. printk("scsi%d : aborting commandn", instance->host_no);
  2560. print_Scsi_Cmnd(cmd);
  2561. NCR5380_print_status(instance);
  2562. NCR5380_setup(instance);
  2563. dprintk(NDEBUG_ABORT, ("scsi%d : abort calledn", instance->host_no));
  2564. dprintk(NDEBUG_ABORT, ("        basr 0x%X, sr 0x%Xn", NCR5380_read(BUS_AND_STATUS_REG), NCR5380_read(STATUS_REG)));
  2565. #if 0
  2566. /*
  2567.  * Case 1 : If the command is the currently executing command, 
  2568.  * we'll set the aborted flag and return control so that 
  2569.  * information transfer routine can exit cleanly.
  2570.  */
  2571. if (hostdata->connected == cmd) {
  2572. dprintk(NDEBUG_ABORT, ("scsi%d : aborting connected commandn", instance->host_no));
  2573. hostdata->aborted = 1;
  2574. /*
  2575.  * We should perform BSY checking, and make sure we haven't slipped
  2576.  * into BUS FREE.
  2577.  */
  2578. NCR5380_write(INITIATOR_COMMAND_REG, ICR_ASSERT_ATN);
  2579. /* 
  2580.  * Since we can't change phases until we've completed the current 
  2581.  * handshake, we have to source or sink a byte of data if the current
  2582.  * phase is not MSGOUT.
  2583.  */
  2584. /* 
  2585.  * Return control to the executing NCR drive so we can clear the
  2586.  * aborted flag and get back into our main loop.
  2587.  */
  2588. return 0;
  2589. }
  2590. #endif
  2591. /* 
  2592.  * Case 2 : If the command hasn't been issued yet, we simply remove it 
  2593.  *          from the issue queue.
  2594.  */
  2595. /* KLL */
  2596. dprintk(NDEBUG_ABORT, ("scsi%d : abort going into loop.n", instance->host_no));
  2597. for (prev = (Scsi_Cmnd **) & (hostdata->issue_queue), tmp = (Scsi_Cmnd *) hostdata->issue_queue; tmp; prev = (Scsi_Cmnd **) & (tmp->host_scribble), tmp = (Scsi_Cmnd *) tmp->host_scribble)
  2598. if (cmd == tmp) {
  2599. REMOVE(5, *prev, tmp, tmp->host_scribble);
  2600. (*prev) = (Scsi_Cmnd *) tmp->host_scribble;
  2601. tmp->host_scribble = NULL;
  2602. tmp->result = DID_ABORT << 16;
  2603. dprintk(NDEBUG_ABORT, ("scsi%d : abort removed command from issue queue.n", instance->host_no));
  2604. tmp->done(tmp);
  2605. return SCSI_ABORT_SUCCESS;
  2606. }
  2607. #if (NDEBUG  & NDEBUG_ABORT)
  2608. /* KLL */
  2609. else if (prev == tmp)
  2610. printk("scsi%d : LOOPn", instance->host_no);
  2611. #endif
  2612. /* 
  2613.  * Case 3 : If any commands are connected, we're going to fail the abort
  2614.  *          and let the high level SCSI driver retry at a later time or 
  2615.  *          issue a reset.
  2616.  *
  2617.  *          Timeouts, and therefore aborted commands, will be highly unlikely
  2618.  *          and handling them cleanly in this situation would make the common
  2619.  *          case of noresets less efficient, and would pollute our code.  So,
  2620.  *          we fail.
  2621.  */
  2622. if (hostdata->connected) {
  2623. dprintk(NDEBUG_ABORT, ("scsi%d : abort failed, command connected.n", instance->host_no));
  2624. return SCSI_ABORT_NOT_RUNNING;
  2625. }
  2626. /*
  2627.  * Case 4: If the command is currently disconnected from the bus, and 
  2628.  *      there are no connected commands, we reconnect the I_T_L or 
  2629.  *      I_T_L_Q nexus associated with it, go into message out, and send 
  2630.  *      an abort message.
  2631.  *
  2632.  * This case is especially ugly. In order to reestablish the nexus, we
  2633.  * need to call NCR5380_select().  The easiest way to implement this 
  2634.  * function was to abort if the bus was busy, and let the interrupt
  2635.  * handler triggered on the SEL for reselect take care of lost arbitrations
  2636.  * where necessary, meaning interrupts need to be enabled.
  2637.  *
  2638.  * When interrupts are enabled, the queues may change - so we 
  2639.  * can't remove it from the disconnected queue before selecting it
  2640.  * because that could cause a failure in hashing the nexus if that 
  2641.  * device reselected.
  2642.  * 
  2643.  * Since the queues may change, we can't use the pointers from when we
  2644.  * first locate it.
  2645.  *
  2646.  * So, we must first locate the command, and if NCR5380_select()
  2647.  * succeeds, then issue the abort, relocate the command and remove
  2648.  * it from the disconnected queue.
  2649.  */
  2650. for (tmp = (Scsi_Cmnd *) hostdata->disconnected_queue; tmp; tmp = (Scsi_Cmnd *) tmp->host_scribble)
  2651. if (cmd == tmp) {
  2652. dprintk(NDEBUG_ABORT, ("scsi%d : aborting disconnected command.n", instance->host_no));
  2653. if (NCR5380_select(instance, cmd, (int) cmd->tag))
  2654. return SCSI_ABORT_BUSY;
  2655. dprintk(NDEBUG_ABORT, ("scsi%d : nexus reestablished.n", instance->host_no));
  2656. do_abort(instance);
  2657. for (prev = (Scsi_Cmnd **) & (hostdata->disconnected_queue), tmp = (Scsi_Cmnd *) hostdata->disconnected_queue; tmp; prev = (Scsi_Cmnd **) & (tmp->host_scribble), tmp = (Scsi_Cmnd *) tmp->host_scribble)
  2658. if (cmd == tmp) {
  2659. REMOVE(5, *prev, tmp, tmp->host_scribble);
  2660. *prev = (Scsi_Cmnd *) tmp->host_scribble;
  2661. tmp->host_scribble = NULL;
  2662. tmp->result = DID_ABORT << 16;
  2663. tmp->done(tmp);
  2664. return SCSI_ABORT_SUCCESS;
  2665. }
  2666. }
  2667. /*
  2668.  * Case 5 : If we reached this point, the command was not found in any of 
  2669.  *          the queues.
  2670.  *
  2671.  * We probably reached this point because of an unlikely race condition
  2672.  * between the command completing successfully and the abortion code,
  2673.  * so we won't panic, but we will notify the user in case something really
  2674.  * broke.
  2675.  */
  2676. printk("scsi%d : warning : SCSI command probably completed successfullyn" "         before abortionn", instance->host_no);
  2677. return SCSI_ABORT_NOT_RUNNING;
  2678. }
  2679. /* 
  2680.  * Function : int NCR5380_reset (Scsi_Cmnd *cmd, unsigned int reset_flags)
  2681.  * 
  2682.  * Purpose : reset the SCSI bus.
  2683.  *
  2684.  * Returns : SCSI_RESET_WAKEUP
  2685.  *
  2686.  * Locks: io_request_lock held by caller
  2687.  */
  2688. #ifndef NCR5380_reset
  2689. static
  2690. #endif
  2691. int NCR5380_reset(Scsi_Cmnd * cmd, unsigned int dummy) {
  2692. NCR5380_local_declare();
  2693. NCR5380_setup(cmd->host);
  2694. NCR5380_print_status(cmd->host);
  2695. do_reset(cmd->host);
  2696. return SCSI_RESET_WAKEUP;
  2697. }