## Automatically generated incremental diff
## From:   linux-2.4.14-pre8
## To:     linux-2.4.14
## Robot:  $Id: make-incremental-diff,v 1.8 2001/12/04 06:05:04 hpa Exp $

diff -urN linux-2.4.14-pre8/CREDITS linux/CREDITS
--- linux-2.4.14-pre8/CREDITS	Sun Oct 21 10:20:57 2001
+++ linux/CREDITS	Mon Dec  3 23:26:29 2001
@@ -1868,9 +1868,8 @@
 S: Bulgaria
 
 N: Martin Mares
-E: mj@suse.cz
 E: mj@ucw.cz
-W: http://atrey.karlin.mff.cuni.cz/~mj/
+W: http://www.ucw.cz/~mj/
 D: BIOS video mode handling code
 D: MOXA C-218 serial board driver
 D: Network autoconfiguration
diff -urN linux-2.4.14-pre8/Documentation/Configure.help linux/Documentation/Configure.help
--- linux-2.4.14-pre8/Documentation/Configure.help	Mon Dec  3 23:26:20 2001
+++ linux/Documentation/Configure.help	Mon Dec  3 23:26:29 2001
@@ -12258,6 +12258,15 @@
   http://www.unicode.org for more information). Say Y here if you want
   to be able to read Joliet CDROMs under Linux.
 
+Transparent decompression extension
+CONFIG_ZISOFS
+  This is a Linux-specific extension to RockRidge which lets you store
+  data in compressed form on a CD-ROM and have it transparently
+  decompressed when the CD-ROM is accessed.  See
+  <http://www.kernel.org/pub/linux/utils/fs/zisofs/> for the tools
+  necessary to create such a filesystem.  Say Y here if you want to be
+  able to read such compressed CD-ROMs.
+
 UDF File System support (read only)
 CONFIG_UDF_FS
   This is the new file system used on some CDROMs and DVDs. Say Y if
diff -urN linux-2.4.14-pre8/Documentation/pci.txt linux/Documentation/pci.txt
--- linux-2.4.14-pre8/Documentation/pci.txt	Sun Aug  5 13:12:40 2001
+++ linux/Documentation/pci.txt	Mon Dec  3 23:26:29 2001
@@ -1,6 +1,6 @@
 			 How To Write Linux PCI Drivers
 
-		  by Martin Mares <mj@suse.cz> on 07-Feb-2000
+		   by Martin Mares <mj@ucw.cz> on 07-Feb-2000
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 The world of PCI is vast and it's full of (mostly unpleasant) surprises.
diff -urN linux-2.4.14-pre8/MAINTAINERS linux/MAINTAINERS
--- linux-2.4.14-pre8/MAINTAINERS	Mon Dec  3 23:26:20 2001
+++ linux/MAINTAINERS	Mon Dec  3 23:26:29 2001
@@ -1151,9 +1151,9 @@
 
 PCI SUBSYSTEM
 P:	Martin Mares
-M:	mj@suse.cz
+M:	mj@ucw.cz
 L:	linux-kernel@vger.kernel.org
-S:	Supported
+S:	Odd Fixes
 
 PCMCIA SUBSYSTEM
 P:	David Hinds
@@ -1401,7 +1401,7 @@
 
 SVGA HANDLING
 P:	Martin Mares
-M:	mj@suse.cz
+M:	mj@ucw.cz
 L:	linux-video@atrey.karlin.mff.cuni.cz
 S:	Maintained
 
diff -urN linux-2.4.14-pre8/Makefile linux/Makefile
--- linux-2.4.14-pre8/Makefile	Mon Dec  3 23:26:20 2001
+++ linux/Makefile	Mon Dec  3 23:26:29 2001
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 14
-EXTRAVERSION =-pre8
+EXTRAVERSION =
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
diff -urN linux-2.4.14-pre8/arch/alpha/config.in linux/arch/alpha/config.in
--- linux-2.4.14-pre8/arch/alpha/config.in	Thu Oct  4 18:47:08 2001
+++ linux/arch/alpha/config.in	Mon Dec  3 23:26:29 2001
@@ -217,6 +217,10 @@
 	bool 'Symmetric multi-processing support' CONFIG_SMP
 fi
 
+if [ "$CONFIG_SMP" = "y" ]; then
+   define_bool CONFIG_HAVE_DEC_LOCK y
+fi
+
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
    bool 'Discontiguous Memory Support' CONFIG_DISCONTIGMEM
    if [ "$CONFIG_DISCONTIGMEM" = "y" ]; then
diff -urN linux-2.4.14-pre8/arch/alpha/kernel/alpha_ksyms.c linux/arch/alpha/kernel/alpha_ksyms.c
--- linux-2.4.14-pre8/arch/alpha/kernel/alpha_ksyms.c	Fri Oct 12 15:35:53 2001
+++ linux/arch/alpha/kernel/alpha_ksyms.c	Mon Dec  3 23:26:29 2001
@@ -221,6 +221,7 @@
 EXPORT_SYMBOL(__global_sti);
 EXPORT_SYMBOL(__global_save_flags);
 EXPORT_SYMBOL(__global_restore_flags);
+EXPORT_SYMBOL(atomic_dec_and_lock);
 #if DEBUG_SPINLOCK
 EXPORT_SYMBOL(spin_unlock);
 EXPORT_SYMBOL(debug_spin_lock);
diff -urN linux-2.4.14-pre8/arch/alpha/kernel/pci_iommu.c linux/arch/alpha/kernel/pci_iommu.c
--- linux-2.4.14-pre8/arch/alpha/kernel/pci_iommu.c	Fri Oct 12 15:35:53 2001
+++ linux/arch/alpha/kernel/pci_iommu.c	Mon Dec  3 23:26:29 2001
@@ -250,7 +250,7 @@
 	if (dir == PCI_DMA_NONE)
 		BUG();
 	return pci_map_single_1(pdev, cpu_addr, size,
-			        (pdev->dma_mask >> 32) != 0);
+				pdev ? (pdev->dma_mask >> 32) != 0 : 0);
 }
 
 dma_addr_t
@@ -260,7 +260,7 @@
 	if (dir == PCI_DMA_NONE)
 		BUG();
 	return pci_map_single_1(pdev, (char *)page_address(page) + offset,
-			        size, (pdev->dma_mask >> 32) != 0);
+			        size, pdev ? (pdev->dma_mask >> 32) != 0 : 0);
 }
 
 /* Unmap a single streaming mode DMA translation.  The DMA_ADDR and
@@ -304,7 +304,7 @@
 	dma_ofs = (dma_addr - arena->dma_base) >> PAGE_SHIFT;
 	if (dma_ofs * PAGE_SIZE >= arena->size) {
 		printk(KERN_ERR "Bogus pci_unmap_single: dma_addr %lx "
-		       " base %x size %x\n", dma_addr, arena->dma_base,
+		       " base %lx size %x\n", dma_addr, arena->dma_base,
 		       arena->size);
 		return;
 		BUG();
diff -urN linux-2.4.14-pre8/arch/alpha/kernel/traps.c linux/arch/alpha/kernel/traps.c
--- linux-2.4.14-pre8/arch/alpha/kernel/traps.c	Sun Sep 30 12:26:08 2001
+++ linux/arch/alpha/kernel/traps.c	Mon Dec  3 23:26:29 2001
@@ -295,9 +295,13 @@
 			   we get the correct PC.  If not, we set a flag
 			   to correct it every time through.
 			*/
