@ -69,6 +69,10 @@
* * Low PCI traffic for command handling when on - chip RAM is present .
* * Aggressive SCSI SCRIPTS optimizations .
* *
* * 2005 by Matthew Wilcox and James Bottomley
* * PCI - ectomy . This driver now supports only the 720 chip ( see the
* * NCR_Q720 and zalon drivers for the bus probe logic ) .
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
@ -90,13 +94,6 @@
# define SCSI_NCR_DEBUG_FLAGS (0)
/*==========================================================
* *
* * Include files
* *
* * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
*/
# include <linux/blkdev.h>
# include <linux/delay.h>
# include <linux/dma-mapping.h>
@ -121,6 +118,7 @@
# include <scsi/scsi.h>
# include <scsi/scsi_cmnd.h>
# include <scsi/scsi_dbg.h>
# include <scsi/scsi_device.h>
# include <scsi/scsi_tcq.h>
# include <scsi/scsi_transport.h>
@ -128,10 +126,8 @@
# include "ncr53c8xx.h"
# define NAME53C "ncr53c"
# define NAME53C8XX "ncr53c8xx"
/*==========================================================
* *
* * Debugging tags
@ -2111,7 +2107,7 @@ static struct script script0 __initdata = {
*/
/*
* * The M_REJECT problem seems to be due to a selection
* * The MESSAGE _REJECT problem seems to be due to a selection
* * timing problem .
* * Wait immediately for the selection to complete .
* * ( 2.5 x behaves so )
@ -2162,7 +2158,7 @@ static struct script script0 __initdata = {
/*
* * Selection complete .
* * Send the IDENTIFY and SIMPLE_TAG messages
* * ( and the M_X_SYNC_REQ message )
* * ( and the EXTENDED_SDTR message )
*/
SCR_MOVE_TBL ^ SCR_MSG_OUT ,
offsetof ( struct dsb , smsg ) ,
@ -2191,7 +2187,7 @@ static struct script script0 __initdata = {
/*
* * Initialize the msgout buffer with a NOOP message .
*/
SCR_LOAD_REG ( scratcha , M_ NO OP) ,
SCR_LOAD_REG ( scratcha , NOP ) ,
0 ,
SCR_COPY ( 1 ) ,
RADDR ( scratcha ) ,
@ -2343,21 +2339,21 @@ static struct script script0 __initdata = {
/*
* * Handle this message .
*/
SCR_JUMP ^ IFTRUE ( DATA ( M_COMPLETE ) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( CO MMAND _COMPLETE) ) ,
PADDR ( complete ) ,
SCR_JUMP ^ IFTRUE ( DATA ( M_ DISCONNECT) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( DISCONNECT ) ) ,
PADDR ( disconnect ) ,
SCR_JUMP ^ IFTRUE ( DATA ( M_ SAVE_D P) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( SAVE_POINTERS ) ) ,
PADDR ( save_dp ) ,
SCR_JUMP ^ IFTRUE ( DATA ( M_ RESTORE_D P) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( RESTORE_POINTERS ) ) ,
PADDR ( restore_dp ) ,
SCR_JUMP ^ IFTRUE ( DATA ( M_ EXTENDED) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( EXTENDED_MESSAGE ) ) ,
PADDRH ( msg_extended ) ,
SCR_JUMP ^ IFTRUE ( DATA ( M_ NO OP) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( NOP ) ) ,
PADDR ( clrack ) ,
SCR_JUMP ^ IFTRUE ( DATA ( M_REJECT ) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( MESSAGE _REJECT ) ) ,
PADDRH ( msg_reject ) ,
SCR_JUMP ^ IFTRUE ( DATA ( M_ IGN_RESIDUE) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( IGNORE_WIDE _RESIDUE ) ) ,
PADDRH ( msg_ign_residue ) ,
/*
* * Rest of the messages left as
@ -2372,7 +2368,7 @@ static struct script script0 __initdata = {
*/
SCR_INT ,
SIR_REJECT_SENT ,
SCR_LOAD_REG ( scratcha , M_REJECT ) ,
SCR_LOAD_REG ( scratcha , MESSAGE _REJECT ) ,
0 ,
} /*-------------------------< SETMSG >----------------------*/ , {
SCR_COPY ( 1 ) ,
@ -2564,7 +2560,7 @@ static struct script script0 __initdata = {
/*
* * If it was no ABORT message . . .
*/
SCR_JUMP ^ IFTRUE ( DATA ( M_ ABORT) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( ABORT_TASK_SE T ) ) ,
PADDRH ( msg_out_abort ) ,
/*
* * . . . wait for the next phase
@ -2576,7 +2572,7 @@ static struct script script0 __initdata = {
/*
* * . . . else clear the message . . .
*/
SCR_LOAD_REG ( scratcha , M_ NO OP) ,
SCR_LOAD_REG ( scratcha , NOP ) ,
0 ,
SCR_COPY ( 4 ) ,
RADDR ( scratcha ) ,
@ -3035,7 +3031,7 @@ static struct scripth scripth0 __initdata = {
*/
SCR_MOVE_ABS ( 1 ) ^ SCR_MSG_IN ,
NADDR ( msgin [ 2 ] ) ,
SCR_JUMP ^ IFTRUE ( DATA ( M_X_WIDE_REQ ) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( EXTENDED_WDTR ) ) ,
PADDRH ( msg_wdtr ) ,
/*
* * unknown extended message
@ -3069,7 +3065,7 @@ static struct scripth scripth0 __initdata = {
} /*-------------------------< SEND_WDTR >----------------*/ , {
/*
* * Send the M_X_WIDE_REQ
* * Send the EXTENDED_WDTR
*/
SCR_MOVE_ABS ( 4 ) ^ SCR_MSG_OUT ,
NADDR ( msgout ) ,
@ -3089,7 +3085,7 @@ static struct scripth scripth0 __initdata = {
*/
SCR_MOVE_ABS ( 1 ) ^ SCR_MSG_IN ,
NADDR ( msgin [ 2 ] ) ,
SCR_JUMP ^ IFTRUE ( DATA ( M_X_SYNC_REQ ) ) ,
SCR_JUMP ^ IFTRUE ( DATA ( EXTENDED_SDTR ) ) ,
PADDRH ( msg_sdtr ) ,
/*
* * unknown extended message
@ -3124,7 +3120,7 @@ static struct scripth scripth0 __initdata = {
} /*-------------------------< SEND_SDTR >-------------*/ , {
/*
* * Send the M_X_SYNC_REQ
* * Send the EXTENDED_SDTR
*/
SCR_MOVE_ABS ( 5 ) ^ SCR_MSG_OUT ,
NADDR ( msgout ) ,
@ -3202,10 +3198,10 @@ static struct scripth scripth0 __initdata = {
} /*-------------------------< RESET >----------------------*/ , {
/*
* * Send a M _RESET message if bad IDENTIFY
* * Send a TARGET _RESET message if bad IDENTIFY
* * received on reselection .
*/
SCR_LOAD_REG ( scratcha , M_ABORT_TAG ) ,
SCR_LOAD_REG ( scratcha , ABORT_TASK ) ,
0 ,
SCR_JUMP ,
PADDRH ( abort_resel ) ,
@ -3213,7 +3209,7 @@ static struct scripth scripth0 __initdata = {
/*
* * Abort a wrong tag received on reselection .
*/
SCR_LOAD_REG ( scratcha , M_ABORT_TAG ) ,
SCR_LOAD_REG ( scratcha , ABORT_TASK ) ,
0 ,
SCR_JUMP ,
PADDRH ( abort_resel ) ,
@ -3221,7 +3217,7 @@ static struct scripth scripth0 __initdata = {
/*
* * Abort a reselection when no active CCB .
*/
SCR_LOAD_REG ( scratcha , M_ ABORT) ,
SCR_LOAD_REG ( scratcha , ABORT_TASK_SE T ) ,
0 ,
} /*-------------------------< ABORT_RESEL >----------------*/ , {
SCR_COPY ( 1 ) ,
@ -3333,7 +3329,7 @@ static struct scripth scripth0 __initdata = {
* * Read the message , since we got it directly
* * from the SCSI BUS data lines .
* * Signal problem to C code for logging the event .
* * Send a M_ ABORT to clear all pending tasks .
* * Send an ABORT_TASK_SE T to clear all pending tasks .
*/
SCR_INT ,
SIR_RESEL_BAD_LUN ,
@ -3345,7 +3341,7 @@ static struct scripth scripth0 __initdata = {
/*
* * We donnot have a task for that I_T_L .
* * Signal problem to C code for logging the event .
* * Send a M_ ABORT message .
* * Send an ABORT_TASK_SE T message .
*/
SCR_INT ,
SIR_RESEL_BAD_I_T_L ,
@ -3355,7 +3351,7 @@ static struct scripth scripth0 __initdata = {
/*
* * We donnot have a task that matches the tag .
* * Signal problem to C code for logging the event .
* * Send a M_ABORTTAG message .
* * Send an ABORT_TASK message .
*/
SCR_INT ,
SIR_RESEL_BAD_I_T_L_Q ,
@ -3366,7 +3362,7 @@ static struct scripth scripth0 __initdata = {
* * We donnot know the target that reselected us .
* * Grab the first message if any ( IDENTIFY ) .
* * Signal problem to C code for logging the event .
* * M _RESET message .
* * TARGET _RESET message .
*/
SCR_INT ,
SIR_RESEL_BAD_TARGET ,
@ -4109,16 +4105,16 @@ static int ncr_prepare_nego(struct ncb *np, struct ccb *cp, u_char *msgptr)
switch ( nego ) {
case NS_SYNC :
msgptr [ msglen + + ] = M_ EXTENDED;
msgptr [ msglen + + ] = EXTENDED_MESSAGE ;
msgptr [ msglen + + ] = 3 ;
msgptr [ msglen + + ] = M_X_SYNC_REQ ;
msgptr [ msglen + + ] = EXTENDED_SDTR ;
msgptr [ msglen + + ] = tp - > maxoffs ? tp - > minsync : 0 ;
msgptr [ msglen + + ] = tp - > maxoffs ;
break ;
case NS_WIDE :
msgptr [ msglen + + ] = M_ EXTENDED;
msgptr [ msglen + + ] = EXTENDED_MESSAGE ;
msgptr [ msglen + + ] = 2 ;
msgptr [ msglen + + ] = M_X_WIDE_REQ ;
msgptr [ msglen + + ] = EXTENDED_WDTR ;
msgptr [ msglen + + ] = tp - > usrwide ;
break ;
}
@ -4220,7 +4216,7 @@ static int ncr_queue_command (struct ncb *np, struct scsi_cmnd *cmd)
* * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
idmsg = M_IDENTIFY | sdev - > lun ;
idmsg = IDENTIFY ( 0 , sdev - > lun ) ;
if ( cp - > tag ! = NO_TAG | |
( cp ! = np - > ccb & & np - > disc & & ! ( tp - > usrflag & UF_NODISC ) ) )
@ -4239,7 +4235,7 @@ static int ncr_queue_command (struct ncb *np, struct scsi_cmnd *cmd)
*/
if ( lp & & time_after ( jiffies , lp - > tags_stime ) ) {
if ( lp - > tags_smap ) {
order = M_ ORDERED_TAG;
order = ORDERED_QUEUE _TAG ;
if ( ( DEBUG_FLAGS & DEBUG_TAGS ) | | bootverbose > 2 ) {
PRINT_ADDR ( cmd ,
" ordered tag forced. \n " ) ;
@ -4257,10 +4253,10 @@ static int ncr_queue_command (struct ncb *np, struct scsi_cmnd *cmd)
case 0x08 : /* READ_SMALL (6) */
case 0x28 : /* READ_BIG (10) */
case 0xa8 : /* READ_HUGE (12) */
order = M_ SIMPLE_TAG;
order = SIMPLE_QUEU E_TAG ;
break ;
default :
order = M_ ORDERED_TAG;
order = ORDERED_QUEUE _TAG ;
}
}
msgptr [ msglen + + ] = order ;
@ -6229,9 +6225,9 @@ static int ncr_int_par (struct ncb *np)
if ( ! ( dbc & 0xc0000000 ) )
phase = ( dbc > > 24 ) & 7 ;
if ( phase = = 7 )
msg = M_PARITY ;
msg = MSG _PARITY_ERROR ;
else
msg = M_ID _ERROR;
msg = INITIATOR _ERROR;
/*
@ -6795,6 +6791,8 @@ void ncr_int_sir (struct ncb *np)
/*-----------------------------------------------------------------------------
* *
* * Was Sie schon immer ueber transfermode negotiation wissen wollten . . .
* * ( " Everything you've always wanted to know about transfer mode
* * negotiation " )
* *
* * We try to negotiate sync and wide transfer only after
* * a successful inquire command . We look at byte 7 of the
@ -6896,8 +6894,8 @@ void ncr_int_sir (struct ncb *np)
break ;
}
np - > msgin [ 0 ] = M_ NO OP;
np - > msgout [ 0 ] = M_ NO OP;
np - > msgin [ 0 ] = NOP ;
np - > msgout [ 0 ] = NOP ;
cp - > nego_status = 0 ;
break ;
@ -6991,9 +6989,9 @@ void ncr_int_sir (struct ncb *np)
spi_offset ( starget ) = ofs ;
ncr_setsync ( np , cp , scntl3 , ( fak < < 5 ) | ofs ) ;
np - > msgout [ 0 ] = M_ EXTENDED;
np - > msgout [ 0 ] = EXTENDED_MESSAGE ;
np - > msgout [ 1 ] = 3 ;
np - > msgout [ 2 ] = M_X_SYNC_REQ ;
np - > msgout [ 2 ] = EXTENDED_SDTR ;
np - > msgout [ 3 ] = per ;
np - > msgout [ 4 ] = ofs ;
@ -7007,7 +7005,7 @@ void ncr_int_sir (struct ncb *np)
OUTL_DSP ( NCB_SCRIPT_PHYS ( np , msg_bad ) ) ;
return ;
}
np - > msgin [ 0 ] = M_ NO OP;
np - > msgin [ 0 ] = NOP ;
break ;
@ -7083,12 +7081,12 @@ void ncr_int_sir (struct ncb *np)
spi_width ( starget ) = wide ;
ncr_setwide ( np , cp , wide , 1 ) ;
np - > msgout [ 0 ] = M_ EXTENDED;
np - > msgout [ 0 ] = EXTENDED_MESSAGE ;
np - > msgout [ 1 ] = 2 ;
np - > msgout [ 2 ] = M_X_WIDE_REQ ;
np - > msgout [ 2 ] = EXTENDED_WDTR ;
np - > msgout [ 3 ] = wide ;
np - > msgin [ 0 ] = M_ NO OP;
np - > msgin [ 0 ] = NOP ;
cp - > nego_status = NS_WIDE ;
@ -7107,12 +7105,12 @@ void ncr_int_sir (struct ncb *np)
case SIR_REJECT_RECEIVED :
/*-----------------------------------------------
* *
* * We received a M_REJECT message .
* * We received a MESSAGE _REJECT .
* *
* * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
PRINT_ADDR ( cp - > cmd , " M_REJECT received (%x:%x). \n " ,
PRINT_ADDR ( cp - > cmd , " MESSAGE _REJECT received (%x:%x). \n " ,
( unsigned ) scr_to_cpu ( np - > lastmsg ) , np - > msgout [ 0 ] ) ;
break ;
@ -7124,7 +7122,7 @@ void ncr_int_sir (struct ncb *np)
* * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
ncr_print_msg ( cp , " M_REJECT sent for " , np - > msgin ) ;
ncr_print_msg ( cp , " MESSAGE _REJECT sent for " , np - > msgin ) ;
break ;
/*--------------------------------------------------------------------
@ -7143,7 +7141,7 @@ void ncr_int_sir (struct ncb *np)
* * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
PRINT_ADDR ( cp - > cmd , " M_ IGN_RESIDUE received, but not yet "
PRINT_ADDR ( cp - > cmd , " IGNORE_WIDE _RESIDUE received, but not yet "
" implemented. \n " ) ;
break ;
#if 0
@ -7156,7 +7154,7 @@ void ncr_int_sir (struct ncb *np)
* * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
PRINT_ADDR ( cp - > cmd , " M_ DISCONNECT received, but datapointer "
PRINT_ADDR ( cp - > cmd , " DISCONNECT received, but datapointer "
" not saved: data=%x save=%x goal=%x. \n " ,
( unsigned ) INL ( nc_temp ) ,
( unsigned ) scr_to_cpu ( np - > header . savep ) ,
@ -7862,7 +7860,7 @@ static int __init ncr_snooptest (struct ncb* np)
* * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* *
* * Note : we have to return the correct value .
* * THERE IS NO SAV E DEFAULT VALUE .
* * THERE IS NO SAF E DEFAULT VALUE .
* *
* * Most NCR / SYMBIOS boards are delivered with a 40 Mhz clock .
* * 53 C860 and 53 C875 rev . 1 support fast20 transfers but
@ -8562,7 +8560,7 @@ struct Scsi_Host * __init ncr_attach(struct scsi_host_template *tpnt,
/* use SIMPLE TAG messages by default */
# ifdef SCSI_NCR_ALWAYS_SIMPLE_TAG
np - > order = M_ SIMPLE_TAG;
np - > order = SIMPLE_QUEU E_TAG ;
# endif
spin_unlock_irqrestore ( & np - > smp_lock , flags ) ;