diff -u --recursive --new-file v1.0.7/linux/CREDITS linux/CREDITS
--- v1.0.7/linux/CREDITS	Mon Mar 21 20:42:08 1994
+++ linux/CREDITS	Thu Apr  7 08:14:56 1994
@@ -531,6 +531,14 @@
 S: 97078 Wuerzburg
 S: Germany
 
+N: Patrick Volkerding
+E: volkerdi@ftp.cdrom.com
+D: Produced the Slackware distribution, updated the SVGAlib
+D: patches for ghostscript, worked on color 'ls', etc.
+S: 301 15th Street S.
+S: Moorhead, MN 56560
+S: USA 
+
 N: Juergen Weigert
 E: jnweiger@immd4.informatik.uni-erlangen.de
 D: The Linux Support Team Erlangen
diff -u --recursive --new-file v1.0.7/linux/Makefile linux/Makefile
--- v1.0.7/linux/Makefile	Wed Apr  6 13:21:39 1994
+++ linux/Makefile	Thu Apr  7 08:36:20 1994
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 0
-SUBLEVEL = 7
+SUBLEVEL = 8
 
 all:	Version zImage
 
diff -u --recursive --new-file v1.0.7/linux/drivers/scsi/fdomain.c linux/drivers/scsi/fdomain.c
--- v1.0.7/linux/drivers/scsi/fdomain.c	Sun Apr  3 14:58:23 1994
+++ linux/drivers/scsi/fdomain.c	Thu Apr  7 07:50:25 1994
@@ -1,10 +1,10 @@
 /* fdomain.c -- Future Domain TMC-16x0 SCSI driver
  * Created: Sun May  3 18:53:19 1992 by faith@cs.unc.edu
- * Revised: Sun Jan 23 08:59:04 1994 by faith@cs.unc.edu
+ * Revised: Fri Apr  1 23:47:55 1994 by faith@cs.unc.edu
  * Author: Rickard E. Faith, faith@cs.unc.edu
  * Copyright 1992, 1993, 1994 Rickard E. Faith
  *
- * $Id: fdomain.c,v 5.9 1994/01/23 13:59:14 root Exp $
+ * $Id: fdomain.c,v 5.15 1994/04/02 04:48:04 root Exp $
 
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -16,6 +16,10 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * General Public License for more details.
 
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
+
  **************************************************************************
  
  DESCRIPTION:
@@ -26,7 +30,7 @@
  high-density external connector.  The 1670 and 1680 have floppy disk
  controllers built in.
 
- Future Domain's older boards are based on the TMC-1800 chip, and the
+ Future Domain's older boards are based on the TMC-1800 chip, and this
  driver was originally written for a TMC-1680 board with the TMC-1800
  chip.  More recently, boards are being produced with the TMC-18C50 chip.
  The latest and greatest board may not work with this driver.  If you have
@@ -34,6 +38,12 @@
  signature, then the driver may fail to function after the board is
  detected.
 
+ The following BIOS versions are supported: 2.0, 3.0, 3.2, and 3.4.
+ The following chips are supported: TMC-1800, TMC-18C50.
+ Reports suggest that the driver will also work with the TMC-18C30 chip.
+ The support for the version 3.4 BIOS is new, as of March 1994, and may not
+ be stable.
+
  If you have a TMC-8xx or TMC-9xx board, then this is not the driver for
  your board.  Please refer to the Seagate driver for more information and
  possible support.
@@ -60,6 +70,16 @@
  Private communications, Drew Eckhardt (drew@cs.colorado.edu) and Eric
  Youngdale (eric@tantalus.nrl.navy.mil), 1992.
 
+ Private communication, Tuong Le (Future Domain Engineering department),
+ 1994. (Disk geometry computations for Future Domain BIOS version 3.4, and
+ TMC-18C30 detection.)
+
+ Hogan, Thom. The Programmer's PC Sourcebook. Microsoft Press, 1988. Page
+ 60 (2.39: Disk Partition Table Layout).
+
+ "18C30 Technical Reference Manual", Future Domain Corporation, 1993, page
+ 6-1.
+
 
  
  NOTES ON REFERENCES:
@@ -95,6 +115,9 @@
  his 18C50-based card for debugging.  He is the sole reason that this
  driver works with the 18C50 chip.
 
+ Thanks to Dave Newman (dnewman@crl.com) for providing initial patches for
+ the version 3.4 BIOS.
+
  All of the alpha testers deserve much thanks.
  
 
@@ -128,11 +151,12 @@
  of the two race conditions which were introduced by multiple outstanding
  commands).  The instability seems a very high price to pay just so that
  you don't have to wait for the tape to rewind.  When I have time, I will
- work on this again.  In the interim, if anyone want to work on the code, I
- can give them my latest version.
+ work on this again.  In the interim, if anyone wants to work on the code,
+ I can give them my latest version.
 
  **************************************************************************/
 
