linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: torvalds@transmeta.com, linux-kernel@vger.kernel.org
Subject: PATCH: update fdomain scsi
Date: Tue, 8 Oct 2002 20:02:54 +0100 (BST)	[thread overview]
Message-ID: <E17yzd8-0004u2-00@the-village.bc.nu> (raw)

diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.2.5.41/drivers/scsi/fdomain.c linux.2.5.41-ac1/drivers/scsi/fdomain.c
--- linux.2.5.41/drivers/scsi/fdomain.c	2002-10-02 21:33:41.000000000 +0100
+++ linux.2.5.41-ac1/drivers/scsi/fdomain.c	2002-10-07 15:43:18.000000000 +0100
@@ -418,7 +418,7 @@
 static int               FIFO_Size = 0x2000; /* 8k FIFO for
 						pre-tmc18c30 chips */
 
-extern void              do_fdomain_16x0_intr( int irq, void *dev_id,
+static void              do_fdomain_16x0_intr( int irq, void *dev_id,
 					    struct pt_regs * regs );
 
 #ifdef MODULE
@@ -528,16 +528,16 @@
    if (!shpnt) return;		/* This won't ever happen */
 
    if (bios_major < 0 && bios_minor < 0) {
-      printk( "scsi%d: <fdomain> No BIOS; using scsi id %d\n",
-	      shpnt->host_no, shpnt->this_id );
+      printk(KERN_INFO "scsi%d: <fdomain> No BIOS; using scsi id %d\n",
+	      shpnt->host_no, shpnt->this_id);
    } else {
-      printk( "scsi%d: <fdomain> BIOS version ", shpnt->host_no );
+      printk(KERN_INFO "scsi%d: <fdomain> BIOS version ", shpnt->host_no);
 
-      if (bios_major >= 0) printk( "%d.", bios_major );
-      else                 printk( "?." );
+      if (bios_major >= 0) printk("%d.", bios_major);
+      else                 printk("?.");
 
-      if (bios_minor >= 0) printk( "%d", bios_minor );
-      else                 printk( "?." );
+      if (bios_minor >= 0) printk("%d", bios_minor);
+      else                 printk("?.");
    
       printk( " at 0x%lx using scsi id %d\n",
 	      bios_base, shpnt->this_id );
@@ -547,31 +547,28 @@
 				   boards, we will have to modify banner
 				   for additional PCI cards, but for now if
 				   it's PCI it's a TMC-3260 - JTM */
-   printk( "scsi%d: <fdomain> %s chip at 0x%x irq ",
+   printk(KERN_INFO "scsi%d: <fdomain> %s chip at 0x%x irq ",
 	   shpnt->host_no,
-	   chip == tmc1800 ? "TMC-1800"
-	   : (chip == tmc18c50 ? "TMC-18C50"
-	      : (chip == tmc18c30 ?
-		 (PCI_bus ? "TMC-36C70 (PCI bus)" : "TMC-18C30")
-		 : "Unknown")),
-	   port_base );
+	   chip == tmc1800 ? "TMC-1800" : (chip == tmc18c50 ? "TMC-18C50" : (chip == tmc18c30 ? (PCI_bus ? "TMC-36C70 (PCI bus)" : "TMC-18C30") : "Unknown")),
+	   port_base);
 
-   if (interrupt_level) printk( "%d", interrupt_level );
-   else                 printk( "<none>" );
+   if (interrupt_level)
+   	printk("%d", interrupt_level);
+   else
+        printk("<none>");
 
    printk( "\n" );
 }
 
-static int __init fdomain_setup( char *str )
+static int __init fdomain_setup(char *str)
 {
 	int ints[4];
 
 	(void)get_options(str, ARRAY_SIZE(ints), ints);
 
 	if (setup_called++ || ints[0] < 2 || ints[0] > 3) {
-		printk( "scsi: <fdomain>"
-		" Usage: fdomain=<PORT_BASE>,<IRQ>[,<ADAPTER_ID>]\n" );
-		printk( "scsi: <fdomain> Bad LILO/INSMOD parameters?\n" );
+		printk(KERN_INFO "scsi: <fdomain> Usage: fdomain=<PORT_BASE>,<IRQ>[,<ADAPTER_ID>]\n");
+		printk(KERN_ERR "scsi: <fdomain> Bad LILO/INSMOD parameters?\n");
 		return 0;
 	}
 
@@ -587,9 +584,9 @@
 __setup("fdomain=", fdomain_setup);
 
 
-static void do_pause( unsigned amount )	/* Pause for amount*10 milliseconds */
+static void do_pause(unsigned amount)	/* Pause for amount*10 milliseconds */
 {
-   mdelay(10*amount);
+	mdelay(10*amount);
 }
 
 inline static void fdomain_make_bus_idle( void )
@@ -672,22 +669,20 @@
 
 static int fdomain_get_irq( int base )
 {
-   int options = inb( base + Configuration1 );
+   int options = inb(base + Configuration1);
 
 #if DEBUG_DETECT
-   printk( "scsi: <fdomain> Options = %x\n", options );
+   printk("scsi: <fdomain> Options = %x\n", options);
 #endif
-   
-				/* Check for board with lowest bios_base --
-				   this isn't valid for the 18c30 or for
-				   boards on the PCI bus, so just assume we
-				   have the right board. */
-
-   if (chip != tmc18c30
-       && !PCI_bus
-       && addresses[ (options & 0xc0) >> 6 ] != bios_base) return 0;
+ 
+   /* Check for board with lowest bios_base --
+      this isn't valid for the 18c30 or for
+      boards on the PCI bus, so just assume we
+      have the right board. */
 
-   return ints[ (options & 0x0e) >> 1 ];
+   if (chip != tmc18c30 && !PCI_bus && addresses[(options & 0xc0) >> 6 ] != bios_base)
+   	return 0;
+   return ints[(options & 0x0e) >> 1];
 }
 
 static int fdomain_isa_detect( int *irq, int *iobase )
@@ -700,7 +695,6 @@
    printk( "scsi: <fdomain> fdomain_isa_detect:" );
 #endif
 
-
    for (i = 0; !bios_base && i < ADDRESS_COUNT; i++) {
 #if DEBUG_DETECT
       printk( " %lx(%lx),", addresses[i], bios_base );
@@ -811,8 +805,6 @@
    unsigned long    pci_base;               /* PCI I/O base address */
    struct pci_dev   *pdev = NULL;
 
-   if (!pci_present()) return 0;
-
 #if DEBUG_DETECT
    /* Tell how to print a list of the known PCI devices from bios32 and
       list vendor and device IDs being used if in debug mode.  */
@@ -824,10 +816,8 @@
 	   PCI_DEVICE_ID_FD_36C70 );
 #endif 
 
-   if ((pdev = pci_find_device(PCI_VENDOR_ID_FD,
-			       PCI_DEVICE_ID_FD_36C70,
-			       pdev)) == NULL)
-     return 0;
+   if ((pdev = pci_find_device(PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70, pdev)) == NULL)
+		return 0;
    if (pci_enable_device(pdev)) return 0;
        
 #if DEBUG_DETECT
@@ -857,8 +847,7 @@
 #endif
 
    if (!fdomain_is_valid_port( *iobase )) {
-      printk( "scsi: <fdomain>"
-	      " PCI card detected, but driver not loaded (invalid port)\n" );
+      printk(KERN_ERR "scsi: <fdomain> PCI card detected, but driver not loaded (invalid port)\n" );
       return 0;
    }
 
@@ -872,7 +861,7 @@
 }
 #endif
 
-int fdomain_16x0_detect( Scsi_Host_Template *tpnt )
+static int fdomain_16x0_detect( Scsi_Host_Template *tpnt )
 {
    int              retcode;
    struct Scsi_Host *shpnt;
@@ -939,13 +928,12 @@
    Write_FIFO_port       = port_base + Write_FIFO;
    Write_SCSI_Data_port  = port_base + Write_SCSI_Data;
 
-   fdomain_16x0_reset( NULL, 0 );
+   fdomain_16x0_bus_reset( NULL);
 
    if (fdomain_test_loopback()) {
-      printk( "scsi: <fdomain> Detection failed"
-	      " (loopback test failed at port base 0x%x)\n", port_base );
+      printk(KERN_ERR  "scsi: <fdomain> Detection failed (loopback test failed at port base 0x%x)\n", port_base);
       if (setup_called) {
-	 printk( "scsi: <fdomain> Bad LILO/INSMOD parameters?\n" );
+	 printk(KERN_ERR "scsi: <fdomain> Bad LILO/INSMOD parameters?\n");
       }
       return 0;
    }
@@ -963,8 +951,8 @@
       }
    }
 
