cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

NCR5380.c (71825B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * NCR 5380 generic driver routines.  These should make it *trivial*
      4 * to implement 5380 SCSI drivers under Linux with a non-trantor
      5 * architecture.
      6 *
      7 * Note that these routines also work with NR53c400 family chips.
      8 *
      9 * Copyright 1993, Drew Eckhardt
     10 * Visionary Computing
     11 * (Unix and Linux consulting and custom programming)
     12 * drew@colorado.edu
     13 * +1 (303) 666-5836
     14 *
     15 * For more information, please consult
     16 *
     17 * NCR 5380 Family
     18 * SCSI Protocol Controller
     19 * Databook
     20 *
     21 * NCR Microelectronics
     22 * 1635 Aeroplaza Drive
     23 * Colorado Springs, CO 80916
     24 * 1+ (719) 578-3400
     25 * 1+ (800) 334-5454
     26 */
     27
     28/*
     29 * With contributions from Ray Van Tassle, Ingmar Baumgart,
     30 * Ronald van Cuijlenborg, Alan Cox and others.
     31 */
     32
     33/* Ported to Atari by Roman Hodek and others. */
     34
     35/* Adapted for the Sun 3 by Sam Creasey. */
     36
     37/*
     38 * Design
     39 *
     40 * This is a generic 5380 driver.  To use it on a different platform,
     41 * one simply writes appropriate system specific macros (ie, data
     42 * transfer - some PC's will use the I/O bus, 68K's must use
     43 * memory mapped) and drops this file in their 'C' wrapper.
     44 *
     45 * As far as command queueing, two queues are maintained for
     46 * each 5380 in the system - commands that haven't been issued yet,
     47 * and commands that are currently executing.  This means that an
     48 * unlimited number of commands may be queued, letting
     49 * more commands propagate from the higher driver levels giving higher
     50 * throughput.  Note that both I_T_L and I_T_L_Q nexuses are supported,
     51 * allowing multiple commands to propagate all the way to a SCSI-II device
     52 * while a command is already executing.
     53 *
     54 *
     55 * Issues specific to the NCR5380 :
     56 *
     57 * When used in a PIO or pseudo-dma mode, the NCR5380 is a braindead
     58 * piece of hardware that requires you to sit in a loop polling for
     59 * the REQ signal as long as you are connected.  Some devices are
     60 * brain dead (ie, many TEXEL CD ROM drives) and won't disconnect
     61 * while doing long seek operations. [...] These
     62 * broken devices are the exception rather than the rule and I'd rather
     63 * spend my time optimizing for the normal case.
     64 *
     65 * Architecture :
     66 *
     67 * At the heart of the design is a coroutine, NCR5380_main,
     68 * which is started from a workqueue for each NCR5380 host in the
     69 * system.  It attempts to establish I_T_L or I_T_L_Q nexuses by
     70 * removing the commands from the issue queue and calling
     71 * NCR5380_select() if a nexus is not established.
     72 *
     73 * Once a nexus is established, the NCR5380_information_transfer()
     74 * phase goes through the various phases as instructed by the target.
     75 * if the target goes into MSG IN and sends a DISCONNECT message,
     76 * the command structure is placed into the per instance disconnected
     77 * queue, and NCR5380_main tries to find more work.  If the target is
     78 * idle for too long, the system will try to sleep.
     79 *
     80 * If a command has disconnected, eventually an interrupt will trigger,
     81 * calling NCR5380_intr()  which will in turn call NCR5380_reselect
     82 * to reestablish a nexus.  This will run main if necessary.
     83 *
     84 * On command termination, the done function will be called as
     85 * appropriate.
     86 *
     87 * The command data pointer is initialized after the command is connected
     88 * in NCR5380_select, and set as appropriate in NCR5380_information_transfer.
     89 * Note that in violation of the standard, an implicit SAVE POINTERS operation
     90 * is done, since some BROKEN disks fail to issue an explicit SAVE POINTERS.
     91 */
     92
     93/*
     94 * Using this file :
     95 * This file a skeleton Linux SCSI driver for the NCR 5380 series
     96 * of chips.  To use it, you write an architecture specific functions
     97 * and macros and include this file in your driver.
     98 *
     99 * These macros MUST be defined :
    100 *
    101 * NCR5380_read(register)  - read from the specified register
    102 *
    103 * NCR5380_write(register, value) - write to the specific register
    104 *
    105 * NCR5380_implementation_fields  - additional fields needed for this
    106 * specific implementation of the NCR5380
    107 *
    108 * Either real DMA *or* pseudo DMA may be implemented
    109 *
    110 * NCR5380_dma_xfer_len   - determine size of DMA/PDMA transfer
    111 * NCR5380_dma_send_setup - execute DMA/PDMA from memory to 5380
    112 * NCR5380_dma_recv_setup - execute DMA/PDMA from 5380 to memory
    113 * NCR5380_dma_residual   - residual byte count
    114 *
    115 * The generic driver is initialized by calling NCR5380_init(instance),
    116 * after setting the appropriate host specific fields and ID.
    117 */
    118
    119#ifndef NCR5380_io_delay
    120#define NCR5380_io_delay(x)
    121#endif
    122
    123#ifndef NCR5380_acquire_dma_irq
    124#define NCR5380_acquire_dma_irq(x)	(1)
    125#endif
    126
    127#ifndef NCR5380_release_dma_irq
    128#define NCR5380_release_dma_irq(x)
    129#endif
    130
    131static unsigned int disconnect_mask = ~0;
    132module_param(disconnect_mask, int, 0444);
    133
    134static int do_abort(struct Scsi_Host *, unsigned int);
    135static void do_reset(struct Scsi_Host *);
    136static void bus_reset_cleanup(struct Scsi_Host *);
    137
    138/**
    139 * initialize_SCp - init the scsi pointer field
    140 * @cmd: command block to set up
    141 *
    142 * Set up the internal fields in the SCSI command.
    143 */
    144
    145static inline void initialize_SCp(struct scsi_cmnd *cmd)
    146{
    147	struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(cmd);
    148
    149	if (scsi_bufflen(cmd)) {
    150		ncmd->buffer = scsi_sglist(cmd);
    151		ncmd->ptr = sg_virt(ncmd->buffer);
    152		ncmd->this_residual = ncmd->buffer->length;
    153	} else {
    154		ncmd->buffer = NULL;
    155		ncmd->ptr = NULL;
    156		ncmd->this_residual = 0;
    157	}
    158
    159	ncmd->status = 0;
    160	ncmd->message = 0;
    161}
    162
    163static inline void advance_sg_buffer(struct NCR5380_cmd *ncmd)
    164{
    165	struct scatterlist *s = ncmd->buffer;
    166
    167	if (!ncmd->this_residual && s && !sg_is_last(s)) {
    168		ncmd->buffer = sg_next(s);
    169		ncmd->ptr = sg_virt(ncmd->buffer);
    170		ncmd->this_residual = ncmd->buffer->length;
    171	}
    172}
    173
    174static inline void set_resid_from_SCp(struct scsi_cmnd *cmd)
    175{
    176	struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(cmd);
    177	int resid = ncmd->this_residual;
    178	struct scatterlist *s = ncmd->buffer;
    179
    180	if (s)
    181		while (!sg_is_last(s)) {
    182			s = sg_next(s);
    183			resid += s->length;
    184		}
    185	scsi_set_resid(cmd, resid);
    186}
    187
    188/**
    189 * NCR5380_poll_politely2 - wait for two chip register values
    190 * @hostdata: host private data
    191 * @reg1: 5380 register to poll
    192 * @bit1: Bitmask to check
    193 * @val1: Expected value
    194 * @reg2: Second 5380 register to poll
    195 * @bit2: Second bitmask to check
    196 * @val2: Second expected value
    197 * @wait: Time-out in jiffies, 0 if sleeping is not allowed
    198 *
    199 * Polls the chip in a reasonably efficient manner waiting for an
    200 * event to occur. After a short quick poll we begin to yield the CPU
    201 * (if possible). In irq contexts the time-out is arbitrarily limited.
    202 * Callers may hold locks as long as they are held in irq mode.
    203 *
    204 * Returns 0 if either or both event(s) occurred otherwise -ETIMEDOUT.
    205 */
    206
    207static int NCR5380_poll_politely2(struct NCR5380_hostdata *hostdata,
    208                                  unsigned int reg1, u8 bit1, u8 val1,
    209                                  unsigned int reg2, u8 bit2, u8 val2,
    210                                  unsigned long wait)
    211{
    212	unsigned long n = hostdata->poll_loops;
    213	unsigned long deadline = jiffies + wait;
    214
    215	do {
    216		if ((NCR5380_read(reg1) & bit1) == val1)
    217			return 0;
    218		if ((NCR5380_read(reg2) & bit2) == val2)
    219			return 0;
    220		cpu_relax();
    221	} while (n--);
    222
    223	if (!wait)
    224		return -ETIMEDOUT;
    225
    226	/* Repeatedly sleep for 1 ms until deadline */
    227	while (time_is_after_jiffies(deadline)) {
    228		schedule_timeout_uninterruptible(1);
    229		if ((NCR5380_read(reg1) & bit1) == val1)
    230			return 0;
    231		if ((NCR5380_read(reg2) & bit2) == val2)
    232			return 0;
    233	}
    234
    235	return -ETIMEDOUT;
    236}
    237
    238#if NDEBUG
    239static struct {
    240	unsigned char mask;
    241	const char *name;
    242} signals[] = {
    243	{SR_DBP, "PARITY"},
    244	{SR_RST, "RST"},
    245	{SR_BSY, "BSY"},
    246	{SR_REQ, "REQ"},
    247	{SR_MSG, "MSG"},
    248	{SR_CD, "CD"},
    249	{SR_IO, "IO"},
    250	{SR_SEL, "SEL"},
    251	{0, NULL}
    252},
    253basrs[] = {
    254	{BASR_END_DMA_TRANSFER, "END OF DMA"},
    255	{BASR_DRQ, "DRQ"},
    256	{BASR_PARITY_ERROR, "PARITY ERROR"},
    257	{BASR_IRQ, "IRQ"},
    258	{BASR_PHASE_MATCH, "PHASE MATCH"},
    259	{BASR_BUSY_ERROR, "BUSY ERROR"},
    260	{BASR_ATN, "ATN"},
    261	{BASR_ACK, "ACK"},
    262	{0, NULL}
    263},
    264icrs[] = {
    265	{ICR_ASSERT_RST, "ASSERT RST"},
    266	{ICR_ARBITRATION_PROGRESS, "ARB. IN PROGRESS"},
    267	{ICR_ARBITRATION_LOST, "LOST ARB."},
    268	{ICR_ASSERT_ACK, "ASSERT ACK"},
    269	{ICR_ASSERT_BSY, "ASSERT BSY"},
    270	{ICR_ASSERT_SEL, "ASSERT SEL"},
    271	{ICR_ASSERT_ATN, "ASSERT ATN"},
    272	{ICR_ASSERT_DATA, "ASSERT DATA"},
    273	{0, NULL}
    274},
    275mrs[] = {
    276	{MR_BLOCK_DMA_MODE, "BLOCK DMA MODE"},
    277	{MR_TARGET, "TARGET"},
    278	{MR_ENABLE_PAR_CHECK, "PARITY CHECK"},
    279	{MR_ENABLE_PAR_INTR, "PARITY INTR"},
    280	{MR_ENABLE_EOP_INTR, "EOP INTR"},
    281	{MR_MONITOR_BSY, "MONITOR BSY"},
    282	{MR_DMA_MODE, "DMA MODE"},
    283	{MR_ARBITRATE, "ARBITRATE"},
    284	{0, NULL}
    285};
    286
    287/**
    288 * NCR5380_print - print scsi bus signals
    289 * @instance: adapter state to dump
    290 *
    291 * Print the SCSI bus signals for debugging purposes
    292 */
    293
    294static void NCR5380_print(struct Scsi_Host *instance)
    295{
    296	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    297	unsigned char status, basr, mr, icr, i;
    298
    299	status = NCR5380_read(STATUS_REG);
    300	mr = NCR5380_read(MODE_REG);
    301	icr = NCR5380_read(INITIATOR_COMMAND_REG);
    302	basr = NCR5380_read(BUS_AND_STATUS_REG);
    303
    304	printk(KERN_DEBUG "SR =   0x%02x : ", status);
    305	for (i = 0; signals[i].mask; ++i)
    306		if (status & signals[i].mask)
    307			printk(KERN_CONT "%s, ", signals[i].name);
    308	printk(KERN_CONT "\nBASR = 0x%02x : ", basr);
    309	for (i = 0; basrs[i].mask; ++i)
    310		if (basr & basrs[i].mask)
    311			printk(KERN_CONT "%s, ", basrs[i].name);
    312	printk(KERN_CONT "\nICR =  0x%02x : ", icr);
    313	for (i = 0; icrs[i].mask; ++i)
    314		if (icr & icrs[i].mask)
    315			printk(KERN_CONT "%s, ", icrs[i].name);
    316	printk(KERN_CONT "\nMR =   0x%02x : ", mr);
    317	for (i = 0; mrs[i].mask; ++i)
    318		if (mr & mrs[i].mask)
    319			printk(KERN_CONT "%s, ", mrs[i].name);
    320	printk(KERN_CONT "\n");
    321}
    322
    323static struct {
    324	unsigned char value;
    325	const char *name;
    326} phases[] = {
    327	{PHASE_DATAOUT, "DATAOUT"},
    328	{PHASE_DATAIN, "DATAIN"},
    329	{PHASE_CMDOUT, "CMDOUT"},
    330	{PHASE_STATIN, "STATIN"},
    331	{PHASE_MSGOUT, "MSGOUT"},
    332	{PHASE_MSGIN, "MSGIN"},
    333	{PHASE_UNKNOWN, "UNKNOWN"}
    334};
    335
    336/**
    337 * NCR5380_print_phase - show SCSI phase
    338 * @instance: adapter to dump
    339 *
    340 * Print the current SCSI phase for debugging purposes
    341 */
    342
    343static void NCR5380_print_phase(struct Scsi_Host *instance)
    344{
    345	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    346	unsigned char status;
    347	int i;
    348
    349	status = NCR5380_read(STATUS_REG);
    350	if (!(status & SR_REQ))
    351		shost_printk(KERN_DEBUG, instance, "REQ not asserted, phase unknown.\n");
    352	else {
    353		for (i = 0; (phases[i].value != PHASE_UNKNOWN) &&
    354		     (phases[i].value != (status & PHASE_MASK)); ++i)
    355			;
    356		shost_printk(KERN_DEBUG, instance, "phase %s\n", phases[i].name);
    357	}
    358}
    359#endif
    360
    361/**
    362 * NCR5380_info - report driver and host information
    363 * @instance: relevant scsi host instance
    364 *
    365 * For use as the host template info() handler.
    366 */
    367
    368static const char *NCR5380_info(struct Scsi_Host *instance)
    369{
    370	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    371
    372	return hostdata->info;
    373}
    374
    375/**
    376 * NCR5380_init - initialise an NCR5380
    377 * @instance: adapter to configure
    378 * @flags: control flags
    379 *
    380 * Initializes *instance and corresponding 5380 chip,
    381 * with flags OR'd into the initial flags value.
    382 *
    383 * Notes : I assume that the host, hostno, and id bits have been
    384 * set correctly. I don't care about the irq and other fields.
    385 *
    386 * Returns 0 for success
    387 */
    388
    389static int NCR5380_init(struct Scsi_Host *instance, int flags)
    390{
    391	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    392	int i;
    393	unsigned long deadline;
    394	unsigned long accesses_per_ms;
    395
    396	instance->max_lun = 7;
    397
    398	hostdata->host = instance;
    399	hostdata->id_mask = 1 << instance->this_id;
    400	hostdata->id_higher_mask = 0;
    401	for (i = hostdata->id_mask; i <= 0x80; i <<= 1)
    402		if (i > hostdata->id_mask)
    403			hostdata->id_higher_mask |= i;
    404	for (i = 0; i < 8; ++i)
    405		hostdata->busy[i] = 0;
    406	hostdata->dma_len = 0;
    407
    408	spin_lock_init(&hostdata->lock);
    409	hostdata->connected = NULL;
    410	hostdata->sensing = NULL;
    411	INIT_LIST_HEAD(&hostdata->autosense);
    412	INIT_LIST_HEAD(&hostdata->unissued);
    413	INIT_LIST_HEAD(&hostdata->disconnected);
    414
    415	hostdata->flags = flags;
    416
    417	INIT_WORK(&hostdata->main_task, NCR5380_main);
    418	hostdata->work_q = alloc_workqueue("ncr5380_%d",
    419	                        WQ_UNBOUND | WQ_MEM_RECLAIM,
    420	                        1, instance->host_no);
    421	if (!hostdata->work_q)
    422		return -ENOMEM;
    423
    424	snprintf(hostdata->info, sizeof(hostdata->info),
    425		"%s, irq %d, io_port 0x%lx, base 0x%lx, can_queue %d, cmd_per_lun %d, sg_tablesize %d, this_id %d, flags { %s%s%s}",
    426		instance->hostt->name, instance->irq, hostdata->io_port,
    427		hostdata->base, instance->can_queue, instance->cmd_per_lun,
    428		instance->sg_tablesize, instance->this_id,
    429		hostdata->flags & FLAG_DMA_FIXUP     ? "DMA_FIXUP "     : "",
    430		hostdata->flags & FLAG_NO_PSEUDO_DMA ? "NO_PSEUDO_DMA " : "",
    431		hostdata->flags & FLAG_TOSHIBA_DELAY ? "TOSHIBA_DELAY " : "");
    432
    433	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
    434	NCR5380_write(MODE_REG, MR_BASE);
    435	NCR5380_write(TARGET_COMMAND_REG, 0);
    436	NCR5380_write(SELECT_ENABLE_REG, 0);
    437
    438	/* Calibrate register polling loop */
    439	i = 0;
    440	deadline = jiffies + 1;
    441	do {
    442		cpu_relax();
    443	} while (time_is_after_jiffies(deadline));
    444	deadline += msecs_to_jiffies(256);
    445	do {
    446		NCR5380_read(STATUS_REG);
    447		++i;
    448		cpu_relax();
    449	} while (time_is_after_jiffies(deadline));
    450	accesses_per_ms = i / 256;
    451	hostdata->poll_loops = NCR5380_REG_POLL_TIME * accesses_per_ms / 2;
    452
    453	return 0;
    454}
    455
    456/**
    457 * NCR5380_maybe_reset_bus - Detect and correct bus wedge problems.
    458 * @instance: adapter to check
    459 *
    460 * If the system crashed, it may have crashed with a connected target and
    461 * the SCSI bus busy. Check for BUS FREE phase. If not, try to abort the
    462 * currently established nexus, which we know nothing about. Failing that
    463 * do a bus reset.
    464 *
    465 * Note that a bus reset will cause the chip to assert IRQ.
    466 *
    467 * Returns 0 if successful, otherwise -ENXIO.
    468 */
    469
    470static int NCR5380_maybe_reset_bus(struct Scsi_Host *instance)
    471{
    472	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    473	int pass;
    474
    475	for (pass = 1; (NCR5380_read(STATUS_REG) & SR_BSY) && pass <= 6; ++pass) {
    476		switch (pass) {
    477		case 1:
    478		case 3:
    479		case 5:
    480			shost_printk(KERN_ERR, instance, "SCSI bus busy, waiting up to five seconds\n");
    481			NCR5380_poll_politely(hostdata,
    482			                      STATUS_REG, SR_BSY, 0, 5 * HZ);
    483			break;
    484		case 2:
    485			shost_printk(KERN_ERR, instance, "bus busy, attempting abort\n");
    486			do_abort(instance, 1);
    487			break;
    488		case 4:
    489			shost_printk(KERN_ERR, instance, "bus busy, attempting reset\n");
    490			do_reset(instance);
    491			/* Wait after a reset; the SCSI standard calls for
    492			 * 250ms, we wait 500ms to be on the safe side.
    493			 * But some Toshiba CD-ROMs need ten times that.
    494			 */
    495			if (hostdata->flags & FLAG_TOSHIBA_DELAY)
    496				msleep(2500);
    497			else
    498				msleep(500);
    499			break;
    500		case 6:
    501			shost_printk(KERN_ERR, instance, "bus locked solid\n");
    502			return -ENXIO;
    503		}
    504	}
    505	return 0;
    506}
    507
    508/**
    509 * NCR5380_exit - remove an NCR5380
    510 * @instance: adapter to remove
    511 *
    512 * Assumes that no more work can be queued (e.g. by NCR5380_intr).
    513 */
    514
    515static void NCR5380_exit(struct Scsi_Host *instance)
    516{
    517	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    518
    519	cancel_work_sync(&hostdata->main_task);
    520	destroy_workqueue(hostdata->work_q);
    521}
    522
    523/**
    524 * complete_cmd - finish processing a command and return it to the SCSI ML
    525 * @instance: the host instance
    526 * @cmd: command to complete
    527 */
    528
    529static void complete_cmd(struct Scsi_Host *instance,
    530                         struct scsi_cmnd *cmd)
    531{
    532	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    533
    534	dsprintk(NDEBUG_QUEUES, instance, "complete_cmd: cmd %p\n", cmd);
    535
    536	if (hostdata->sensing == cmd) {
    537		/* Autosense processing ends here */
    538		if (get_status_byte(cmd) != SAM_STAT_GOOD) {
    539			scsi_eh_restore_cmnd(cmd, &hostdata->ses);
    540		} else {
    541			scsi_eh_restore_cmnd(cmd, &hostdata->ses);
    542			set_status_byte(cmd, SAM_STAT_CHECK_CONDITION);
    543		}
    544		hostdata->sensing = NULL;
    545	}
    546
    547	scsi_done(cmd);
    548}
    549
    550/**
    551 * NCR5380_queue_command - queue a command
    552 * @instance: the relevant SCSI adapter
    553 * @cmd: SCSI command
    554 *
    555 * cmd is added to the per-instance issue queue, with minor
    556 * twiddling done to the host specific fields of cmd.  If the
    557 * main coroutine is not running, it is restarted.
    558 */
    559
    560static int NCR5380_queue_command(struct Scsi_Host *instance,
    561                                 struct scsi_cmnd *cmd)
    562{
    563	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    564	struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(cmd);
    565	unsigned long flags;
    566
    567#if (NDEBUG & NDEBUG_NO_WRITE)
    568	switch (cmd->cmnd[0]) {
    569	case WRITE_6:
    570	case WRITE_10:
    571		shost_printk(KERN_DEBUG, instance, "WRITE attempted with NDEBUG_NO_WRITE set\n");
    572		cmd->result = (DID_ERROR << 16);
    573		scsi_done(cmd);
    574		return 0;
    575	}
    576#endif /* (NDEBUG & NDEBUG_NO_WRITE) */
    577
    578	cmd->result = 0;
    579
    580	spin_lock_irqsave(&hostdata->lock, flags);
    581
    582	if (!NCR5380_acquire_dma_irq(instance)) {
    583		spin_unlock_irqrestore(&hostdata->lock, flags);
    584
    585		return SCSI_MLQUEUE_HOST_BUSY;
    586	}
    587
    588	/*
    589	 * Insert the cmd into the issue queue. Note that REQUEST SENSE
    590	 * commands are added to the head of the queue since any command will
    591	 * clear the contingent allegiance condition that exists and the
    592	 * sense data is only guaranteed to be valid while the condition exists.
    593	 */
    594
    595	if (cmd->cmnd[0] == REQUEST_SENSE)
    596		list_add(&ncmd->list, &hostdata->unissued);
    597	else
    598		list_add_tail(&ncmd->list, &hostdata->unissued);
    599
    600	spin_unlock_irqrestore(&hostdata->lock, flags);
    601
    602	dsprintk(NDEBUG_QUEUES, instance, "command %p added to %s of queue\n",
    603	         cmd, (cmd->cmnd[0] == REQUEST_SENSE) ? "head" : "tail");
    604
    605	/* Kick off command processing */
    606	queue_work(hostdata->work_q, &hostdata->main_task);
    607	return 0;
    608}
    609
    610static inline void maybe_release_dma_irq(struct Scsi_Host *instance)
    611{
    612	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    613
    614	/* Caller does the locking needed to set & test these data atomically */
    615	if (list_empty(&hostdata->disconnected) &&
    616	    list_empty(&hostdata->unissued) &&
    617	    list_empty(&hostdata->autosense) &&
    618	    !hostdata->connected &&
    619	    !hostdata->selecting) {
    620		NCR5380_release_dma_irq(instance);
    621	}
    622}
    623
    624/**
    625 * dequeue_next_cmd - dequeue a command for processing
    626 * @instance: the scsi host instance
    627 *
    628 * Priority is given to commands on the autosense queue. These commands
    629 * need autosense because of a CHECK CONDITION result.
    630 *
    631 * Returns a command pointer if a command is found for a target that is
    632 * not already busy. Otherwise returns NULL.
    633 */
    634
    635static struct scsi_cmnd *dequeue_next_cmd(struct Scsi_Host *instance)
    636{
    637	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    638	struct NCR5380_cmd *ncmd;
    639	struct scsi_cmnd *cmd;
    640
    641	if (hostdata->sensing || list_empty(&hostdata->autosense)) {
    642		list_for_each_entry(ncmd, &hostdata->unissued, list) {
    643			cmd = NCR5380_to_scmd(ncmd);
    644			dsprintk(NDEBUG_QUEUES, instance, "dequeue: cmd=%p target=%d busy=0x%02x lun=%llu\n",
    645			         cmd, scmd_id(cmd), hostdata->busy[scmd_id(cmd)], cmd->device->lun);
    646
    647			if (!(hostdata->busy[scmd_id(cmd)] & (1 << cmd->device->lun))) {
    648				list_del(&ncmd->list);
    649				dsprintk(NDEBUG_QUEUES, instance,
    650				         "dequeue: removed %p from issue queue\n", cmd);
    651				return cmd;
    652			}
    653		}
    654	} else {
    655		/* Autosense processing begins here */
    656		ncmd = list_first_entry(&hostdata->autosense,
    657		                        struct NCR5380_cmd, list);
    658		list_del(&ncmd->list);
    659		cmd = NCR5380_to_scmd(ncmd);
    660		dsprintk(NDEBUG_QUEUES, instance,
    661		         "dequeue: removed %p from autosense queue\n", cmd);
    662		scsi_eh_prep_cmnd(cmd, &hostdata->ses, NULL, 0, ~0);
    663		hostdata->sensing = cmd;
    664		return cmd;
    665	}
    666	return NULL;
    667}
    668
    669static void requeue_cmd(struct Scsi_Host *instance, struct scsi_cmnd *cmd)
    670{
    671	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    672	struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(cmd);
    673
    674	if (hostdata->sensing == cmd) {
    675		scsi_eh_restore_cmnd(cmd, &hostdata->ses);
    676		list_add(&ncmd->list, &hostdata->autosense);
    677		hostdata->sensing = NULL;
    678	} else
    679		list_add(&ncmd->list, &hostdata->unissued);
    680}
    681
    682/**
    683 * NCR5380_main - NCR state machines
    684 *
    685 * NCR5380_main is a coroutine that runs as long as more work can
    686 * be done on the NCR5380 host adapters in a system.  Both
    687 * NCR5380_queue_command() and NCR5380_intr() will try to start it
    688 * in case it is not running.
    689 */
    690
    691static void NCR5380_main(struct work_struct *work)
    692{
    693	struct NCR5380_hostdata *hostdata =
    694		container_of(work, struct NCR5380_hostdata, main_task);
    695	struct Scsi_Host *instance = hostdata->host;
    696	int done;
    697
    698	do {
    699		done = 1;
    700
    701		spin_lock_irq(&hostdata->lock);
    702		while (!hostdata->connected && !hostdata->selecting) {
    703			struct scsi_cmnd *cmd = dequeue_next_cmd(instance);
    704
    705			if (!cmd)
    706				break;
    707
    708			dsprintk(NDEBUG_MAIN, instance, "main: dequeued %p\n", cmd);
    709
    710			/*
    711			 * Attempt to establish an I_T_L nexus here.
    712			 * On success, instance->hostdata->connected is set.
    713			 * On failure, we must add the command back to the
    714			 * issue queue so we can keep trying.
    715			 */
    716			/*
    717			 * REQUEST SENSE commands are issued without tagged
    718			 * queueing, even on SCSI-II devices because the
    719			 * contingent allegiance condition exists for the
    720			 * entire unit.
    721			 */
    722
    723			if (!NCR5380_select(instance, cmd)) {
    724				dsprintk(NDEBUG_MAIN, instance, "main: select complete\n");
    725			} else {
    726				dsprintk(NDEBUG_MAIN | NDEBUG_QUEUES, instance,
    727				         "main: select failed, returning %p to queue\n", cmd);
    728				requeue_cmd(instance, cmd);
    729			}
    730		}
    731		if (hostdata->connected && !hostdata->dma_len) {
    732			dsprintk(NDEBUG_MAIN, instance, "main: performing information transfer\n");
    733			NCR5380_information_transfer(instance);
    734			done = 0;
    735		}
    736		if (!hostdata->connected) {
    737			NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
    738			maybe_release_dma_irq(instance);
    739		}
    740		spin_unlock_irq(&hostdata->lock);
    741		if (!done)
    742			cond_resched();
    743	} while (!done);
    744}
    745
    746/*
    747 * NCR5380_dma_complete - finish DMA transfer
    748 * @instance: the scsi host instance
    749 *
    750 * Called by the interrupt handler when DMA finishes or a phase
    751 * mismatch occurs (which would end the DMA transfer).
    752 */
    753
    754static void NCR5380_dma_complete(struct Scsi_Host *instance)
    755{
    756	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    757	struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(hostdata->connected);
    758	int transferred;
    759	unsigned char **data;
    760	int *count;
    761	int saved_data = 0, overrun = 0;
    762	unsigned char p;
    763
    764	if (hostdata->read_overruns) {
    765		p = ncmd->phase;
    766		if (p & SR_IO) {
    767			udelay(10);
    768			if ((NCR5380_read(BUS_AND_STATUS_REG) &
    769			     (BASR_PHASE_MATCH | BASR_ACK)) ==
    770			    (BASR_PHASE_MATCH | BASR_ACK)) {
    771				saved_data = NCR5380_read(INPUT_DATA_REG);
    772				overrun = 1;
    773				dsprintk(NDEBUG_DMA, instance, "read overrun handled\n");
    774			}
    775		}
    776	}
    777
    778#ifdef CONFIG_SUN3
    779	if (sun3scsi_dma_finish(hostdata->connected->sc_data_direction)) {
    780		pr_err("scsi%d: overrun in UDC counter -- not prepared to deal with this!\n",
    781		       instance->host_no);
    782		BUG();
    783	}
    784
    785	if ((NCR5380_read(BUS_AND_STATUS_REG) & (BASR_PHASE_MATCH | BASR_ACK)) ==
    786	    (BASR_PHASE_MATCH | BASR_ACK)) {
    787		pr_err("scsi%d: BASR %02x\n", instance->host_no,
    788		       NCR5380_read(BUS_AND_STATUS_REG));
    789		pr_err("scsi%d: bus stuck in data phase -- probably a single byte overrun!\n",
    790		       instance->host_no);
    791		BUG();
    792	}
    793#endif
    794
    795	NCR5380_write(MODE_REG, MR_BASE);
    796	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
    797	NCR5380_read(RESET_PARITY_INTERRUPT_REG);
    798
    799	transferred = hostdata->dma_len - NCR5380_dma_residual(hostdata);
    800	hostdata->dma_len = 0;
    801
    802	data = (unsigned char **)&ncmd->ptr;
    803	count = &ncmd->this_residual;
    804	*data += transferred;
    805	*count -= transferred;
    806
    807	if (hostdata->read_overruns) {
    808		int cnt, toPIO;
    809
    810		if ((NCR5380_read(STATUS_REG) & PHASE_MASK) == p && (p & SR_IO)) {
    811			cnt = toPIO = hostdata->read_overruns;
    812			if (overrun) {
    813				dsprintk(NDEBUG_DMA, instance,
    814				         "Got an input overrun, using saved byte\n");
    815				*(*data)++ = saved_data;
    816				(*count)--;
    817				cnt--;
    818				toPIO--;
    819			}
    820			if (toPIO > 0) {
    821				dsprintk(NDEBUG_DMA, instance,
    822				         "Doing %d byte PIO to 0x%p\n", cnt, *data);
    823				NCR5380_transfer_pio(instance, &p, &cnt, data, 0);
    824				*count -= toPIO - cnt;
    825			}
    826		}
    827	}
    828}
    829
    830/**
    831 * NCR5380_intr - generic NCR5380 irq handler
    832 * @irq: interrupt number
    833 * @dev_id: device info
    834 *
    835 * Handle interrupts, reestablishing I_T_L or I_T_L_Q nexuses
    836 * from the disconnected queue, and restarting NCR5380_main()
    837 * as required.
    838 *
    839 * The chip can assert IRQ in any of six different conditions. The IRQ flag
    840 * is then cleared by reading the Reset Parity/Interrupt Register (RPIR).
    841 * Three of these six conditions are latched in the Bus and Status Register:
    842 * - End of DMA (cleared by ending DMA Mode)
    843 * - Parity error (cleared by reading RPIR)
    844 * - Loss of BSY (cleared by reading RPIR)
    845 * Two conditions have flag bits that are not latched:
    846 * - Bus phase mismatch (non-maskable in DMA Mode, cleared by ending DMA Mode)
    847 * - Bus reset (non-maskable)
    848 * The remaining condition has no flag bit at all:
    849 * - Selection/reselection
    850 *
    851 * Hence, establishing the cause(s) of any interrupt is partly guesswork.
    852 * In "The DP8490 and DP5380 Comparison Guide", National Semiconductor
    853 * claimed that "the design of the [DP8490] interrupt logic ensures
    854 * interrupts will not be lost (they can be on the DP5380)."
    855 * The L5380/53C80 datasheet from LOGIC Devices has more details.
    856 *
    857 * Checking for bus reset by reading RST is futile because of interrupt
    858 * latency, but a bus reset will reset chip logic. Checking for parity error
    859 * is unnecessary because that interrupt is never enabled. A Loss of BSY
    860 * condition will clear DMA Mode. We can tell when this occurs because the
    861 * the Busy Monitor interrupt is enabled together with DMA Mode.
    862 */
    863
    864static irqreturn_t __maybe_unused NCR5380_intr(int irq, void *dev_id)
    865{
    866	struct Scsi_Host *instance = dev_id;
    867	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    868	int handled = 0;
    869	unsigned char basr;
    870	unsigned long flags;
    871
    872	spin_lock_irqsave(&hostdata->lock, flags);
    873
    874	basr = NCR5380_read(BUS_AND_STATUS_REG);
    875	if (basr & BASR_IRQ) {
    876		unsigned char mr = NCR5380_read(MODE_REG);
    877		unsigned char sr = NCR5380_read(STATUS_REG);
    878
    879		dsprintk(NDEBUG_INTR, instance, "IRQ %d, BASR 0x%02x, SR 0x%02x, MR 0x%02x\n",
    880		         irq, basr, sr, mr);
    881
    882		if ((mr & MR_DMA_MODE) || (mr & MR_MONITOR_BSY)) {
    883			/* Probably End of DMA, Phase Mismatch or Loss of BSY.
    884			 * We ack IRQ after clearing Mode Register. Workarounds
    885			 * for End of DMA errata need to happen in DMA Mode.
    886			 */
    887
    888			dsprintk(NDEBUG_INTR, instance, "interrupt in DMA mode\n");
    889
    890			if (hostdata->connected) {
    891				NCR5380_dma_complete(instance);
    892				queue_work(hostdata->work_q, &hostdata->main_task);
    893			} else {
    894				NCR5380_write(MODE_REG, MR_BASE);
    895				NCR5380_read(RESET_PARITY_INTERRUPT_REG);
    896			}
    897		} else if ((NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_mask) &&
    898		    (sr & (SR_SEL | SR_IO | SR_BSY | SR_RST)) == (SR_SEL | SR_IO)) {
    899			/* Probably reselected */
    900			NCR5380_write(SELECT_ENABLE_REG, 0);
    901			NCR5380_read(RESET_PARITY_INTERRUPT_REG);
    902
    903			dsprintk(NDEBUG_INTR, instance, "interrupt with SEL and IO\n");
    904
    905			if (!hostdata->connected) {
    906				NCR5380_reselect(instance);
    907				queue_work(hostdata->work_q, &hostdata->main_task);
    908			}
    909			if (!hostdata->connected)
    910				NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
    911		} else {
    912			/* Probably Bus Reset */
    913			NCR5380_read(RESET_PARITY_INTERRUPT_REG);
    914
    915			if (sr & SR_RST) {
    916				/* Certainly Bus Reset */
    917				shost_printk(KERN_WARNING, instance,
    918					     "bus reset interrupt\n");
    919				bus_reset_cleanup(instance);
    920			} else {
    921				dsprintk(NDEBUG_INTR, instance, "unknown interrupt\n");
    922			}
    923#ifdef SUN3_SCSI_VME
    924			dregs->csr |= CSR_DMA_ENABLE;
    925#endif
    926		}
    927		handled = 1;
    928	} else {
    929		dsprintk(NDEBUG_INTR, instance, "interrupt without IRQ bit\n");
    930#ifdef SUN3_SCSI_VME
    931		dregs->csr |= CSR_DMA_ENABLE;
    932#endif
    933	}
    934
    935	spin_unlock_irqrestore(&hostdata->lock, flags);
    936
    937	return IRQ_RETVAL(handled);
    938}
    939
    940/**
    941 * NCR5380_select - attempt arbitration and selection for a given command
    942 * @instance: the Scsi_Host instance
    943 * @cmd: the scsi_cmnd to execute
    944 *
    945 * This routine establishes an I_T_L nexus for a SCSI command. This involves
    946 * ARBITRATION, SELECTION and MESSAGE OUT phases and an IDENTIFY message.
    947 *
    948 * Returns true if the operation should be retried.
    949 * Returns false if it should not be retried.
    950 *
    951 * Side effects :
    952 * If bus busy, arbitration failed, etc, NCR5380_select() will exit
    953 * with registers as they should have been on entry - ie
    954 * SELECT_ENABLE will be set appropriately, the NCR5380
    955 * will cease to drive any SCSI bus signals.
    956 *
    957 * If successful : the I_T_L nexus will be established, and
    958 * hostdata->connected will be set to cmd.
    959 * SELECT interrupt will be disabled.
    960 *
    961 * If failed (no target) : scsi_done() will be called, and the
    962 * cmd->result host byte set to DID_BAD_TARGET.
    963 */
    964
    965static bool NCR5380_select(struct Scsi_Host *instance, struct scsi_cmnd *cmd)
    966	__releases(&hostdata->lock) __acquires(&hostdata->lock)
    967{
    968	struct NCR5380_hostdata *hostdata = shost_priv(instance);
    969	unsigned char tmp[3], phase;
    970	unsigned char *data;
    971	int len;
    972	int err;
    973	bool ret = true;
    974	bool can_disconnect = instance->irq != NO_IRQ &&
    975			      cmd->cmnd[0] != REQUEST_SENSE &&
    976			      (disconnect_mask & BIT(scmd_id(cmd)));
    977
    978	NCR5380_dprint(NDEBUG_ARBITRATION, instance);
    979	dsprintk(NDEBUG_ARBITRATION, instance, "starting arbitration, id = %d\n",
    980	         instance->this_id);
    981
    982	/*
    983	 * Arbitration and selection phases are slow and involve dropping the
    984	 * lock, so we have to watch out for EH. An exception handler may
    985	 * change 'selecting' to NULL. This function will then return false
    986	 * so that the caller will forget about 'cmd'. (During information
    987	 * transfer phases, EH may change 'connected' to NULL.)
    988	 */
    989	hostdata->selecting = cmd;
    990
    991	/*
    992	 * Set the phase bits to 0, otherwise the NCR5380 won't drive the
    993	 * data bus during SELECTION.
    994	 */
    995
    996	NCR5380_write(TARGET_COMMAND_REG, 0);
    997
    998	/*
    999	 * Start arbitration.
   1000	 */
   1001
   1002	NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask);
   1003	NCR5380_write(MODE_REG, MR_ARBITRATE);
   1004
   1005	/* The chip now waits for BUS FREE phase. Then after the 800 ns
   1006	 * Bus Free Delay, arbitration will begin.
   1007	 */
   1008
   1009	spin_unlock_irq(&hostdata->lock);
   1010	err = NCR5380_poll_politely2(hostdata, MODE_REG, MR_ARBITRATE, 0,
   1011	                INITIATOR_COMMAND_REG, ICR_ARBITRATION_PROGRESS,
   1012	                                       ICR_ARBITRATION_PROGRESS, HZ);
   1013	spin_lock_irq(&hostdata->lock);
   1014	if (!(NCR5380_read(MODE_REG) & MR_ARBITRATE)) {
   1015		/* Reselection interrupt */
   1016		goto out;
   1017	}
   1018	if (!hostdata->selecting) {
   1019		/* Command was aborted */
   1020		NCR5380_write(MODE_REG, MR_BASE);
   1021		return false;
   1022	}
   1023	if (err < 0) {
   1024		NCR5380_write(MODE_REG, MR_BASE);
   1025		shost_printk(KERN_ERR, instance,
   1026		             "select: arbitration timeout\n");
   1027		goto out;
   1028	}
   1029	spin_unlock_irq(&hostdata->lock);
   1030
   1031	/* The SCSI-2 arbitration delay is 2.4 us */
   1032	udelay(3);
   1033
   1034	/* Check for lost arbitration */
   1035	if ((NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST) ||
   1036	    (NCR5380_read(CURRENT_SCSI_DATA_REG) & hostdata->id_higher_mask) ||
   1037	    (NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_LOST)) {
   1038		NCR5380_write(MODE_REG, MR_BASE);
   1039		dsprintk(NDEBUG_ARBITRATION, instance, "lost arbitration, deasserting MR_ARBITRATE\n");
   1040		spin_lock_irq(&hostdata->lock);
   1041		goto out;
   1042	}
   1043
   1044	/* After/during arbitration, BSY should be asserted.
   1045	 * IBM DPES-31080 Version S31Q works now
   1046	 * Tnx to Thomas_Roesch@m2.maus.de for finding this! (Roman)
   1047	 */
   1048	NCR5380_write(INITIATOR_COMMAND_REG,
   1049		      ICR_BASE | ICR_ASSERT_SEL | ICR_ASSERT_BSY);
   1050
   1051	/*
   1052	 * Again, bus clear + bus settle time is 1.2us, however, this is
   1053	 * a minimum so we'll udelay ceil(1.2)
   1054	 */
   1055
   1056	if (hostdata->flags & FLAG_TOSHIBA_DELAY)
   1057		udelay(15);
   1058	else
   1059		udelay(2);
   1060
   1061	spin_lock_irq(&hostdata->lock);
   1062
   1063	/* NCR5380_reselect() clears MODE_REG after a reselection interrupt */
   1064	if (!(NCR5380_read(MODE_REG) & MR_ARBITRATE))
   1065		goto out;
   1066
   1067	if (!hostdata->selecting) {
   1068		NCR5380_write(MODE_REG, MR_BASE);
   1069		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1070		return false;
   1071	}
   1072
   1073	dsprintk(NDEBUG_ARBITRATION, instance, "won arbitration\n");
   1074
   1075	/*
   1076	 * Now that we have won arbitration, start Selection process, asserting
   1077	 * the host and target ID's on the SCSI bus.
   1078	 */
   1079
   1080	NCR5380_write(OUTPUT_DATA_REG, hostdata->id_mask | (1 << scmd_id(cmd)));
   1081
   1082	/*
   1083	 * Raise ATN while SEL is true before BSY goes false from arbitration,
   1084	 * since this is the only way to guarantee that we'll get a MESSAGE OUT
   1085	 * phase immediately after selection.
   1086	 */
   1087
   1088	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_BSY |
   1089	              ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_SEL);
   1090	NCR5380_write(MODE_REG, MR_BASE);
   1091
   1092	/*
   1093	 * Reselect interrupts must be turned off prior to the dropping of BSY,
   1094	 * otherwise we will trigger an interrupt.
   1095	 */
   1096	NCR5380_write(SELECT_ENABLE_REG, 0);
   1097
   1098	spin_unlock_irq(&hostdata->lock);
   1099
   1100	/*
   1101	 * The initiator shall then wait at least two deskew delays and release
   1102	 * the BSY signal.
   1103	 */
   1104	udelay(1);        /* wingel -- wait two bus deskew delay >2*45ns */
   1105
   1106	/* Reset BSY */
   1107	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA |
   1108	              ICR_ASSERT_ATN | ICR_ASSERT_SEL);
   1109
   1110	/*
   1111	 * Something weird happens when we cease to drive BSY - looks
   1112	 * like the board/chip is letting us do another read before the
   1113	 * appropriate propagation delay has expired, and we're confusing
   1114	 * a BSY signal from ourselves as the target's response to SELECTION.
   1115	 *
   1116	 * A small delay (the 'C++' frontend breaks the pipeline with an
   1117	 * unnecessary jump, making it work on my 386-33/Trantor T128, the
   1118	 * tighter 'C' code breaks and requires this) solves the problem -
   1119	 * the 1 us delay is arbitrary, and only used because this delay will
   1120	 * be the same on other platforms and since it works here, it should
   1121	 * work there.
   1122	 *
   1123	 * wingel suggests that this could be due to failing to wait
   1124	 * one deskew delay.
   1125	 */
   1126
   1127	udelay(1);
   1128
   1129	dsprintk(NDEBUG_SELECTION, instance, "selecting target %d\n", scmd_id(cmd));
   1130
   1131	/*
   1132	 * The SCSI specification calls for a 250 ms timeout for the actual
   1133	 * selection.
   1134	 */
   1135
   1136	err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_BSY, SR_BSY,
   1137	                            msecs_to_jiffies(250));
   1138
   1139	if ((NCR5380_read(STATUS_REG) & (SR_SEL | SR_IO)) == (SR_SEL | SR_IO)) {
   1140		spin_lock_irq(&hostdata->lock);
   1141		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1142		NCR5380_reselect(instance);
   1143		shost_printk(KERN_ERR, instance, "reselection after won arbitration?\n");
   1144		goto out;
   1145	}
   1146
   1147	if (err < 0) {
   1148		spin_lock_irq(&hostdata->lock);
   1149		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1150
   1151		/* Can't touch cmd if it has been reclaimed by the scsi ML */
   1152		if (!hostdata->selecting)
   1153			return false;
   1154
   1155		cmd->result = DID_BAD_TARGET << 16;
   1156		complete_cmd(instance, cmd);
   1157		dsprintk(NDEBUG_SELECTION, instance,
   1158			"target did not respond within 250ms\n");
   1159		ret = false;
   1160		goto out;
   1161	}
   1162
   1163	/*
   1164	 * No less than two deskew delays after the initiator detects the
   1165	 * BSY signal is true, it shall release the SEL signal and may
   1166	 * change the DATA BUS.                                     -wingel
   1167	 */
   1168
   1169	udelay(1);
   1170
   1171	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
   1172
   1173	/*
   1174	 * Since we followed the SCSI spec, and raised ATN while SEL
   1175	 * was true but before BSY was false during selection, the information
   1176	 * transfer phase should be a MESSAGE OUT phase so that we can send the
   1177	 * IDENTIFY message.
   1178	 */
   1179
   1180	/* Wait for start of REQ/ACK handshake */
   1181
   1182	err = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ);
   1183	spin_lock_irq(&hostdata->lock);
   1184	if (err < 0) {
   1185		shost_printk(KERN_ERR, instance, "select: REQ timeout\n");
   1186		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1187		goto out;
   1188	}
   1189	if (!hostdata->selecting) {
   1190		do_abort(instance, 0);
   1191		return false;
   1192	}
   1193
   1194	dsprintk(NDEBUG_SELECTION, instance, "target %d selected, going into MESSAGE OUT phase.\n",
   1195	         scmd_id(cmd));
   1196	tmp[0] = IDENTIFY(can_disconnect, cmd->device->lun);
   1197
   1198	len = 1;
   1199	data = tmp;
   1200	phase = PHASE_MSGOUT;
   1201	NCR5380_transfer_pio(instance, &phase, &len, &data, 0);
   1202	if (len) {
   1203		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1204		cmd->result = DID_ERROR << 16;
   1205		complete_cmd(instance, cmd);
   1206		dsprintk(NDEBUG_SELECTION, instance, "IDENTIFY message transfer failed\n");
   1207		ret = false;
   1208		goto out;
   1209	}
   1210
   1211	dsprintk(NDEBUG_SELECTION, instance, "nexus established.\n");
   1212
   1213	hostdata->connected = cmd;
   1214	hostdata->busy[cmd->device->id] |= 1 << cmd->device->lun;
   1215
   1216#ifdef SUN3_SCSI_VME
   1217	dregs->csr |= CSR_INTR;
   1218#endif
   1219
   1220	initialize_SCp(cmd);
   1221
   1222	ret = false;
   1223
   1224out:
   1225	if (!hostdata->selecting)
   1226		return false;
   1227	hostdata->selecting = NULL;
   1228	return ret;
   1229}
   1230
   1231/*
   1232 * Function : int NCR5380_transfer_pio (struct Scsi_Host *instance,
   1233 * unsigned char *phase, int *count, unsigned char **data)
   1234 *
   1235 * Purpose : transfers data in given phase using polled I/O
   1236 *
   1237 * Inputs : instance - instance of driver, *phase - pointer to
   1238 * what phase is expected, *count - pointer to number of
   1239 * bytes to transfer, **data - pointer to data pointer,
   1240 * can_sleep - 1 or 0 when sleeping is permitted or not, respectively.
   1241 *
   1242 * Returns : -1 when different phase is entered without transferring
   1243 * maximum number of bytes, 0 if all bytes are transferred or exit
   1244 * is in same phase.
   1245 *
   1246 * Also, *phase, *count, *data are modified in place.
   1247 *
   1248 * XXX Note : handling for bus free may be useful.
   1249 */
   1250
   1251/*
   1252 * Note : this code is not as quick as it could be, however it
   1253 * IS 100% reliable, and for the actual data transfer where speed
   1254 * counts, we will always do a pseudo DMA or DMA transfer.
   1255 */
   1256
   1257static int NCR5380_transfer_pio(struct Scsi_Host *instance,
   1258				unsigned char *phase, int *count,
   1259				unsigned char **data, unsigned int can_sleep)
   1260{
   1261	struct NCR5380_hostdata *hostdata = shost_priv(instance);
   1262	unsigned char p = *phase, tmp;
   1263	int c = *count;
   1264	unsigned char *d = *data;
   1265
   1266	/*
   1267	 * The NCR5380 chip will only drive the SCSI bus when the
   1268	 * phase specified in the appropriate bits of the TARGET COMMAND
   1269	 * REGISTER match the STATUS REGISTER
   1270	 */
   1271
   1272	NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p));
   1273
   1274	do {
   1275		/*
   1276		 * Wait for assertion of REQ, after which the phase bits will be
   1277		 * valid
   1278		 */
   1279
   1280		if (NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ,
   1281					  HZ * can_sleep) < 0)
   1282			break;
   1283
   1284		dsprintk(NDEBUG_HANDSHAKE, instance, "REQ asserted\n");
   1285
   1286		/* Check for phase mismatch */
   1287		if ((NCR5380_read(STATUS_REG) & PHASE_MASK) != p) {
   1288			dsprintk(NDEBUG_PIO, instance, "phase mismatch\n");
   1289			NCR5380_dprint_phase(NDEBUG_PIO, instance);
   1290			break;
   1291		}
   1292
   1293		/* Do actual transfer from SCSI bus to / from memory */
   1294		if (!(p & SR_IO))
   1295			NCR5380_write(OUTPUT_DATA_REG, *d);
   1296		else
   1297			*d = NCR5380_read(CURRENT_SCSI_DATA_REG);
   1298
   1299		++d;
   1300
   1301		/*
   1302		 * The SCSI standard suggests that in MSGOUT phase, the initiator
   1303		 * should drop ATN on the last byte of the message phase
   1304		 * after REQ has been asserted for the handshake but before
   1305		 * the initiator raises ACK.
   1306		 */
   1307
   1308		if (!(p & SR_IO)) {
   1309			if (!((p & SR_MSG) && c > 1)) {
   1310				NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA);
   1311				NCR5380_dprint(NDEBUG_PIO, instance);
   1312				NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE |
   1313				              ICR_ASSERT_DATA | ICR_ASSERT_ACK);
   1314			} else {
   1315				NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE |
   1316				              ICR_ASSERT_DATA | ICR_ASSERT_ATN);
   1317				NCR5380_dprint(NDEBUG_PIO, instance);
   1318				NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE |
   1319				              ICR_ASSERT_DATA | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
   1320			}
   1321		} else {
   1322			NCR5380_dprint(NDEBUG_PIO, instance);
   1323			NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ACK);
   1324		}
   1325
   1326		if (NCR5380_poll_politely(hostdata,
   1327		                          STATUS_REG, SR_REQ, 0, 5 * HZ * can_sleep) < 0)
   1328			break;
   1329
   1330		dsprintk(NDEBUG_HANDSHAKE, instance, "REQ negated, handshake complete\n");
   1331
   1332/*
   1333 * We have several special cases to consider during REQ/ACK handshaking :
   1334 * 1.  We were in MSGOUT phase, and we are on the last byte of the
   1335 * message.  ATN must be dropped as ACK is dropped.
   1336 *
   1337 * 2.  We are in a MSGIN phase, and we are on the last byte of the
   1338 * message.  We must exit with ACK asserted, so that the calling
   1339 * code may raise ATN before dropping ACK to reject the message.
   1340 *
   1341 * 3.  ACK and ATN are clear and the target may proceed as normal.
   1342 */
   1343		if (!(p == PHASE_MSGIN && c == 1)) {
   1344			if (p == PHASE_MSGOUT && c > 1)
   1345				NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
   1346			else
   1347				NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1348		}
   1349	} while (--c);
   1350
   1351	dsprintk(NDEBUG_PIO, instance, "residual %d\n", c);
   1352
   1353	*count = c;
   1354	*data = d;
   1355	tmp = NCR5380_read(STATUS_REG);
   1356	/* The phase read from the bus is valid if either REQ is (already)
   1357	 * asserted or if ACK hasn't been released yet. The latter applies if
   1358	 * we're in MSG IN, DATA IN or STATUS and all bytes have been received.
   1359	 */
   1360	if ((tmp & SR_REQ) || ((tmp & SR_IO) && c == 0))
   1361		*phase = tmp & PHASE_MASK;
   1362	else
   1363		*phase = PHASE_UNKNOWN;
   1364
   1365	if (!c || (*phase == p))
   1366		return 0;
   1367	else
   1368		return -1;
   1369}
   1370
   1371/**
   1372 * do_reset - issue a reset command
   1373 * @instance: adapter to reset
   1374 *
   1375 * Issue a reset sequence to the NCR5380 and try and get the bus
   1376 * back into sane shape.
   1377 *
   1378 * This clears the reset interrupt flag because there may be no handler for
   1379 * it. When the driver is initialized, the NCR5380_intr() handler has not yet
   1380 * been installed. And when in EH we may have released the ST DMA interrupt.
   1381 */
   1382
   1383static void do_reset(struct Scsi_Host *instance)
   1384{
   1385	struct NCR5380_hostdata __maybe_unused *hostdata = shost_priv(instance);
   1386	unsigned long flags;
   1387
   1388	local_irq_save(flags);
   1389	NCR5380_write(TARGET_COMMAND_REG,
   1390	              PHASE_SR_TO_TCR(NCR5380_read(STATUS_REG) & PHASE_MASK));
   1391	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_RST);
   1392	udelay(50);
   1393	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1394	(void)NCR5380_read(RESET_PARITY_INTERRUPT_REG);
   1395	local_irq_restore(flags);
   1396}
   1397
   1398/**
   1399 * do_abort - abort the currently established nexus by going to
   1400 * MESSAGE OUT phase and sending an ABORT message.
   1401 * @instance: relevant scsi host instance
   1402 * @can_sleep: 1 or 0 when sleeping is permitted or not, respectively
   1403 *
   1404 * Returns 0 on success, negative error code on failure.
   1405 */
   1406
   1407static int do_abort(struct Scsi_Host *instance, unsigned int can_sleep)
   1408{
   1409	struct NCR5380_hostdata *hostdata = shost_priv(instance);
   1410	unsigned char *msgptr, phase, tmp;
   1411	int len;
   1412	int rc;
   1413
   1414	/* Request message out phase */
   1415	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
   1416
   1417	/*
   1418	 * Wait for the target to indicate a valid phase by asserting
   1419	 * REQ.  Once this happens, we'll have either a MSGOUT phase
   1420	 * and can immediately send the ABORT message, or we'll have some
   1421	 * other phase and will have to source/sink data.
   1422	 *
   1423	 * We really don't care what value was on the bus or what value
   1424	 * the target sees, so we just handshake.
   1425	 */
   1426
   1427	rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ,
   1428				   10 * HZ * can_sleep);
   1429	if (rc < 0)
   1430		goto out;
   1431
   1432	tmp = NCR5380_read(STATUS_REG) & PHASE_MASK;
   1433
   1434	NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp));
   1435
   1436	if (tmp != PHASE_MSGOUT) {
   1437		NCR5380_write(INITIATOR_COMMAND_REG,
   1438		              ICR_BASE | ICR_ASSERT_ATN | ICR_ASSERT_ACK);
   1439		rc = NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, 0,
   1440					   3 * HZ * can_sleep);
   1441		if (rc < 0)
   1442			goto out;
   1443		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
   1444	}
   1445
   1446	tmp = ABORT;
   1447	msgptr = &tmp;
   1448	len = 1;
   1449	phase = PHASE_MSGOUT;
   1450	NCR5380_transfer_pio(instance, &phase, &len, &msgptr, can_sleep);
   1451	if (len)
   1452		rc = -ENXIO;
   1453
   1454	/*
   1455	 * If we got here, and the command completed successfully,
   1456	 * we're about to go into bus free state.
   1457	 */
   1458
   1459out:
   1460	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1461	return rc;
   1462}
   1463
   1464/*
   1465 * Function : int NCR5380_transfer_dma (struct Scsi_Host *instance,
   1466 * unsigned char *phase, int *count, unsigned char **data)
   1467 *
   1468 * Purpose : transfers data in given phase using either real
   1469 * or pseudo DMA.
   1470 *
   1471 * Inputs : instance - instance of driver, *phase - pointer to
   1472 * what phase is expected, *count - pointer to number of
   1473 * bytes to transfer, **data - pointer to data pointer.
   1474 *
   1475 * Returns : -1 when different phase is entered without transferring
   1476 * maximum number of bytes, 0 if all bytes or transferred or exit
   1477 * is in same phase.
   1478 *
   1479 * Also, *phase, *count, *data are modified in place.
   1480 */
   1481
   1482
   1483static int NCR5380_transfer_dma(struct Scsi_Host *instance,
   1484				unsigned char *phase, int *count,
   1485				unsigned char **data)
   1486{
   1487	struct NCR5380_hostdata *hostdata = shost_priv(instance);
   1488	int c = *count;
   1489	unsigned char p = *phase;
   1490	unsigned char *d = *data;
   1491	unsigned char tmp;
   1492	int result = 0;
   1493
   1494	if ((tmp = (NCR5380_read(STATUS_REG) & PHASE_MASK)) != p) {
   1495		*phase = tmp;
   1496		return -1;
   1497	}
   1498
   1499	NCR5380_to_ncmd(hostdata->connected)->phase = p;
   1500
   1501	if (p & SR_IO) {
   1502		if (hostdata->read_overruns)
   1503			c -= hostdata->read_overruns;
   1504		else if (hostdata->flags & FLAG_DMA_FIXUP)
   1505			--c;
   1506	}
   1507
   1508	dsprintk(NDEBUG_DMA, instance, "initializing DMA %s: length %d, address %p\n",
   1509	         (p & SR_IO) ? "receive" : "send", c, d);
   1510
   1511#ifdef CONFIG_SUN3
   1512	/* send start chain */
   1513	sun3scsi_dma_start(c, *data);
   1514#endif
   1515
   1516	NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(p));
   1517	NCR5380_write(MODE_REG, MR_BASE | MR_DMA_MODE | MR_MONITOR_BSY |
   1518	                        MR_ENABLE_EOP_INTR);
   1519
   1520	if (!(hostdata->flags & FLAG_LATE_DMA_SETUP)) {
   1521		/* On the Medusa, it is a must to initialize the DMA before
   1522		 * starting the NCR. This is also the cleaner way for the TT.
   1523		 */
   1524		if (p & SR_IO)
   1525			result = NCR5380_dma_recv_setup(hostdata, d, c);
   1526		else
   1527			result = NCR5380_dma_send_setup(hostdata, d, c);
   1528	}
   1529
   1530	/*
   1531	 * On the PAS16 at least I/O recovery delays are not needed here.
   1532	 * Everyone else seems to want them.
   1533	 */
   1534
   1535	if (p & SR_IO) {
   1536		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1537		NCR5380_io_delay(1);
   1538		NCR5380_write(START_DMA_INITIATOR_RECEIVE_REG, 0);
   1539	} else {
   1540		NCR5380_io_delay(1);
   1541		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA);
   1542		NCR5380_io_delay(1);
   1543		NCR5380_write(START_DMA_SEND_REG, 0);
   1544		NCR5380_io_delay(1);
   1545	}
   1546
   1547#ifdef CONFIG_SUN3
   1548#ifdef SUN3_SCSI_VME
   1549	dregs->csr |= CSR_DMA_ENABLE;
   1550#endif
   1551	sun3_dma_active = 1;
   1552#endif
   1553
   1554	if (hostdata->flags & FLAG_LATE_DMA_SETUP) {
   1555		/* On the Falcon, the DMA setup must be done after the last
   1556		 * NCR access, else the DMA setup gets trashed!
   1557		 */
   1558		if (p & SR_IO)
   1559			result = NCR5380_dma_recv_setup(hostdata, d, c);
   1560		else
   1561			result = NCR5380_dma_send_setup(hostdata, d, c);
   1562	}
   1563
   1564	/* On failure, NCR5380_dma_xxxx_setup() returns a negative int. */
   1565	if (result < 0)
   1566		return result;
   1567
   1568	/* For real DMA, result is the byte count. DMA interrupt is expected. */
   1569	if (result > 0) {
   1570		hostdata->dma_len = result;
   1571		return 0;
   1572	}
   1573
   1574	/* The result is zero iff pseudo DMA send/receive was completed. */
   1575	hostdata->dma_len = c;
   1576
   1577/*
   1578 * A note regarding the DMA errata workarounds for early NMOS silicon.
   1579 *
   1580 * For DMA sends, we want to wait until the last byte has been
   1581 * transferred out over the bus before we turn off DMA mode.  Alas, there
   1582 * seems to be no terribly good way of doing this on a 5380 under all
   1583 * conditions.  For non-scatter-gather operations, we can wait until REQ
   1584 * and ACK both go false, or until a phase mismatch occurs.  Gather-sends
   1585 * are nastier, since the device will be expecting more data than we
   1586 * are prepared to send it, and REQ will remain asserted.  On a 53C8[01] we
   1587 * could test Last Byte Sent to assure transfer (I imagine this is precisely
   1588 * why this signal was added to the newer chips) but on the older 538[01]
   1589 * this signal does not exist.  The workaround for this lack is a watchdog;
   1590 * we bail out of the wait-loop after a modest amount of wait-time if
   1591 * the usual exit conditions are not met.  Not a terribly clean or
   1592 * correct solution :-%
   1593 *
   1594 * DMA receive is equally tricky due to a nasty characteristic of the NCR5380.
   1595 * If the chip is in DMA receive mode, it will respond to a target's
   1596 * REQ by latching the SCSI data into the INPUT DATA register and asserting
   1597 * ACK, even if it has _already_ been notified by the DMA controller that
   1598 * the current DMA transfer has completed!  If the NCR5380 is then taken
   1599 * out of DMA mode, this already-acknowledged byte is lost. This is
   1600 * not a problem for "one DMA transfer per READ command", because
   1601 * the situation will never arise... either all of the data is DMA'ed
   1602 * properly, or the target switches to MESSAGE IN phase to signal a
   1603 * disconnection (either operation bringing the DMA to a clean halt).
   1604 * However, in order to handle scatter-receive, we must work around the
   1605 * problem.  The chosen fix is to DMA fewer bytes, then check for the
   1606 * condition before taking the NCR5380 out of DMA mode.  One or two extra
   1607 * bytes are transferred via PIO as necessary to fill out the original
   1608 * request.
   1609 */
   1610
   1611	if (hostdata->flags & FLAG_DMA_FIXUP) {
   1612		if (p & SR_IO) {
   1613			/*
   1614			 * The workaround was to transfer fewer bytes than we
   1615			 * intended to with the pseudo-DMA read function, wait for
   1616			 * the chip to latch the last byte, read it, and then disable
   1617			 * pseudo-DMA mode.
   1618			 *
   1619			 * After REQ is asserted, the NCR5380 asserts DRQ and ACK.
   1620			 * REQ is deasserted when ACK is asserted, and not reasserted
   1621			 * until ACK goes false.  Since the NCR5380 won't lower ACK
   1622			 * until DACK is asserted, which won't happen unless we twiddle
   1623			 * the DMA port or we take the NCR5380 out of DMA mode, we
   1624			 * can guarantee that we won't handshake another extra
   1625			 * byte.
   1626			 */
   1627
   1628			if (NCR5380_poll_politely(hostdata, BUS_AND_STATUS_REG,
   1629			                          BASR_DRQ, BASR_DRQ, 0) < 0) {
   1630				result = -1;
   1631				shost_printk(KERN_ERR, instance, "PDMA read: DRQ timeout\n");
   1632			}
   1633			if (NCR5380_poll_politely(hostdata, STATUS_REG,
   1634			                          SR_REQ, 0, 0) < 0) {
   1635				result = -1;
   1636				shost_printk(KERN_ERR, instance, "PDMA read: !REQ timeout\n");
   1637			}
   1638			d[*count - 1] = NCR5380_read(INPUT_DATA_REG);
   1639		} else {
   1640			/*
   1641			 * Wait for the last byte to be sent.  If REQ is being asserted for
   1642			 * the byte we're interested, we'll ACK it and it will go false.
   1643			 */
   1644			if (NCR5380_poll_politely2(hostdata,
   1645			     BUS_AND_STATUS_REG, BASR_DRQ, BASR_DRQ,
   1646			     BUS_AND_STATUS_REG, BASR_PHASE_MATCH, 0, 0) < 0) {
   1647				result = -1;
   1648				shost_printk(KERN_ERR, instance, "PDMA write: DRQ and phase timeout\n");
   1649			}
   1650		}
   1651	}
   1652
   1653	NCR5380_dma_complete(instance);
   1654	return result;
   1655}
   1656
   1657/*
   1658 * Function : NCR5380_information_transfer (struct Scsi_Host *instance)
   1659 *
   1660 * Purpose : run through the various SCSI phases and do as the target
   1661 * directs us to.  Operates on the currently connected command,
   1662 * instance->connected.
   1663 *
   1664 * Inputs : instance, instance for which we are doing commands
   1665 *
   1666 * Side effects : SCSI things happen, the disconnected queue will be
   1667 * modified if a command disconnects, *instance->connected will
   1668 * change.
   1669 *
   1670 * XXX Note : we need to watch for bus free or a reset condition here
   1671 * to recover from an unexpected bus free condition.
   1672 */
   1673
   1674static void NCR5380_information_transfer(struct Scsi_Host *instance)
   1675	__releases(&hostdata->lock) __acquires(&hostdata->lock)
   1676{
   1677	struct NCR5380_hostdata *hostdata = shost_priv(instance);
   1678	unsigned char msgout = NOP;
   1679	int sink = 0;
   1680	int len;
   1681	int transfersize;
   1682	unsigned char *data;
   1683	unsigned char phase, tmp, extended_msg[10], old_phase = 0xff;
   1684	struct scsi_cmnd *cmd;
   1685
   1686#ifdef SUN3_SCSI_VME
   1687	dregs->csr |= CSR_INTR;
   1688#endif
   1689
   1690	while ((cmd = hostdata->connected)) {
   1691		struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(cmd);
   1692
   1693		tmp = NCR5380_read(STATUS_REG);
   1694		/* We only have a valid SCSI phase when REQ is asserted */
   1695		if (tmp & SR_REQ) {
   1696			phase = (tmp & PHASE_MASK);
   1697			if (phase != old_phase) {
   1698				old_phase = phase;
   1699				NCR5380_dprint_phase(NDEBUG_INFORMATION, instance);
   1700			}
   1701#ifdef CONFIG_SUN3
   1702			if (phase == PHASE_CMDOUT &&
   1703			    sun3_dma_setup_done != cmd) {
   1704				int count;
   1705
   1706				advance_sg_buffer(ncmd);
   1707
   1708				count = sun3scsi_dma_xfer_len(hostdata, cmd);
   1709
   1710				if (count > 0) {
   1711					if (cmd->sc_data_direction == DMA_TO_DEVICE)
   1712						sun3scsi_dma_send_setup(hostdata,
   1713									ncmd->ptr, count);
   1714					else
   1715						sun3scsi_dma_recv_setup(hostdata,
   1716									ncmd->ptr, count);
   1717					sun3_dma_setup_done = cmd;
   1718				}
   1719#ifdef SUN3_SCSI_VME
   1720				dregs->csr |= CSR_INTR;
   1721#endif
   1722			}
   1723#endif /* CONFIG_SUN3 */
   1724
   1725			if (sink && (phase != PHASE_MSGOUT)) {
   1726				NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(tmp));
   1727
   1728				NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN |
   1729				              ICR_ASSERT_ACK);
   1730				while (NCR5380_read(STATUS_REG) & SR_REQ)
   1731					;
   1732				NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE |
   1733				              ICR_ASSERT_ATN);
   1734				sink = 0;
   1735				continue;
   1736			}
   1737
   1738			switch (phase) {
   1739			case PHASE_DATAOUT:
   1740#if (NDEBUG & NDEBUG_NO_DATAOUT)
   1741				shost_printk(KERN_DEBUG, instance, "NDEBUG_NO_DATAOUT set, attempted DATAOUT aborted\n");
   1742				sink = 1;
   1743				do_abort(instance, 0);
   1744				cmd->result = DID_ERROR << 16;
   1745				complete_cmd(instance, cmd);
   1746				hostdata->connected = NULL;
   1747				hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
   1748				return;
   1749#endif
   1750			case PHASE_DATAIN:
   1751				/*
   1752				 * If there is no room left in the current buffer in the
   1753				 * scatter-gather list, move onto the next one.
   1754				 */
   1755
   1756				advance_sg_buffer(ncmd);
   1757				dsprintk(NDEBUG_INFORMATION, instance,
   1758					"this residual %d, sg ents %d\n",
   1759					ncmd->this_residual,
   1760					sg_nents(ncmd->buffer));
   1761
   1762				/*
   1763				 * The preferred transfer method is going to be
   1764				 * PSEUDO-DMA for systems that are strictly PIO,
   1765				 * since we can let the hardware do the handshaking.
   1766				 *
   1767				 * For this to work, we need to know the transfersize
   1768				 * ahead of time, since the pseudo-DMA code will sit
   1769				 * in an unconditional loop.
   1770				 */
   1771
   1772				transfersize = 0;
   1773				if (!cmd->device->borken)
   1774					transfersize = NCR5380_dma_xfer_len(hostdata, cmd);
   1775
   1776				if (transfersize > 0) {
   1777					len = transfersize;
   1778					if (NCR5380_transfer_dma(instance, &phase,
   1779					    &len, (unsigned char **)&ncmd->ptr)) {
   1780						/*
   1781						 * If the watchdog timer fires, all future
   1782						 * accesses to this device will use the
   1783						 * polled-IO.
   1784						 */
   1785						scmd_printk(KERN_INFO, cmd,
   1786							"switching to slow handshake\n");
   1787						cmd->device->borken = 1;
   1788						do_reset(instance);
   1789						bus_reset_cleanup(instance);
   1790					}
   1791				} else {
   1792					/* Transfer a small chunk so that the
   1793					 * irq mode lock is not held too long.
   1794					 */
   1795					transfersize = min(ncmd->this_residual,
   1796							   NCR5380_PIO_CHUNK_SIZE);
   1797					len = transfersize;
   1798					NCR5380_transfer_pio(instance, &phase, &len,
   1799							     (unsigned char **)&ncmd->ptr,
   1800							     0);
   1801					ncmd->this_residual -= transfersize - len;
   1802				}
   1803#ifdef CONFIG_SUN3
   1804				if (sun3_dma_setup_done == cmd)
   1805					sun3_dma_setup_done = NULL;
   1806#endif
   1807				return;
   1808			case PHASE_MSGIN:
   1809				len = 1;
   1810				data = &tmp;
   1811				NCR5380_transfer_pio(instance, &phase, &len, &data, 0);
   1812				ncmd->message = tmp;
   1813
   1814				switch (tmp) {
   1815				case ABORT:
   1816					set_host_byte(cmd, DID_ABORT);
   1817					fallthrough;
   1818				case COMMAND_COMPLETE:
   1819					/* Accept message by clearing ACK */
   1820					sink = 1;
   1821					NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1822					dsprintk(NDEBUG_QUEUES, instance,
   1823					         "COMMAND COMPLETE %p target %d lun %llu\n",
   1824					         cmd, scmd_id(cmd), cmd->device->lun);
   1825
   1826					hostdata->connected = NULL;
   1827					hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
   1828
   1829					set_status_byte(cmd, ncmd->status);
   1830
   1831					set_resid_from_SCp(cmd);
   1832
   1833					if (cmd->cmnd[0] == REQUEST_SENSE)
   1834						complete_cmd(instance, cmd);
   1835					else {
   1836						if (ncmd->status == SAM_STAT_CHECK_CONDITION ||
   1837						    ncmd->status == SAM_STAT_COMMAND_TERMINATED) {
   1838							dsprintk(NDEBUG_QUEUES, instance, "autosense: adding cmd %p to tail of autosense queue\n",
   1839							         cmd);
   1840							list_add_tail(&ncmd->list,
   1841							              &hostdata->autosense);
   1842						} else
   1843							complete_cmd(instance, cmd);
   1844					}
   1845
   1846					/*
   1847					 * Restore phase bits to 0 so an interrupted selection,
   1848					 * arbitration can resume.
   1849					 */
   1850					NCR5380_write(TARGET_COMMAND_REG, 0);
   1851
   1852					return;
   1853				case MESSAGE_REJECT:
   1854					/* Accept message by clearing ACK */
   1855					NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1856					switch (hostdata->last_message) {
   1857					case HEAD_OF_QUEUE_TAG:
   1858					case ORDERED_QUEUE_TAG:
   1859					case SIMPLE_QUEUE_TAG:
   1860						cmd->device->simple_tags = 0;
   1861						hostdata->busy[cmd->device->id] |= (1 << (cmd->device->lun & 0xFF));
   1862						break;
   1863					default:
   1864						break;
   1865					}
   1866					break;
   1867				case DISCONNECT:
   1868					/* Accept message by clearing ACK */
   1869					NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1870					hostdata->connected = NULL;
   1871					list_add(&ncmd->list, &hostdata->disconnected);
   1872					dsprintk(NDEBUG_INFORMATION | NDEBUG_QUEUES,
   1873					         instance, "connected command %p for target %d lun %llu moved to disconnected queue\n",
   1874					         cmd, scmd_id(cmd), cmd->device->lun);
   1875
   1876					/*
   1877					 * Restore phase bits to 0 so an interrupted selection,
   1878					 * arbitration can resume.
   1879					 */
   1880					NCR5380_write(TARGET_COMMAND_REG, 0);
   1881
   1882#ifdef SUN3_SCSI_VME
   1883					dregs->csr |= CSR_DMA_ENABLE;
   1884#endif
   1885					return;
   1886					/*
   1887					 * The SCSI data pointer is *IMPLICITLY* saved on a disconnect
   1888					 * operation, in violation of the SCSI spec so we can safely
   1889					 * ignore SAVE/RESTORE pointers calls.
   1890					 *
   1891					 * Unfortunately, some disks violate the SCSI spec and
   1892					 * don't issue the required SAVE_POINTERS message before
   1893					 * disconnecting, and we have to break spec to remain
   1894					 * compatible.
   1895					 */
   1896				case SAVE_POINTERS:
   1897				case RESTORE_POINTERS:
   1898					/* Accept message by clearing ACK */
   1899					NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1900					break;
   1901				case EXTENDED_MESSAGE:
   1902					/*
   1903					 * Start the message buffer with the EXTENDED_MESSAGE
   1904					 * byte, since spi_print_msg() wants the whole thing.
   1905					 */
   1906					extended_msg[0] = EXTENDED_MESSAGE;
   1907					/* Accept first byte by clearing ACK */
   1908					NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1909
   1910					spin_unlock_irq(&hostdata->lock);
   1911
   1912					dsprintk(NDEBUG_EXTENDED, instance, "receiving extended message\n");
   1913
   1914					len = 2;
   1915					data = extended_msg + 1;
   1916					phase = PHASE_MSGIN;
   1917					NCR5380_transfer_pio(instance, &phase, &len, &data, 1);
   1918					dsprintk(NDEBUG_EXTENDED, instance, "length %d, code 0x%02x\n",
   1919					         (int)extended_msg[1],
   1920					         (int)extended_msg[2]);
   1921
   1922					if (!len && extended_msg[1] > 0 &&
   1923					    extended_msg[1] <= sizeof(extended_msg) - 2) {
   1924						/* Accept third byte by clearing ACK */
   1925						NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   1926						len = extended_msg[1] - 1;
   1927						data = extended_msg + 3;
   1928						phase = PHASE_MSGIN;
   1929
   1930						NCR5380_transfer_pio(instance, &phase, &len, &data, 1);
   1931						dsprintk(NDEBUG_EXTENDED, instance, "message received, residual %d\n",
   1932						         len);
   1933
   1934						switch (extended_msg[2]) {
   1935						case EXTENDED_SDTR:
   1936						case EXTENDED_WDTR:
   1937							tmp = 0;
   1938						}
   1939					} else if (len) {
   1940						shost_printk(KERN_ERR, instance, "error receiving extended message\n");
   1941						tmp = 0;
   1942					} else {
   1943						shost_printk(KERN_NOTICE, instance, "extended message code %02x length %d is too long\n",
   1944						             extended_msg[2], extended_msg[1]);
   1945						tmp = 0;
   1946					}
   1947
   1948					spin_lock_irq(&hostdata->lock);
   1949					if (!hostdata->connected)
   1950						return;
   1951
   1952					/* Reject message */
   1953					fallthrough;
   1954				default:
   1955					/*
   1956					 * If we get something weird that we aren't expecting,
   1957					 * log it.
   1958					 */
   1959					if (tmp == EXTENDED_MESSAGE)
   1960						scmd_printk(KERN_INFO, cmd,
   1961						            "rejecting unknown extended message code %02x, length %d\n",
   1962						            extended_msg[2], extended_msg[1]);
   1963					else if (tmp)
   1964						scmd_printk(KERN_INFO, cmd,
   1965						            "rejecting unknown message code %02x\n",
   1966						            tmp);
   1967
   1968					msgout = MESSAGE_REJECT;
   1969					NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
   1970					break;
   1971				} /* switch (tmp) */
   1972				break;
   1973			case PHASE_MSGOUT:
   1974				len = 1;
   1975				data = &msgout;
   1976				hostdata->last_message = msgout;
   1977				NCR5380_transfer_pio(instance, &phase, &len, &data, 0);
   1978				if (msgout == ABORT) {
   1979					hostdata->connected = NULL;
   1980					hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
   1981					cmd->result = DID_ERROR << 16;
   1982					complete_cmd(instance, cmd);
   1983					return;
   1984				}
   1985				msgout = NOP;
   1986				break;
   1987			case PHASE_CMDOUT:
   1988				len = cmd->cmd_len;
   1989				data = cmd->cmnd;
   1990				/*
   1991				 * XXX for performance reasons, on machines with a
   1992				 * PSEUDO-DMA architecture we should probably
   1993				 * use the dma transfer function.
   1994				 */
   1995				NCR5380_transfer_pio(instance, &phase, &len, &data, 0);
   1996				break;
   1997			case PHASE_STATIN:
   1998				len = 1;
   1999				data = &tmp;
   2000				NCR5380_transfer_pio(instance, &phase, &len, &data, 0);
   2001				ncmd->status = tmp;
   2002				break;
   2003			default:
   2004				shost_printk(KERN_ERR, instance, "unknown phase\n");
   2005				NCR5380_dprint(NDEBUG_ANY, instance);
   2006			} /* switch(phase) */
   2007		} else {
   2008			spin_unlock_irq(&hostdata->lock);
   2009			NCR5380_poll_politely(hostdata, STATUS_REG, SR_REQ, SR_REQ, HZ);
   2010			spin_lock_irq(&hostdata->lock);
   2011		}
   2012	}
   2013}
   2014
   2015/*
   2016 * Function : void NCR5380_reselect (struct Scsi_Host *instance)
   2017 *
   2018 * Purpose : does reselection, initializing the instance->connected
   2019 * field to point to the scsi_cmnd for which the I_T_L or I_T_L_Q
   2020 * nexus has been reestablished,
   2021 *
   2022 * Inputs : instance - this instance of the NCR5380.
   2023 */
   2024
   2025static void NCR5380_reselect(struct Scsi_Host *instance)
   2026{
   2027	struct NCR5380_hostdata *hostdata = shost_priv(instance);
   2028	unsigned char target_mask;
   2029	unsigned char lun;
   2030	unsigned char msg[3];
   2031	struct NCR5380_cmd *ncmd;
   2032	struct scsi_cmnd *tmp;
   2033
   2034	/*
   2035	 * Disable arbitration, etc. since the host adapter obviously
   2036	 * lost, and tell an interrupted NCR5380_select() to restart.
   2037	 */
   2038
   2039	NCR5380_write(MODE_REG, MR_BASE);
   2040
   2041	target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask);
   2042	if (!target_mask || target_mask & (target_mask - 1)) {
   2043		shost_printk(KERN_WARNING, instance,
   2044			     "reselect: bad target_mask 0x%02x\n", target_mask);
   2045		return;
   2046	}
   2047
   2048	/*
   2049	 * At this point, we have detected that our SCSI ID is on the bus,
   2050	 * SEL is true and BSY was false for at least one bus settle delay
   2051	 * (400 ns).
   2052	 *
   2053	 * We must assert BSY ourselves, until the target drops the SEL
   2054	 * signal.
   2055	 */
   2056
   2057	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_BSY);
   2058	if (NCR5380_poll_politely(hostdata,
   2059	                          STATUS_REG, SR_SEL, 0, 0) < 0) {
   2060		shost_printk(KERN_ERR, instance, "reselect: !SEL timeout\n");
   2061		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   2062		return;
   2063	}
   2064	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   2065
   2066	/*
   2067	 * Wait for target to go into MSGIN.
   2068	 */
   2069
   2070	if (NCR5380_poll_politely(hostdata,
   2071	                          STATUS_REG, SR_REQ, SR_REQ, 0) < 0) {
   2072		if ((NCR5380_read(STATUS_REG) & (SR_BSY | SR_SEL)) == 0)
   2073			/* BUS FREE phase */
   2074			return;
   2075		shost_printk(KERN_ERR, instance, "reselect: REQ timeout\n");
   2076		do_abort(instance, 0);
   2077		return;
   2078	}
   2079
   2080#ifdef CONFIG_SUN3
   2081	/* acknowledge toggle to MSGIN */
   2082	NCR5380_write(TARGET_COMMAND_REG, PHASE_SR_TO_TCR(PHASE_MSGIN));
   2083
   2084	/* peek at the byte without really hitting the bus */
   2085	msg[0] = NCR5380_read(CURRENT_SCSI_DATA_REG);
   2086#else
   2087	{
   2088		int len = 1;
   2089		unsigned char *data = msg;
   2090		unsigned char phase = PHASE_MSGIN;
   2091
   2092		NCR5380_transfer_pio(instance, &phase, &len, &data, 0);
   2093
   2094		if (len) {
   2095			do_abort(instance, 0);
   2096			return;
   2097		}
   2098	}
   2099#endif /* CONFIG_SUN3 */
   2100
   2101	if (!(msg[0] & 0x80)) {
   2102		shost_printk(KERN_ERR, instance, "expecting IDENTIFY message, got ");
   2103		spi_print_msg(msg);
   2104		printk("\n");
   2105		do_abort(instance, 0);
   2106		return;
   2107	}
   2108	lun = msg[0] & 0x07;
   2109
   2110	/*
   2111	 * We need to add code for SCSI-II to track which devices have
   2112	 * I_T_L_Q nexuses established, and which have simple I_T_L
   2113	 * nexuses so we can chose to do additional data transfer.
   2114	 */
   2115
   2116	/*
   2117	 * Find the command corresponding to the I_T_L or I_T_L_Q  nexus we
   2118	 * just reestablished, and remove it from the disconnected queue.
   2119	 */
   2120
   2121	tmp = NULL;
   2122	list_for_each_entry(ncmd, &hostdata->disconnected, list) {
   2123		struct scsi_cmnd *cmd = NCR5380_to_scmd(ncmd);
   2124
   2125		if (target_mask == (1 << scmd_id(cmd)) &&
   2126		    lun == (u8)cmd->device->lun) {
   2127			list_del(&ncmd->list);
   2128			tmp = cmd;
   2129			break;
   2130		}
   2131	}
   2132
   2133	if (tmp) {
   2134		dsprintk(NDEBUG_RESELECTION | NDEBUG_QUEUES, instance,
   2135		         "reselect: removed %p from disconnected queue\n", tmp);
   2136	} else {
   2137		int target = ffs(target_mask) - 1;
   2138
   2139		shost_printk(KERN_ERR, instance, "target bitmask 0x%02x lun %d not in disconnected queue.\n",
   2140		             target_mask, lun);
   2141		/*
   2142		 * Since we have an established nexus that we can't do anything
   2143		 * with, we must abort it.
   2144		 */
   2145		if (do_abort(instance, 0) == 0)
   2146			hostdata->busy[target] &= ~(1 << lun);
   2147		return;
   2148	}
   2149
   2150#ifdef CONFIG_SUN3
   2151	if (sun3_dma_setup_done != tmp) {
   2152		int count;
   2153
   2154		advance_sg_buffer(ncmd);
   2155
   2156		count = sun3scsi_dma_xfer_len(hostdata, tmp);
   2157
   2158		if (count > 0) {
   2159			if (tmp->sc_data_direction == DMA_TO_DEVICE)
   2160				sun3scsi_dma_send_setup(hostdata,
   2161							ncmd->ptr, count);
   2162			else
   2163				sun3scsi_dma_recv_setup(hostdata,
   2164							ncmd->ptr, count);
   2165			sun3_dma_setup_done = tmp;
   2166		}
   2167	}
   2168
   2169	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ACK);
   2170#endif /* CONFIG_SUN3 */
   2171
   2172	/* Accept message by clearing ACK */
   2173	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
   2174
   2175	hostdata->connected = tmp;
   2176	dsprintk(NDEBUG_RESELECTION, instance, "nexus established, target %d, lun %llu\n",
   2177	         scmd_id(tmp), tmp->device->lun);
   2178}
   2179
   2180/**
   2181 * list_find_cmd - test for presence of a command in a linked list
   2182 * @haystack: list of commands
   2183 * @needle: command to search for
   2184 */
   2185
   2186static bool list_find_cmd(struct list_head *haystack,
   2187                          struct scsi_cmnd *needle)
   2188{
   2189	struct NCR5380_cmd *ncmd;
   2190
   2191	list_for_each_entry(ncmd, haystack, list)
   2192		if (NCR5380_to_scmd(ncmd) == needle)
   2193			return true;
   2194	return false;
   2195}
   2196
   2197/**
   2198 * list_remove_cmd - remove a command from linked list
   2199 * @haystack: list of commands
   2200 * @needle: command to remove
   2201 */
   2202
   2203static bool list_del_cmd(struct list_head *haystack,
   2204                         struct scsi_cmnd *needle)
   2205{
   2206	if (list_find_cmd(haystack, needle)) {
   2207		struct NCR5380_cmd *ncmd = NCR5380_to_ncmd(needle);
   2208
   2209		list_del(&ncmd->list);
   2210		return true;
   2211	}
   2212	return false;
   2213}
   2214
   2215/**
   2216 * NCR5380_abort - scsi host eh_abort_handler() method
   2217 * @cmd: the command to be aborted
   2218 *
   2219 * Try to abort a given command by removing it from queues and/or sending
   2220 * the target an abort message. This may not succeed in causing a target
   2221 * to abort the command. Nonetheless, the low-level driver must forget about
   2222 * the command because the mid-layer reclaims it and it may be re-issued.
   2223 *
   2224 * The normal path taken by a command is as follows. For EH we trace this
   2225 * same path to locate and abort the command.
   2226 *
   2227 * unissued -> selecting -> [unissued -> selecting ->]... connected ->
   2228 * [disconnected -> connected ->]...
   2229 * [autosense -> connected ->] done
   2230 *
   2231 * If cmd was not found at all then presumably it has already been completed,
   2232 * in which case return SUCCESS to try to avoid further EH measures.
   2233 *
   2234 * If the command has not completed yet, we must not fail to find it.
   2235 * We have no option but to forget the aborted command (even if it still
   2236 * lacks sense data). The mid-layer may re-issue a command that is in error
   2237 * recovery (see scsi_send_eh_cmnd), but the logic and data structures in
   2238 * this driver are such that a command can appear on one queue only.
   2239 *
   2240 * The lock protects driver data structures, but EH handlers also use it
   2241 * to serialize their own execution and prevent their own re-entry.
   2242 */
   2243
   2244static int NCR5380_abort(struct scsi_cmnd *cmd)
   2245{
   2246	struct Scsi_Host *instance = cmd->device->host;
   2247	struct NCR5380_hostdata *hostdata = shost_priv(instance);
   2248	unsigned long flags;
   2249	int result = SUCCESS;
   2250
   2251	spin_lock_irqsave(&hostdata->lock, flags);
   2252
   2253#if (NDEBUG & NDEBUG_ANY)
   2254	scmd_printk(KERN_INFO, cmd, __func__);
   2255#endif
   2256	NCR5380_dprint(NDEBUG_ANY, instance);
   2257	NCR5380_dprint_phase(NDEBUG_ANY, instance);
   2258
   2259	if (list_del_cmd(&hostdata->unissued, cmd)) {
   2260		dsprintk(NDEBUG_ABORT, instance,
   2261		         "abort: removed %p from issue queue\n", cmd);
   2262		cmd->result = DID_ABORT << 16;
   2263		scsi_done(cmd); /* No tag or busy flag to worry about */
   2264		goto out;
   2265	}
   2266
   2267	if (hostdata->selecting == cmd) {
   2268		dsprintk(NDEBUG_ABORT, instance,
   2269		         "abort: cmd %p == selecting\n", cmd);
   2270		hostdata->selecting = NULL;
   2271		cmd->result = DID_ABORT << 16;
   2272		complete_cmd(instance, cmd);
   2273		goto out;
   2274	}
   2275
   2276	if (list_del_cmd(&hostdata->disconnected, cmd)) {
   2277		dsprintk(NDEBUG_ABORT, instance,
   2278		         "abort: removed %p from disconnected list\n", cmd);
   2279		/* Can't call NCR5380_select() and send ABORT because that
   2280		 * means releasing the lock. Need a bus reset.
   2281		 */
   2282		set_host_byte(cmd, DID_ERROR);
   2283		complete_cmd(instance, cmd);
   2284		result = FAILED;
   2285		goto out;
   2286	}
   2287
   2288	if (hostdata->connected == cmd) {
   2289		dsprintk(NDEBUG_ABORT, instance, "abort: cmd %p is connected\n", cmd);
   2290		hostdata->connected = NULL;
   2291		hostdata->dma_len = 0;
   2292		if (do_abort(instance, 0) < 0) {
   2293			set_host_byte(cmd, DID_ERROR);
   2294			complete_cmd(instance, cmd);
   2295			result = FAILED;
   2296			goto out;
   2297		}
   2298		set_host_byte(cmd, DID_ABORT);
   2299		complete_cmd(instance, cmd);
   2300		goto out;
   2301	}
   2302
   2303	if (list_del_cmd(&hostdata->autosense, cmd)) {
   2304		dsprintk(NDEBUG_ABORT, instance,
   2305		         "abort: removed %p from sense queue\n", cmd);
   2306		complete_cmd(instance, cmd);
   2307	}
   2308
   2309out:
   2310	if (result == FAILED)
   2311		dsprintk(NDEBUG_ABORT, instance, "abort: failed to abort %p\n", cmd);
   2312	else {
   2313		hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
   2314		dsprintk(NDEBUG_ABORT, instance, "abort: successfully aborted %p\n", cmd);
   2315	}
   2316
   2317	queue_work(hostdata->work_q, &hostdata->main_task);
   2318	spin_unlock_irqrestore(&hostdata->lock, flags);
   2319
   2320	return result;
   2321}
   2322
   2323
   2324static void bus_reset_cleanup(struct Scsi_Host *instance)
   2325{
   2326	struct NCR5380_hostdata *hostdata = shost_priv(instance);
   2327	int i;
   2328	struct NCR5380_cmd *ncmd;
   2329
   2330	/* reset NCR registers */
   2331	NCR5380_write(MODE_REG, MR_BASE);
   2332	NCR5380_write(TARGET_COMMAND_REG, 0);
   2333	NCR5380_write(SELECT_ENABLE_REG, 0);
   2334
   2335	/* After the reset, there are no more connected or disconnected commands
   2336	 * and no busy units; so clear the low-level status here to avoid
   2337	 * conflicts when the mid-level code tries to wake up the affected
   2338	 * commands!
   2339	 */
   2340
   2341	if (hostdata->selecting) {
   2342		hostdata->selecting->result = DID_RESET << 16;
   2343		complete_cmd(instance, hostdata->selecting);
   2344		hostdata->selecting = NULL;
   2345	}
   2346
   2347	list_for_each_entry(ncmd, &hostdata->disconnected, list) {
   2348		struct scsi_cmnd *cmd = NCR5380_to_scmd(ncmd);
   2349
   2350		set_host_byte(cmd, DID_RESET);
   2351		complete_cmd(instance, cmd);
   2352	}
   2353	INIT_LIST_HEAD(&hostdata->disconnected);
   2354
   2355	list_for_each_entry(ncmd, &hostdata->autosense, list) {
   2356		struct scsi_cmnd *cmd = NCR5380_to_scmd(ncmd);
   2357
   2358		scsi_done(cmd);
   2359	}
   2360	INIT_LIST_HEAD(&hostdata->autosense);
   2361
   2362	if (hostdata->connected) {
   2363		set_host_byte(hostdata->connected, DID_RESET);
   2364		complete_cmd(instance, hostdata->connected);
   2365		hostdata->connected = NULL;
   2366	}
   2367
   2368	for (i = 0; i < 8; ++i)
   2369		hostdata->busy[i] = 0;
   2370	hostdata->dma_len = 0;
   2371
   2372	queue_work(hostdata->work_q, &hostdata->main_task);
   2373}
   2374
   2375/**
   2376 * NCR5380_host_reset - reset the SCSI host
   2377 * @cmd: SCSI command undergoing EH
   2378 *
   2379 * Returns SUCCESS
   2380 */
   2381
   2382static int NCR5380_host_reset(struct scsi_cmnd *cmd)
   2383{
   2384	struct Scsi_Host *instance = cmd->device->host;
   2385	struct NCR5380_hostdata *hostdata = shost_priv(instance);
   2386	unsigned long flags;
   2387	struct NCR5380_cmd *ncmd;
   2388
   2389	spin_lock_irqsave(&hostdata->lock, flags);
   2390
   2391#if (NDEBUG & NDEBUG_ANY)
   2392	shost_printk(KERN_INFO, instance, __func__);
   2393#endif
   2394	NCR5380_dprint(NDEBUG_ANY, instance);
   2395	NCR5380_dprint_phase(NDEBUG_ANY, instance);
   2396
   2397	list_for_each_entry(ncmd, &hostdata->unissued, list) {
   2398		struct scsi_cmnd *scmd = NCR5380_to_scmd(ncmd);
   2399
   2400		scmd->result = DID_RESET << 16;
   2401		scsi_done(scmd);
   2402	}
   2403	INIT_LIST_HEAD(&hostdata->unissued);
   2404
   2405	do_reset(instance);
   2406	bus_reset_cleanup(instance);
   2407
   2408	spin_unlock_irqrestore(&hostdata->lock, flags);
   2409
   2410	return SUCCESS;
   2411}