+#include <linux/config.h>
 #include <linux/sched.h>
 #include <asm/io.h>
 #include "../block/blk.h"
@@ -144,7 +168,7 @@
 #include <linux/string.h>
 #include <linux/ioport.h>
 
-#define VERSION          "$Revision: 5.9 $"
+#define VERSION          "$Revision: 5.15 $"
 
 /* START OF USER DEFINABLE OPTIONS */
 
@@ -189,6 +213,7 @@
    unknown          = 0x00,
    tmc1800          = 0x01,
    tmc18c50         = 0x02,
+   tmc18c30         = 0x03,
 };
 
 enum {
@@ -204,15 +229,15 @@
    Read_SCSI_Data   =  0,
    SCSI_Status      =  1,
    TMC_Status       =  2,
-   FIFO_Status      =  3,	/* tmc18c50 only */
-   Interrupt_Cond   =  4,	/* tmc18c50 only */
+   FIFO_Status      =  3,	/* tmc18c50/tmc18c30 only */
+   Interrupt_Cond   =  4,	/* tmc18c50/tmc18c30 only */
    LSB_ID_Code      =  5,
    MSB_ID_Code      =  6,
    Read_Loopback    =  7,
    SCSI_Data_NoACK  =  8,
    Interrupt_Status =  9,
    Configuration1   = 10,
-   Configuration2   = 11,	/* tmc18c50 only */
+   Configuration2   = 11,	/* tmc18c50/tmc18c30 only */
    Read_FIFO        = 12,
    FIFO_Data_Count  = 14
 };
@@ -223,8 +248,9 @@
    Interrupt_Cntl   =  2,
    SCSI_Mode_Cntl   =  3,
    TMC_Cntl         =  4,
-   Memory_Cntl      =  5,	/* tmc18c50 only */
+   Memory_Cntl      =  5,	/* tmc18c50/tmc18c30 only */
    Write_Loopback   =  7,
+   IO_Control       = 11,	/* tmc18c30 only */
    Write_FIFO       = 12
 };
 
@@ -278,8 +304,9 @@
 
   READ EVERY WORD, ESPECIALLY THE WORD *NOT*
 
