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
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
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.
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
SVGA HANDLING
P: Martin Mares
-M: mj@suse.cz
+M: mj@ucw.cz
L: linux-video@atrey.karlin.mff.cuni.cz
S: Maintained
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 14
-EXTRAVERSION =-pre8
+EXTRAVERSION =
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
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
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);
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
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
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();
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;
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)
--- /dev/null
+/*
+ * 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;
+}
# 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
# 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
* 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):
/*
* 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>
/*
* 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>
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;
}
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;
}
/*
* 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>
*
* 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.
-/* $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)
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;
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)
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. */
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)
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,
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,
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",
* 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)
*
* 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)
*
* 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)
*
* 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)
*
* 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)
*
* 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)
* 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)
*
* 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>
/*
* 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>
* 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>
#
# 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.
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
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
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
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
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
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
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]
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
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
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
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
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
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
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]
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
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]
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
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
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]
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
1092 Diamond Multimedia Systems
00a0 Speedstar Pro SE
00a8 Speedstar 64
+ 0550 Viper V550
08d4 Supra 2260 Modem
1092 Viper V330
6120 Maximum DVD
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
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
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
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.
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
1300 ABP940-U / ABP960-U
10cd 1310 ASC1300 SCSI Adapter
2300 ABP940-UW
+ 2500 ABP940-U2W
10ce Radius
10cf Citicorp TTI
2001 mb86605
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
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
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
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
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
1102 8051 CT4850 SBLive! Value
7002 SB Live!
1102 0020 Gameport Joystick
+ 8938 ES1371
1103 Triones Technologies, Inc.
0003 HPT343
0004 HPT366 / HPT370
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.
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
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
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
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)
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.
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]
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
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
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.
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
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
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
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)
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
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]
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
1385 Netgear
620a GA620
622a GA622
+ 630a GA630
f311 FA311
1386 Video Domain Technologies
1387 Systran Corp
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
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
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
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
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
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
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
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
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
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
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]
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
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
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
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
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
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)
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
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)
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)
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
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
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
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
00 UHCI
10 OHCI
80 Unspecified
- Fe USB Device
+ fe USB Device
04 Fibre Channel
05 SMBus
06 InfiniBand
*
* 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>
* 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,
#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
*
* 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>
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;
}
tb = NULL;
break;
}
+ tb->sg[segs].page = NULL;
tb->sg[segs].length = b_size;
got += b_size;
segs++;
normalize_buffer(STbuffer);
return FALSE;
}
+ STbuffer->sg[segs].page = NULL;
STbuffer->sg[segs].length = b_size;
STbuffer->sg_segs += 1;
got += b_size;
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;
break;
}
sclp->address = p;
+ sclp->page = NULL;
sclp->length = ret_sz;
mem_src_arr[k] = mem_src;
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);
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;
*
* Based on the PCI version:
*
- * (c) 1999--2000 Martin Mares <mj@suse.cz>
+ * (c) 1999--2000 Martin Mares <mj@ucw.cz>
*/
#include <stdio.h>
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
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
comment 'Partition Types'
source fs/partitions/Config.in
# 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
.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
.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
.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
.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
}
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*);
*
* 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):
#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.
*
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);
--- /dev/null
+/* 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 */
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;
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,
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);
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);
int fail_writepage(struct page *page)
{
activate_page(page);
+ SetPageReferenced(page);
SetPageDirty(page);
UnlockPage(page);
return 0;
}
+/*
+ * 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
#define DEBUG_READAHEAD
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) {
free += nr_free_pages();
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
}
/* Don't let big-order allocations loop */
- if (order > 1)
+ if (order > 3)
return NULL;
/* Yield for kswapd, and try again */
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,
bytes = PAGE_CACHE_SIZE - offset;
if (bytes > count) {
bytes = count;
- deactivate = 0;
}
/*
unlock:
/* Mark it unlocked again and drop the page.. */
UnlockPage(page);
- if (deactivate)
- deactivate_page(page);
page_cache_release(page);
if (status < 0)
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.
*/
del_page_from_active_list(page);
add_page_to_inactive_list(page);
+ SetPageReferenced(page);
}
spin_unlock(&pagemap_lru_lock);
}
{
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);
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;
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)
/* 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 */
/* (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
}
}
-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();
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);
}
{
if (sk->state != TCP_CLOSE) {
local_bh_disable();
- __tcp_v4_hash(sk, 1);
+ __tcp_v4_hash(sk);
local_bh_enable();
}
}
{
rwlock_t *lock;
- if (!sk->pprev)
- goto ende;
-
if (sk->state == TCP_LISTEN) {
local_bh_disable();
tcp_listen_wlock();
sock_prot_dec_use(sk->prot);
}
write_unlock_bh(lock);
-
- ende:
if (sk->state == TCP_LISTEN)
wake_up(&tcp_lhash_wait);
}
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;
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);
}
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;
-
- 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;
+ struct tcp_bind_hashbucket *head = &tcp_bhash[tcp_bhashfn(snum)];
+ struct tcp_bind_bucket *tb = (struct tcp_bind_bucket *)sk->prev;
- 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);
}
}
{
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;
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;
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;
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;
tcp_v4_rebuild_header,
tcp_v4_conn_request,
tcp_v4_syn_recv_sock,
+ tcp_v4_hash_connecting,
tcp_v4_remember_stamp,
sizeof(struct iphdr),
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.
*/
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;
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);
/* 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
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)
* 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
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);
struct in6_addr saddr_buf;
struct flowi fl;
struct dst_entry *dst;
+ struct sk_buff *buff;
int addr_type;
int err;
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;
/*
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;
tcp_v6_rebuild_header,
tcp_v6_conn_request,
tcp_v6_syn_recv_sock,
+ tcp_v6_hash_connecting,
tcp_v6_remember_stamp,
sizeof(struct ipv6hdr),
tcp_v4_rebuild_header,
tcp_v6_conn_request,
tcp_v6_syn_recv_sock,
+ tcp_v4_hash_connecting,
tcp_v4_remember_stamp,
sizeof(struct iphdr),
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);
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);
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