-				/* Print out a banner here in case we can't
-				   get resources.  */
+/* Print out a banner here in case we can't
+   get resources.  */
 
    shpnt = scsi_register( tpnt, 0 );
    if(shpnt == NULL)
@@ -975,10 +963,9 @@
    shpnt->n_io_port = 0x10;
    print_banner( shpnt );
 
-				/* Log IRQ with kernel */   
+   /* Log IRQ with kernel */   
    if (!interrupt_level) {
-      printk( "scsi: <fdomain>"
-	      " Card Detected, but driver not loaded (no IRQ)\n" );
+      printk(KERN_ERR "scsi: <fdomain> Card Detected, but driver not loaded (no IRQ)\n" );
       return 0;
    } else {
       /* Register the IRQ with the kernel */
@@ -988,25 +975,23 @@
 
       if (retcode < 0) {
 	 if (retcode == -EINVAL) {
-	    printk( "scsi: <fdomain> IRQ %d is bad!\n", interrupt_level );
-	    printk( "                This shouldn't happen!\n" );
-	    printk( "                Send mail to faith@acm.org\n" );
+	    printk(KERN_ERR "scsi: <fdomain> IRQ %d is bad!\n", interrupt_level );
+	    printk(KERN_ERR "                This shouldn't happen!\n" );
+	    printk(KERN_ERR "                Send mail to faith@acm.org\n" );
 	 } else if (retcode == -EBUSY) {
-	    printk( "scsi: <fdomain> IRQ %d is already in use!\n",
-		    interrupt_level );
-	    printk( "                Please use another IRQ!\n" );
+	    printk(KERN_ERR "scsi: <fdomain> IRQ %d is already in use!\n", interrupt_level );
+	    printk(KERN_ERR "                Please use another IRQ!\n" );
 	 } else {
-	    printk( "scsi: <fdomain> Error getting IRQ %d\n",
-		    interrupt_level );
-	    printk( "                This shouldn't happen!\n" );
-	    printk( "                Send mail to faith@acm.org\n" );
+	    printk(KERN_ERR "scsi: <fdomain> Error getting IRQ %d\n", interrupt_level );
+	    printk(KERN_ERR "                This shouldn't happen!\n" );
+	    printk(KERN_ERR "                Send mail to faith@acm.org\n" );
 	 }
-	 printk( "scsi: <fdomain> Detected, but driver not loaded (IRQ)\n" );
+	 printk(KERN_ERR "scsi: <fdomain> Detected, but driver not loaded (IRQ)\n" );
 	 return 0;
       }
    }
 