-  This driver works *ONLY* for Future Domain cards using the TMC-1800 or
-  the TMC-18C50 chip.  This includes models TMC-1650, 1660, 1670, and 1680.
+  This driver works *ONLY* for Future Domain cards using the TMC-1800,
+  TMC-18C50, or TMC-18C30 chip.  This includes models TMC-1650, 1660, 1670,
+  and 1680.
 
   The following BIOS signature signatures are for boards which do *NOT*
   work with this driver (these TMC-8xx and TMC-9xx boards may work with the
@@ -308,6 +335,7 @@
    { "FUTURE DOMAIN CORP. (C) 1986-1990 1800-V1.07/28/89", 5, 50,  2,  0 },
    { "FUTURE DOMAIN CORP. (C) 1992 V3.00.004/02/92",       5, 44,  3,  0 },
    { "FUTURE DOMAIN TMC-18XX (C) 1993 V3.203/12/93",       5, 44,  3,  2 },
+   { "Future Domain Corp. V1.0008/18/93",                  5, 33,  3,  4 }, 
    { "FUTURE DOMAIN TMC-18XX",                             5, 22, -1, -1 },
 
    /* READ NOTICE ABOVE *BEFORE* YOU WASTE YOUR TIME ADDING A SIGANTURE
@@ -331,7 +359,8 @@
    printk( "Future Domain: BIOS version %d.%d, %s\n",
 	   bios_major, bios_minor,
 	   chip == tmc1800 ? "TMC-1800"
-	   : (chip == tmc18c50 ? "TMC-18C50" : "Unknown") );
+	   : (chip == tmc18c50 ? "TMC-18C50"
+	      : (chip == tmc18c30 ? "TMC-18C30" : "Unknown")) );
    
    if (interrupt_level) {
       printk( "Future Domain: BIOS at %x; port base at %x; using IRQ %d\n",
@@ -353,7 +382,7 @@
 {
    outb( 0, SCSI_Cntl_port );
    outb( 0, SCSI_Mode_Cntl_port );
-   if (chip == tmc18c50)
+   if (chip == tmc18c50 || chip == tmc18c30)
 	 outb( 0x21 | PARITY_MASK, TMC_Cntl_port ); /* Clear forced intr. */
    else
 	 outb( 0x01 | PARITY_MASK, TMC_Cntl_port );
@@ -381,6 +410,28 @@
    } else {			            /* test for 0xe960 id */
       if (inb( port + MSB_ID_Code ) != 0x60) return 0;
       chip = tmc18c50;
+
+#if 0
+
+				/* Try to toggle 32-bit mode.  This only
+				   works on an 18c30 chip.  (User reports
+				   say that this doesn't work at all, so
+				   we'll use the other method.) */
+
+      outb( 0x80, port + IO_Control );
+      if (inb( port + Configuration2 ) & 0x80 == 0x80) {
+	 outb( 0x00, port + IO_Control );
+	 if (inb( port + Configuration2 ) & 0x80 == 0x00) chip = tmc18c30;
+      }
+#else
+
+				/* That should have worked, but appears to
+                                   have problems.  Lets assume it is an
+                                   18c30 if the RAM is disabled. */
+
+      if (inb( port + Configuration2 ) & 0x02) chip = tmc18c30;
+#endif
+				/* If that failed, we are an 18c50. */
    }
 
    /* We have a valid MCA ID for a TMC-1660/TMC-1680 Future Domain board.
@@ -395,9 +446,13 @@
    printk( " Options = %x\n", options );
 #endif
 
-				/* Check for board with lowest bios_base. */
-   if (addresses[ (options & 0xc0) >> 6 ] != bios_base)
+				/* Check for board with lowest bios_base --
+				   this isn't valid for the 18c30, so just
+				   assume we have the right board. */
+
+   if (chip != tmc18c30 && addresses[ (options & 0xc0) >> 6 ] != bios_base)
 	 return 0;
+
    interrupt_level = ints[ (options & 0x0e) >> 1 ];
 
    return 1;
@@ -705,7 +760,7 @@
    printk( "Arbitration failed, status = %x\n", status );
 #endif
 #if ERRORS_ONLY
-   printk( "Future Domain: Arbitration failed, status = %x", status );
+   printk( "Future Domain: Arbitration failed, status = %x\n", status );
 #endif
    return 1;
 }
@@ -723,7 +778,11 @@
    /* Stop arbitration and enable parity */
    outb( PARITY_MASK, TMC_Cntl_port ); 
 
+#if 0
    timeout = jiffies + 25;	        /* 250mS */
+#else
+   timeout = jiffies + 35;	        /* 350mS -- because of timeouts */
+#endif
    while (jiffies < timeout) {
       status = inb( SCSI_Status_port ); /* Read adapter status */
       if (status & 1) {		        /* Busy asserted */
@@ -738,7 +797,7 @@
    if (!target) printk( "Selection failed\n" );
 #endif
 #if ERRORS_ONLY
-   if (!target) printk( "Future Domain: Selection failed" );
+   if (!target) printk( "Future Domain: Selection failed\n" );
 #endif
    return 1;
 }
@@ -858,13 +917,13 @@
 		 current_SC->cmnd[ current_SC->SCp.sent_command - 1] );
 #endif
 	 break;
-      case 0x00:		/* DATA OUT -- tmc18c50 only */
+      case 0x00:		/* DATA OUT -- tmc18c50/tmc18c30 only */
 	 if (chip != tmc1800 && !current_SC->SCp.have_data_in) {
 	    current_SC->SCp.have_data_in = -1;
 	    outb( 0xd0 | PARITY_MASK, TMC_Cntl_port );
 	 }
 	 break;