-			if (opDEC_testing && regs.pc == opDEC_test_pc) {
-				opDEC_fix = 4;
-				printk("opDEC fixup enabled.\n");
+			if (opDEC_testing) {
+				if (regs.pc == opDEC_test_pc) {
+					opDEC_fix = 4;
+					regs.pc += 4;
+					printk("opDEC fixup enabled.\n");
+				}
+				return;
 			}
 			regs.pc += opDEC_fix; 
 			
diff -urN linux-2.4.14-pre8/arch/alpha/lib/Makefile linux/arch/alpha/lib/Makefile
--- linux-2.4.14-pre8/arch/alpha/lib/Makefile	Wed Jun 20 11:10:27 2001
+++ linux/arch/alpha/lib/Makefile	Mon Dec  3 23:26:29 2001
@@ -49,6 +49,10 @@
 	fpreg.o \
 	callback_srm.o srm_puts.o srm_printk.o
 
+ifeq ($(CONFIG_SMP),y)
+  OBJS += dec_and_lock.o
+endif
+
 lib.a: $(OBJS)
 	$(AR) rcs lib.a $(OBJS)
 
diff -urN linux-2.4.14-pre8/arch/alpha/lib/dec_and_lock.c linux/arch/alpha/lib/dec_and_lock.c
--- linux-2.4.14-pre8/arch/alpha/lib/dec_and_lock.c	Wed Dec 31 16:00:00 1969
+++ linux/arch/alpha/lib/dec_and_lock.c	Mon Dec  3 23:26:29 2001
@@ -0,0 +1,40 @@
+/*
+ * arch/alpha/lib/dec_and_lock.c
+ *
+ * ll/sc version of atomic_dec_and_lock()
+ * 
+ */
+
+#include <linux/spinlock.h>
+#include <asm/atomic.h>
+
+  asm (".text					\n\
+	.global atomic_dec_and_lock		\n\
+	.ent atomic_dec_and_lock		\n\
+	.align	4				\n\
+atomic_dec_and_lock:				\n\
+	.prologue 0				\n\
+1:	ldl_l	$1, 0($16)			\n\
+	subl	$1, 1, $1			\n\
+	beq	$1, 2f				\n\
+	stl_c	$1, 0($16)			\n\
+	beq	$1, 3f				\n\
+	mb					\n\
+	clr	$0				\n\
+	ret					\n\
+3:	br	1b				\n\
+2:	lda	$27, atomic_dec_and_lock_1	\n\
+	.end atomic_dec_and_lock");
+
+	/* FALLTHRU */
+
+static int __attribute__((unused))
+atomic_dec_and_lock_1(atomic_t *atomic, spinlock_t *lock)
+{
+	/* Slow path */
+	spin_lock(lock);
+	if (atomic_dec_and_test(atomic))
+		return 1;
+	spin_unlock(lock);
+	return 0;
+}
diff -urN linux-2.4.14-pre8/arch/i386/defconfig linux/arch/i386/defconfig
--- linux-2.4.14-pre8/arch/i386/defconfig	Mon Dec  3 23:26:20 2001
+++ linux/arch/i386/defconfig	Mon Dec  3 23:26:29 2001
@@ -614,6 +614,7 @@
 # CONFIG_RAMFS is not set
 CONFIG_ISO9660_FS=y
 # CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_VXFS_FS is not set
 # CONFIG_NTFS_FS is not set
@@ -655,6 +656,8 @@
 # CONFIG_NCPFS_SMALLDOS is not set
 # CONFIG_NCPFS_NLS is not set
 # CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+# CONFIG_ZLIB_FS_INFLATE is not set
 
 #
 # Partition Types
diff -urN linux-2.4.14-pre8/arch/i386/kernel/pci-i386.c linux/arch/i386/kernel/pci-i386.c
--- linux-2.4.14-pre8/arch/i386/kernel/pci-i386.c	Sat May 19 18:07:04 2001
+++ linux/arch/i386/kernel/pci-i386.c	Mon Dec  3 23:26:29 2001
@@ -12,7 +12,7 @@
  *	Hannover, Germany
  *	hm@ix.de
  *
- * Copyright 1997--2000 Martin Mares <mj@suse.cz>
+ * Copyright 1997--2000 Martin Mares <mj@ucw.cz>
  *
  * For more information, please consult the following manuals (look at
  * http://www.pcisig.com/ for how to get them):
diff -urN linux-2.4.14-pre8/arch/i386/kernel/pci-irq.c linux/arch/i386/kernel/pci-irq.c
--- linux-2.4.14-pre8/arch/i386/kernel/pci-irq.c	Mon Oct 15 19:30:33 2001
+++ linux/arch/i386/kernel/pci-irq.c	Mon Dec  3 23:26:29 2001
@@ -1,7 +1,7 @@
 /*
  *	Low-Level PCI Support for PC -- Routing of Interrupts
  *
- *	(c) 1999--2000 Martin Mares <mj@suse.cz>
+ *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/config.h>
diff -urN linux-2.4.14-pre8/arch/i386/kernel/pci-pc.c linux/arch/i386/kernel/pci-pc.c
--- linux-2.4.14-pre8/arch/i386/kernel/pci-pc.c	Tue Oct  9 16:17:38 2001
+++ linux/arch/i386/kernel/pci-pc.c	Mon Dec  3 23:26:29 2001
@@ -1,7 +1,7 @@
 /*
  *	Low-Level PCI Support for PC
  *
- *	(c) 1999--2000 Martin Mares <mj@suse.cz>
+ *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/config.h>
@@ -521,7 +521,7 @@
 		DBG("PCI: BIOS probe returned s=%02x hw=%02x ver=%02x.%02x l=%02x\n",
 			status, hw_mech, major_ver, minor_ver, pcibios_last_bus);
 		if (status || signature != PCI_SIGNATURE) {
-			printk (KERN_ERR "PCI: BIOS BUG #%x[%08x] found, report to <mj@suse.cz>\n",
+			printk (KERN_ERR "PCI: BIOS BUG #%x[%08x] found\n",
 				status, signature);
 			return 0;
 		}
@@ -773,7 +773,7 @@
 		if (sum != 0)
 			continue;
 		if (check->fields.revision != 0) {
-			printk("PCI: unsupported BIOS32 revision %d at 0x%p, report to <mj@suse.cz>\n",
+			printk("PCI: unsupported BIOS32 revision %d at 0x%p\n",
 				check->fields.revision, check);
 			continue;
 		}
diff -urN linux-2.4.14-pre8/arch/i386/kernel/pci-visws.c linux/arch/i386/kernel/pci-visws.c
--- linux-2.4.14-pre8/arch/i386/kernel/pci-visws.c	Thu Jun 22 07:17:16 2000
+++ linux/arch/i386/kernel/pci-visws.c	Mon Dec  3 23:26:29 2001
@@ -1,7 +1,7 @@
 /*
  *	Low-Level PCI Support for SGI Visual Workstation
  *
- *	(c) 1999--2000 Martin Mares <mj@suse.cz>
+ *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/config.h>
diff -urN linux-2.4.14-pre8/arch/sh/kernel/pci-sh7751.c linux/arch/sh/kernel/pci-sh7751.c
--- linux-2.4.14-pre8/arch/sh/kernel/pci-sh7751.c	Sat Sep  8 12:29:09 2001
+++ linux/arch/sh/kernel/pci-sh7751.c	Mon Dec  3 23:26:29 2001
@@ -3,7 +3,7 @@
  *
  *  Dustin McIntire (dustin@sensoria.com)
  *	Derived from arch/i386/kernel/pci-*.c which bore the message:
- *	(c) 1999--2000 Martin Mares <mj@suse.cz>
+ *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
  *	
  *  May be copied or modified under the terms of the GNU General Public
  *  License.  See linux/COPYING for more information.
diff -urN linux-2.4.14-pre8/arch/sparc64/kernel/ioctl32.c linux/arch/sparc64/kernel/ioctl32.c
--- linux-2.4.14-pre8/arch/sparc64/kernel/ioctl32.c	Sun Oct 21 10:36:54 2001
+++ linux/arch/sparc64/kernel/ioctl32.c	Mon Dec  3 23:26:29 2001
@@ -1,4 +1,4 @@
-/* $Id: ioctl32.c,v 1.126 2001/10/18 11:41:02 davem Exp $
+/* $Id: ioctl32.c,v 1.127 2001/11/01 23:54:19 davem Exp $
  * ioctl32.c: Conversion between 32bit and 64bit native ioctls.
  *
  * Copyright (C) 1997-2000  Jakub Jelinek  (jakub@redhat.com)
@@ -592,44 +592,6 @@
 	return err;
 }
 
-static int mii_ioctl(unsigned long fd, unsigned int cmd, unsigned long arg)
-{
-	struct ifreq ifr;
-	mm_segment_t old_fs;
-	int err;
-	u32 data;
-
-	if (copy_from_user(&ifr, (struct ifreq32 *)arg, sizeof(struct ifreq32)))
-		return -EFAULT;
-	ifr.ifr_data = (__kernel_caddr_t) kmalloc(sizeof(struct mii_ioctl_data),
-						  GFP_KERNEL);
-	if (!ifr.ifr_data)
-		return -EAGAIN;
-
-	__get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data));
-	if (copy_from_user(ifr.ifr_data, (char *)A(data),
-			   sizeof(struct mii_ioctl_data))) {
-		err = -EFAULT;
-		goto out;
-	}
-
-	old_fs = get_fs();
-	set_fs(KERNEL_DS);
-	err = sys_ioctl(fd, cmd, (unsigned long)&ifr);
-	set_fs(old_fs);
-
-	if (!err) {
-		if (copy_to_user((char *)A(data),
-				 ifr.ifr_data,
-				 sizeof(struct mii_ioctl_data)))
-			err = -EFAULT;
-	}
-
-out:
-	kfree(ifr.ifr_data);
-	return err;
-}
-
 static inline int dev_ifsioc(unsigned int fd, unsigned int cmd, unsigned long arg)
 {
 	struct ifreq ifr;
@@ -4102,6 +4064,9 @@
 COMPATIBLE_IOCTL(SIOCDRARP)
 COMPATIBLE_IOCTL(SIOCADDDLCI)
 COMPATIBLE_IOCTL(SIOCDELDLCI)
+COMPATIBLE_IOCTL(SIOCGMIIPHY)
+COMPATIBLE_IOCTL(SIOCGMIIREG)
+COMPATIBLE_IOCTL(SIOCSMIIREG)
 /* SG stuff */
 COMPATIBLE_IOCTL(SG_SET_TIMEOUT)
 COMPATIBLE_IOCTL(SG_GET_TIMEOUT)
@@ -4523,9 +4488,6 @@
 HANDLE_IOCTL(SIOCGIFTXQLEN, dev_ifsioc)
 HANDLE_IOCTL(SIOCSIFTXQLEN, dev_ifsioc)
 HANDLE_IOCTL(SIOCETHTOOL, ethtool_ioctl)
-HANDLE_IOCTL(SIOCGMIIPHY, mii_ioctl)
-HANDLE_IOCTL(SIOCGMIIREG, mii_ioctl)
-HANDLE_IOCTL(SIOCSMIIREG, mii_ioctl)
 HANDLE_IOCTL(SIOCADDRT, routing_ioctl)
 HANDLE_IOCTL(SIOCDELRT, routing_ioctl)
 /* Note SIOCRTMSG is no longer, so this is safe and * the user would have seen just an -EINVAL anyways. */
diff -urN linux-2.4.14-pre8/drivers/acorn/scsi/cumana_2.c linux/drivers/acorn/scsi/cumana_2.c
--- linux-2.4.14-pre8/drivers/acorn/scsi/cumana_2.c	Thu Oct 11 09:04:57 2001
+++ linux/drivers/acorn/scsi/cumana_2.c	Mon Dec  3 23:26:29 2001
@@ -195,6 +195,7 @@
 			memcpy(info->sg + 1, SCp->buffer + 1,
 				sizeof(struct scatterlist) * bufs);
 		info->sg[0].address = SCp->ptr;
+		info->sg[0].page    = NULL;
 		info->sg[0].length  = SCp->this_residual;
 
 		if (direction == DMA_OUT)
diff -urN linux-2.4.14-pre8/drivers/acorn/scsi/eesox.c linux/drivers/acorn/scsi/eesox.c
--- linux-2.4.14-pre8/drivers/acorn/scsi/eesox.c	Thu Oct 11 09:04:57 2001
+++ linux/drivers/acorn/scsi/eesox.c	Mon Dec  3 23:26:29 2001
@@ -199,7 +199,8 @@
 			memcpy(info->sg + 1, SCp->buffer + 1,
 				sizeof(struct scatterlist) * bufs);
 		info->sg[0].address = SCp->ptr;
-		info->sg[0].length = SCp->this_residual;
+		info->sg[0].page    = NULL;
+		info->sg[0].length  = SCp->this_residual;
 
 		if (direction == DMA_OUT)
 			pci_dir = PCI_DMA_TODEVICE,
diff -urN linux-2.4.14-pre8/drivers/acorn/scsi/powertec.c linux/drivers/acorn/scsi/powertec.c
--- linux-2.4.14-pre8/drivers/acorn/scsi/powertec.c	Thu Oct 11 09:04:57 2001
+++ linux/drivers/acorn/scsi/powertec.c	Mon Dec  3 23:26:29 2001
@@ -187,7 +187,8 @@
 			memcpy(info->sg + 1, SCp->buffer + 1,
 				sizeof(struct scatterlist) * bufs);
 		info->sg[0].address = SCp->ptr;
-		info->sg[0].length = SCp->this_residual;
+		info->sg[0].page    = NULL;
+		info->sg[0].length  = SCp->this_residual;
 
 		if (direction == DMA_OUT)
 			pci_dir = PCI_DMA_TODEVICE,
diff -urN linux-2.4.14-pre8/drivers/char/serial.c linux/drivers/char/serial.c
--- linux-2.4.14-pre8/drivers/char/serial.c	Mon Sep 17 13:16:30 2001
+++ linux/drivers/char/serial.c	Mon Dec  3 23:26:29 2001
@@ -4457,7 +4457,7 @@
 	else if (serial_pci_guess_board(dev, &tmp) == 0) {
 		printk(KERN_INFO "Redundant entry in serial pci_table.  "
 		       "Please send the output of\n"
-		       "lspci -vv, this message (%d,%d,%d,%d)\n"
+		       "lspci -vv, this message (%04x,%04x,%04x,%04x)\n"
 		       "and the manufacturer and name of "
 		       "serial board or modem board\n"
 		       "to serial-pci-info@lists.sourceforge.net.\n",
diff -urN linux-2.4.14-pre8/drivers/net/arcnet/arc-rimi.c linux/drivers/net/arcnet/arc-rimi.c
--- linux-2.4.14-pre8/drivers/net/arcnet/arc-rimi.c	Tue Feb 13 13:15:05 2001
+++ linux/drivers/net/arcnet/arc-rimi.c	Mon Dec  3 23:26:29 2001
@@ -2,7 +2,7 @@
  * Linux ARCnet driver - "RIM I" (entirely mem-mapped) cards
  * 
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
diff -urN linux-2.4.14-pre8/drivers/net/arcnet/arcnet.c linux/drivers/net/arcnet/arcnet.c
--- linux-2.4.14-pre8/drivers/net/arcnet/arcnet.c	Wed Apr 18 14:40:06 2001
+++ linux/drivers/net/arcnet/arcnet.c	Mon Dec  3 23:26:29 2001
@@ -3,7 +3,7 @@
  * 
  * Written 1997 by David Woodhouse.
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
diff -urN linux-2.4.14-pre8/drivers/net/arcnet/com20020-isa.c linux/drivers/net/arcnet/com20020-isa.c
--- linux-2.4.14-pre8/drivers/net/arcnet/com20020-isa.c	Tue Feb 13 13:15:05 2001
+++ linux/drivers/net/arcnet/com20020-isa.c	Mon Dec  3 23:26:29 2001
@@ -3,7 +3,7 @@
  * 
  * Written 1997 by David Woodhouse.
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
diff -urN linux-2.4.14-pre8/drivers/net/arcnet/com20020-pci.c linux/drivers/net/arcnet/com20020-pci.c
--- linux-2.4.14-pre8/drivers/net/arcnet/com20020-pci.c	Wed Apr 18 14:40:05 2001
+++ linux/drivers/net/arcnet/com20020-pci.c	Mon Dec  3 23:26:29 2001
@@ -3,7 +3,7 @@
  * 
  * Written 1994-1999 by Avery Pennarun,
  *    based on an ISA version by David Woodhouse.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
diff -urN linux-2.4.14-pre8/drivers/net/arcnet/com20020.c linux/drivers/net/arcnet/com20020.c
--- linux-2.4.14-pre8/drivers/net/arcnet/com20020.c	Tue Feb 13 13:15:05 2001
+++ linux/drivers/net/arcnet/com20020.c	Mon Dec  3 23:26:29 2001
@@ -3,7 +3,7 @@
  * 
  * Written 1997 by David Woodhouse.
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999 by Martin Mares <mj@suse.cz>.
+ * Written 1999 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
diff -urN linux-2.4.14-pre8/drivers/net/arcnet/com90io.c linux/drivers/net/arcnet/com90io.c
--- linux-2.4.14-pre8/drivers/net/arcnet/com90io.c	Wed Apr 18 14:40:05 2001
+++ linux/drivers/net/arcnet/com90io.c	Mon Dec  3 23:26:29 2001
@@ -3,7 +3,7 @@
  * 
  * Written 1997 by David Woodhouse.
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
diff -urN linux-2.4.14-pre8/drivers/net/arcnet/com90xx.c linux/drivers/net/arcnet/com90xx.c
--- linux-2.4.14-pre8/drivers/net/arcnet/com90xx.c	Wed Apr 18 14:40:05 2001
+++ linux/drivers/net/arcnet/com90xx.c	Mon Dec  3 23:26:29 2001
@@ -2,7 +2,7 @@
  * Linux ARCnet driver - COM90xx chipset (memory-mapped buffers)
  * 
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999 by Martin Mares <mj@suse.cz>.
+ * Written 1999 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
diff -urN linux-2.4.14-pre8/drivers/pci/compat.c linux/drivers/pci/compat.c
--- linux-2.4.14-pre8/drivers/pci/compat.c	Mon Jan 24 11:04:36 2000
+++ linux/drivers/pci/compat.c	Mon Dec  3 23:26:30 2001
@@ -3,7 +3,7 @@
  *
  *	PCI Bus Services -- Function For Backward Compatibility
  *
- *	Copyright 1998--2000 Martin Mares <mj@suse.cz>
+ *	Copyright 1998--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/types.h>
diff -urN linux-2.4.14-pre8/drivers/pci/gen-devlist.c linux/drivers/pci/gen-devlist.c
--- linux-2.4.14-pre8/drivers/pci/gen-devlist.c	Thu Oct 11 09:18:31 2001
+++ linux/drivers/pci/gen-devlist.c	Mon Dec  3 23:26:30 2001
@@ -1,7 +1,7 @@
 /*
  *	Generate devlist.h and classlist.h from the PCI ID file.
  *
- *	(c) 1999--2000 Martin Mares <mj@suse.cz>
+ *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <stdio.h>
diff -urN linux-2.4.14-pre8/drivers/pci/pci.c linux/drivers/pci/pci.c
--- linux-2.4.14-pre8/drivers/pci/pci.c	Fri Oct 12 15:35:53 2001
+++ linux/drivers/pci/pci.c	Mon Dec  3 23:26:30 2001
@@ -6,7 +6,7 @@
  *	Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter,
  *	David Mosberger-Tang
  *
- *	Copyright 1997 -- 2000 Martin Mares <mj@suse.cz>
+ *	Copyright 1997 -- 2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/config.h>
diff -urN linux-2.4.14-pre8/drivers/pci/pci.ids linux/drivers/pci/pci.ids
--- linux-2.4.14-pre8/drivers/pci/pci.ids	Mon Dec  3 23:26:20 2001
+++ linux/drivers/pci/pci.ids	Mon Dec  3 23:26:30 2001
@@ -1,10 +1,13 @@
 #
 #	List of PCI ID's
 #
-#	Maintained by Martin Mares <pci-ids@ucw.cz>
-#	If you have any new entries, send them to the maintainer.
+#	Maintained by Martin Mares <mj@ucw.cz> and other volunteers from the
+#	Linux PCI ID's Project at http://pciids.sf.net/. New data are always
+#	welcome (if they are accurate), we're eagerly expecting new entries,
+#	so if you have anything to contribute, please visit the home page or
+#	send a diff -u against the most recent pci.ids to pci-ids@ucw.cz.
 #
-#	$Id: pci.ids,v 1.62 2000/06/28 10:56:36 mj Exp $
+#	$Id: pci.ids,v 1.24 2001/10/28 21:55:26 mares Exp $
 #
 
 # Vendors, devices and subsystems. Please keep sorted.
@@ -45,6 +48,7 @@
 		8086 002a  PCI Hotplug Controller A
 		8086 002b  PCI Hotplug Controller B
 	a0f8  USB Open Host Controller
+	a0fc  Fibre Channel Host Controller
 	ae10  Smart-2/P RAID Controller
 		0e11 4030  Smart-2/P Array Controller
 		0e11 4031  Smart-2SL Array Controller
@@ -70,6 +74,7 @@
 	b02f  NC1120 Ethernet NIC
 	b030  Netelligent WS 5100
 	b04a  10/100 TX PCI Intel WOL UTP Controller
+	b060  Smart Array 5300 Controller
 	b0c6  NC3161 Fast Ethernet NIC
 	b0c7  NC3160 Fast Ethernet NIC
 	b0d7  NC3121 Fast Ethernet NIC
@@ -84,6 +89,7 @@
 	b144  NC3123 Fast Ethernet NIC
 	b163  NC3134 Fast Ethernet NIC
 	b164  NC3135 Fast Ethernet Upgrade Module
+	b178  Smart Array 5i/532
 	b1a4  NC7131 Gigabit Server Adapter
 	f130  NetFlex-3/P ThunderLAN 1.0
 	f150  NetFlex-3/P ThunderLAN 2.3
@@ -138,7 +144,7 @@
 	4554  210888ET [Mach64 ET]
 	4654  Mach64 VT
 	4742  3D Rage Pro AGP 1X/2X
-		1028 4082  Optiplex GX1 Onboard Display Adapter	
+		1028 4082  Optiplex GX1 Onboard Display Adapter
 		8086 4152  Rage 3D Pro AGP
 	4744  3D Rage Pro AGP 1X
 	4747  3D Rage Pro
@@ -179,6 +185,9 @@
 	4c52  Rage Mobility P/M
 	4c53  Rage Mobility L
 	4c54  264LT [Mach64 LT]
+	4c57  Radeon Mobility M6 LW
+	4c59  Radeon Mobility M6 LY
+	4c5a  Radeon Mobility M6 LZ
 	4d46  Rage Mobility M4 AGP
 	4d4c  Rage Mobility M4 AGP
 	5041  Rage 128 PA
@@ -207,8 +216,15 @@
 	5056  Rage 128 PV
 	5057  Rage 128 PW
 	5058  Rage 128 PX
+	5144  Radeon QD
+	5145  Radeon QE
+	5146  Radeon QF
+	5147  Radeon QG
+	5159  Radeon VE QY
+	515a  Radeon VE QZ
 	5245  Rage 128 RE
 	5246  Rage 128 RF
+	5247  Rage 128 RG
 	524b  Rage 128 RK
 	524c  Rage 128 RL
 	5345  Rage 128 SE
@@ -218,9 +234,12 @@
 	534b  Rage 128 SK
 	534c  Rage 128 SL
 	534d  Rage 128 SM
-	534e  Rage 128 4x
+	534e  Rage 128 SN
 	5354  Mach 64 VT
 		1002 5654  Mach 64 reference
+	5446  Rage 128 Pro TF
+	544c  Rage 128 Pro TL
+	5452  Rage 128 Pro TR
 	5654  264VT [Mach64 VT]
 		1002 5654  Mach64VT Reference
 	5655  264VT3 [Mach64 VT3]
@@ -274,8 +293,8 @@
 	000f  OHCI Compliant FireWire Controller
 	0011  National PCI System I/O
 	0012  USB Controller
-	0020  DP83815
-	0022  DP83820
+	0020  DP83815 (MacPhyter) Ethernet Controller
+	0022  DP83820 10/100/1000 Ethernet Controller
 	d001  87410 IDE
 100c  Tseng Labs Inc
 	3202  ET4000/W32p rev A
@@ -349,6 +368,8 @@
 	0026  DECchip 21154
 	0045  DECchip 21553
 	0046  DECchip 21554
+		103c 10c2  Hewlett-Packard NetRAID-4M
+		9005 0365  Adaptec 5400S
 		9005 1364  Dell PowerEdge RAID Controller 2
 		9005 1365  Dell PowerEdge RAID Controller 2
 	1065  StrongARM DC21285
@@ -432,21 +453,21 @@
 	007c  ATM Controller (14107c00)
 	007d  3780IDSP [MWave]
 	0090  GXT 3000P
-		1014 008E  GXT-3000P
+		1014 008e  GXT-3000P
 	0095  20H2999 PCI Docking Bridge
 	0096  Chukar chipset SCSI controller
-		1014 0099  iSeries 2748 DASD IOA
-		1014 0098  iSeries 2763 DASD IOA
 		1014 0097  iSeries 2778 DASD IOA
+		1014 0098  iSeries 2763 DASD IOA
+		1014 0099  iSeries 2748 DASD IOA
 	00a5  ATM Controller (1410a500)
 	00a6  ATM 155MBPS MM Controller (1410a600)
 	00b7  256-bit Graphics Rasterizer [Fire GL1]
 		1902 00b8  Fire GL1
 	00be  ATM 622MBPS Controller (1410be00)
 	0142  Yotta Video Compositor Input
-		1014 0143 Yotta Input Controller (ytin)
+		1014 0143  Yotta Input Controller (ytin)
 	0144  Yotta Video Compositor Output
-		1014 0145 Yotta Output Controller (ytout)
+		1014 0145  Yotta Output Controller (ytout)
 	0156  405GP PLB to PCI Bridge
 	01bd  Netfinity ServeRAID controller
 	01be  ServeRAID-4M
@@ -476,8 +497,8 @@
 	c24a  90C
 101e  American Megatrends Inc.
 	1960  MegaRAID
-		1028 0471 PowerEdge RAID Controller 3/QC
-		1028 0493 PowerEdge RAID Controller 3/DC
+		1028 0471  PowerEdge RAID Controller 3/QC
+		1028 0493  PowerEdge RAID Controller 3/DC
 	9010  MegaRAID
 	9030  EIDE Controller
 	9031  EIDE Controller
@@ -505,8 +526,8 @@
 	2040  79c974
 	7006  AMD-751 [Irongate] System Controller
 	7007  AMD-751 [Irongate] AGP Bridge
-	700E  AMD-760 [Irongate] System Controller
-	700F  AMD-760 [Irongate] AGP Bridge
+	700e  AMD-760 [Irongate] System Controller
+	700f  AMD-760 [Irongate] AGP Bridge
 	7400  AMD-755 [Cobra] ISA
 	7401  AMD-755 [Cobra] IDE
 	7403  AMD-755 [Cobra] ACPI
@@ -565,6 +586,8 @@
 	9850  3DImage 9850
 	9880  Blade 3D PCI/AGP
 		1023 9880  Blade 3D
+	9910  CyberBlade/XP
+	9930  CyberBlade/XPm
 1024  Zenith Data Systems
 1025  Acer Incorporated [ALI]
 	1435  M1435
@@ -635,7 +658,7 @@
 	0000  HYDRA
 	0010  ASPEN
 102b  Matrox Graphics, Inc.
-#DJ: I've a suspicion that 0010 is a duplicate of 0d10.
+# DJ: I've a suspicion that 0010 is a duplicate of 0d10.
 	0010  MGA-I [Impression?]
 	0518  MGA-II [Athena]
 	0519  MGA 2064W [Millennium]
@@ -684,7 +707,22 @@
 		102b 0328  Millennium G400 16Mb SDRAM
 		102b 0338  Millennium G400 16Mb SDRAM
 		102b 0378  Millennium G400 32Mb SDRAM
+		102b 0541  Millennium G450 Dual Head
+		102b 0542  Millennium G450 Dual Head LX
 		102b 0641  Millennium G450 32Mb SDRAM
+		102b 0642  Millennium G450 32Mb SDRAM Dual Head LX
+		102b 07c0  Millennium G450 Dual Head LE
+		102b 07c1  Millennium G450 SDR Dual Head
+		102b 0d41  Millennium G450 Dual Head PCI
+		102b 0d42  Millennium G450 Dual Head LX PCI
+		102b 0e00  Marvel G450 eTV
+		102b 0e01  Marvel G450 eTV
+		102b 0e02  Marvel G450 eTV
+		102b 0e03  Marvel G450 eTV
+		102b 0f80  Millennium G450 Low Profile
+		102b 0f81  Millennium G450 Low Profile
+		102b 0f82  Millennium G450 Low Profile DVI
+		102b 0f83  Millennium G450 Low Profile DVI
 		102b 19d8  Millennium G400 16Mb SGRAM
 		102b 19f8  Millennium G400 32Mb SGRAM
 		102b 2159  Millennium G400 Dual Head 16Mb
@@ -693,6 +731,7 @@
 		102b 2f58  Millennium G400
 		102b 2f78  Millennium G400
 		102b 3693  Marvel G400 AGP
+		1705 0001  Millennium G450 32MB SGRAM
 		b16f 0e11  Matrox MGA-G400 AGP
 	0d10  MGA Ultima/Impression
 	1000  MGA G100 [Productiva]
@@ -822,8 +861,8 @@
 		1039 6326  SiS6326 GUI Accelerator
 		1092 0a50  SpeedStar A50
 		1092 0a70  SpeedStar A70
-		1092 4910  SpeedStar A70 
-		1092 4920  SpeedStar A70 
+		1092 4910  SpeedStar A70
+		1092 4920  SpeedStar A70
 		1569 6326  SiS6326 GUI Accelerator
 	7001  7001
 	7007  OHCI Compliant FireWire Controller
@@ -949,7 +988,7 @@
 		3d3d 0100  Reference Permedia 2 3D
 	8000  PCILynx/PCILynx2 IEEE 1394 Link Layer Controller
 		e4bf 1010  CF1-1-SNARE
-		e4bf 1020  CF1-2-SNARE 
+		e4bf 1020  CF1-2-SNARE
 	8009  OHCI Compliant FireWire Controller
 	8019  TSB12LV23 OHCI Compliant IEEE-1394 Controller
 		11bd 000a  Studio DV500-1394
@@ -1016,8 +1055,7 @@
 	9462  USB Universal Host Controller [OHCI]
 	9463  Power Management Controller [Bridge]
 1056  ICL
-# Motorola made a mistake and used 1507 instead of 1057 in some chips.
-# Please look at the 1507 entry as well when updating this.
+# Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this.
 1057  Motorola
 	0001  MPC105 [Eagle]
 	0002  MPC106 [Grackle]
@@ -1187,8 +1225,8 @@
 	1022  ISP1022
 	1080  QLA1080
 	1216  QLA12160
-		101e 8471 QLA12160 on AMI MegaRAID
-		101e 8493 QLA12160 on AMI MegaRAID
+		101e 8471  QLA12160 on AMI MegaRAID
+		101e 8493  QLA12160 on AMI MegaRAID
 	1240  QLA1240
 	1280  QLA1280
 	2020  ISP2020A
@@ -1284,6 +1322,7 @@
 1092  Diamond Multimedia Systems
 	00a0  Speedstar Pro SE
 	00a8  Speedstar 64
+	0550  Viper V550
 	08d4  Supra 2260 Modem
 	1092  Viper V330
 	6120  Maximum DVD
@@ -1387,7 +1426,7 @@
 		14f1 1522  Bt879a Video Capture PAL I
 		14f1 1622  Bt879a Video Capture PAL BG
 		14f1 1722  Bt879a Video Capture NTSC
-		1851 1850  FlyVideo'98 - Video	
+		1851 1850  FlyVideo'98 - Video
 		1851 1851  FlyVideo II
 		1852 1852  FlyVideo'98 - Video (with FM Tuner)
 	0370  Bt880 Video Capture
@@ -1560,8 +1599,6 @@
 		10b7 3590  TokenLink Velocity XL Adapter
 	4500  3c450 Cyclone/unknown
 	5055  3c555 Laptop Hurricane
-	6055  3c556 Laptop Hurricane
-	6056  3c556B Laptop Hurricane
 	5057  3c575 [Megahertz] 10/100 LAN CardBus
 		10b7 5a57  3C575 Megahertz 10/100 LAN Cardbus PC Card
 	5157  3c575 [Megahertz] 10/100 LAN CardBus
@@ -1575,6 +1612,8 @@
 	5970  3c597 EISA Fast Demon/Vortex
 	5b57  3c595 [Megahertz] 10/100 LAN CardBus
 		10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card
+	6055  3c556 Hurricane CardBus
+	6056  3c556B Hurricane CardBus
 	6560  3CCFE656 Cyclone CardBus
 	6562  3CCFEM656 [id 6562] Cyclone CardBus
 	6564  3CCFEM656 [id 6564] Cyclone CardBus
@@ -1685,6 +1724,7 @@
 	5237  M5237 USB
 	5243  M5243
 	5247  M5247
+	5451  M5451 PCI South Bridge Audio
 	7101  M7101 PMU
 		10b9 7101  ALI M7101 Power Management Controller
 10ba  Mitsubishi Electric Corp.
@@ -1731,6 +1771,7 @@
 	0006  NM2360 [MagicMedia 256ZX]
 	0016  NM2380 [MagicMedia 256XL+]
 		10c8 0016  MagicMedia 256XL+
+	0025  [MagicMedia 256AV+]
 	0083  [MagicGraph 128ZV Plus]
 	8005  [MagicMedia 256AV Audio]
 		0e11 b0d1  MagicMedia 256AV Audio Device on Discovery
@@ -1755,6 +1796,7 @@
 	1300  ABP940-U / ABP960-U
 		10cd 1310  ASC1300 SCSI Adapter
 	2300  ABP940-UW
+	2500  ABP940-U2W
 10ce  Radius
 10cf  Citicorp TTI
 	2001  mb86605
@@ -1792,15 +1834,15 @@
 		1048 0c18  Erazor II SGRAM
 		1092 0550  Viper V550
 		1092 0552  Viper V550
-		1092 4804  Viper V550 
-		1092 4808  Viper V550 
+		1092 4804  Viper V550
+		1092 4808  Viper V550
 		1092 4810  Viper V550
 		1092 4812  Viper V550
 		1092 4815  Viper V550
 		1092 4820  Viper V550 with TV out
 		1092 4822  Viper V550
-		1092 4904  Viper V550 
-		1092 4914  Viper V550 
+		1092 4904  Viper V550
+		1092 4914  Viper V550
 		1092 8225  Viper V550
 		10de 0020  Riva TNT
 		1102 1015  Graphics Blaster CT6710
@@ -1864,11 +1906,12 @@
 	0111  NV11 (GeForce2 MX DDR)
 	0112  GeForce2 Go
 	0113  NV11 (GeForce2 MXR)
-	0150  NV15 (Geforce2 Pro)
+	0150  NV15 (GeForce2 Pro)
 		107d 2840  WinFast GeForce2 GTS with TV output
-	0151  NV15 DDR (Geforce2 GTS)
-	0152  NV15 Bladerunner (Geforce2 Ultra)
+	0151  NV15 DDR (GeForce2 GTS)
+	0152  NV15 Bladerunner (GeForce2 Ultra)
 	0153  NV15 GL (Quadro2 Pro)
+	0200  NV20 (GeForce3)
 	0203  Quadro DCC
 10df  Emulex Corporation
 	10df  Light Pulse Fibre Channel Adapter
@@ -1894,7 +1937,7 @@
 10e5  Micro Industries Corporation
 10e6  Gainbery Computer Products Inc.
 10e7  Vadem
-10e8  Applied Micro Circuits Corporation
+10e8  Applied Micro Circuits Corp.
 	2011  Q-Motion Video Capture/Edit board
 	4750  S5930 [Matchmaker]
 	5920  S5920
@@ -1908,7 +1951,7 @@
 	80d9  PCI-9118
 	80da  PCI-9812
 	811a  PCI-IEEE1355-DS-DE Interface
-	8170  S5933 "Matchmaker" [PCI Chipset Development Tool]
+	8170  S5933 [Matchmaker] (Chipset Development Tool)
 10e9  Alps Electric Co., Ltd.
 10ea  Intergraphics Systems
 	1680  IGA-1680
@@ -1990,7 +2033,7 @@
 	0002  SB Live! EMU10k1
 		1102 0020  CT4850 SBLive! Value
 		1102 0021  CT4620 SBLive!
-		1102 002f  SBLive! mainboard implementation 
+		1102 002f  SBLive! mainboard implementation
 		1102 4001  E-mu APS
 		1102 8022  CT4780 SBLive! Value
 		1102 8023  CT4790 SoundBlaster PCI512
@@ -2003,6 +2046,7 @@
 		1102 8051  CT4850 SBLive! Value
 	7002  SB Live!
 		1102 0020  Gameport Joystick
+	8938  ES1371
 1103  Triones Technologies, Inc.
 	0003  HPT343
 	0004  HPT366 / HPT370
@@ -2067,16 +2111,16 @@
 	8231  VT8231 [PCI-to-ISA Bridge]
 	8235  VT8235 Power Management
 	8305  VT8363/8365 [KT133/KM133 AGP]
-	8391  VT8371 [KX133 AGP] 
+	8391  VT8371 [KX133 AGP]
 	8501  VT8501 [Apollo MVP4 AGP]
 	8596  VT82C596 [Apollo PRO AGP]
 	8597  VT82C597 [Apollo VP3 AGP]
 	8598  VT82C598/694x [Apollo MVP3/Pro133x AGP]
 	8601  VT8601 [Apollo ProMedia AGP]
 	8605  VT8605 [PM133 AGP]
+	8691  VT82C691 [Apollo Pro]
 	b091  VT8633 [Apollo Pro266 AGP]
 	b099  VT8367 [KT266 AGP]
-	8691  VT82C691 [Apollo Pro]
 1107  Stratus Computers
 	0576  VIA VT82C570MV [Apollo] (Wrong vendor ID!)
 1108  Proteon, Inc.
@@ -2106,7 +2150,7 @@
 	6037  Firepower Powerized SMP I/O ASIC
 	6073  Firepower Powerized SMP I/O ASIC
 1111  Santa Cruz Operation
-# DJ- Some people say that 0x1112 is Rockwell International ?
+# DJ: Some people say that 0x1112 is Rockwell International
 1112  RNS - Div. of Meret Communications Inc
 	2200  FDDI Adapter
 	2300  Fast Ethernet Adapter
@@ -2116,6 +2160,7 @@
 	1211  SMC2-1211TX
 		103c 1207  EN-1207D Fast Ethernet Adapter
 		1113 1211  EN-1207D Fast Ethernet Adapter
+	1216  EN-1216 Ethernet Adapter
 	1217  EN-1217 Ethernet Adapter
 	5105  10Mbps Network card
 	9211  EN-1207D Fast Ethernet Adapter
@@ -2165,10 +2210,22 @@
 	0119  GDT 6128RD/6528RD/6628RD
 	011a  GDT 6538RD/6638RD
 	011b  GDT 6558RD/6658RD
+	0120  GDT 6117RP2/6517RP2
+	0121  GDT 6127RP2/6527RP2
+	0122  GDT 6537RP2
+	0123  GDT 6557RP2
+	0124  GDT 6111RP2/6511RP2
+	0125  GDT 6121RP2/6521RP2
+	0136  GDT 6113RS/6513RS
+	0137  GDT 6123RS/6523RS
 	0138  GDT 6118RS/6518RS/6618RS
 	0139  GDT 6128RS/6528RS/6628RS
 	013a  GDT 6538RS/6638RS
 	013b  GDT 6558RS/6658RS
+	013c  GDT 6533RS/6633RS
+	013d  GDT 6543RS/6643RS
+	013e  GDT 6553RS/6653RS
+	013f  GDT 6563RS/6663RS
 	0166  GDT 7113RN/7513RN/7613RN
 	0167  GDT 7123RN/7523RN/7623RN
 	0168  GDT 7118RN/7518RN/7518RN
@@ -2179,10 +2236,19 @@
 	016d  GDT 7543RN/7643RN
 	016e  GDT 7553RN/7653RN
 	016f  GDT 7563RN/7663RN
+	01d6  GDT 4x13RZ
+	01d7  GDT 4x23RZ
+	01f6  GDT 8x13RZ
+	01f7  GDT 8x23RZ
+	01fc  GDT 8x33RZ
+	01fd  GDT 8x43RZ
+	01fe  GDT 8x53RZ
+	01ff  GDT 8x63RZ
 	0210  GDT 6519RD/6619RD
 	0211  GDT 6529RD/6629RD
 	0260  GDT 7519RN/7619RN
 	0261  GDT 7529RN/7629RN
+	0300  GDT Raid Controller
 111a  Efficient Networks, Inc
 	0000  155P-MF1 (FPGA)
 	0002  155P-MF1 (ASIC)
@@ -2190,13 +2256,13 @@
 		111a 0000  ENI-25p Miniport ATM Adapter
 	0005  SpeedStream (LANAI)
 		111a 0001  ENI-3010 ATM
-		111a 0101  ENI-3010 ATM
 		111a 0009  ENI-3060 ADSL (VPI=0)
+		111a 0101  ENI-3010 ATM
 		111a 0109  ENI-3060CO ADSL (VPI=0)
 		111a 0809  ENI-3060 ADSL (VPI=0 or 8)
 		111a 0909  ENI-3060CO ADSL (VPI=0 or 8)
 		111a 0a09  ENI-3060 ADSL (VPI=<0..15>)
-	0007  SpeedStream ADSL 
+	0007  SpeedStream ADSL
 		111a 1001  ENI-3061 ADSL [ASIC]
 111b  Teledyne Electronic Systems
 111c  Tricord Systems Inc.
@@ -2274,7 +2340,7 @@
 113c  Cyclone Microsystems, Inc.
 	0000  PCI-9060 i960 Bridge
 	0001  PCI-SDK [PCI i960 Evaluation Platform]
-	0911  PCI-911 [PCI-based i960Jx Intelligent I/O Controller]
+	0911  PCI-911 [i960Jx-based Intelligent I/O Controller]
 	0912  PCI-912 [i960CF-based Intelligent I/O Controller]
 	0913  PCI-913
 	0914  PCI-914 [I/O Controller w/ secondary PCI bus]
@@ -2465,9 +2531,8 @@
 	060f  ToPIC97
 	0617  ToPIC95 PCI to Cardbus Bridge with ZV Support
 	0618  CPU to PCI and PCI to ISA bridge
+# Claimed to be Lucent DSP1645 [Mars], but that's apparently incorrect. Does anyone know the correct ID?
 	0701  FIR Port
-# This is apparently incorrect. Does anyone know the correct ID?
-#	0701  Lucent DSP1645 [Mars]
 	0d01  FIR Port Type-DO
 		1179 0001  FIR Port Type-DO
 117a  A-Trend Technology
@@ -2489,6 +2554,9 @@
 1185  Dataworld International Ltd
 1186  D-Link System Inc
 	0100  DC21041
+	1002  Sundance Ethernet
+	1300  RTL8139 Ethernet
+	4000  DL2K Ethernet
 1187  Advanced Technology Laboratories, Inc.
 1188  Shima Seiki Manufacturing Ltd.
 1189  Matsushita Electronics Co Ltd
@@ -2547,8 +2615,8 @@
 119c  Information Technology Inst.
 119d  Bug, Inc. Sapporo Japan
 119e  Fujitsu Microelectronics Ltd.
-	0001 FireStream 155
-	0003 FireStream 50
+	0001  FireStream 155
+	0003  FireStream 50
 119f  Bull HN Information Systems
 11a0  Convex Computer Corporation
 11a1  Hamamatsu Photonics K.K.
@@ -2604,8 +2672,8 @@
 11c1  Lucent Microelectronics
 	0440  56k WinModem
 		0001 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
-		1033 8015  LT WinModem 56k Data+Fax+Voice+Dsvd 
-		1033 804f  LT WinModem 56k Data+Fax+Voice+Dsvd 
+		1033 8015  LT WinModem 56k Data+Fax+Voice+Dsvd
+		1033 804f  LT WinModem 56k Data+Fax+Voice+Dsvd
 		10cf 102c  LB LT Modem V.90 56k
 		10cf 104a  BIBLO LT Modem 56k
 		10cf 105f  LB2 LT Modem V.90 56k
@@ -2615,8 +2683,8 @@
 		13e0 0040  LT WinModem 56k Data+Fax+Voice+Dsvd
 		13e0 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
 		13e0 0441  LT WinModem 56k Data+Fax+Voice+Dsvd
-		13e0 f100  LT WinModem 56k Data+Fax+Voice+Dsvd 
-		13e0 f101  LT WinModem 56k Data+Fax+Voice+Dsvd 
+		13e0 f100  LT WinModem 56k Data+Fax+Voice+Dsvd
+		13e0 f101  LT WinModem 56k Data+Fax+Voice+Dsvd
 		144d 2101  LT56PV Modem
 		149f 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
 	0441  56k WinModem
@@ -2624,15 +2692,15 @@
 		1092 0440  Supra 56i
 		1179 0001  Internal V.90 Modem
 		11c1 0440  LT WinModem 56k Data+Fax
-		11c1 0441  LT WinModem 56k Data+Fax 
+		11c1 0441  LT WinModem 56k Data+Fax
 		122d 4100  MDP7800-U Modem
-		13e0 0040  LT WinModem 56k Data+Fax 
-		13e0 0100  LT WinModem 56k Data+Fax 
-		13e0 0410  LT WinModem 56k Data+Fax 
+		13e0 0040  LT WinModem 56k Data+Fax
+		13e0 0100  LT WinModem 56k Data+Fax
+		13e0 0410  LT WinModem 56k Data+Fax
 		13e0 0420  TelePath Internet 56k WinModem
-		13e0 0443  LT WinModem 56k Data+Fax 
+		13e0 0443  LT WinModem 56k Data+Fax
 		1416 9804  CommWave 56k Modem
-		141d 0440  LT WinModem 56k Data+Fax 
+		141d 0440  LT WinModem 56k Data+Fax
 		144f 0441  Lucent 56k V.90 DF Modem
 		1468 0441  Presario 56k V.90 DF Modem
 	0442  56k WinModem
@@ -2974,12 +3042,16 @@
 	2120  VideoPlex CC
 	2130  VideoQuest
 1256  Perceptive Solutions, Inc.
+	4201  PCI-2220I
+	4401  PCI-2240I
+	5201  PCI-2000
 1257  Vertex Networks, Inc.
 1258  Gilbarco, Inc.
 1259  Allied Telesyn International
 	2560  AT-2560 Fast Ethernet Adapter (i82557B)
 125a  ABB Power Systems
 125b  Asix Electronics Corporation
+	1400  ALFA GFC2204
 125c  Aurora Technologies, Inc.
 125d  ESS Technology
 	0000  ES336H Fax Modem (Early Model)
@@ -3226,7 +3298,10 @@
 1280  Photoscript Group Ltd.
 1281  Yokogawa Electric Corporation
 1282  Davicom Semiconductor, Inc.
+	9009  Ethernet 100/10 MBit
+	9100  Ethernet 100/10 MBit
 	9102  Ethernet 100/10 MBit
+	9132  Ethernet 100/10 MBit
 1283  Integrated Technology Express, Inc.
 	673a  IT8330G
 	8330  IT8330G
@@ -3331,6 +3406,8 @@
 12c1  GMM Research Corp
 12c2  Mentec Limited
 12c3  Holtek Microelectronics Inc
+	0058  PCI NE2K Ethernet
+	5598  PCI NE2K Ethernet
 12c4  Connect Tech Inc
 12c5  Picture Elements Incorporated
 	0081  PCIVST [Grayscale Thresholding Engine]
@@ -3510,7 +3587,9 @@
 1313  Yaskawa Electric Co.
 1316  Teradyne Inc
 1317  Linksys
+	0981  Fast Ethernet 10/100
 	0985  Network Everywhere Fast Ethernet 10/100 model NC100
+	1985  Fast Ethernet 10/100
 1318  Packet Engines Inc.
 	0911  PCI Ethernet Adapter
 1319  Fortemedia, Inc
@@ -3671,6 +3750,7 @@
 1385  Netgear
 	620a  GA620
 	622a  GA622
+	630a  GA630
 	f311  FA311
 1386  Video Domain Technologies
 1387  Systran Corp
@@ -3687,6 +3767,11 @@
 1391  Development Concepts Inc
 1392  Medialight Inc
 1393  Moxa Technologies Co Ltd
+	1040  Smartio C104H/PCI
+	1680  Smartio C168H/PCI
+	2040  Intellio CP-204J
+	2180  Intellio C218 Turbo PCI
+	3200  Intellio C320 Turbo PCI
 1394  Level One Communications
 1395  Ambicom Inc
 1396  Cipher Systems Inc
@@ -3738,6 +3823,7 @@
 	0010  SyncLink WAN Adapter
 13c1  3ware Inc
 	1000  3ware ATA-RAID
+	1001  3ware 7000-series ATA-RAID
 13c2  Technotrend Systemtechnik GmbH
 13c3  Janz Computer AG
 13c4  Phase Metrics
@@ -3769,7 +3855,7 @@
 13de  ABB Robotics Products AB
 13df  E-Tech Inc
 	0001  PCI56RVP Modem
-		13df 0001  PCI56RVP Modem 
+		13df 0001  PCI56RVP Modem
 13e0  GVC Corporation
 13e1  Silicom Multimedia Systems Inc
 13e2  Dynamics Research Corporation
@@ -3786,7 +3872,8 @@
 13ed  Raytheion E-Systems
 13ee  Hayes Microcomputer Products Inc
 13ef  Coppercom Inc
-13f0  Sundance technology Inc
+13f0  Sundance Technology Inc
+	0201  Sundance Ethernet
 13f1  Oce' - Technologies B.V.
 13f2  Ford Microelectronics Inc
 13f3  Mcdata Corporation
@@ -3810,6 +3897,7 @@
 13fe  Advantech Co. Ltd
 13ff  Silicon Spice Inc
 1400  Artx Inc
+	1401  9432 TX
 1401  CR-Systems A/S
 1402  Meilhaus Electronic GmbH
 1403  Ascor Inc
@@ -3817,6 +3905,14 @@
 1405  Excalibur Systems Inc
 1406  Oce' Printing Systems GmbH
 1407  Lava Computer mfg Inc
+	0100  Lava Dual Serial
+	0101  Lava Quatro A
+	0102  Lava Quatro B
+	0200  Lava Port Plus
+	0201  Lava Quad A
+	0202  Lava Quad B
+	0500  Lava Single Serial
+	0600  Lava Port 650
 	8000  Lava Parallel
 	8002  Lava Dual Parallel port A
 	8003  Lava Dual Parallel port B
@@ -4077,8 +4173,8 @@
 		14e4 0004  NetXtreme 1000BaseTX
 		14e4 1644  NetXtreme BCM5700 1000BaseTX
 	1645  NetXtreme BCM5701 Gigabit Ethernet
-		0e11 007d  NC6770 1000BaseSX
 		0e11 007c  NC7770 1000BaseTX
+		0e11 007d  NC6770 1000BaseSX
 		0e11 0085  NC7780 1000BaseTX
 		10b7 1004  3C996-SX 1000BaseSX
 		10b7 1006  3C996B-T 1000BaseTX
@@ -4090,6 +4186,7 @@
 		14e4 0007  NetXtreme BCM5701 1000BaseSX
 		14e4 0008  NetXtreme BCM5701 1000BaseTX
 		14e4 8008  NetXtreme BCM5701 1000BaseTX
+	1647  NetXtreme BCM5701 Gigabit Ethernet
 	5820  BCM5820 Crypto Accelerator
 14e5  Pixelfusion Ltd
 14e6  SHINING Technology Inc
@@ -4105,29 +4202,24 @@
 14f0  CANON RESEACH CENTRE FRANCE
 14f1  Conexant
 	1033  HCF 56k Data/Fax Modem
-		1033 8077  NEC
-		122d 4027  Dell Zeus - MDP3880-W(B) Data Fax Modem # Aztech
-		122d 4030  Dell Mercury - MDP3880-U(B) Data Fax Modem # Aztech
-		122d 4034  Dell Thor - MDP3880-W(U) Data Fax Modem # Aztech
+		122d 4027  Dell Zeus - MDP3880-W(B) Data Fax Modem
+		122d 4030  Dell Mercury - MDP3880-U(B) Data Fax Modem
+		122d 4034  Dell Thor - MDP3880-W(U) Data Fax Modem
 		13e0 020d  Dell Copper
 		13e0 020e  Dell Silver
-		13e0 0261  IBM # GVC
 		13e0 0290  Compaq Goldwing
-		13e0 02a0  IBM # GVC
-		13e0 02b0  IBM # GVC
 		13e0 02c0  Compaq Scooter
-		13e0 02d0  IBM # GVC
-		144f 1500  IBM P85-DF # Askey
-		144f 1501  IBM P85-DF # Askey
-		144f 150a  IBM P85-DF # Askey
-		144f 150b  IBM P85-DF Low Profile # Askey
-		144f 1510  IBM P85-DF Low Profile # Askey
+		144f 1500  IBM P85-DF (1)
+		144f 1501  IBM P85-DF (2)
+		144f 150a  IBM P85-DF (3)
+		144f 150b  IBM P85-DF Low Profile (1)
+		144f 1510  IBM P85-DF Low Profile (2)
 	1034  HCF 56k Data/Fax/Voice Modem
 	1035  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 		10cf 1098  Fujitsu P85-DFSV
 	1036  HCF 56k Data/Fax/Voice/Spkp Modem
-		122d 4029  MDP3880SP-W # Aztech
-		122d 4031  MDP3880SP-U # Aztech
+		122d 4029  MDP3880SP-W
+		122d 4031  MDP3880SP-U
 		13e0 0209  Dell Titanium
 		13e0 020a  Dell Graphite
 		13e0 0260  Gateway Red Owl
@@ -4143,80 +4235,72 @@
 	1064  HCF 56k Data/Fax/Voice Modem
 	1065  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 	1066  HCF 56k Data/Fax/Voice/Spkp Modem
-		122d 4033  Dell Athena - MDP3900V-U # Aztech
+		122d 4033  Dell Athena - MDP3900V-U
 	1433  HCF 56k Data/Fax Modem
 	1434  HCF 56k Data/Fax/Voice Modem
 	1435  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 	1436  HCF 56k Data/Fax Modem
 	1453  HCF 56k Data/Fax Modem
-		13e0 0240  IBM # GVC
-		13e0 0250  IBM # GVC
-		144f 1502  IBM P95-DF # Askey
-		144f 1503  IBM P95-DF # Askey
+		144f 1502  IBM P95-DF (1)
+		144f 1503  IBM P95-DF (2)
 	1454  HCF 56k Data/Fax/Voice Modem
 	1455  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 	1456  HCF 56k Data/Fax/Voice/Spkp Modem
-		122d 4035  Dell Europa - MDP3900V-W # Aztech
-		122d 4302  MP3930V-W(C) MiniPCI # Aztech
+		122d 4035  Dell Europa - MDP3900V-W
+		122d 4302  Dell MP3930V-W(C) MiniPCI
 	1803  HCF 56k Modem
-		0e11 0023 623-LAN Grizzly # Compaq
-		0e11 0043 623-LAN Yogi # Compaq
+		0e11 0023  623-LAN Grizzly
+		0e11 0043  623-LAN Yogi
 	1815  HCF 56k Modem
-		0e11 0022  Grizzly # Compaq
-		0e11 0042  Yogi # Compaq
+		0e11 0022  Grizzly
+		0e11 0042  Yogi
 	2003  HSF 56k Data/Fax Modem
 	2004  HSF 56k Data/Fax/Voice Modem
 	2005  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 	2006  HSF 56k Data/Fax/Voice/Spkp Modem
 	2013  HSF 56k Data/Fax Modem
-		0e11 b195  Bear # Compaq
-		0e11 b196  Seminole 1 # Compaq
-		0e11 b1be  Seminole 2 # Compaq
-		1025 8013  Acer
-		1033 809d  NEC
-		1033 80bc  NEC
+		0e11 b195  Bear
+		0e11 b196  Seminole 1
+		0e11 b1be  Seminole 2
 		155d 6793  HP
 		155d 8850  E Machines
 	2014  HSF 56k Data/Fax/Voice Modem
 	2015  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 	2016  HSF 56k Data/Fax/Voice/Spkp Modem
-	2043  HSF 56k Data/Fax Modem (Worldwide SmartDAA)
-	2044  HSF 56k Data/Fax/Voice Modem (Worldwide SmartDAA)
-	2045  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide SmartDAA)
-	2046  HSF 56k Data/Fax/Voice/Spkp Modem (Worldwide SmartDAA)
+	2043  HSF 56k Data/Fax Modem (WorldW SmartDAA)
+	2044  HSF 56k Data/Fax/Voice Modem (WorldW SmartDAA)
+	2045  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (WorldW SmartDAA)
+	2046  HSF 56k Data/Fax/Voice/Spkp Modem (WorldW SmartDAA)
 	2063  HSF 56k Data/Fax Modem (SmartDAA)
 	2064  HSF 56k Data/Fax/Voice Modem (SmartDAA)
 	2065  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA)
 	2066  HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA)
 	2093  HSF 56k Modem
 		155d 2f07  Legend
-	2143  HSF 56k Data/Fax/Cell Modem (Mobile Worldwide SmartDAA)
-	2144  HSF 56k Data/Fax/Voice/Cell Modem (Mobile Worldwide SmartDAA)
-	2145  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WW SmartDAA)
-	2146  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mobile Worldwide SmartDAA)
-	2163  HSF 56k Data/Fax/Cell Modem (Mobile SmartDAA)
-	2164  HSF 56k Data/Fax/Voice/Cell Modem (Mobile SmartDAA)
-	2165  HSF 56k Data/Fax/Voice/Spkp (w/Handset)/Cell Modem (Mobile SmartDAA)
-	2166  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mobile SmartDAA)
-	2343  HSF 56k Data/Fax CardBus Modem (Mobile Worldwide SmartDAA)
-	2344  HSF 56k Data/Fax/Voice CardBus Modem (Mobile Worldwide SmartDAA)
-	2345  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WW SmartDAA)
-	2346  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mobile Worldwide SmartDAA)
-	2363  HSF 56k Data/Fax CardBus Modem (Mobile SmartDAA)
-	2364  HSF 56k Data/Fax/Voice CardBus Modem (Mobile SmartDAA)
+	2143  HSF 56k Data/Fax/Cell Modem (Mob WorldW SmartDAA)
+	2144  HSF 56k Data/Fax/Voice/Cell Modem (Mob WorldW SmartDAA)
+	2145  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WorldW SmartDAA)
+	2146  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob WorldW SmartDAA)
+	2163  HSF 56k Data/Fax/Cell Modem (Mob SmartDAA)
+	2164  HSF 56k Data/Fax/Voice/Cell Modem (Mob SmartDAA)
+	2165  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob SmartDAA)
+	2166  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob SmartDAA)
+	2343  HSF 56k Data/Fax CardBus Modem (Mob WorldW SmartDAA)
+	2344  HSF 56k Data/Fax/Voice CardBus Modem (Mob WorldW SmartDAA)
+	2345  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WorldW SmartDAA)
+	2346  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob WorldW SmartDAA)
+	2363  HSF 56k Data/Fax CardBus Modem (Mob SmartDAA)
+	2364  HSF 56k Data/Fax/Voice CardBus Modem (Mob SmartDAA)
 	2365  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA)
-	2366  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mobile SmartDAA)
-	2443  HSF 56k Data/Fax Modem (Mobile Worldwide SmartDAA)
-		104d 8075  Modem # Sony
-		104d 8083  Modem # Sony
-		104d 8097  Modem # Sony
-	2444  HSF 56k Data/Fax/Voice Modem (Mobile Worldwide SmartDAA)
-	2445  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mobile WW SmartDAA)
-	2446  HSF 56k Data/Fax/Voice/Spkp Modem (Mobile Worldwide SmartDAA)
-	2463  HSF 56k Data/Fax Modem (Mobile SmartDAA)
-	2464  HSF 56k Data/Fax/Voice Modem (Mobile SmartDAA)
-	2465  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Mobile SmartDAA)
-	2466  HSF 56k Data/Fax/Voice/Spkp Modem (Mobile SmartDAA)
+	2366  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA)
+	2443  HSF 56k Data/Fax Modem (Mob WorldW SmartDAA)
+	2444  HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA)
+	2445  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA)
+	2446  HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA)
+	2463  HSF 56k Data/Fax Modem (Mob SmartDAA)
+	2464  HSF 56k Data/Fax/Voice Modem (Mob SmartDAA)
+	2465  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA)
+	2466  HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA)
 	2f00  HSF 56k HSFi Modem
 		13e0 8d84  IBM HSFi V.90
 		13e0 8d85  Compaq Stinger
@@ -4241,9 +4325,7 @@
 1504  KAISER Electronics
 1505  ITA INGENIEURBURO FUR TESTAUFGABEN GmbH
 1506  CHAMELEON Systems Inc
-# 1507  HTEC Ltd
-# Commented out because there are no known HTEC chips and 1507 is already
-# used by mistake by Motorola (see vendor ID 1057)
+# Should be HTEC Ltd, but there are no known HTEC chips and 1507 is already used by mistake by Motorola (see vendor ID 1057).
 1507  Motorola ?? / HTEC
 	0001  MPC105 [Eagle]
 	0002  MPC106 [Grackle]
@@ -4618,6 +4700,7 @@
 	4000  ALS4000 Audio Chipset
 		4005 4000  ALS4000 Audio Chipset
 4033  Addtron Technology Co, Inc.
+	1360  RTL8139 Ethernet
 4143  Digital Equipment Corp
 416c  Aladdin Knowledge Systems
 	0100  AladdinCARD
@@ -4786,7 +4869,7 @@
 8008  Quancom Electronic GmbH
 	0010  WDOG1 [PCI-Watchdog 1]
 	0011  PWDOG2 [PCI-Watchdog 2]
-8086  Intel Corporation
+8086  Intel Corp.
 	0007  82379AB
 	0039  21145
 	0122  82437FX
@@ -4796,6 +4879,7 @@
 	0486  82430ZX [Aries]
 	04a3  82434LX [Mercury/Neptune]
 	04d0  82437FX [Triton FX]
+	0600  RAID Controller
 	0960  80960RP [i960 RP Microprocessor/Bridge]
 	0964  80960RP [i960 RP Microprocessor/Bridge]
 	1000  82542 Gigabit Ethernet Controller
@@ -4806,8 +4890,10 @@
 	1001  82543GC Gigabit Ethernet Controller
 	1004  82543GC Gigabit Ethernet Controller
 	1008  82544EI Gigabit Ethernet Controller
+	1009  82544EI Gigabit Ethernet Controller
 	100c  82544GC Gigabit Ethernet Controller
 	100d  82544GC Gigabit Ethernet Controller
+	1029  82559 Ethernet Controller
 	1030  82559 InBusiness 10/100
 	1031  82801CAM (ICH3) Chipset Ethernet Controller
 	1032  82801CAM (ICH3) Chipset Ethernet Controller
@@ -4818,7 +4904,7 @@
 	1037  82801CAM (ICH3) Chipset Ethernet Controller
 	1038  82801CAM (ICH3) Chipset Ethernet Controller
 	1130  82815 815 Chipset Host Bridge and Memory Controller Hub
-	1132  82815 CGC [Chipset Graphics Controller] 
+	1132  82815 CGC [Chipset Graphics Controller]
 	1161  82806AA PCI64 Hub Advanced Programmable Interrupt Controller
 	1209  82559ER
 	1221  82092AA_0
@@ -4850,7 +4936,7 @@
 		103c 1200  Ethernet Pro 10/100TX
 		10c3 1100  SmartEther100 SC1100
 		1179 0002  PCI FastEther LAN on Docker
-		1259 2560  AT-2560 100 
+		1259 2560  AT-2560 100
 		1259 2561  AT-2560 100 FX Ethernet Adapter
 		1266 0001  NE10/100 Adapter
 		8086 0001  EtherExpress PRO/100B (TX)
@@ -4879,8 +4965,8 @@
 	122e  82371FB PIIX ISA [Triton I]
 	1230  82371FB PIIX IDE [Triton I]
 	1231  DSVD Modem
-	1234  430MX - 82371MX MPIIX [430MX PCIset - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)]
-	1235  430MX - 82437MX MTSC [430MX PCIset - 82437MX Mobile System Controller (MTSC) and 82438MX Mobile Data Path (MTDP)]
+	1234  430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)
+	1235  430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP)
 	1237  440FX - 82441FX PMC [Natoma]
 	1239  82371FB
 	123b  82380PB
@@ -4895,10 +4981,13 @@
 		101e 0438  MegaRaid 438
 		101e 0466  MegaRaid 466
 		101e 0467  MegaRaid 467
+		101e 09a0  PowerEdge Expandable RAID Controller 2/SC
 		1028 0467  PowerEdge Expandable RAID Controller 2/DC
 		1028 1111  PowerEdge Expandable RAID Controller 2/SC
+		103c 03a2  MegaRaid
 		103c 10c6  MegaRaid 438
 		103c 10c7  MegaRaid T5
+		103c 10cc  MegaRaid
 		1111 1111  MegaRaid 466
 		113c 03a2  MegaRaid
 	1a21  82840 840 (Carmel) Chipset Host Bridge (Hub A)
@@ -4937,6 +5026,7 @@
 	244b  82820 820 (Camino 2) Chipset IDE U100
 	244c  82820 820 (Camino 2) Chipset ISA Bridge (ICH2-M)
 	244e  82820 820 (Camino 2) Chipset PCI
+	2485  AC'97 Audio Controller
 	2500  82820 820 (Camino) Chipset Host Bridge (MCH)
 		1043 801c  P3C-2000 system chipset
 	2501  82820 820 (Camino) Chipset Host Bridge (MCH)
@@ -4949,6 +5039,7 @@
 	2531  82850 860 (Wombat) Chipset Host Bridge (MCH)
 	2532  82850 850 (Tehama) Chipset AGP Bridge
 	2533  82860 860 (Wombat) Chipset AGP Bridge
+	3092  Integrated RAID
 	5200  EtherExpress PRO/100 Intelligent Server
 	5201  EtherExpress PRO/100 Intelligent Server
 		8086 0001  EtherExpress PRO/100 Server Ethernet Adapter
@@ -5004,6 +5095,10 @@
 	84e2  460GX - 84460GX AGP Bridge (GXB)
 	84e3  460GX - 84460GX Memory Address Controller (MAC)
 	84e4  460GX - 84460GX Memory Data Controller (MDC)
+	9621  Integrated RAID
+	9622  Integrated RAID
+	9641  Integrated RAID
+	96a1  Integrated RAID
 	ffff  450NX/GX [Orion] - 82453KX/GX Memory controller [BUG]
 8800  Trigem Computer Inc.
 	2008  Video assistent component
@@ -5013,7 +5108,6 @@
 8e2e  KTI
 	3000  ET32P2
 9004  Adaptec
-# FIXME: [dj] In one document I have, lot of these AIC's are actually AHA's
 	1078  AIC-7810
 	1160  AIC-1160 [Family Fibre Channel Adapter]
 	2178  AIC-7821
@@ -5068,8 +5162,9 @@
 	7278  AHA-3940 / AIC-7872
 	7378  AHA-3985 / AIC-7873
 	7478  AHA-2944 / AIC-7874
-# FIXME: [dj] Where did the 3rd number come from in 0x7578 & 0x7678 ?
+# DJ: Where did the 3rd number come from?
 	7578  AHA-3944 / AHA-3944W / 7875
+# DJ: Where did the 3rd number come from?
 	7678  AHA-4944W/UW / 7876
 	7778  AIC-787x
 	7810  AIC-7810
@@ -5315,7 +5410,7 @@
 		00  UHCI
 		10  OHCI
 		80  Unspecified
-		Fe  USB Device
+		fe  USB Device
 	04  Fibre Channel
 	05  SMBus
 	06  InfiniBand
diff -urN linux-2.4.14-pre8/drivers/pci/proc.c linux/drivers/pci/proc.c
--- linux-2.4.14-pre8/drivers/pci/proc.c	Sat May 19 12:48:33 2001
+++ linux/drivers/pci/proc.c	Mon Dec  3 23:26:30 2001
@@ -3,7 +3,7 @@
  *
  *	Procfs interface for the PCI bus.
  *
- *	Copyright (c) 1997--1999 Martin Mares <mj@suse.cz>
+ *	Copyright (c) 1997--1999 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/types.h>
diff -urN linux-2.4.14-pre8/drivers/pci/quirks.c linux/drivers/pci/quirks.c
--- linux-2.4.14-pre8/drivers/pci/quirks.c	Tue Sep 18 14:23:15 2001
+++ linux/drivers/pci/quirks.c	Mon Dec  3 23:26:30 2001
@@ -5,7 +5,7 @@
  *  bugs.  Devices present only on certain architectures (host
  *  bridges et cetera) should be handled in arch-specific code.
  *
- *  Copyright (c) 1999 Martin Mares <mj@suse.cz>
+ *  Copyright (c) 1999 Martin Mares <mj@ucw.cz>
  *
  *  The bridge optimization stuff has been removed. If you really
  *  have a silly BIOS which is unable to set your host bridge right,
diff -urN linux-2.4.14-pre8/drivers/pcmcia/i82092aa.h linux/drivers/pcmcia/i82092aa.h
--- linux-2.4.14-pre8/drivers/pcmcia/i82092aa.h	Mon Dec  3 23:26:20 2001
+++ linux/drivers/pcmcia/i82092aa.h	Mon Dec  3 23:26:30 2001
@@ -7,11 +7,11 @@
 #ifdef NOTRACE
 #define enter(x)   printk("Enter: %s, %s line %i\n",x,__FILE__,__LINE__)
 #define leave(x)   printk("Leave: %s, %s line %i\n",x,__FILE__,__LINE__)
-#define dprintk printk
+#define dprintk(fmt, args...) printk(fmt , ## args)
 #else
 #define enter(x)   do {} while (0)
 #define leave(x)   do {} while (0)
-#define dprintk(...) do {} while (0)
+#define dprintk(fmt, args...) do {} while (0)
 #endif
 
 
diff -urN linux-2.4.14-pre8/drivers/pnp/quirks.c linux/drivers/pnp/quirks.c
--- linux-2.4.14-pre8/drivers/pnp/quirks.c	Fri Dec 29 14:07:22 2000
+++ linux/drivers/pnp/quirks.c	Mon Dec  3 23:26:30 2001
@@ -8,7 +8,7 @@
  *
  *  Heavily based on PCI quirks handling which is
  *
- *  Copyright (c) 1999 Martin Mares <mj@suse.cz>
+ *  Copyright (c) 1999 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/types.h>
diff -urN linux-2.4.14-pre8/drivers/scsi/osst.c linux/drivers/scsi/osst.c
--- linux-2.4.14-pre8/drivers/scsi/osst.c	Fri Oct 12 15:35:53 2001
+++ linux/drivers/scsi/osst.c	Mon Dec  3 23:26:30 2001
@@ -4935,6 +4935,7 @@
 			tb->sg[0].address =
 			    (unsigned char *)__get_free_pages(priority, order);
 			if (tb->sg[0].address != NULL) {
+			    tb->sg[0].page = NULL;
 			    tb->sg[0].length = b_size;
 			    break;
 			}
@@ -4970,6 +4971,7 @@
 				tb = NULL;
 				break;
 			    }
+			    tb->sg[segs].page = NULL;
 			    tb->sg[segs].length = b_size;
 			    got += b_size;
 			    segs++;
@@ -5043,6 +5045,7 @@
 			normalize_buffer(STbuffer);
 			return FALSE;
 		}
+		STbuffer->sg[segs].page = NULL;
 		STbuffer->sg[segs].length = b_size;
 		STbuffer->sg_segs += 1;
 		got += b_size;
diff -urN linux-2.4.14-pre8/drivers/scsi/sg.c linux/drivers/scsi/sg.c
--- linux-2.4.14-pre8/drivers/scsi/sg.c	Sun Sep 30 12:26:07 2001
+++ linux/drivers/scsi/sg.c	Mon Dec  3 23:26:30 2001
@@ -1544,6 +1544,7 @@
 	num = (rem_sz > (PAGE_SIZE - offset)) ? (PAGE_SIZE - offset) :
 						rem_sz;
 	sclp->address = page_address(kp->maplist[k]) + offset;
+	sclp->page = NULL;
 	sclp->length = num;
 	mem_src_arr[k] = SG_USER_MEM;
 	rem_sz -= num;
@@ -1630,6 +1631,7 @@
                     break;
             }
             sclp->address = p;
+	    sclp->page = NULL;
             sclp->length = ret_sz;
 	    mem_src_arr[k] = mem_src;
 
@@ -1787,6 +1789,7 @@
                        k, sclp->address, sclp->length, mem_src));
             sg_free(sclp->address, sclp->length, mem_src);
             sclp->address = NULL;
+	    sclp->page = NULL;
             sclp->length = 0;
         }
 	sg_free(schp->buffer, schp->sglist_len, schp->buffer_mem_src);
diff -urN linux-2.4.14-pre8/drivers/usb/storage/sddr09.c linux/drivers/usb/storage/sddr09.c
--- linux-2.4.14-pre8/drivers/usb/storage/sddr09.c	Fri Sep 14 14:04:07 2001
+++ linux/drivers/usb/storage/sddr09.c	Mon Dec  3 23:26:30 2001
@@ -637,9 +637,11 @@
 	for (i=0; i<alloc_blocks; i++) {
 		if (i<alloc_blocks-1) {
 			sg[i].address = kmalloc( (1<<17), GFP_KERNEL );
+			sg[i].page = NULL;
 			sg[i].length = (1<<17);
 		} else {
 			sg[i].address = kmalloc(alloc_len, GFP_KERNEL);
+			sg[i].page = NULL;
 			sg[i].length = alloc_len;
 		}
 		alloc_len -= sg[i].length;
diff -urN linux-2.4.14-pre8/drivers/zorro/gen-devlist.c linux/drivers/zorro/gen-devlist.c
--- linux-2.4.14-pre8/drivers/zorro/gen-devlist.c	Mon Oct 16 12:51:16 2000
+++ linux/drivers/zorro/gen-devlist.c	Mon Dec  3 23:26:30 2001
@@ -5,7 +5,7 @@
  *
  *	Based on the PCI version:
  *
- *	(c) 1999--2000 Martin Mares <mj@suse.cz>
+ *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <stdio.h>
diff -urN linux-2.4.14-pre8/fs/Config.in linux/fs/Config.in
--- linux-2.4.14-pre8/fs/Config.in	Thu Oct  4 15:13:18 2001
+++ linux/fs/Config.in	Mon Dec  3 23:26:30 2001
@@ -41,6 +41,7 @@
 
 tristate 'ISO 9660 CDROM file system support' CONFIG_ISO9660_FS
 dep_mbool '  Microsoft Joliet CDROM extensions' CONFIG_JOLIET $CONFIG_ISO9660_FS
+dep_mbool '  Transparent decompression extension' CONFIG_ZISOFS $CONFIG_ISO9660_FS
 
 tristate 'Minix fs support' CONFIG_MINIX_FS
 
@@ -126,6 +127,24 @@
    # for fs/nls/Config.in
    define_bool CONFIG_NCPFS_NLS n
    define_bool CONFIG_SMB_FS n
+fi
+
+#
+# Do we need the compression support?
+#
+if [ "$CONFIG_ZISOFS" = "y" ]; then
+   define_tristate CONFIG_ZISOFS_FS $CONFIG_ISO9660_FS
+else
+   define_tristate CONFIG_ZISOFS_FS n
+fi
+if [ "$CONFIG_CRAMFS" = "y" -o "$CONFIG_ZISOFS_FS" = "y" ]; then
+   define_tristate CONFIG_ZLIB_FS_INFLATE y
+else
+  if [ "$CONFIG_CRAMFS" = "m" -o "$CONFIG_ZISOFS_FS" = "m" ]; then
+     define_tristate CONFIG_ZLIB_FS_INFLATE m
+  else
+     define_tristate CONFIG_ZLIB_FS_INFLATE n
+  fi
 fi
 
 mainmenu_option next_comment
diff -urN linux-2.4.14-pre8/fs/Makefile linux/fs/Makefile
--- linux-2.4.14-pre8/fs/Makefile	Thu Oct  4 15:13:18 2001
+++ linux/fs/Makefile	Mon Dec  3 23:26:30 2001
@@ -27,6 +27,7 @@
 
 # Do not add any filesystems before this line
 subdir-$(CONFIG_EXT2_FS)	+= ext2
+subdir-$(CONFIG_ZLIB_FS_INFLATE) += inflate_fs
 subdir-$(CONFIG_CRAMFS)		+= cramfs
 subdir-$(CONFIG_RAMFS)		+= ramfs
 subdir-$(CONFIG_CODA_FS)	+= coda
diff -urN linux-2.4.14-pre8/include/asm-sparc64/xor.h linux/include/asm-sparc64/xor.h
--- linux-2.4.14-pre8/include/asm-sparc64/xor.h	Sun Nov 12 19:39:51 2000
+++ linux/include/asm-sparc64/xor.h	Mon Dec  3 23:26:30 2001
@@ -52,8 +52,8 @@
 	.globl xor_vis_2
 	.type xor_vis_2,@function
 xor_vis_2:
-	rd	%fprs, %g1
-	andcc	%g1, FPRS_FEF|FPRS_DU, %g0
+	rd	%fprs, %o5
+	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
 	be,pt	%icc, 0f
 	 sethi	%hi(VISenter), %g1
 	jmpl	%g1 + %lo(VISenter), %g7
@@ -124,8 +124,8 @@
 	.globl xor_vis_3
 	.type xor_vis_3,@function
 xor_vis_3:
-	rd	%fprs, %g1
-	andcc	%g1, FPRS_FEF|FPRS_DU, %g0
+	rd	%fprs, %o5
+	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
 	be,pt	%icc, 0f
 	 sethi	%hi(VISenter), %g1
 	jmpl	%g1 + %lo(VISenter), %g7
@@ -193,8 +193,8 @@
 	.globl xor_vis_4
 	.type xor_vis_4,@function
 xor_vis_4:
-	rd	%fprs, %g1
-	andcc	%g1, FPRS_FEF|FPRS_DU, %g0
+	rd	%fprs, %o5
+	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
 	be,pt	%icc, 0f
 	 sethi	%hi(VISenter), %g1
 	jmpl	%g1 + %lo(VISenter), %g7
@@ -281,13 +281,15 @@
 	.globl xor_vis_5
 	.type xor_vis_5,@function
 xor_vis_5:
-	rd	%fprs, %g1
-	andcc	%g1, FPRS_FEF|FPRS_DU, %g0
+	mov	%o5, %g5
+	rd	%fprs, %o5
+	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
 	be,pt	%icc, 0f
 	 sethi	%hi(VISenter), %g1
 	jmpl	%g1 + %lo(VISenter), %g7
 	 add	%g7, 8, %g7
 0:	wr	%g0, FPRS_FEF, %fprs
+	mov	%g5, %o5
 	rd	%asi, %g1
 	wr	%g0, ASI_BLK_P, %asi
 	membar	#LoadStore|#StoreLoad|#StoreStore
diff -urN linux-2.4.14-pre8/include/linux/pagemap.h linux/include/linux/pagemap.h
--- linux-2.4.14-pre8/include/linux/pagemap.h	Mon Dec  3 23:26:21 2001
+++ linux/include/linux/pagemap.h	Mon Dec  3 23:26:30 2001
@@ -98,6 +98,7 @@
 }
 
 extern struct page * grab_cache_page (struct address_space *, unsigned long);
+extern struct page * grab_cache_page_nowait (struct address_space *, unsigned long);
 
 typedef int filler_t(void *, struct page*);
 
diff -urN linux-2.4.14-pre8/include/linux/pci.h linux/include/linux/pci.h
--- linux-2.4.14-pre8/include/linux/pci.h	Mon Dec  3 23:26:21 2001
+++ linux/include/linux/pci.h	Mon Dec  3 23:26:30 2001
@@ -3,7 +3,7 @@
  *
  *	PCI defines and function prototypes
  *	Copyright 1994, Drew Eckhardt
- *	Copyright 1997--1999 Martin Mares <mj@suse.cz>
+ *	Copyright 1997--1999 Martin Mares <mj@ucw.cz>
  *
  *	For more information, please consult the following manuals (look at
  *	http://www.pcisig.com/ for how to get them):
diff -urN linux-2.4.14-pre8/include/linux/skbuff.h linux/include/linux/skbuff.h
--- linux-2.4.14-pre8/include/linux/skbuff.h	Tue Oct 23 21:59:23 2001
+++ linux/include/linux/skbuff.h	Mon Dec  3 23:26:30 2001
@@ -35,7 +35,9 @@
 #define CHECKSUM_UNNECESSARY 2
 
 #define SKB_DATA_ALIGN(X)	(((X) + (SMP_CACHE_BYTES-1)) & ~(SMP_CACHE_BYTES-1))
-#define SKB_MAX_HEAD(X)		((PAGE_SIZE - (X) - sizeof(struct skb_shared_info))&~(SMP_CACHE_BYTES-1))
+#define SKB_MAX_ORDER(X,ORDER)	(((PAGE_SIZE<<(ORDER)) - (X) - sizeof(struct skb_shared_info))&~(SMP_CACHE_BYTES-1))
+#define SKB_MAX_HEAD(X)		(SKB_MAX_ORDER((X),0))
+#define SKB_MAX_ALLOC		(SKB_MAX_ORDER(0,2))
 
 /* A. Checksumming of received packets by device.
  *
diff -urN linux-2.4.14-pre8/include/linux/swap.h linux/include/linux/swap.h
--- linux-2.4.14-pre8/include/linux/swap.h	Mon Dec  3 23:26:21 2001
+++ linux/include/linux/swap.h	Mon Dec  3 23:26:30 2001
@@ -105,7 +105,6 @@
 extern void FASTCALL(__lru_cache_del(struct page *));
 extern void FASTCALL(lru_cache_del(struct page *));
 
-extern void FASTCALL(deactivate_page(struct page *));
 extern void FASTCALL(activate_page(struct page *));
 
 extern void swap_setup(void);
diff -urN linux-2.4.14-pre8/include/linux/zlib_fs.h linux/include/linux/zlib_fs.h
--- linux-2.4.14-pre8/include/linux/zlib_fs.h	Wed Dec 31 16:00:00 1969
+++ linux/include/linux/zlib_fs.h	Mon Dec  3 23:26:30 2001
@@ -0,0 +1,679 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+  version 1.1.3, July 9th, 1998
+
+  Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+
+  The data format used by the zlib library is described by RFCs (Request for
+  Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
+  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
+*/
+
+#ifndef _ZLIB_H
+#define _ZLIB_H
+
+#include "zconf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ZLIB_VERSION "1.1.3"
+
+/* 
+     The 'zlib' compression library provides in-memory compression and
+  decompression functions, including integrity checks of the uncompressed
+  data.  This version of the library supports only one compression method
+  (deflation) but other algorithms will be added later and will have the same
+  stream interface.
+
+     Compression can be done in a single step if the buffers are large
+  enough (for example if an input file is mmap'ed), or can be done by
+  repeated calls of the compression function.  In the latter case, the
+  application must provide more input and/or consume the output
+  (providing more output space) before each call.
+
+     The library also supports reading and writing files in gzip (.gz) format
+  with an interface similar to that of stdio.
+
+     The library does not install any signal handler. The decoder checks
+  the consistency of the compressed data, so the library should never
+  crash even in case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
+
+struct internal_state;
+
+typedef struct z_stream_s {
+    Bytef    *next_in;  /* next input byte */
+    uInt     avail_in;  /* number of bytes available at next_in */
+    uLong    total_in;  /* total nb of input bytes read so far */
+
+    Bytef    *next_out; /* next output byte should be put there */
+    uInt     avail_out; /* remaining free space at next_out */
+    uLong    total_out; /* total nb of bytes output so far */
+
+    char     *msg;      /* last error message, NULL if no error */
+    struct internal_state FAR *state; /* not visible by applications */
+
+    void     *workspace; /* memory allocated for this stream */
+
+    int     data_type;  /* best guess about the data type: ascii or binary */
+    uLong   adler;      /* adler32 value of the uncompressed data */
+    uLong   reserved;   /* reserved for future use */
+} z_stream;
+
+typedef z_stream FAR *z_streamp;
+
+/*
+   The application must update next_in and avail_in when avail_in has
+   dropped to zero. It must update next_out and avail_out when avail_out
+   has dropped to zero. The application must initialize zalloc, zfree and
+   opaque before calling the init function. All other fields are set by the
+   compression library and must not be updated by the application.
+
+   The opaque value provided by the application will be passed as the first
+   parameter for calls of zalloc and zfree. This can be useful for custom
+   memory management. The compression library attaches no meaning to the
+   opaque value.
+
+   zalloc must return Z_NULL if there is not enough memory for the object.
+   If zlib is used in a multi-threaded application, zalloc and zfree must be
+   thread safe.
+
+   On 16-bit systems, the functions zalloc and zfree must be able to allocate
+   exactly 65536 bytes, but will not be required to allocate more than this
+   if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
+   pointers returned by zalloc for objects of exactly 65536 bytes *must*
+   have their offset normalized to zero. The default allocation function
+   provided by this library ensures this (see zutil.c). To reduce memory
+   requirements and avoid any allocation of 64K objects, at the expense of
+   compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
+
+   The fields total_in and total_out can be used for statistics or
+   progress reports. After compression, total_in holds the total size of
+   the uncompressed data and may be saved for use in the decompressor
+   (particularly if the decompressor wants to decompress everything in
+   a single step).
+*/
+
+                        /* constants */
+
+#define Z_NO_FLUSH      0
+#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
+#define Z_SYNC_FLUSH    2
+#define Z_FULL_FLUSH    3
+#define Z_FINISH        4
+/* Allowed flush values; see deflate() below for details */
+
+#define Z_OK            0
+#define Z_STREAM_END    1
+#define Z_NEED_DICT     2
+#define Z_ERRNO        (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR   (-3)
+#define Z_MEM_ERROR    (-4)
+#define Z_BUF_ERROR    (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative
+ * values are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION         0
+#define Z_BEST_SPEED             1
+#define Z_BEST_COMPRESSION       9
+#define Z_DEFAULT_COMPRESSION  (-1)
+/* compression levels */
+
+#define Z_FILTERED            1
+#define Z_HUFFMAN_ONLY        2
+#define Z_DEFAULT_STRATEGY    0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY   0
+#define Z_ASCII    1
+#define Z_UNKNOWN  2
+/* Possible values of the data_type field */
+
+#define Z_DEFLATED   8
+/* The deflate compression method (the only one supported in this version) */
+
+#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
+
+                        /* basic functions */
+
+ZEXTERN const char * ZEXPORT zlib_fs_zlibVersion OF((void));
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+   If the first character differs, the library code actually used is
+   not compatible with the zlib.h header file used by the application.
+   This check is automatically made by deflateInit and inflateInit.
+ */
+
+/* 
+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+
+     Initializes the internal stream state for compression. The fields
+   zalloc, zfree and opaque must be initialized before by the caller.
+   If zalloc and zfree are set to Z_NULL, deflateInit updates them to
+   use default allocation functions.
+
+     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+   1 gives best speed, 9 gives best compression, 0 gives no compression at
+   all (the input data is simply copied a block at a time).
+   Z_DEFAULT_COMPRESSION requests a default compromise between speed and
+   compression (currently equivalent to level 6).
+
+     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if level is not a valid compression level,
+   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+   with the version assumed by the caller (ZLIB_VERSION).
+   msg is set to null if there is no error message.  deflateInit does not
+   perform any compression: this will be done by deflate().
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_deflate OF((z_streamp strm, int flush));
+/*
+    deflate compresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full. It may introduce some
+  output latency (reading input without producing any output) except when
+  forced to flush.
+
+    The detailed semantics are as follows. deflate performs one or both of the
+  following actions:
+
+  - Compress more input starting at next_in and update next_in and avail_in
+    accordingly. If not all input can be processed (because there is not
+    enough room in the output buffer), next_in and avail_in are updated and
+    processing will resume at this point for the next call of deflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly. This action is forced if the parameter flush is non zero.
+    Forcing flush frequently degrades the compression ratio, so this parameter
+    should be set only when necessary (in interactive applications).
+    Some output may be provided even if flush is not set.
+
+  Before the call of deflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming
+  more output, and updating avail_in or avail_out accordingly; avail_out
+  should never be zero before the call. The application can consume the
+  compressed output when it wants, for example when the output buffer is full
+  (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
+  and with zero avail_out, it must be called again after making room in the
+  output buffer because there might be more output pending.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+  flushed to the output buffer and the output is aligned on a byte boundary, so
+  that the decompressor can get all input data available so far. (In particular
+  avail_in is zero after the call if enough output space has been provided
+  before the call.)  Flushing may degrade compression for some compression
+  algorithms and so it should be used only when necessary.
+
+    If flush is set to Z_FULL_FLUSH, all output is flushed as with
+  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+  restart from this point if previous compressed data has been damaged or if
+  random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
+  the compression.
+
+    If deflate returns with avail_out == 0, this function must be called again
+  with the same value of the flush parameter and more output space (updated
+  avail_out), until the flush is complete (deflate returns with non-zero
+  avail_out).
+
+    If the parameter flush is set to Z_FINISH, pending input is processed,
+  pending output is flushed and deflate returns with Z_STREAM_END if there
+  was enough output space; if deflate returns with Z_OK, this function must be
+  called again with Z_FINISH and more output space (updated avail_out) but no
+  more input data, until it returns with Z_STREAM_END or an error. After
+  deflate has returned Z_STREAM_END, the only possible operations on the
+  stream are deflateReset or deflateEnd.
+  
+    Z_FINISH can be used immediately after deflateInit if all the compression
+  is to be done in a single step. In this case, avail_out must be at least
+  0.1% larger than avail_in plus 12 bytes.  If deflate does not return
+  Z_STREAM_END, then it must be called again as described above.
+
+    deflate() sets strm->adler to the adler32 checksum of all input read
+  so far (that is, total_in bytes).
+
+    deflate() may update data_type if it can make a good guess about
+  the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
+  binary. This field is only for information purposes and does not affect
+  the compression algorithm in any manner.
+
+    deflate() returns Z_OK if some progress has been made (more input
+  processed or more output produced), Z_STREAM_END if all input has been
+  consumed and all output has been produced (only when flush is set to
+  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+  if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
+  (for example avail_in or avail_out was zero).
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_deflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any
+   pending output.
+
+     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+   prematurely (some input or output was discarded). In the error case,
+   msg may be set but then points to a static string (which must not be
+   deallocated).
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_inflate_workspacesize OF((void));
+/*
+   Returns the number of bytes that needs to be allocated for a per-
+   stream workspace.  A pointer to this number of bytes should be
+   returned in stream->workspace before calling zlib_fs_inflateInit().
+*/
+
+/* 
+ZEXTERN int ZEXPORT zlib_fs_inflateInit OF((z_streamp strm));
+
+     Initializes the internal stream state for decompression. The fields
+   next_in, avail_in, and workspace must be initialized before by
+   the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
+   value depends on the compression method), inflateInit determines the
+   compression method from the zlib header and allocates all data structures
+   accordingly; otherwise the allocation will be deferred to the first call of
+   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+   use default allocation functions.
+
+     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller.  msg is set to null if there is no error
+   message. inflateInit does not perform any decompression apart from reading
+   the zlib header if present: this will be done by inflate().  (So next_in and
+   avail_in may be modified, but next_out and avail_out are unchanged.)
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_inflate OF((z_streamp strm, int flush));
+/*
+    inflate decompresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full. It may some
+  introduce some output latency (reading input without producing any output)
+  except when forced to flush.
+
+  The detailed semantics are as follows. inflate performs one or both of the
+  following actions:
+
+  - Decompress more input starting at next_in and update next_in and avail_in
+    accordingly. If not all input can be processed (because there is not
+    enough room in the output buffer), next_in is updated and processing
+    will resume at this point for the next call of inflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  inflate() provides as much output as possible, until there
+    is no more input data or no more space in the output buffer (see below
+    about the flush parameter).
+
+  Before the call of inflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming
+  more output, and updating the next_* and avail_* values accordingly.
+  The application can consume the uncompressed output when it wants, for
+  example when the output buffer is full (avail_out == 0), or after each
+  call of inflate(). If inflate returns Z_OK and with zero avail_out, it
+  must be called again after making room in the output buffer because there
+  might be more output pending.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
+  output as possible to the output buffer. The flushing behavior of inflate is
+  not specified for values of the flush parameter other than Z_SYNC_FLUSH
+  and Z_FINISH, but the current implementation actually flushes as much output
+  as possible anyway.
+
+    inflate() should normally be called until it returns Z_STREAM_END or an
+  error. However if all decompression is to be performed in a single step
+  (a single call of inflate), the parameter flush should be set to
+  Z_FINISH. In this case all pending input is processed and all pending
+  output is flushed; avail_out must be large enough to hold all the
+  uncompressed data. (The size of the uncompressed data may have been saved
+  by the compressor for this purpose.) The next operation on this stream must
+  be inflateEnd to deallocate the decompression state. The use of Z_FINISH
+  is never required, but can be used to inform inflate that a faster routine
+  may be used for the single inflate() call.
+
+     If a preset dictionary is needed at this point (see inflateSetDictionary
+  below), inflate sets strm-adler to the adler32 checksum of the
+  dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise 
+  it sets strm->adler to the adler32 checksum of all output produced
+  so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
+  an error code as described below. At the end of the stream, inflate()
+  checks that its computed adler32 checksum is equal to that saved by the
+  compressor and returns Z_STREAM_END only if the checksum is correct.
+
+    inflate() returns Z_OK if some progress has been made (more input processed
+  or more output produced), Z_STREAM_END if the end of the compressed data has
+  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+  corrupted (input stream not conforming to the zlib format or incorrect
+  adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
+  (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
+  enough memory, Z_BUF_ERROR if no progress is possible or if there was not
+  enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
+  case, the application may then call inflateSync to look for a good
+  compression block.
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_inflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any
+   pending output.
+
+     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+   was inconsistent. In the error case, msg may be set but then points to a
+   static string (which must not be deallocated).
+*/
+
+                        /* Advanced functions */
+
+/*
+    The following functions are needed only in some special applications.
+*/
+
+/*   
+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+                                     int  level,
+                                     int  method,
+                                     int  windowBits,
+                                     int  memLevel,
+                                     int  strategy));
+
+     This is another version of deflateInit with more compression options. The
+   fields next_in, zalloc, zfree and opaque must be initialized before by
+   the caller.
+
+     The method parameter is the compression method. It must be Z_DEFLATED in
+   this version of the library.
+
+     The windowBits parameter is the base two logarithm of the window size
+   (the size of the history buffer).  It should be in the range 8..15 for this
+   version of the library. Larger values of this parameter result in better
+   compression at the expense of memory usage. The default value is 15 if
+   deflateInit is used instead.
+
+     The memLevel parameter specifies how much memory should be allocated
+   for the internal compression state. memLevel=1 uses minimum memory but
+   is slow and reduces compression ratio; memLevel=9 uses maximum memory
+   for optimal speed. The default value is 8. See zconf.h for total memory
+   usage as a function of windowBits and memLevel.
+
+     The strategy parameter is used to tune the compression algorithm. Use the
+   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+   filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
+   string match).  Filtered data consists mostly of small values with a
+   somewhat random distribution. In this case, the compression algorithm is
+   tuned to compress them better. The effect of Z_FILTERED is to force more
+   Huffman coding and less string matching; it is somewhat intermediate
+   between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
+   the compression ratio but not the correctness of the compressed output even
+   if it is not set appropriately.
+
+      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
+   method). msg is set to null if there is no error message.  deflateInit2 does
+   not perform any compression: this will be done by deflate().
+*/
+                            
+ZEXTERN int ZEXPORT zlib_fs_deflateSetDictionary OF((z_streamp strm,
+						     const Bytef *dictionary,
+						     uInt  dictLength));
+/*
+     Initializes the compression dictionary from the given byte sequence
+   without producing any compressed output. This function must be called
+   immediately after deflateInit, deflateInit2 or deflateReset, before any
+   call of deflate. The compressor and decompressor must use exactly the same
+   dictionary (see inflateSetDictionary).
+
+     The dictionary should consist of strings (byte sequences) that are likely
+   to be encountered later in the data to be compressed, with the most commonly
+   used strings preferably put towards the end of the dictionary. Using a
+   dictionary is most useful when the data to be compressed is short and can be
+   predicted with good accuracy; the data can then be compressed better than
+   with the default empty dictionary.
+
+     Depending on the size of the compression data structures selected by
+   deflateInit or deflateInit2, a part of the dictionary may in effect be
+   discarded, for example if the dictionary is larger than the window size in
+   deflate or deflate2. Thus the strings most likely to be useful should be
+   put at the end of the dictionary, not at the front.
+
+     Upon return of this function, strm->adler is set to the Adler32 value
+   of the dictionary; the decompressor may later use this value to determine
+   which dictionary has been used by the compressor. (The Adler32 value
+   applies to the whole dictionary even if only a subset of the dictionary is
+   actually used by the compressor.)
+
+     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+   parameter is invalid (such as NULL dictionary) or the stream state is
+   inconsistent (for example if deflate has already been called for this stream
+   or if the compression method is bsort). deflateSetDictionary does not
+   perform any compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_deflateCopy OF((z_streamp dest,
+					    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when several compression strategies will be
+   tried, for example when there are several ways of pre-processing the input
+   data with a filter. The streams that will be discarded should then be freed
+   by calling deflateEnd.  Note that deflateCopy duplicates the internal
+   compression state which can be quite large, so this strategy is slow and
+   can consume lots of memory.
+
+     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being NULL). msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_deflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to deflateEnd followed by deflateInit,
+   but does not free and reallocate all the internal compression state.
+   The stream will keep the same compression level and any other attributes
+   that may have been set by deflateInit2.
+
+      deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being NULL).
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_deflateParams OF((z_streamp strm,
+					      int level,
+					      int strategy));
+/*
+     Dynamically update the compression level and compression strategy.  The
+   interpretation of level and strategy is as in deflateInit2.  This can be
+   used to switch between compression and straight copy of the input data, or
+   to switch to a different kind of input data requiring a different
+   strategy. If the compression level is changed, the input available so far
+   is compressed with the old level (and may be flushed); the new level will
+   take effect only at the next call of deflate().
+
+     Before the call of deflateParams, the stream state must be set as for
+   a call of deflate(), since the currently available input may have to
+   be compressed and flushed. In particular, strm->avail_out must be non-zero.
+
+     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
+   if strm->avail_out was zero.
+*/
+
+/*   
+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
+                                     int  windowBits));
+
+     This is another version of inflateInit with an extra parameter. The
+   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+   before by the caller.
+
+     The windowBits parameter is the base two logarithm of the maximum window
+   size (the size of the history buffer).  It should be in the range 8..15 for
+   this version of the library. The default value is 15 if inflateInit is used
+   instead. If a compressed stream with a larger window size is given as
+   input, inflate() will return with the error code Z_DATA_ERROR instead of
+   trying to allocate a larger window.
+
+      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
+   memLevel). msg is set to null if there is no error message.  inflateInit2
+   does not perform any decompression apart from reading the zlib header if
+   present: this will be done by inflate(). (So next_in and avail_in may be
+   modified, but next_out and avail_out are unchanged.)
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_inflateSetDictionary OF((z_streamp strm,
+						     const Bytef *dictionary,
+						     uInt  dictLength));
+/*
+     Initializes the decompression dictionary from the given uncompressed byte
+   sequence. This function must be called immediately after a call of inflate
+   if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
+   can be determined from the Adler32 value returned by this call of
+   inflate. The compressor and decompressor must use exactly the same
+   dictionary (see deflateSetDictionary).
+
+     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+   parameter is invalid (such as NULL dictionary) or the stream state is
+   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+   expected one (incorrect Adler32 value). inflateSetDictionary does not
+   perform any decompression: this will be done by subsequent calls of
+   inflate().
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_inflateSync OF((z_streamp strm));
+/* 
+    Skips invalid compressed data until a full flush point (see above the
+  description of deflate with Z_FULL_FLUSH) can be found, or until all
+  available input is skipped. No output is provided.
+
+    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
+  if no more input was provided, Z_DATA_ERROR if no flush point has been found,
+  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
+  case, the application may save the current current value of total_in which
+  indicates where valid compressed data was found. In the error case, the
+  application may repeatedly call inflateSync, providing more input each time,
+  until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_inflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to inflateEnd followed by inflateInit,
+   but does not free and reallocate all the internal decompression state.
+   The stream will keep attributes that may have been set by inflateInit2.
+
+      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being NULL).
+*/
+
+                        /* checksum functions */
+
+/*
+     These functions are not related to compression but are exported
+   anyway because they might be useful in applications using the
+   compression library.
+*/
+
+ZEXTERN uLong ZEXPORT zlib_fs_adler32 OF((uLong adler, const Bytef *buf, uInt len));
+
+/*
+     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+   return the updated checksum. If buf is NULL, this function returns
+   the required initial value for the checksum.
+   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+   much faster. Usage example:
+
+     uLong adler = adler32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       adler = adler32(adler, buffer, length);
+     }
+     if (adler != original_adler) error();
+*/
+
+ZEXTERN uLong ZEXPORT zlib_fs_crc32   OF((uLong crc, const Bytef *buf, uInt len));
+/*
+     Update a running crc with the bytes buf[0..len-1] and return the updated
+   crc. If buf is NULL, this function returns the required initial value
+   for the crc. Pre- and post-conditioning (one's complement) is performed
+   within this function so it shouldn't be done by the application.
+   Usage example:
+
+     uLong crc = crc32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       crc = crc32(crc, buffer, length);
+     }
+     if (crc != original_crc) error();
+*/
+
+
+                        /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+ZEXTERN int ZEXPORT zlib_fs_deflateInit_ OF((z_streamp strm, int level,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT zlib_fs_inflateInit_ OF((z_streamp strm,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT zlib_fs_deflateInit2_ OF((z_streamp strm, int  level, int  method,
+                                      int windowBits, int memLevel,
+                                      int strategy, const char *version,
+                                      int stream_size));
+ZEXTERN int ZEXPORT zlib_fs_inflateInit2_ OF((z_streamp strm, int  windowBits,
+                                      const char *version, int stream_size));
+#define zlib_fs_deflateInit(strm, level) \
+        zlib_fs_deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
+#define zlib_fs_inflateInit(strm) \
+        zlib_fs_inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
+#define zlib_fs_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+        zlib_fs_deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                      (strategy), ZLIB_VERSION, sizeof(z_stream))
+#define zlib_fs_inflateInit2(strm, windowBits) \
+        zlib_fs_inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
+
+
+#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
+    struct internal_state {int dummy;}; /* hack for buggy compilers */
+#endif
+
+ZEXTERN const char   * ZEXPORT zlib_fs_zError           OF((int err));
+ZEXTERN int            ZEXPORT zlib_fs_inflateSyncPoint OF((z_streamp z));
+ZEXTERN const uLongf * ZEXPORT zlib_fs_get_crc_table    OF((void));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ZLIB_H */
diff -urN linux-2.4.14-pre8/include/net/tcp.h linux/include/net/tcp.h
--- linux-2.4.14-pre8/include/net/tcp.h	Mon Dec  3 23:26:21 2001
+++ linux/include/net/tcp.h	Tue Oct 23 21:59:58 2001
@@ -568,7 +568,9 @@
 							 struct sk_buff *skb,
 							 struct open_request *req,
 							 struct dst_entry *dst);
-    
+	
+	int			(*hash_connecting)	(struct sock *sk);
+
 	int			(*remember_stamp)	(struct sock *sk);
 
 	__u16			net_header_len;
@@ -770,9 +772,8 @@
 					       struct sockaddr *uaddr,
 					       int addr_len);
 
-extern void			tcp_connect_init(struct sock *sk);
-
-extern void			tcp_connect_send(struct sock *sk, struct sk_buff *skb);
+extern int			tcp_connect(struct sock *sk,
+					    struct sk_buff *skb);
 
 extern struct sk_buff *		tcp_make_synack(struct sock *sk,
 						struct dst_entry *dst,
diff -urN linux-2.4.14-pre8/kernel/ksyms.c linux/kernel/ksyms.c
--- linux-2.4.14-pre8/kernel/ksyms.c	Mon Dec  3 23:26:21 2001
+++ linux/kernel/ksyms.c	Mon Dec  3 23:26:30 2001
@@ -116,7 +116,6 @@
 EXPORT_SYMBOL(find_vma);
 EXPORT_SYMBOL(get_unmapped_area);
 EXPORT_SYMBOL(init_mm);
-EXPORT_SYMBOL(deactivate_page);
 #ifdef CONFIG_HIGHMEM
 EXPORT_SYMBOL(kmap_high);
 EXPORT_SYMBOL(kunmap_high);
@@ -254,6 +253,7 @@
 EXPORT_SYMBOL(__find_get_page);
 EXPORT_SYMBOL(__find_lock_page);
 EXPORT_SYMBOL(grab_cache_page);
+EXPORT_SYMBOL(grab_cache_page_nowait);
 EXPORT_SYMBOL(read_cache_page);
 EXPORT_SYMBOL(vfs_readlink);
 EXPORT_SYMBOL(vfs_follow_link);
diff -urN linux-2.4.14-pre8/mm/filemap.c linux/mm/filemap.c
--- linux-2.4.14-pre8/mm/filemap.c	Mon Dec  3 23:26:21 2001
+++ linux/mm/filemap.c	Mon Dec  3 23:26:30 2001
@@ -549,6 +549,7 @@
 int fail_writepage(struct page *page)
 {
 	activate_page(page);
+	SetPageReferenced(page);
 	SetPageDirty(page);
 	UnlockPage(page);
 	return 0;
@@ -949,6 +950,51 @@
 	return find_or_create_page(mapping, index, mapping->gfp_mask);
 }
 
+
+/*
+ * Same as grab_cache_page, but do not wait if the page is unavailable.
+ * This is intended for speculative data generators, where the data can
+ * be regenerated if the page couldn't be grabbed.  This routine should
+ * be safe to call while holding the lock for another page.
+ */
+struct page *grab_cache_page_nowait(struct address_space *mapping, unsigned long index)
+{
+	struct page *page, **hash;
+
+	hash = page_hash(mapping, index);
+	page = __find_get_page(mapping, index, hash);
+
+	if ( page ) {
+		if ( !TryLockPage(page) ) {
+			/* Page found and locked */
+			/* This test is overly paranoid, but what the heck... */
+			if ( unlikely(page->mapping != mapping || page->index != index) ) {
+				/* Someone reallocated this page under us. */
+				UnlockPage(page);
+				page_cache_release(page);
+				return NULL;
+			} else {
+				return page;
+			}
+		} else {
+			/* Page locked by someone else */
+			page_cache_release(page);
+			return NULL;
+		}
+	}
+
+	page = page_cache_alloc(mapping);
+	if ( unlikely(!page) )
+		return NULL;	/* Failed to allocate a page */
+
+	if ( unlikely(add_to_page_cache_unique(page, mapping, index, hash)) ) {
+		/* Someone else grabbed the page already. */
+		page_cache_release(page);
+		return NULL;
+	}
+
+	return page;
+}
 
 #if 0
 #define PROFILE_READAHEAD
diff -urN linux-2.4.14-pre8/mm/memory.c linux/mm/memory.c
--- linux-2.4.14-pre8/mm/memory.c	Mon Dec  3 23:26:21 2001
+++ linux/mm/memory.c	Mon Dec  3 23:26:30 2001
@@ -911,7 +911,7 @@
 	if (!VALID_PAGE(old_page))
 		goto bad_wp_page;
 
-	if (PageSwapCache(old_page) && !TryLockPage(old_page)) {
+	if (!TryLockPage(old_page)) {
 		int reuse = can_share_swap_page(old_page);
 		unlock_page(old_page);
 		if (reuse) {
diff -urN linux-2.4.14-pre8/mm/mmap.c linux/mm/mmap.c
--- linux-2.4.14-pre8/mm/mmap.c	Mon Dec  3 23:26:21 2001
+++ linux/mm/mmap.c	Mon Dec  3 23:26:30 2001
@@ -73,6 +73,14 @@
 	free += nr_swap_pages;
 
 	/*
+	 * This double-counts: the nrpages are both in the page-cache
+	 * and in the swapper space. At the same time, this compensates
+	 * for the swap-space over-allocation (ie "nr_swap_pages" being
+	 * too small.
+	 */
+	free += swapper_space.nrpages;
+
+	/*
 	 * The code below doesn't account for free space in the inode
 	 * and dentry slab cache, slab cache fragmentation, inodes and
 	 * dentries which will become freeable under VM load, etc.
diff -urN linux-2.4.14-pre8/mm/page_alloc.c linux/mm/page_alloc.c
--- linux-2.4.14-pre8/mm/page_alloc.c	Mon Dec  3 23:26:21 2001
+++ linux/mm/page_alloc.c	Mon Dec  3 23:26:30 2001
@@ -386,7 +386,7 @@
 	}
 
 	/* Don't let big-order allocations loop */
-	if (order > 1)
+	if (order > 3)
 		return NULL;
 
 	/* Yield for kswapd, and try again */
diff -urN linux-2.4.14-pre8/mm/shmem.c linux/mm/shmem.c
--- linux-2.4.14-pre8/mm/shmem.c	Mon Dec  3 23:26:21 2001
+++ linux/mm/shmem.c	Mon Dec  3 23:26:30 2001
@@ -810,7 +810,6 @@
 	while (count) {
 		unsigned long bytes, index, offset;
 		char *kaddr;
-		int deactivate = 1;
 
 		/*
 		 * Try to find the page in the cache. If it isn't there,
@@ -821,7 +820,6 @@
 		bytes = PAGE_CACHE_SIZE - offset;
 		if (bytes > count) {
 			bytes = count;
-			deactivate = 0;
 		}
 
 		/*
@@ -868,8 +866,6 @@
 unlock:
 		/* Mark it unlocked again and drop the page.. */
 		UnlockPage(page);
-		if (deactivate)
-			deactivate_page(page);
 		page_cache_release(page);
 
 		if (status < 0)
diff -urN linux-2.4.14-pre8/mm/swap.c linux/mm/swap.c
--- linux-2.4.14-pre8/mm/swap.c	Mon Dec  3 23:26:21 2001
+++ linux/mm/swap.c	Mon Dec  3 23:26:30 2001
@@ -33,32 +33,6 @@
 	8,	/* do swap I/O in clusters of this size */
 };
 
-/**
- * (de)activate_page - move pages from/to active and inactive lists
- * @page: the page we want to move
- * @nolock - are we already holding the pagemap_lru_lock?
- *
- * Deactivate_page will move an active page to the right
- * inactive list, while activate_page will move a page back
- * from one of the inactive lists to the active list. If
- * called on a page which is not on any of the lists, the
- * page is left alone.
- */
-static inline void deactivate_page_nolock(struct page * page)
-{
-	if (PageActive(page)) {
-		del_page_from_active_list(page);
-		add_page_to_inactive_list(page);
-	}
-}	
-
-void deactivate_page(struct page * page)
-{
-	spin_lock(&pagemap_lru_lock);
-	deactivate_page_nolock(page);
-	spin_unlock(&pagemap_lru_lock);
-}
-
 /*
  * Move an inactive page to the active list.
  */
diff -urN linux-2.4.14-pre8/mm/vmscan.c linux/mm/vmscan.c
--- linux-2.4.14-pre8/mm/vmscan.c	Mon Dec  3 23:26:21 2001
+++ linux/mm/vmscan.c	Mon Dec  3 23:26:30 2001
@@ -541,6 +541,7 @@
 
 		del_page_from_active_list(page);
 		add_page_to_inactive_list(page);
+		SetPageReferenced(page);
 	}
 	spin_unlock(&pagemap_lru_lock);
 }
diff -urN linux-2.4.14-pre8/net/core/dv.c linux/net/core/dv.c
--- linux-2.4.14-pre8/net/core/dv.c	Tue Jul 10 16:11:43 2001
+++ linux/net/core/dv.c	Mon Dec  3 23:26:30 2001
@@ -53,7 +53,7 @@
 {
 	int alloc_size = (sizeof(struct divert_blk) + 3) & ~3;
 
-	if (!strncmp(dev->name, "eth", 3)) {
+	if (dev->type == ARPHRD_ETHER) {
 		printk(KERN_DEBUG "divert: allocating divert_blk for %s\n",
 		       dev->name);
 
diff -urN linux-2.4.14-pre8/net/ipv4/af_inet.c linux/net/ipv4/af_inet.c
--- linux-2.4.14-pre8/net/ipv4/af_inet.c	Mon Dec  3 23:26:21 2001
+++ linux/net/ipv4/af_inet.c	Mon Dec  3 23:26:30 2001
@@ -620,6 +620,13 @@
 		if (sk->state != TCP_CLOSE) 
 			goto out;
 
+		err = -EAGAIN;
+		if (sk->num == 0) {
+			if (sk->prot->get_port(sk, 0) != 0)
+				goto out;
+			sk->sport = htons(sk->num);
+		}
+
 		err = sk->prot->connect(sk, uaddr, addr_len);
 		if (err < 0)
 			goto out;
diff -urN linux-2.4.14-pre8/net/ipv4/netfilter/ipt_LOG.c linux/net/ipv4/netfilter/ipt_LOG.c
--- linux-2.4.14-pre8/net/ipv4/netfilter/ipt_LOG.c	Sun Sep 30 12:26:08 2001
+++ linux/net/ipv4/netfilter/ipt_LOG.c	Mon Dec  3 23:26:30 2001
@@ -95,7 +95,11 @@
 		printk("WINDOW=%u ", ntohs(tcph->window));
 		/* Max length: 9 "RES=0x3F " */
 		printk("RES=0x%02x ", (u_int8_t)(ntohl(tcp_flag_word(tcph) & TCP_RESERVED_BITS) >> 22));
-		/* Max length: 36 "URG ACK PSH RST SYN FIN " */
+		/* Max length: 32 "CWR ECE URG ACK PSH RST SYN FIN " */
+		if (tcph->cwr)
+			printk("CWR ");
+		if (tcph->ece)
+			printk("ECE ");
 		if (tcph->urg)
 			printk("URG ");
 		if (tcph->ack)
@@ -254,7 +258,7 @@
 
 	/* Proto    Max log string length */
 	/* IP:      40+46+6+11+127 = 230 */
-	/* TCP:     10+max(25,20+30+13+9+36+11+127) = 256 */
+	/* TCP:     10+max(25,20+30+13+9+32+11+127) = 252 */
 	/* UDP:     10+max(25,20) = 35 */
 	/* ICMP:    11+max(25, 18+25+max(19,14,24+3+n+10,3+n+10)) = 91+n */
 	/* ESP:     10+max(25)+15 = 50 */
@@ -263,7 +267,7 @@
 
 	/* (ICMP allows recursion one level deep) */
 	/* maxlen =  IP + ICMP +  IP + max(TCP,UDP,ICMP,unknown) */
-	/* maxlen = 230+   91  + 230 + 256 = 807 */
+	/* maxlen = 230+   91  + 230 + 252 = 803 */
 }
 
 static unsigned int
diff -urN linux-2.4.14-pre8/net/ipv4/tcp_ipv4.c linux/net/ipv4/tcp_ipv4.c
--- linux-2.4.14-pre8/net/ipv4/tcp_ipv4.c	Mon Dec  3 23:26:21 2001
+++ linux/net/ipv4/tcp_ipv4.c	Mon Dec  3 23:26:30 2001
@@ -337,13 +337,13 @@
 	}
 }
 
-static __inline__ void __tcp_v4_hash(struct sock *sk,const int listen_possible)
+static __inline__ void __tcp_v4_hash(struct sock *sk)
 {
 	struct sock **skp;
 	rwlock_t *lock;
 
 	BUG_TRAP(sk->pprev==NULL);
-	if(listen_possible && sk->state == TCP_LISTEN) {
+	if(sk->state == TCP_LISTEN) {
 		skp = &tcp_listening_hash[tcp_sk_listen_hashfn(sk)];
 		lock = &tcp_lhash_lock;
 		tcp_listen_wlock();
@@ -358,7 +358,7 @@
 	sk->pprev = skp;
 	sock_prot_inc_use(sk->prot);
 	write_unlock(lock);
-	if (listen_possible && sk->state == TCP_LISTEN)
+	if (sk->state == TCP_LISTEN)
 		wake_up(&tcp_lhash_wait);
 }
 
@@ -366,7 +366,7 @@
 {
 	if (sk->state != TCP_CLOSE) {
 		local_bh_disable();
-		__tcp_v4_hash(sk, 1);
+		__tcp_v4_hash(sk);
 		local_bh_enable();
 	}
 }
@@ -375,9 +375,6 @@
 {
 	rwlock_t *lock;
 
-	if (!sk->pprev) 
-		goto ende; 
-
 	if (sk->state == TCP_LISTEN) {
 		local_bh_disable();
 		tcp_listen_wlock();
@@ -396,8 +393,6 @@
 		sock_prot_dec_use(sk->prot);
 	}
 	write_unlock_bh(lock);
-
- ende:
 	if (sk->state == TCP_LISTEN)
 		wake_up(&tcp_lhash_wait);
 }
@@ -535,20 +530,19 @@
 					  skb->h.th->source);
 }
 
-/* called with local bh disabled */ 
-static int __tcp_v4_check_established(struct sock *sk, __u16 lport)
+static int tcp_v4_check_established(struct sock *sk)
 {
 	u32 daddr = sk->rcv_saddr;
 	u32 saddr = sk->daddr;
 	int dif = sk->bound_dev_if;
 	TCP_V4_ADDR_COOKIE(acookie, saddr, daddr)
-	__u32 ports = TCP_COMBINED_PORTS(sk->dport, lport);
-	int hash = tcp_hashfn(daddr, lport, saddr, sk->dport);
+	__u32 ports = TCP_COMBINED_PORTS(sk->dport, sk->num);
+	int hash = tcp_hashfn(daddr, sk->num, saddr, sk->dport);
 	struct tcp_ehash_bucket *head = &tcp_ehash[hash];
 	struct sock *sk2, **skp;
 	struct tcp_tw_bucket *tw;
 
-	write_lock(&head->lock);
+	write_lock_bh(&head->lock);
 
 	/* Check TIME-WAIT sockets first. */
 	for(skp = &(head + tcp_ehash_size)->chain; (sk2=*skp) != NULL;
@@ -601,13 +595,15 @@
 	sk->pprev = skp;
 	sk->hashent = hash;
 	sock_prot_inc_use(sk->prot);
-	write_unlock(&head->lock);
+	write_unlock_bh(&head->lock);
 
 	if (tw) {
 		/* Silly. Should hash-dance instead... */
+		local_bh_disable();
 		tcp_tw_deschedule(tw);
 		tcp_timewait_kill(tw);
 		NET_INC_STATS_BH(TimeWaitRecycled);
+		local_bh_enable();
 
 		tcp_tw_put(tw);
 	}
@@ -615,96 +611,34 @@
 	return 0;
 
 not_unique:
-	write_unlock(&head->lock);
+	write_unlock_bh(&head->lock);
 	return -EADDRNOTAVAIL;
 }
 
-/* 
- * Bind a port for a connect operation and hash it.
- */ 
-static int tcp_v4_hash_connect(struct sock *sk, struct sockaddr_in *dst)
+/* Hash SYN-SENT socket to established hash table after
+ * checking that it is unique. Note, that without kernel lock
+ * we MUST make these two operations atomically.
+ *
+ * Optimization: if it is bound and tcp_bind_bucket has the only
+ * owner (us), we need not to scan established bucket.
+ */
+
+int tcp_v4_hash_connecting(struct sock *sk)
 {
 	unsigned short snum = sk->num;
-	struct tcp_bind_hashbucket *head;
-	struct tcp_bind_bucket *tb;
+	struct tcp_bind_hashbucket *head = &tcp_bhash[tcp_bhashfn(snum)];
+	struct tcp_bind_bucket *tb = (struct tcp_bind_bucket *)sk->prev;
 
-	if (snum == 0) { 
-		int rover;
-		int low = sysctl_local_port_range[0];
-		int high = sysctl_local_port_range[1];
-		int remaining = (high - low) + 1;
-		
-		local_bh_disable(); 
-		spin_lock(&tcp_portalloc_lock); 
-		rover = tcp_port_rover;
-		
-		do {	
-			rover++;
-			if ((rover < low) || (rover > high))
-				rover = low;
-			head = &tcp_bhash[tcp_bhashfn(rover)];
-			spin_lock(&head->lock);		
-				
-			/* Does not bother with rcv_saddr checks,
-			 * because the established check is already
-			 * unique enough.  
-			 */
-			for (tb = head->chain; tb; tb = tb->next) {
-				if (tb->port == rover) { 
-					if (!tb->owners) 
-						goto ok;
-					if (!tb->fastreuse)
-						goto next_port;
-					if (!__tcp_v4_check_established(sk,rover))
-						goto ok; 
-					goto next_port; 
-				} 	
-			}		
-
-			tb = tcp_bucket_create(head, rover);
-			if (!tb) { 
-				spin_unlock(&head->lock); 
-				break;
-			}
-			goto ok; 
-
-		next_port:
-			spin_unlock(&head->lock);
-		} while (--remaining > 0);
-		tcp_port_rover = rover; 		      
-
-		spin_unlock(&tcp_portalloc_lock); 
-		local_bh_enable(); 
-
-		return -EADDRNOTAVAIL;
-
-	ok:
-		/* All locks still held and bhs disabled */ 
-		tcp_port_rover = rover; 			
-		tcp_bind_hash(sk, tb, rover);  
-		sk->sport = htons(rover); 
-		spin_unlock(&tcp_portalloc_lock); 
-		__tcp_v4_hash(sk, 0); 
-		/* fastreuse state of tb is never changed in connect */ 
-		spin_unlock(&head->lock); 
-		local_bh_enable(); 
-		return 0; 			
-	}
-		
-	head  = &tcp_bhash[tcp_bhashfn(snum)];
-	tb  = (struct tcp_bind_bucket *)sk->prev;
 	spin_lock_bh(&head->lock);
 	if (tb->owners == sk && sk->bind_next == NULL) {
-		__tcp_v4_hash(sk, 0);
+		__tcp_v4_hash(sk);
 		spin_unlock_bh(&head->lock);
 		return 0;
 	} else {
-		int ret;
-		spin_unlock(&head->lock);
+		spin_unlock_bh(&head->lock);
+
 		/* No definite answer... Walk to established hash table */
-		ret = __tcp_v4_check_established(sk, snum);
-		local_bh_enable(); 
-		return ret;
+		return tcp_v4_check_established(sk);
 	}
 }
 
@@ -713,6 +647,7 @@
 {
 	struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
 	struct sockaddr_in *usin = (struct sockaddr_in *) uaddr;
+	struct sk_buff *buff;
 	struct rtable *rt;
 	u32 daddr, nexthop;
 	int tmp;
@@ -747,6 +682,12 @@
 	if (!sk->protinfo.af_inet.opt || !sk->protinfo.af_inet.opt->srr)
 		daddr = rt->rt_dst;
 
+	err = -ENOBUFS;
+	buff = alloc_skb(MAX_TCP_HEADER + 15, sk->allocation);
+
+	if (buff == NULL)
+		goto failure;
+
 	if (!sk->saddr)
 		sk->saddr = rt->rt_src;
 	sk->rcv_saddr = sk->saddr;
@@ -788,27 +729,11 @@
 
 	tp->mss_clamp = 536;
 
-	/* Initialise common fields */ 
-	tcp_connect_init(sk);
-
-	/* Socket identity change complete, no longer
-	 * in TCP_CLOSE, so enter ourselves into the
-	 * hash tables.
-	 */
-	tcp_set_state(sk,TCP_SYN_SENT);
-	err = tcp_v4_hash_connect(sk, usin); 
-	if (!err) { 
-		struct sk_buff *buff; 
-
-		err = -ENOBUFS;
-		buff = alloc_skb(MAX_TCP_HEADER + 15, sk->allocation);
-		if (buff != NULL) { 
-			tcp_connect_send(sk, buff); 
-			return 0;
-		} 
-	} 
+	err = tcp_connect(sk, buff);
+	if (err == 0)
+		return 0;
 
-	tcp_set_state(sk, TCP_CLOSE); 
+failure:
 	__sk_dst_reset(sk);
 	sk->route_caps = 0;
 	sk->dport = 0;
@@ -1531,7 +1456,7 @@
 	newtp->advmss = dst->advmss;
 	tcp_initialize_rcv_mss(newsk);
 
-	__tcp_v4_hash(newsk, 0);
+	__tcp_v4_hash(newsk);
 	__tcp_inherit_port(sk, newsk);
 
 	return newsk;
@@ -1948,6 +1873,7 @@
 	tcp_v4_rebuild_header,
 	tcp_v4_conn_request,
 	tcp_v4_syn_recv_sock,
+	tcp_v4_hash_connecting,
 	tcp_v4_remember_stamp,
 	sizeof(struct iphdr),
 
diff -urN linux-2.4.14-pre8/net/ipv4/tcp_output.c linux/net/ipv4/tcp_output.c
--- linux-2.4.14-pre8/net/ipv4/tcp_output.c	Mon Dec  3 23:26:21 2001
+++ linux/net/ipv4/tcp_output.c	Mon Dec  3 23:26:30 2001
@@ -1157,15 +1157,14 @@
 	return skb;
 }
 
-/* 
- * Do all connect socket setups that can be done AF independent.
- * Could be inlined.
- */ 
-void tcp_connect_init(struct sock *sk)
+int tcp_connect(struct sock *sk, struct sk_buff *buff)
 {
 	struct dst_entry *dst = __sk_dst_get(sk);
 	struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
 
+	/* Reserve space for headers. */
+	skb_reserve(buff, MAX_TCP_HEADER);
+
 	/* We'll fix this up when we get a response from the other end.
 	 * See tcp_input.c:tcp_rcv_state_process case TCP_SYN_SENT.
 	 */
@@ -1192,6 +1191,14 @@
 
 	tp->rcv_ssthresh = tp->rcv_wnd;
 
+	/* Socket identity change complete, no longer
+	 * in TCP_CLOSE, so enter ourselves into the
+	 * hash tables.
+	 */
+	tcp_set_state(sk,TCP_SYN_SENT);
+	if (tp->af_specific->hash_connecting(sk))
+		goto err_out;
+
 	sk->err = 0;
 	sk->done = 0;
 	tp->snd_wnd = 0;
@@ -1205,17 +1212,6 @@
 	tp->rto = TCP_TIMEOUT_INIT;
 	tp->retransmits = 0;
 	tcp_clear_retrans(tp);
-}
-
-/*
- * Build a SYN and send it off.
- */ 
-void tcp_connect_send(struct sock *sk, struct sk_buff *buff)
-{ 
-	struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
-
-	/* Reserve space for headers. */
-	skb_reserve(buff, MAX_TCP_HEADER);
 
 	TCP_SKB_CB(buff)->flags = TCPCB_FLAG_SYN;
 	TCP_ECN_send_syn(tp, buff);
@@ -1237,6 +1233,12 @@
 
 	/* Timer for repeating the SYN until an answer. */
 	tcp_reset_xmit_timer(sk, TCP_TIME_RETRANS, tp->rto);
+	return 0;
+
+err_out:
+	tcp_set_state(sk,TCP_CLOSE);
+	kfree_skb(buff);
+	return -EADDRNOTAVAIL;
 }
 
 /* Send out a delayed ack, the caller does the policy checking
diff -urN linux-2.4.14-pre8/net/ipv6/netfilter/ip6t_LOG.c linux/net/ipv6/netfilter/ip6t_LOG.c
--- linux-2.4.14-pre8/net/ipv6/netfilter/ip6t_LOG.c	Mon Dec  3 23:26:21 2001
+++ linux/net/ipv6/netfilter/ip6t_LOG.c	Mon Dec  3 23:26:30 2001
@@ -168,7 +168,11 @@
 		printk("WINDOW=%u ", ntohs(tcph->window));
 		/* Max length: 9 "RES=0x3F " */
 		printk("RES=0x%02x ", (u_int8_t)(ntohl(tcp_flag_word(tcph) & TCP_RESERVED_BITS) >> 22));
-		/* Max length: 36 "URG ACK PSH RST SYN FIN " */
+		/* Max length: 32 "CWR ECE URG ACK PSH RST SYN FIN " */
+		if (tcph->cwr)
+			printk("CWR ");
+		if (tcph->ece)
+			printk("ECE ");
 		if (tcph->urg)
 			printk("URG ");
 		if (tcph->ack)
diff -urN linux-2.4.14-pre8/net/ipv6/tcp_ipv6.c linux/net/ipv6/tcp_ipv6.c
--- linux-2.4.14-pre8/net/ipv6/tcp_ipv6.c	Mon Dec  3 23:26:21 2001
+++ linux/net/ipv6/tcp_ipv6.c	Wed Oct 17 14:16:39 2001
@@ -5,7 +5,7 @@
  *	Authors:
  *	Pedro Roque		<roque@di.fc.ul.pt>	
  *
- *	$Id: tcp_ipv6.c,v 1.141 2001/10/26 14:51:13 davem Exp $
+ *	$Id: tcp_ipv6.c,v 1.140 2001/10/15 12:34:50 davem Exp $
  *
  *	Based on: 
  *	linux/net/ipv4/tcp.c
@@ -486,21 +486,11 @@
 	return -EADDRNOTAVAIL;
 }
 
-static int tcp_v6_hash_connect(struct sock *sk, struct sockaddr_in6 *dst)
+static int tcp_v6_hash_connecting(struct sock *sk)
 {
-	struct tcp_bind_hashbucket *head;
-	struct tcp_bind_bucket *tb;
-
-	/* XXX */ 
-	if (sk->num == 0) { 
-		int err = tcp_v6_get_port(sk, sk->num);
-		if (err)
-			return err;
-		sk->sport = htons(sk->num); 	
-	} 
-		
-	head = &tcp_bhash[tcp_bhashfn(sk->num)];
-	tb = head->chain;
+	unsigned short snum = sk->num;
+	struct tcp_bind_hashbucket *head = &tcp_bhash[tcp_bhashfn(snum)];
+	struct tcp_bind_bucket *tb = head->chain;
 
 	spin_lock_bh(&head->lock);
 
@@ -530,6 +520,7 @@
 	struct in6_addr saddr_buf;
 	struct flowi fl;
 	struct dst_entry *dst;
+	struct sk_buff *buff;
 	int addr_type;
 	int err;
 
@@ -669,6 +660,12 @@
 		tp->ext_header_len = np->opt->opt_flen+np->opt->opt_nflen;
 	tp->mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
 
+	err = -ENOBUFS;
+	buff = alloc_skb(MAX_TCP_HEADER + 15, sk->allocation);
+
+	if (buff == NULL)
+		goto failure;
+
 	sk->dport = usin->sin6_port;
 
 	/*
@@ -679,23 +676,12 @@
 		tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
 							     np->daddr.s6_addr32,
 							     sk->sport, sk->dport);
-	tcp_connect_init(sk);
-
-	tcp_set_state(sk, TCP_SYN_SENT); 
-	err = tcp_v6_hash_connect(sk, usin); 
-	if (!err) {
-		struct sk_buff *buff;
-		err = -ENOBUFS;
-		buff = alloc_skb(MAX_TCP_HEADER + 15, sk->allocation);
-		if (buff != NULL) { 
-			tcp_connect_send(sk, buff); 
-			return 0;
-		} 
-	}
 
+	err = tcp_connect(sk, buff);
+	if (err == 0)
+		return 0;
 
-	tcp_set_state(sk, TCP_CLOSE); 
- failure:
+failure:
 	__sk_dst_reset(sk);
 	sk->dport = 0;
 	sk->route_caps = 0;
@@ -1775,6 +1761,7 @@
 	tcp_v6_rebuild_header,
 	tcp_v6_conn_request,
 	tcp_v6_syn_recv_sock,
+	tcp_v6_hash_connecting,
 	tcp_v6_remember_stamp,
 	sizeof(struct ipv6hdr),
 
@@ -1794,6 +1781,7 @@
 	tcp_v4_rebuild_header,
 	tcp_v6_conn_request,
 	tcp_v6_syn_recv_sock,
+	tcp_v4_hash_connecting,
 	tcp_v4_remember_stamp,
 	sizeof(struct iphdr),
 
diff -urN linux-2.4.14-pre8/net/netsyms.c linux/net/netsyms.c
--- linux-2.4.14-pre8/net/netsyms.c	Mon Dec  3 23:26:21 2001
+++ linux/net/netsyms.c	Mon Dec  3 23:26:30 2001
@@ -361,6 +361,7 @@
 EXPORT_SYMBOL(tcp_v4_syn_recv_sock);
 EXPORT_SYMBOL(tcp_v4_do_rcv);
 EXPORT_SYMBOL(tcp_v4_connect);
+EXPORT_SYMBOL(tcp_v4_hash_connecting);
 EXPORT_SYMBOL(tcp_unhash);
 EXPORT_SYMBOL(udp_prot);
 EXPORT_SYMBOL(tcp_prot);
@@ -368,8 +369,7 @@
 EXPORT_SYMBOL(ipv4_specific);
 EXPORT_SYMBOL(tcp_simple_retransmit);
 EXPORT_SYMBOL(tcp_transmit_skb);
-EXPORT_SYMBOL(tcp_connect_init);
-EXPORT_SYMBOL(tcp_connect_send);
+EXPORT_SYMBOL(tcp_connect);
 EXPORT_SYMBOL(tcp_make_synack);
 EXPORT_SYMBOL(tcp_tw_deschedule);
 EXPORT_SYMBOL(tcp_delete_keepalive_timer);
diff -urN linux-2.4.14-pre8/net/unix/af_unix.c linux/net/unix/af_unix.c
--- linux-2.4.14-pre8/net/unix/af_unix.c	Thu Sep 20 14:12:56 2001
+++ linux/net/unix/af_unix.c	Mon Dec  3 23:26:30 2001
@@ -1317,8 +1317,8 @@
 		if (size > sk->sndbuf/2 - 64)
 			size = sk->sndbuf/2 - 64;
 
-		if (size > (128 * 1024) / 2)
-			size = (128 * 1024) / 2;
+		if (size > SKB_MAX_ALLOC)
+			size = SKB_MAX_ALLOC;
 			
 		/*
 		 *	Grab a buffer