-				/* Log I/O ports with kernel */
+   /* Log I/O ports with kernel */
    request_region( port_base, 0x10, "fdomain" );
 
 #if DO_DETECT
@@ -1065,7 +1050,7 @@
    return 1;			/* Maximum of one adapter will be detected. */
 }
 
-const char *fdomain_16x0_info( struct Scsi_Host *ignore )
+static const char *fdomain_16x0_info( struct Scsi_Host *ignore )
 {
    static char buffer[128];
    char        *pt;
@@ -1097,7 +1082,7 @@
  * length: If inout==FALSE max number of bytes to be written into the buffer 
  *         else number of bytes in the buffer
  */
-int fdomain_16x0_proc_info( char *buffer, char **start, off_t offset,
+static int fdomain_16x0_proc_info( char *buffer, char **start, off_t offset,
 			    int length, int hostno, int inout )
 {
    const char *info = fdomain_16x0_info( NULL );
@@ -1105,7 +1090,7 @@
    int        pos;
    int        begin;
 
-   if (inout) return(-ENOSYS);
+   if (inout) return(-EINVAL);
     
    begin = 0;
    strcpy( buffer, info );
@@ -1200,7 +1185,7 @@
    return 1;
 }
 
-void my_done( int error )
+static void my_done(int error)
 {
    if (in_command) {
       in_command = 0;
@@ -1218,7 +1203,7 @@
 #endif
 }
 
-void do_fdomain_16x0_intr( int irq, void *dev_id, struct pt_regs * regs )
+static void do_fdomain_16x0_intr( int irq, void *dev_id, struct pt_regs * regs )
 {
    unsigned long flags;
    int      status;
@@ -1376,167 +1361,18 @@
       }
    }
 
-   if (chip == tmc1800
-       && !current_SC->SCp.have_data_in
-       && (current_SC->SCp.sent_command
-	   >= current_SC->cmd_len)) {
-				/* We have to get the FIFO direction
-				   correct, so I've made a table based
-				   on the SCSI Standard of which commands
-				   appear to require a DATA OUT phase.
-				 */
-      /*
-	p. 94: Command for all device types
-	CHANGE DEFINITION            40 DATA OUT
-	COMPARE                      39 DATA OUT
-	COPY                         18 DATA OUT
-	COPY AND VERIFY              3a DATA OUT
-	INQUIRY                      12 
-	LOG SELECT                   4c DATA OUT
-	LOG SENSE                    4d
-	MODE SELECT (6)              15 DATA OUT
-	MODE SELECT (10)             55 DATA OUT
-	MODE SENSE (6)               1a
-	MODE SENSE (10)              5a
-	READ BUFFER                  3c
-	RECEIVE DIAGNOSTIC RESULTS   1c
-	REQUEST SENSE                03
-	SEND DIAGNOSTIC              1d DATA OUT
-	TEST UNIT READY              00
-	WRITE BUFFER                 3b DATA OUT
-
-	p.178: Commands for direct-access devices (not listed on p. 94)
-	FORMAT UNIT                  04 DATA OUT
-	LOCK-UNLOCK CACHE            36
-	PRE-FETCH                    34
-	PREVENT-ALLOW MEDIUM REMOVAL 1e
-	READ (6)/RECEIVE             08
-	READ (10)                    3c
-	READ CAPACITY                25
-	READ DEFECT DATA (10)        37
-	READ LONG                    3e
-	REASSIGN BLOCKS              07 DATA OUT
-	RELEASE                      17
-	RESERVE                      16 DATA OUT
-	REZERO UNIT/REWIND           01
-	SEARCH DATA EQUAL (10)       31 DATA OUT
-	SEARCH DATA HIGH (10)        30 DATA OUT
-	SEARCH DATA LOW (10)         32 DATA OUT
-	SEEK (6)                     0b
-	SEEK (10)                    2b
-	SET LIMITS (10)              33
-	START STOP UNIT              1b
-	SYNCHRONIZE CACHE            35
-	VERIFY (10)                  2f
-	WRITE (6)/PRINT/SEND         0a DATA OUT
-	WRITE (10)/SEND              2a DATA OUT
-	WRITE AND VERIFY (10)        2e DATA OUT
-	WRITE LONG                   3f DATA OUT
-	WRITE SAME                   41 DATA OUT ?
-
-	p. 261: Commands for sequential-access devices (not previously listed)
-	ERASE                        19
-	LOAD UNLOAD                  1b
-	LOCATE                       2b
-	READ BLOCK LIMITS            05
-	READ POSITION                34
-	READ REVERSE                 0f
-	RECOVER BUFFERED DATA        14
-	SPACE                        11
-	WRITE FILEMARKS              10 ?
-
-	p. 298: Commands for printer devices (not previously listed)
-	****** NOT SUPPORTED BY THIS DRIVER, since 0b is SEEK (6) *****
-	SLEW AND PRINT               0b DATA OUT  -- same as seek
-	STOP PRINT                   1b
-	SYNCHRONIZE BUFFER           10
-
-	p. 315: Commands for processor devices (not previously listed)
-	
-	p. 321: Commands for write-once devices (not previously listed)
-	MEDIUM SCAN                  38
-	READ (12)                    a8
-	SEARCH DATA EQUAL (12)       b1 DATA OUT
-	SEARCH DATA HIGH (12)        b0 DATA OUT
-	SEARCH DATA LOW (12)         b2 DATA OUT
-	SET LIMITS (12)              b3
-	VERIFY (12)                  af
-	WRITE (12)                   aa DATA OUT
-	WRITE AND VERIFY (12)        ae DATA OUT
-
-	p. 332: Commands for CD-ROM devices (not previously listed)
-	PAUSE/RESUME                 4b
-	PLAY AUDIO (10)              45
-	PLAY AUDIO (12)              a5
-	PLAY AUDIO MSF               47
-	PLAY TRACK RELATIVE (10)     49
-	PLAY TRACK RELATIVE (12)     a9
-	READ HEADER                  44
-	READ SUB-CHANNEL             42
-	READ TOC                     43
-
-	p. 370: Commands for scanner devices (not previously listed)
-	GET DATA BUFFER STATUS       34
-	GET WINDOW                   25
-	OBJECT POSITION              31
-	SCAN                         1b
-	SET WINDOW                   24 DATA OUT
-
-	p. 391: Commands for optical memory devices (not listed)
-	ERASE (10)                   2c
-	ERASE (12)                   ac
-	MEDIUM SCAN                  38 DATA OUT
-	READ DEFECT DATA (12)        b7
-	READ GENERATION              29
-	READ UPDATED BLOCK           2d
-	UPDATE BLOCK                 3d DATA OUT
-
-	p. 419: Commands for medium changer devices (not listed)
-	EXCHANGE MEDIUM              46
-	INITIALIZE ELEMENT STATUS    07
-	MOVE MEDIUM                  a5
-	POSITION TO ELEMENT          2b
-	READ ELEMENT STATUS          b8
-	REQUEST VOL. ELEMENT ADDRESS b5
-	SEND VOLUME TAG              b6 DATA OUT
-
-	p. 454: Commands for communications devices (not listed previously)
-	GET MESSAGE (6)              08
-	GET MESSAGE (10)             28
-	GET MESSAGE (12)             a8
-      */
-	
-      switch (current_SC->cmnd[0]) {
-      case CHANGE_DEFINITION: case COMPARE:         case COPY:
-      case COPY_VERIFY:       case LOG_SELECT:      case MODE_SELECT:
-      case MODE_SELECT_10:    case SEND_DIAGNOSTIC: case WRITE_BUFFER:
-
-      case FORMAT_UNIT:       case REASSIGN_BLOCKS: case RESERVE:
-      case SEARCH_EQUAL:      case SEARCH_HIGH:     case SEARCH_LOW:
-      case WRITE_6:           case WRITE_10:        case WRITE_VERIFY:
-      case 0x3f:              case 0x41:
-
-      case 0xb1:              case 0xb0:            case 0xb2:
-      case 0xaa:              case 0xae:
-
-      case 0x24:
-
-      case 0x38:              case 0x3d:
-
-      case 0xb6:
-	 
-      case 0xea:		/* alternate number for WRITE LONG */
-	 
+   if (chip == tmc1800 && !current_SC->SCp.have_data_in
+       && (current_SC->SCp.sent_command >= current_SC->cmd_len)) {
+      
+      if(scsi_to_pci_dma_dir(current_SC->sc_data_direction)	== PCI_DMA_TODEVICE)
+      {
 	 current_SC->SCp.have_data_in = -1;
 	 outb( 0xd0 | PARITY_MASK, TMC_Cntl_port );
-	 break;
-
-      case 0x00:
-      default:
-	 
+      }
+      else
+      {
 	 current_SC->SCp.have_data_in = 1;
 	 outb( 0x90 | PARITY_MASK, TMC_Cntl_port );
-	 break;
       }
    }
 
@@ -1565,7 +1401,7 @@
 	    if (current_SC->SCp.buffers_residual) {
 	       --current_SC->SCp.buffers_residual;
 	       ++current_SC->SCp.buffer;
-	       current_SC->SCp.ptr = current_SC->SCp.buffer->address;
+	       current_SC->SCp.ptr = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset;
 	       current_SC->SCp.this_residual = current_SC->SCp.buffer->length;
 	    } else
 		  break;
@@ -1598,7 +1434,7 @@
 	     && current_SC->SCp.buffers_residual) {
 	    --current_SC->SCp.buffers_residual;
 	    ++current_SC->SCp.buffer;
-	    current_SC->SCp.ptr = current_SC->SCp.buffer->address;
+	    current_SC->SCp.ptr = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset;
 	    current_SC->SCp.this_residual = current_SC->SCp.buffer->length;
 	 }
       }
@@ -1661,7 +1497,7 @@
    return;
 }
 
-int fdomain_16x0_queue( Scsi_Cmnd * SCpnt, void (*done)(Scsi_Cmnd *))
+static int fdomain_16x0_queue( Scsi_Cmnd * SCpnt, void (*done)(Scsi_Cmnd *))
 {
    if (in_command) {
       panic( "scsi: <fdomain> fdomain_16x0_queue() NOT REENTRANT!\n" );
@@ -1684,7 +1520,7 @@
    if (current_SC->use_sg) {
       current_SC->SCp.buffer =
 	    (struct scatterlist *)current_SC->request_buffer;
-      current_SC->SCp.ptr              = current_SC->SCp.buffer->address;
+      current_SC->SCp.ptr              = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset;
       current_SC->SCp.this_residual    = current_SC->SCp.buffer->length;
       current_SC->SCp.buffers_residual = current_SC->use_sg - 1;
    } else {
@@ -1719,45 +1555,45 @@
 static volatile int internal_done_flag    = 0;
 static volatile int internal_done_errcode = 0;
 
-static void internal_done( Scsi_Cmnd *SCpnt )
+static void internal_done(Scsi_Cmnd *SCpnt)
 {
     internal_done_errcode = SCpnt->result;
     ++internal_done_flag;
 }
 
-int fdomain_16x0_command( Scsi_Cmnd *SCpnt )
+static int fdomain_16x0_command(Scsi_Cmnd *SCpnt)
 {
-    fdomain_16x0_queue( SCpnt, internal_done );
+    fdomain_16x0_queue(SCpnt, internal_done);
 
     while (!internal_done_flag)
-	  ;
+	  cpu_relax();
     internal_done_flag = 0;
     return internal_done_errcode;
 }
 
 /* End of code derived from Tommy Thorn's work. */
 
-void print_info( Scsi_Cmnd *SCpnt )
+static void print_info(Scsi_Cmnd *SCpnt)
 {
    unsigned int imr;
    unsigned int irr;
    unsigned int isr;
 
    if (!SCpnt || !SCpnt->host) {
-      printk( "scsi: <fdomain> Cannot provide detailed information\n" );
+      printk(KERN_WARNING "scsi: <fdomain> Cannot provide detailed information\n");
       return;
    }
    
-   printk( "%s\n", fdomain_16x0_info( SCpnt->host ) );
-   print_banner( SCpnt->host );
+   printk(KERN_INFO "%s\n", fdomain_16x0_info( SCpnt->host ) );
+   print_banner(SCpnt->host);
    switch (SCpnt->SCp.phase) {
-   case in_arbitration: printk( "arbitration " ); break;
-   case in_selection:   printk( "selection " );   break;
-   case in_other:       printk( "other " );       break;
-   default:             printk( "unknown " );     break;
+   case in_arbitration: printk("arbitration"); break;
+   case in_selection:   printk("selection");   break;
+   case in_other:       printk("other");       break;
+   default:             printk("unknown");     break;
    }
 
-   printk( "(%d), target = %d cmnd = 0x%02x pieces = %d size = %u\n",
+   printk( " (%d), target = %d cmnd = 0x%02x pieces = %d size = %u\n",
 	   SCpnt->SCp.phase,
 	   SCpnt->target,
 	   *(unsigned char *)SCpnt->cmnd,
@@ -1807,21 +1643,17 @@
 		 inb( port_base + Configuration2 ) );
 }
 
-int fdomain_16x0_abort( Scsi_Cmnd *SCpnt)
+static int fdomain_16x0_abort( Scsi_Cmnd *SCpnt)
 {
-   unsigned long flags;
 #if EVERY_ACCESS || ERRORS_ONLY || DEBUG_ABORT
    printk( "scsi: <fdomain> abort " );
 #endif
 
-   save_flags( flags );
-   cli();
    if (!in_command) {
 #if EVERY_ACCESS || ERRORS_ONLY
       printk( " (not in command)\n" );
 #endif
-      restore_flags( flags );
-      return SCSI_ABORT_NOT_RUNNING;
+      return FAILED;
    } else printk( "\n" );
 
 #if DEBUG_ABORT
@@ -1829,52 +1661,39 @@
 #endif
 
    fdomain_make_bus_idle();
-
    current_SC->SCp.phase |= aborted;
-
    current_SC->result = DID_ABORT << 16;
-
-   restore_flags( flags );
    
    /* Aborts are not done well. . . */
-   my_done( DID_ABORT << 16 );
-
-   return SCSI_ABORT_SUCCESS;
+   my_done(DID_ABORT << 16);
+   return SUCCESS;
 }
 
-int fdomain_16x0_reset( Scsi_Cmnd *SCpnt, unsigned int ignored )
+static int fdomain_16x0_bus_reset(Scsi_Cmnd *SCpnt)
 {
-#if DEBUG_RESET
-   static int called_once = 0;
-#endif
-
-#if ERRORS_ONLY
-   if (SCpnt) printk( "scsi: <fdomain> SCSI Bus Reset\n" );
-#endif
-
-#if DEBUG_RESET
-   if (called_once) print_info( current_SC );
-   called_once = 1;
-#endif
-   
    outb( 1, SCSI_Cntl_port );
    do_pause( 2 );
    outb( 0, SCSI_Cntl_port );
    do_pause( 115 );
    outb( 0, SCSI_Mode_Cntl_port );
    outb( PARITY_MASK, TMC_Cntl_port );
+   return SUCCESS;
+}
 
-   /* Unless this is the very first call (i.e., SCPnt == NULL), everything
-      is probably hosed at this point.  We will, however, try to keep
-      things going by informing the high-level code that we need help. */
+static int fdomain_16x0_host_reset(Scsi_Cmnd *SCpnt)
+{
+  return FAILED;
+}
 
-   return SCSI_RESET_WAKEUP;
+static int fdomain_16x0_device_reset(Scsi_Cmnd *SCpnt)
+{
+  return FAILED;
 }
 
 #include "sd.h"
 #include <scsi/scsi_ioctl.h>
 
-int fdomain_16x0_biosparam( Scsi_Disk *disk, struct block_device *bdev, int *info_array )
+static int fdomain_16x0_biosparam(Scsi_Disk *disk, struct block_device *bdev, int *info_array)
 {
    int              drive;
    unsigned char    buf[512 + sizeof (Scsi_Ioctl_Command)];
@@ -2036,7 +1855,7 @@
    return 0;
 }
 
-int fdomain_16x0_release(struct Scsi_Host *shpnt)
+static int fdomain_16x0_release(struct Scsi_Host *shpnt)
 {
 	if (shpnt->irq)
 		free_irq(shpnt->irq, shpnt);
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.2.5.41/drivers/scsi/fdomain.h linux.2.5.41-ac1/drivers/scsi/fdomain.h
--- linux.2.5.41/drivers/scsi/fdomain.h	2002-10-02 21:32:55.000000000 +0100
+++ linux.2.5.41-ac1/drivers/scsi/fdomain.h	2002-10-07 15:38:33.000000000 +0100
@@ -25,29 +25,34 @@
 #ifndef _FDOMAIN_H
 #define _FDOMAIN_H
 
-int        fdomain_16x0_detect( Scsi_Host_Template * );
-int        fdomain_16x0_command( Scsi_Cmnd * );
-int        fdomain_16x0_abort( Scsi_Cmnd * );
-const char *fdomain_16x0_info( struct Scsi_Host * );
-int        fdomain_16x0_reset( Scsi_Cmnd *, unsigned int ); 
-int        fdomain_16x0_queue( Scsi_Cmnd *, void (*done)(Scsi_Cmnd *) );
-int        fdomain_16x0_biosparam( Disk *, struct block_device *, int * );
-int        fdomain_16x0_proc_info( char *buffer, char **start, off_t offset,
+static int        fdomain_16x0_detect( Scsi_Host_Template *);
+static int        fdomain_16x0_command( Scsi_Cmnd *);
+static int        fdomain_16x0_abort(Scsi_Cmnd *);
+static const char *fdomain_16x0_info(struct Scsi_Host *);
+static int        fdomain_16x0_bus_reset(Scsi_Cmnd *); 
+static int        fdomain_16x0_host_reset(Scsi_Cmnd *); 
+static int        fdomain_16x0_device_reset(Scsi_Cmnd *); 
+static int        fdomain_16x0_queue(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
+static int        fdomain_16x0_biosparam(Disk *, struct block_device *, int * );
+static int        fdomain_16x0_proc_info(char *buffer, char **start, off_t offset,
 				   int length, int hostno, int inout );
-int        fdomain_16x0_release( struct Scsi_Host *shpnt );
+static int        fdomain_16x0_release(struct Scsi_Host *shpnt);
 
-#define FDOMAIN_16X0 { proc_info:      fdomain_16x0_proc_info,           \
-		       detect:         fdomain_16x0_detect,              \
-		       info:           fdomain_16x0_info,                \
-		       command:        fdomain_16x0_command,             \
-		       queuecommand:   fdomain_16x0_queue,               \
-		       abort:          fdomain_16x0_abort,               \
-		       reset:          fdomain_16x0_reset,               \
-		       bios_param:     fdomain_16x0_biosparam,           \
-		       release:        fdomain_16x0_release,		 \
-		       can_queue:      1, 				 \
-		       this_id:        6, 				 \
-		       sg_tablesize:   64, 				 \
-		       cmd_per_lun:    1, 				 \
-		       use_clustering: DISABLE_CLUSTERING }
+#define FDOMAIN_16X0 { proc_info:      		fdomain_16x0_proc_info,           \
+		       detect:         		fdomain_16x0_detect,              \
+		       info:           		fdomain_16x0_info,                \
+		       command:        		fdomain_16x0_command,             \
+		       queuecommand:   		fdomain_16x0_queue,               \
+		       eh_abort_handler:	fdomain_16x0_abort,               \
+		       eh_bus_reset_handler:	fdomain_16x0_bus_reset,           \
+		       eh_device_reset_handler:	fdomain_16x0_device_reset,        \
+		       eh_host_reset_handler:	fdomain_16x0_host_reset,          \
+		       bios_param:		fdomain_16x0_biosparam,           \
+		       release:			fdomain_16x0_release,		  \
+		       can_queue:		1, 				  \
+		       this_id:  		6, 				  \
+		       sg_tablesize:		64, 				  \
+		       cmd_per_lun:		1, 				  \
+		       use_clustering:		DISABLE_CLUSTERING		  \
+}
 #endif

                 reply	other threads:[~2002-10-08 19:13 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E17yzd8-0004u2-00@the-village.bc.nu \
    --to=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@transmeta.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).