-      case 0x04:		/* DATA IN -- tmc18c50 only */
+      case 0x04:		/* DATA IN -- tmc18c50/tmc18c30 only */
 	 if (chip != tmc1800 && !current_SC->SCp.have_data_in) {
 	    current_SC->SCp.have_data_in = 1;
 	    outb( 0x90 | PARITY_MASK, TMC_Cntl_port );
@@ -1315,13 +1374,13 @@
    if (inb( Interrupt_Status_port ) & 0x08)
 	 printk( " (enabled)" );
    printk( "\n" );
-   if (chip == tmc18c50) {
+   if (chip == tmc18c50 || chip == tmc18c30) {
       printk( "FIFO Status      = 0x%02x\n", inb( port_base + FIFO_Status ) );
       printk( "Int. Condition   = 0x%02x\n",
 	      inb( port_base + Interrupt_Cond ) );
    }
    printk( "Configuration 1  = 0x%02x\n", inb( port_base + Configuration1 ) );
-   if (chip == tmc18c50)
+   if (chip == tmc18c50 || chip == tmc18c30)
 	 printk( "Configuration 2  = 0x%02x\n",
 		 inb( port_base + Configuration2 ) );
 }
@@ -1396,9 +1455,20 @@
    return 0;
 }
 
+#ifdef CONFIG_BLK_DEV_SD
+
+#include "sd.h"
+#include "scsi_ioctl.h"
+
 int fdomain_16x0_biosparam( int size, int dev, int *info_array )
 {
-   int    drive;
+   int              drive;
+   unsigned char    buf[512 + sizeof( int ) * 2];
+   int              *sizes    = (int *)buf;
+   unsigned char    *data     = (unsigned char *)(sizes + 2);
+   unsigned char    do_read[] = { READ_6, 0, 0, 0, 1, 0 };
+   int              retcode;
+   Scsi_Device      *disk;
    struct drive_info {
       unsigned short cylinders;
       unsigned char  heads;
@@ -1438,43 +1508,84 @@
     */
 
    drive = MINOR(dev) / 16;
+   disk  = rscsi_disks[ drive ].device;
 
    if (bios_major == 2) {
       i = (struct drive_info *)( (char *)bios_base + 0x1f31 + drive * 25 );
       info_array[0] = i->heads;
       info_array[1] = i->sectors;
       info_array[2] = i->cylinders;
-   } else if (bios_major == 3) { /* Appears to be the same for 3.0 and 3.2 */
-      i = (struct drive_info *)( (char *)bios_base + 0x1f71 + drive * 10 );
-      info_array[0] = i->heads + 1;
-      info_array[1] = i->sectors;
-      info_array[2] = i->cylinders;
-   } else {
-      /* How the data is stored in the RAM area is very BIOS-dependent.
-         Therefore, assume a version 3 layout, and check for validity. */
-      
+   } else if (bios_major == 3 && bios_minor < 4) { /* 3.0 and 3.2 BIOS */
       i = (struct drive_info *)( (char *)bios_base + 0x1f71 + drive * 10 );
       info_array[0] = i->heads + 1;
       info_array[1] = i->sectors;
       info_array[2] = i->cylinders;
+   } else {			/* 3.4 BIOS (and up?) */
+      /* This algorithm was provided by Future Domain (much thanks!). */
 
-      if (!info_array[0]
-	  || !info_array[1]
-	  || !info_array[2]
-	  || info_array[2] > 1024 /* DOS uses only 10 bits.
-				     Should this be changed
-				     to support larger drives?
-				     I.e., will the controller
-				     "do the right thing"?
-				   */
-	  ) {
-	 
-	 info_array[0]
-	       = info_array[1]
-	       = info_array[2]
-	       = 0;
+      sizes[0] = 0;		/* zero bytes out */
+      sizes[1] = 512;		/* one sector in */
+      memcpy( data, do_read, sizeof( do_read ) );
+      retcode = kernel_scsi_ioctl( disk,
+				   SCSI_IOCTL_SEND_COMMAND,
+				   (void *)buf );
+      if (!retcode		                    /* SCSI command ok */
+	  && data[511] == 0xaa && data[510] == 0x55 /* Partition table valid */
+	  && data[0x1c2]) {			    /* Partition type */
+
+	 /* The partition table layout is as follows:
+
+	    Start: 0x1b3h
+	    Offset: 0 = partition status
+	            1 = starting head
+		    2 = starting sector and cylinder (word, encoded)
+		    4 = partition type
+		    5 = ending head
+		    6 = ending sector and cylinder (word, encoded)
+		    8 = starting absolute sector (double word)
+		    c = number of sectors (double word)
+	    Signature: 0x1fe = 0x55aa
+
+	    So, this algorithm assumes:
+	    1) the first partition table is in use,
+	    2) the data in the first entry is correct, and
+	    3) partitions never divide cylinders
+
+	    Note that (1) may be FALSE for NetBSD (and other BSD flavors),
+            as well as for Linux.  Note also, that Linux doesn't pay any
+            attention to the fields that are used by this algorithm -- it
+            only uses the absolute sector data.  Recent versions of Linux's
+            fdisk(1) will fill this data in correctly, and forthcoming
+            versions will check for consistency.
+
+	    Checking for a non-zero partition type is not part of the
+            Future Domain algorithm, but it seemed to be a reasonable thing
+            to do, especially in the Linux and BSD worlds. */
+
+	 info_array[0] = data[0x1c3] + 1;	    /* heads */
+	 info_array[1] = data[0x1c4] & 0x3f;	    /* sectors */
+      } else {
+
+ 	 /* Note that this new method guarantees that there will always be
+            less than 1024 cylinders on a platter.  This is good for drives
+            up to approximately 7.85GB (where 1GB = 1024 * 1024 kB). */
+
+	 if ((unsigned int)size >= 0x7e0000U) {
+	    info_array[0] = 0xff; /* heads   = 255 */
+	    info_array[1] = 0x3f; /* sectors =  63 */
+	 } else if ((unsigned int)size >= 0x200000U) {
+	    info_array[0] = 0x80; /* heads   = 128 */
+	    info_array[1] = 0x3f; /* sectors =  63 */
+	 } else {
+	    info_array[0] = 0x40; /* heads   =  64 */
+	    info_array[1] = 0x20; /* sectors =  32 */
+	 }
       }
+				/* For both methods, compute the cylinders */
+      info_array[2] = (unsigned int)size / (info_array[0] * info_array[1] );
    }
    
    return 0;
 }
+
+#endif /* CONFIG_BLK_DEV_SD */
diff -u --recursive --new-file v1.0.7/linux/drivers/scsi/fdomain.h linux/drivers/scsi/fdomain.h
--- v1.0.7/linux/drivers/scsi/fdomain.h	Wed Jan  5 08:18:50 1994
+++ linux/drivers/scsi/fdomain.h	Thu Apr  7 07:50:25 1994
@@ -1,10 +1,10 @@
 /* fdomain.h -- Header for Future Domain TMC-16x0 driver
  * Created: Sun May  3 18:47:33 1992 by faith@cs.unc.edu
- * Revised: Tue Jan  4 20:44:04 1994 by faith@cs.unc.edu
+ * Revised: Sat Mar 19 16:07:14 1994 by faith@cs.unc.edu
  * Author: Rickard E. Faith, faith@cs.unc.edu
  * Copyright 1992, 1993, 1994 Rickard E. Faith
  *
- * $Id: fdomain.h,v 5.3 1994/01/05 01:44:16 root Exp $
+ * $Id: fdomain.h,v 5.5 1994/03/19 21:07:38 root Exp $
 
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -16,6 +16,10 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * General Public License for more details.
 
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 675 Mass Ave, Cambridge, MA 02139, USA.
+
  */
 
 #ifndef _FDOMAIN_H
@@ -27,7 +31,12 @@
 const char *fdomain_16x0_info( void );
 int        fdomain_16x0_reset( Scsi_Cmnd * ); 
 int        fdomain_16x0_queue( Scsi_Cmnd *, void (*done)(Scsi_Cmnd *) );
+
+#ifdef CONFIG_BLK_DEV_SD
 int        fdomain_16x0_biosparam( int, int, int * );
+#else
+#define    fdomain_16x0_biosparam NULL
+#endif
 
 #define FDOMAIN_16X0 { "Future Domain TMC-16x0",          \
 			fdomain_16x0_detect,              \
diff -u --recursive --new-file v1.0.7/linux/net/inet/tcp.c linux/net/inet/tcp.c
--- v1.0.7/linux/net/inet/tcp.c	Wed Apr  6 13:13:35 1994
+++ linux/net/inet/tcp.c	Thu Apr  7 07:51:05 1994
@@ -3407,7 +3407,6 @@
 	case TCP_SYN_RECV:
 		if (th->syn) {
 			/* Probably a retransmitted syn */
-			printk("syn while in TCP_SYN_RECV\n");
 			kfree_skb(skb, FREE_READ);
 			release_sock(sk);
 			return(0);
