diff -ruN pciutils-2.1.11/ChangeLog pciutils-2.2.0/ChangeLog
--- pciutils-2.1.11/ChangeLog	2003-01-04 13:48:50 +0100
+++ pciutils-2.2.0/ChangeLog	2005-09-21 14:07:45 +0200
@@ -1,3 +1,469 @@
+2005-09-21  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.2.0.
+
+	* pci.ids: Updated copyright header.
+
+	* lib/sysfs.c (sysfs_get_resources): Removed warning about unsupported
+	64-bit addresses, they are now always supported.
+
+	* lspci.c (show_bases): Corrected printing of 64-bit addresses
+	in bus-centric mode.
+
+	* lib/configure: Enable 64-bit addresses on all Linux systems.
+
+	* lib/types.h: Don't pad 64-bit addresses to 16 xigits, only to 8 if they
+	are shorter.
+
+2005-09-11  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test11.
+
+	* lspci.c: Removed unnecessary trailing zeros in pci_lookup_name() calls.
+
+2005-09-10  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test10.
+
+	* pci.ids: Synchronized with the current database snapshot.
+
+	* update-pciids.sh: Changed the default URL for downloading pci.ids
+	to http://pciids.sourceforge.net/v2.2/pci.ids.
+
+	* lib/pci.h (PCI_LIB_VERSION): Added version identifier.
+
+	* lib/names.c: Rewritten the name database module almost from scratch.
+	Everything is much cleaner and there are hopefully no more memory leaks;
+	pci_lookup_name() now uses varargs in a backward compatible fashion.
+	Introduced PCI_LOOKUP_NO_NUMBERS.
+
+	The new code supports subsystem entries not tied to a specific device.
+	I had to extend the format of pci.ids in order to support it, so I have
+	extended the idea of the "C" (class) blocks and introduced "S" blocks
+	for subsystems. To avoid doing more incompatible changes in the future,
+	the parser skips unknown single-letter blocks without reporting errors.
+
+2005-08-23  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test9.
+
+	* Makefile (OPT): Removed -fomit-frame-pointer, it's default in recent
+	gcc versions when optimizing anyway.
+
+	* Made the path to pci.ids customizable and independent on the SHAREDIR.
+	Just override IDSDIR in the top-level Makefile.
+
+	* pci.ids: Synchronized with the current database snapshot.
+
+	* lspci.man, setpci.man: Improved the man pages. Documented all access
+	methods and which operations are privileged.
+
+	* lspci.c: Another rewrite of config register caching, now also including
+	lots of internal checks. It should be now perfectly able to cope with
+	portions of the configuration space being inaccessible, for example
+	due to insufficient access rights.
+
+	* lspci.c (show_pcix_nobridge, show_pcix_bridge): Cleaned up dumping of PCI-X
+	capabilities. Includes partial support for PCI-X 2.0 (probably incomplete
+	as I haven't seen the spec).
+
+	* lspci.c: Quell warnings about unused parameters.
+
+	* lspci.c: Removed C++ comments.
+
+	* lib/header.h: Merged definitions of extended capabilities and some new
+	PCI-X capability bits from linux-2.6.11/include/pci.h.
+
+	* lspci.c (show_caps): Try to scan extended capabilities only if the
+	device has either PCI-X or PCI Express capability in its normal capability
+	list.
+
+	* lib/dump.c (dump_init): Reading of dumps works again. The dump reader
+	now also remembers how much data it has read and refuses attempts to
+	access more than that.
+
+	* setpci.man, lspci.c, README: prefer spelling "buses" over "busses".
+
+	* lspci.c: If alloca() is not available, use xmalloc(), not malloc().
+
+	* lib/configure: Added x86_64 on Linux.
+
+2005-08-22  Martin Mares  <mj@ucw.cz>
+
+	* lib/filter.c (pci_filter_parse_slot): Fixed parsing of domain filters.
+	Thanks to Matthew Wilcox for bug report.
+
+	* lspci.c: Corrected spelling of "Hz" (it was "hz" at several places).
+	Thanks to Krzysztof Oledzki for pointing that out.
+
+2004-08-19  Martin Mares  <mj@ucw.cz>
+
+	* pciutils.spec (%attr): Setting attributes for /sbin/* is an anachronism,
+	because pciutils by default install to /usr/sbin. Update.
+
+2004-08-13  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test8.
+
+	* lib/types.h, lib/pci.h, lib/sysdep.h: `byte' and `word' are
+	no longer exported to the outside world.
+
+	* README.Windows: Updated.
+
+	* maint/release: Substitute version number in win32/config.h.
+
+	* win32/config.h: Added.
+
+	* lib/sysdep.h (bzero, strcasecmp): are macros on Windows.
+
+	* compat/getopt.[ch]: Added copies of getopt.[ch] from the GNU
+	C library for use on systems where the default libraries lack
+	proper getopt. Currently used by the Windows port.
+
+	* lib/sysdep.h, lib/types.h: Updates of the Windows port from
+	Alexander Stock.
+
+	* lib/types.h: If PCI_HAVE_Uxx_TYPES is defined, libpci doesn't define
+	its own u8, u16, u32, byte and word types and uses what the user
+	has supplied instead. With this change, all namespace clashes should
+	be gone.
+
+	* Makefile, lib/Makefile: Updated dependencies.
+
+	* pciutils.h: Include lib/sysdep.h and move NONRET et al. there.
+
+	* lib/sysdep.h: No need to include <sys/types.h> on FreeBSD, because
+	it is included unconditionally in lib/types.h.
+
+	* Moved system-dependent stuff from lib/internal.h to lib/sysdep.h,
+	which is also used by the utilities. Also moved type declarations
+	from lib/pci.h to lib/types.h.
+
+	* All files: Prepend a "PCI_" prefix in front of all configuration
+	defines to avoid namespace clashes. CAVEAT: If there is any libpci
+	application using the (undocumented) defines, it has to be updated.
+
+	* lib/Makefile: Killed HAVE_OWN_HEADER_H, since we stopped sharing
+	headers with the kernel a couple of years ago.
+
+	* lib/sysfs.c (sysfs_get_resources): We have 7 resources, not 6.
+
+	* lspci.c (show_rom): Use the same logic for printing disabled
+	or unassigned ROM's as we do in show_bases() for the other BAR's.
+
+	* lib/generic.c (pci_generic_fill_info): Better reaction to
+	invalid 64-bit addresses. Also d->hdrtype should not include
+	bit 7, which caused mysterious errors on multi-function devices.
+
+	* lib/generic.c (pci_generic_fill_info): Fill in base addresses
+	even if the regions are known to be disabled. It is the client's
+	job to interpret them. (And it is not a trivial job if you want
+	to do it correctly, since you need to check I/O and memory enables
+	on all upstream bridges, too.) However, it could be interesting to
+	introduce functions for interpreting the addresses and even for
+	mapping the regions and doing I/O on them.
+
+2004-07-30  Martin Mares  <mj@ucw.cz>
+
+	* lspci.c: HyperTransport improvements from Maciej.
+
+2004-07-11  Martin Mares  <mj@ucw.cz>
+
+	* lib/sysfs.c (sysfs_get_resources): Arguments now correspond
+	to the format string. [Patch by Bill Nottingham]
+
+2004-07-05  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test7.
+
+	* lspci.c (config_fetch): Wanted to merge Matthew's bug fix, but
+	ended up with rewriting the fetching mechanism to be fully dynamic,
+	but avoid reading config space registers not explicitly requested.
+
+2004-06-29  Matthew Wilcox <willy@debian.org>
+
+	* lspci.c: More work on PCI Express dumping.
+
+	* lib/header.h: Updated PCI Express capability definitions.
+
+	* lib/proc.c (proc_read): Removed bogus warning.
+
+	* common.c (xrealloc): Introduced.
+
+	* lspci.man: Added -xxxx.
+
+2004-06-27  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test6.
+
+	* lspci.c (show_msix), lib/header.h: Added dumping of MSI-X cap.
+	Patch by Roland Dreier <roland@topspin.com>, cleaned up by me.
+
+	* lspci.c (show_pcix_nobridge, show_pcix_bridge): Handle config_fetch()
+	failures.
+
+	* lib/header.h: Added PCI Express extended capabilities. Again by Matthew.
+
+	* lspci.c (show_express): Added dumping of PCI Express cap.
+	Patch by Matthew Wilcox.
+
+	* lib/header.h: Added a list of PCI 3.0 capabilities and also details
+	on PCI Express caps. Patch by Matthew Wilcox <willy@debian.org>.
+
+	* lspci.c (check_root): Gone. No explicit checks for root are needed,
+	report correct errors reported by the libpci instead.
+
+	* lspci.c: Added dumping of the extended config space on "-xxxx".
+	Better caching of config registers.
+
+	* setpci.c (main): Allow access to whole 4096 bytes of the config space.
+
+	* lib/sysfs.c, lib/proc.c: Don't print error messages on short reads,
+	just return the appropriate error code.
+
+	* lib: Added support for extended (4096-byte) configuration space,
+	currently implemented only in Linux proc and sysfs access methods
+	and of course in the dump reader.
+
+2004-05-29  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test5.
+
+	* lib/pci.h: Windows don't have the standard u_int* types.
+
+	* lib/internal.h: <sys/param.h> required on Windows for endianity
+	macros.
+
+	* lib/i386-ports.c: Connected i386-io-windows.h.
+
+	* lspci.c (check_root): geteuid() is not available on Windows.
+
+	* lib/i386-io-windows.h: Added Windows port contributed by Alexander
+	Stock <stock.alexander@gmx.de>.
+
+	* lib/configure: Hopefully fixed SunOS port broken by various
+	changes to the configure script.
+
+	* Makefile, lib/configure: Cross-compilation support, patch by Maciej.
+
+2004-05-28  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test4.
+
+	* lspci.c (show_verbose): Header type 1 is probably legal for all
+	types of bridges, not only for PCI-to-PCI bridges.
+
+	* lspci.c (format_agp_rate): Write "x16", not "x@".
+	(show_agp): rate[] could overflow.
+	Bugs reported by Jakub Bogusz <qboosh@pld-linux.org>.
+
+	* lspci.c (show_ht_*): Show HyperTransport capability with all its
+	details. Once again code by Maciej simplified (i.e., possibly broken)
+	by me.
+
+	* lib/header.h: Added declarations of HyperTransport capability.
+	Again thanks to Maciej.
+
+	* lspci.c: Decode all bits of the secondary status word in type 1 headers.
+	Thanks to Maciej W. Rozycki <macro@ds2.pg.gda.pl> for the patch.
+
+2003-12-27  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test3.
+
+	* lspci.man, setpci.man: Document domains and correct spelling.
+
+	* lib/dump.c (dump_init): Added ability to read domain numbers.
+
+	* lspci.c: Devices in domains different from 0 have their slot number
+	printed as "<domain>:<bus>:<slot>.<func>". Tree view supports domains
+	as well.
+
+	* lib/filter.c: Slot filters understand domains.
+
+	* lib/generic.c: Mention the domain in slot numbers in all error messages.
+
+	* lib/internal.h: The #ifdef for Linux <asm/byteorder.h> was wrong.
+
+	* lib/access.c (pci_get_dev): Added support for domains.
+
+	* lib/sysfs.c (sysfs_scan): Read vendor and device ID from the config
+	registers (or to be precise, leave it for the generic parts of the pcilib
+	to do so) instead of reading them from the sysfs. It's faster this way.
+
+	* lspci.c (show_pcix): Don't touch pci_dev->hdrtype, it's an internal
+	variable. Better read it from the config registers (it's cached anyway).
+
+	* lib/sysfs.c (sysfs_scan), lib/proc.c (proc_scan): Don't read the hdrtype.
+	  lib/generic.c (pci_generic_fill_info): If hdrtype is -1 (unset), read it.
+	  Saves lots of unnecessary file accesses.
+
+	* lib/pci.h (PCIADDR_PORT_FMT): Use %llx instead of %Lx, because the latter
+	is not supported by all C libraries.
+
+	* Makefile: Always enter the lib directory (remember that we don't have
+	full dependecies for the library in the top-level Makefile; hmmm, another
+	thing to rewrite some day).
+
+	* lib/sysfs.c: Added Linux sysfs access method based on the patch
+	written by Matthew Wilcox <willy@fc.hp.com>.
+
+	* lib/proc.c: Renamed the access method name from "/proc/bus/pci" to "Linux-proc".
+
+	* lib/pread.h: The hacks to support pread on various versions
+	of Linux libc moved there.
+
+	* lib/proc.c (proc_setup): The return value of snprintf() varies
+	between glibc versions, so we need to check both for a negative
+	values and for too large values.
+
+	* Removed last few references to the "Linux PCI Utilities", the
+	package is pretty cross-platform now :)
+
+2003-12-27  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test2.
+
+	* README, pciutils.lsm, pciutils.spec: Use @VERSION@ to make the
+	release scripts insert the current version. "make release" is gone.
+
+	* maint/release, maint/release.pm: Added a new system of scripts for
+	making releases including inter-version diffs etc.
+
+	* Makefile: Cleaned up.
+
+	* lib/fbsd-device.c: I patched another copy of this file by mistake,
+	this time the version checks should be right.
+
+2003-12-27  Martin Mares  <mj@ucw.cz>
+
+	* Released as 2.1.99-test1.
+
+	* pciutils.h, common.c, lspci.man, setpci.man, lib/internal.h:
+	Remove shadows of the syscall access method which was never
+	implemented.
+
+	* update-pciids.sh: Try to preserve permissions of the old file
+	if chmod supports --reference. Should close Debian Bug #223740.
+
+	* lib/proc.c (proc_setup): Increased path name length limit to 1024.
+	Thanks for Redhat and Mandrake for inspiration.
+
+	* lib/configure: Recognize ppc and ppc64, both have 64-bit addresses.
+	Grabbed from Redhat (Fedora) patches.
+
+2003-12-27  Martin Mares  <mj@ucw.cz>
+
+	Merged bug fixes from Debian patches:
+
+	* lspci.c (show_verbose): "Cache Line Size" should be capitalized.
+
+	* lspci.c (show_pcix_nobridge): Added a missing newline.
+
+	* lib/proc.c (proc_scan): When reading the header type, don't
+	forget to clear the topmost bit indicating that the device has
+	multiple functions.
+
+2003-12-27  Martin Mares  <mj@ucw.cz>
+
+	Updated the FreeBSD port. Thanks to Samy Al Bahra <samy@kerneled.com>
+	for the patches:
+
+	* lib/Makefile: Add ${FREEBSD_SYS} to the include path if it's defined.
+	* lib/fbsd-device.c: Select the right set of system includes according
+	to __FreeBSD_version.
+
+2003-12-27  Martin Mares  <mj@ucw.cz>
+
+	Merged support for Solaris on i386 by Bill Moore <billm@eng.sun.com>
+	and cleaned up:
+
+	* lib/configure: Recognize SunOS.
+	* lib/internal.h: Learn how to recognize byte order on SunOS.
+	* lib/i386-ports.c: Split OS-dependent I/O port access from i386-ports.c.
+	* lib/i386-io-linux.h: Linux specific part.
+	* lib/i386-io-hurd.h: GNU/Hurd specific part.
+	* lib/i386-io-sunos.h: SunOS specific part.
+
+2003-12-26  Martin Mares  <mj@ucw.cz>
+
+	* lib/header.h (PCI_*_MASK): Cast to pciaddr_t explicitly.
+
+	* lib/pci.h: Types declared in <sys/types.h> should be usable on all
+	platforms we currently support, so kill the forest of #ifdef's and
+	use them in all cases.
+
+	* lib/pci.h: Use ULONG_MASK to decide whether we should use long
+	or long long to represent a 64-bit address. Killed HAVE_LONG_ADDRESS.
+	Define format strings for addresses, port numbers and IRQ numbers
+	directly in pci.h.
+
+	* lib/proc.c (proc_scan): Use PCIADDR_T_FMT for scanf'ing addresses.
+
+2003-12-26  Marco Gerards  <metgerards@student.han.nl>
+
+	Added support for the GNU Hurd (cleaned up by Martin Mares):
+
+	* lib/configure [GNU]: Use the i386 ports for configuration access.
+	* lib/i386-ports.c: Don't call iopl() on the Hurd.
+	* lib/pci.h [OS_GNU]: Include <sys/types.h> and use it for defining
+	u8 to u32.
+
+2003-12-26  Martin Mares  <mj@ucw.cz>
+
+	* lspci.c (show_pcix_bridge, show_pcix_nobridge): Don't forget to call
+	config_fetch() to ensure that the registers have been read. Thanks to
+	Bill Wood <bill.wood@hp.com> for the patch.
+
+	* lspci.c: Ensure that failure of config_fetch() is handled correctly
+	at all places.
+
+	* lspci.man: There was one more explicit reference to /usr/share/pci.ids.
+	Changed to @SHAREDIR@. Patch from Maciej W. Rozycki <macro@ds2.pg.gda.pl>.
+
+	* setpci.c (main): Better error messages.
+
+	* setpci.c (ex_op): The demo mode should disable only writing, not reading.
+
+	* setpci.man: The documentation was inconsistent on what should -D do.
+	Document the new behaviour.
+
+	* pciutils.h, common.c, setpci.c: Introduced a NONRET macro encapsulating
+	the GCC specific __attribute__((noreturn)) and killed the hack with
+	redefining __attribute__ on non-GCC compilers.
+
+	* Makefile: Added missing dependencies. Parallel builds work now.
+	Problem reported by Andreas Haumer <andreas@xss.co.at>, but I chose
+	a different fix.
+
+	* Makefile (MANDIR): Use `:=' instead of `=' to avoid executing the shell
+	command every time $(MANDIR) is referenced.
+
+	* lspci.c (main): The error message for `lspci -s' incorrectly mentioned
+	a `-f' switch. Reported by Steve Finney <Steve.Finney@SpirentCom.COM>.
+
+	* lib/generic.c: Removed memory leak in pci_generic_bus_scan().
+	Reported by Gary Parnes <gary_parnes@terago.com>.
+
+	* Replaced obsolete syntax of __attribute__((unused)) in the middle of
+	parameter declarations (which is no longer supported by GCC 3.1) by the
+	current syntax (attribute at the end). Thanks to pixel@mandrakesoft.com
+	for reporting this problem.
+
+	* Removed CVS $Id$ tags from all files.
+
+	* Makefile: Added some more warnings.
+
+	* setpci.c: Cleaned up mask/value code.
+
+2003-12-08 Thayne Harbaugh <tharbaugh@lnxi.com>
+
+	* setpci.c: Individual bits to be set can be specified as <value>:<mask>.
+
+2003-11-29  Martin Mares  <mj@ucw.cz>
+
+	* Imported the pciutils sources to my Arch repository. Good-bye, CVS.
+
 2003-01-04  Martin Mares  <mj@ucw.cz>
 
 	* Released as 2.1.11.
diff -ruN pciutils-2.1.11/Makefile pciutils-2.2.0/Makefile
--- pciutils-2.1.11/Makefile	2003-01-04 13:53:01 +0100
+++ pciutils-2.2.0/Makefile	2005-09-21 14:04:54 +0200
@@ -1,22 +1,21 @@
-# $Id: Makefile,v 1.54 2003/01/04 12:53:01 mj Exp $
-# Makefile for Linux PCI Utilities
-# (c) 1998--2003 Martin Mares <mj@ucw.cz>
-
-OPT=-O2 -fomit-frame-pointer
-#OPT=-O2 -g
-CFLAGS=$(OPT) -Wall -W -Wno-parentheses -Wstrict-prototypes
-
-VERSION=2.1.11
-#SUFFIX=-pre2
-DATE=2003-01-04
+# Makefile for The PCI Utilities
+# (c) 1998--2005 Martin Mares <mj@ucw.cz>
+
+OPT=-O2
+CFLAGS=$(OPT) -Wall -W -Wno-parentheses -Wstrict-prototypes -Wmissing-prototypes -Winline
+
+VERSION=2.2.0
+DATE=2005-09-21
 
 PREFIX=/usr/local
 SBINDIR=$(PREFIX)/sbin
 SHAREDIR=$(PREFIX)/share
-MANDIR=$(shell if [ -d $(PREFIX)/share/man ] ; then echo $(PREFIX)/share/man ; else echo $(PREFIX)/man ; fi)
+IDSDIR=$(SHAREDIR)
+MANDIR:=$(shell if [ -d $(PREFIX)/share/man ] ; then echo $(PREFIX)/share/man ; else echo $(PREFIX)/man ; fi)
 INSTALL=install
 DIRINSTALL=install -d
-PCILIB=libpci.a
+PCILIB=lib/libpci.a
+PCIINC=lib/config.h lib/header.h lib/pci.h lib/types.h lib/sysdep.h
 
 ifeq ($(shell uname),NetBSD)
 PCILIB=libpciutils.a
@@ -29,72 +28,55 @@
 endif
 endif
 
+HOST=
+RELEASE=
+
 export
 
-all: lib lspci setpci lspci.8 setpci.8 update-pciids update-pciids.8 pci.ids
+all: $(PCILIB) lspci setpci lspci.8 setpci.8 update-pciids update-pciids.8 pci.ids
 
-lib: lib/config.h
+$(PCILIB): $(PCIINC) force
 	$(MAKE) -C lib all
 
+force:
+
 lib/config.h:
-	cd lib && ./configure $(SHAREDIR) $(VERSION)
+	cd lib && ./configure $(IDSDIR) $(VERSION) $(HOST) $(RELEASE)
 
-lspci: lspci.o common.o lib/$(PCILIB)
-setpci: setpci.o common.o lib/$(PCILIB)
+lspci: lspci.o common.o $(PCILIB)
+setpci: setpci.o common.o $(PCILIB)
 
-lspci.o: lspci.c pciutils.h
-setpci.o: setpci.c pciutils.h
-common.o: common.c pciutils.h
+lspci.o: lspci.c pciutils.h $(PCIINC)
+setpci.o: setpci.c pciutils.h $(PCIINC)
+common.o: common.c pciutils.h $(PCIINC)
 
 update-pciids: update-pciids.sh
-	sed <$< >$@ "s@^DEST=.*@DEST=$(SHAREDIR)/pci.ids@"
+	sed <$< >$@ "s@^DEST=.*@DEST=$(IDSDIR)/pci.ids@"
 
 %.8: %.man
-	M=`echo $(DATE) | sed 's/-01-/-January-/;s/-02-/-February-/;s/-03-/-March-/;s/-04-/-April-/;s/-05-/-May-/;s/-06-/-June-/;s/-07-/-July-/;s/-08-/-August-/;s/-09-/-September-/;s/-10-/-October-/;s/-11-/-November-/;s/-12-/-December-/;s/\(.*\)-\(.*\)-\(.*\)/\3 \2 \1/'` ; sed <$< >$@ "s/@TODAY@/$$M/;s/@VERSION@/pciutils-$(VERSION)$(SUFFIX)/;s#@SHAREDIR@#$(SHAREDIR)#"
+	M=`echo $(DATE) | sed 's/-01-/-January-/;s/-02-/-February-/;s/-03-/-March-/;s/-04-/-April-/;s/-05-/-May-/;s/-06-/-June-/;s/-07-/-July-/;s/-08-/-August-/;s/-09-/-September-/;s/-10-/-October-/;s/-11-/-November-/;s/-12-/-December-/;s/\(.*\)-\(.*\)-\(.*\)/\3 \2 \1/'` ; sed <$< >$@ "s/@TODAY@/$$M/;s/@VERSION@/pciutils-$(VERSION)/;s#@IDSDIR@#$(IDSDIR)#"
 
 clean:
 	rm -f `find . -name "*~" -o -name "*.[oa]" -o -name "\#*\#" -o -name TAGS -o -name core`
 	rm -f update-pciids lspci setpci lib/config.* *.8 pci.ids.*
+	rm -rf maint/dist
+
+distclean: clean
 
 install: all
 # -c is ignored on Linux, but required on FreeBSD
-	$(DIRINSTALL) -m 755 $(SBINDIR) $(SHAREDIR) $(MANDIR)/man8
+	$(DIRINSTALL) -m 755 $(SBINDIR) $(IDSDIR) $(MANDIR)/man8
 	$(INSTALL) -c -m 755 -s lspci setpci $(SBINDIR)
 	$(INSTALL) -c -m 755 update-pciids $(SBINDIR)
-	$(INSTALL) -c -m 644 pci.ids $(SHAREDIR)
+	$(INSTALL) -c -m 644 pci.ids $(IDSDIR)
 	$(INSTALL) -c -m 644 lspci.8 setpci.8 update-pciids.8 $(MANDIR)/man8
 
 uninstall: all
 	rm -f $(SBINDIR)/lspci $(SBINDIR)/setpci $(SBINDIR)/update-pciids
-	rm -f $(SHAREDIR)/pci.ids
+	rm -f $(IDSDIR)/pci.ids
 	rm -f $(MANDIR)/man8/lspci.8 $(MANDIR)/man8/setpci.8 $(MANDIR)/man8/update-pciids.8
 
 get-ids:
 	cp ~/tree/pciids/pci.ids pci.ids
 
-pci.ids:
-	@ [ -f pci.ids ] || echo >&2 "The pci.ids file is no longer part of the CVS. Please do run update-ids.sh to download them." && false
-
-release:
-	sed "s/^\\(Version:[ 	]*\\)[0-9.]*/\\1$(VERSION)/;s/^\\(Entered-date:[ 	]*\\)[0-9]*/\\1`date -d$(DATE) '+%y%m%d'`/;s/\\(pciutils-\\)[0-9.]*/\\1$(VERSION)\\./" <pciutils.lsm >pciutils.lsm.new
-	sed "s/^\\(Version:[ 	]*\\)[0-9.]*/\\1$(VERSION)/" <pciutils.spec >pciutils.spec.new
-	sed "s/\\(, version \\).*\./\\1$(VERSION)$(SUFFIX)./" <README >README.new
-	mv pciutils.lsm.new pciutils.lsm
-	mv pciutils.spec.new pciutils.spec
-	mv README.new README
-
-REL=pciutils-$(VERSION)$(SUFFIX)
-DISTTMP=/tmp/pciutils-dist
-
-dist: clean pci.ids
-	rm -rf $(DISTTMP)
-	mkdir $(DISTTMP)
-	cp -a . $(DISTTMP)/$(REL)
-	rm -rf `find $(DISTTMP)/$(REL) -name CVS -o -name tmp -o -name maint`
-	cd $(DISTTMP) ; tar czvvf /tmp/$(REL).tar.gz $(REL)
-	rm -rf $(DISTTMP)
-
-upload: dist
-	maint/upload $(REL)
-
-.PHONY: all lib clean install uninstall dist man release upload get-ids
+.PHONY: all clean distclean install uninstall get-ids force
diff -ruN pciutils-2.1.11/README pciutils-2.2.0/README
--- pciutils-2.1.11/README	2003-01-04 13:25:14 +0100
+++ pciutils-2.2.0/README	2005-09-21 14:08:42 +0200
@@ -1,6 +1,6 @@
-This package contains the PCI Utilities, version 2.1.11.
+This package contains the PCI Utilities, version 2.2.0.
 
-Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
+Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
 
 All files in this package can be freely distributed and used according
 to the terms of the GNU General Public License, either version 2 or
@@ -13,13 +13,14 @@
 configuration registers and several utilities based on this library.
 
 Currently, pciutils work on all versions of Linux and they also have somewhat
-experimental support for FreeBSD, NetBSD and AIX. It should be very easy to add
-support for other systems as well (volunteers wanted; if you want to try that,
-please send the patches to me, so that I can include them in the next version).
+experimental support for FreeBSD, NetBSD, AIX, GNU Hurd and Solaris/x86.
+It should be very easy to add support for other systems as well (volunteers
+wanted; if you want to try that, I'll be very glad to see the patches and
+include them in the next version).
 
 The utilities include:  (See manual pages for more details)
 
-  - lspci: displays detailed information about all PCI busses and devices.
+  - lspci: displays detailed information about all PCI buses and devices.
 
   - setpci: allows to read from and write to PCI device configuration
     registers. For example, you can adjust the latency timers with it.
@@ -58,16 +59,19 @@
 4. Available access methods
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 The library (and therefore all the utilities) know a variety of methods for
-accessing the PCI registers. Here is a list of them:
+accessing the PCI registers. Here is a list of them, sorted by autodetection
+priority:
 
    /proc/bus/pci	on all Linux systems since kernel 2.1.82.
-   direct port access	on all Linux systems with i386, to be used when
-			/proc/bus/pci is unavailable or you want to scan
-			the bus manually when hunting kernel bugs.
-   dumps		reading of dumps produced by `lspci -x'.
-   lsdev + odmget	used on AIX
+   /sys/bus/pci		on all Linux systems since kernel 2.5.xx.
+   direct port access	on i386 systems running Linux, GNU Hurd or Solaris/x86;
+			available only to root, useful if no other access
+			method is available or you want to hunt kernel bugs
    /dev/pci		used on FreeBSD
+   lsdev + odmget	used on AIX
    libpci		used on NetBSD
+   dumps		reading of dumps produced by `lspci -x'
+			(this one is not autodetected)
 
 
 5. Using the library
@@ -93,7 +97,7 @@
 7. Miscellanea
 ~~~~~~~~~~~~~~
 You also might want to look at the pciutils web page containing release
-notes and other news: http://atrey.karlin.mff.cuni.cz/~mj/pciutils.html .
+notes and other news: http://atrey.karlin.mff.cuni.cz/~mj/pciutils.shtml .
 
 There also exists a utility called PowerTweak which is able to fine tune
 parameters of many chipsets much better than the Bridge Optimization code
diff -ruN pciutils-2.1.11/README.Windows pciutils-2.2.0/README.Windows
--- pciutils-2.1.11/README.Windows	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/README.Windows	2004-08-13 22:52:54 +0200
@@ -0,0 +1,5 @@
+Since 2.1.99-test5, pciutils should also be compilable on Windows. Thanks
+to Alexander Stock for contributing the port.
+
+However, you need to use win32/config.h instead of the automatically
+generated lib/config.h as lib/configure does not run on Windows.
diff -ruN pciutils-2.1.11/TODO pciutils-2.2.0/TODO
--- pciutils-2.1.11/TODO	1999-05-19 14:01:30 +0200
+++ pciutils-2.2.0/TODO	2005-09-10 14:16:23 +0200
@@ -1 +1,10 @@
-- lib: "syscall" access method
+- some extended capabilities are currently only partially decoded
+- finish PCI-X 2.0 capabilities
+- finish PCI Express support
+- reading of VPD
+- change machine-readable output?
+- class 0805?
+
+PCIIDS:
+- another mirror at Atrey?
+- delete old DB at SF
diff -ruN pciutils-2.1.11/common.c pciutils-2.2.0/common.c
--- pciutils-2.1.11/common.c	2002-03-30 16:39:24 +0100
+++ pciutils-2.2.0/common.c	2004-08-13 22:16:01 +0200
@@ -1,9 +1,7 @@
 /*
- *	$Id: common.c,v 1.2 2002/03/30 15:39:24 mj Exp $
+ *	The PCI Utilities -- Common Functions
  *
- *	Linux PCI Utilities -- Common Functions
- *
- *	Copyright (c) 1997--1999 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -16,7 +14,7 @@
 
 #include "pciutils.h"
 
-void __attribute__((noreturn))
+void NONRET
 die(char *msg, ...)
 {
   va_list args;
@@ -37,18 +35,27 @@
   return p;
 }
 
+void *
+xrealloc(void *ptr, unsigned int howmuch)
+{
+  void *p = realloc(ptr, howmuch);
+  if (!p)
+    die("Unable to allocate %d bytes of memory", howmuch);
+  return p;
+}
+
 int
 parse_generic_option(int i, struct pci_access *pacc, char *optarg)
 {
   switch (i)
     {
-#ifdef HAVE_PM_LINUX_PROC
+#ifdef PCI_HAVE_PM_LINUX_PROC
     case 'P':
       pacc->method_params[PCI_ACCESS_PROC_BUS_PCI] = optarg;
       pacc->method = PCI_ACCESS_PROC_BUS_PCI;
       break;
 #endif
-#ifdef HAVE_PM_INTEL_CONF
+#ifdef PCI_HAVE_PM_INTEL_CONF
     case 'H':
       if (!strcmp(optarg, "1"))
 	pacc->method = PCI_ACCESS_I386_TYPE1;
@@ -58,12 +65,7 @@
 	die("Unknown hardware configuration type %s", optarg);
       break;
 #endif
-#ifdef HAVE_PM_SYSCALLS
-    case 'S':
-      pacc->method = PCI_ACCESS_SYSCALLS;
-      break;
-#endif
-#ifdef HAVE_PM_DUMP
+#ifdef PCI_HAVE_PM_DUMP
     case 'F':
       pacc->method_params[PCI_ACCESS_DUMP] = optarg;
       pacc->method = PCI_ACCESS_DUMP;
diff -ruN pciutils-2.1.11/compat/README pciutils-2.2.0/compat/README
--- pciutils-2.1.11/compat/README	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/compat/README	2005-09-21 14:08:42 +0200
@@ -0,0 +1,2 @@
+This directory contains implementations of standard library functions
+for systems where the default C libraries lack them.
diff -ruN pciutils-2.1.11/compat/getopt.c pciutils-2.2.0/compat/getopt.c
--- pciutils-2.1.11/compat/getopt.c	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/compat/getopt.c	2004-08-13 22:40:54 +0200
@@ -0,0 +1,693 @@
+/* Getopt for GNU.
+   NOTE: getopt is now part of the C library, so if you don't know what
+   "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
+   before changing it!
+
+   Copyright (C) 1987, 88, 89, 90, 91, 92, 1993
+   	Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef __STDC__
+#  ifndef const
+#    define const
+#  endif
+#endif
+
+/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.  */
+#ifndef _NO_PROTO
+#define _NO_PROTO
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself.  This code is part of the GNU C
+   Library, but also included in many other GNU distributions.  Compiling
+   and linking in this code is a waste when using the GNU C library
+   (especially if it is a shared library).  Rather than having every GNU
+   program understand `configure --with-gnu-libc' and omit the object files,
+   it is simpler to just do this in the source for each such file.  */
+
+#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
+
+
+/* This needs to come after some library #include
+   to get __GNU_LIBRARY__ defined.  */
+#ifdef	__GNU_LIBRARY__
+/* Don't include stdlib.h for non-GNU C libraries because some of them
+   contain conflicting prototypes for getopt.  */
+#include <stdlib.h>
+#endif				/* GNU C library.  */
+
+/* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a
+   long-named option.  Because this is not POSIX.2 compliant, it is
+   being phased out.  */
+/* #define GETOPT_COMPAT */
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+   but it behaves differently for the user, since it allows the user
+   to intersperse the options with the other arguments.
+
+   As `getopt' works, it permutes the elements of ARGV so that,
+   when it is done, all the options precede everything else.  Thus
+   all application programs are extended to handle flexible argument order.
+
+   Setting the environment variable POSIXLY_CORRECT disables permutation.
+   Then the behavior is completely standard.
+
+   GNU application programs can use a third alternative mode in which
+   they can distinguish the relative order of options and other arguments.  */
+
+#include "getopt.h"
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+char *optarg = 0;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns EOF, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+/* XXX 1003.2 says this must be 1 before any call.  */
+int optind = 0;
+
+/* The next char to be scanned in the option-element
+   in which the last option character we returned was found.
+   This allows us to pick up the scan where we left off.
+
+   If this is zero, or a null string, it means resume the scan
+   by advancing to the next ARGV-element.  */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+   for unrecognized options.  */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+   This must be initialized on some systems to avoid linking in the
+   system's own getopt implementation.  */
+
+#define BAD_OPTION '\0'
+int optopt = BAD_OPTION;
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+   If the caller did not specify anything,
+   the default is REQUIRE_ORDER if the environment variable
+   POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+   REQUIRE_ORDER means don't recognize them as options;
+   stop option processing when the first non-option is seen.
+   This is what Unix does.
+   This mode of operation is selected by either setting the environment
+   variable POSIXLY_CORRECT, or using `+' as the first character
+   of the list of option characters.
+
+   PERMUTE is the default.  We permute the contents of ARGV as we scan,
+   so that eventually all the non-options are at the end.  This allows options
+   to be given in any order, even with programs that were not written to
+   expect this.
+
+   RETURN_IN_ORDER is an option available to programs that were written
+   to expect options and other ARGV-elements in any order and that care about
+   the ordering of the two.  We describe each non-option ARGV-element
+   as if it were the argument of an option with character code 1.
+   Using `-' as the first character of the list of option characters
+   selects this mode of operation.
+
+   The special argument `--' forces an end of option-scanning regardless
+   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
+   `--' can cause `getopt' to return EOF with `optind' != ARGC.  */
+
+static enum {
+	REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+} ordering;
+
+#ifdef	__GNU_LIBRARY__
+/* We want to avoid inclusion of string.h with non-GNU libraries
+   because there are many ways it can cause trouble.
+   On some systems, it contains special magic macros that don't work
+   in GCC.  */
+#include <string.h>
+#define	my_index	strchr
+#define	my_strlen	strlen
+#else
+
+/* Avoid depending on library functions or files
+   whose names are inconsistent.  */
+
+#if __STDC__ || defined(PROTO)
+extern char *getenv(const char *name);
+extern int strcmp(const char *s1, const char *s2);
+extern int strncmp(const char *s1, const char *s2, int n);
+
+static int my_strlen(const char *s);
+static char *my_index(const char *str, int chr);
+#else
+extern char *getenv();
+#endif
+
+static int my_strlen(const char *str)
+{
+	int n = 0;
+	while (*str++)
+		n++;
+	return n;
+}
+
+static char *my_index(const char *str, int chr)
+{
+	while (*str) {
+		if (*str == chr)
+			return (char *) str;
+		str++;
+	}
+	return 0;
+}
+
+#endif				/* GNU C library.  */
+
+/* Handle permutation of arguments.  */
+
+/* Describe the part of ARGV that contains non-options that have
+   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
+   `last_nonopt' is the index after the last of them.  */
+
+static int first_nonopt;
+static int last_nonopt;
+
+/* Exchange two adjacent subsequences of ARGV.
+   One subsequence is elements [first_nonopt,last_nonopt)
+   which contains all the non-options that have been skipped so far.
+   The other is elements [last_nonopt,optind), which contains all
+   the options processed since those non-options were skipped.
+
+   `first_nonopt' and `last_nonopt' are relocated so that they describe
+   the new indices of the non-options in ARGV after they are moved.
+
+   To perform the swap, we first reverse the order of all elements. So
+   all options now come before all non options, but they are in the
+   wrong order. So we put back the options and non options in original
+   order by reversing them again. For example:
+       original input:      a b c -x -y
+       reverse all:         -y -x c b a
+       reverse options:     -x -y c b a
+       reverse non options: -x -y a b c
+*/
+
+#if __STDC__ || defined(PROTO)
+static void exchange(char **argv);
+#endif
+
+static void exchange(char **argv)
+{
+	char *temp, **first, **last;
+
+	/* Reverse all the elements [first_nonopt, optind) */
+	first = &argv[first_nonopt];
+	last = &argv[optind - 1];
+	while (first < last) {
+		temp = *first;
+		*first = *last;
+		*last = temp;
+		first++;
+		last--;
+	}
+	/* Put back the options in order */
+	first = &argv[first_nonopt];
+	first_nonopt += (optind - last_nonopt);
+	last = &argv[first_nonopt - 1];
+	while (first < last) {
+		temp = *first;
+		*first = *last;
+		*last = temp;
+		first++;
+		last--;
+	}
+
+	/* Put back the non options in order */
+	first = &argv[first_nonopt];
+	last_nonopt = optind;
+	last = &argv[last_nonopt - 1];
+	while (first < last) {
+		temp = *first;
+		*first = *last;
+		*last = temp;
+		first++;
+		last--;
+	}
+}
+
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+   given in OPTSTRING.
+
+   If an element of ARGV starts with '-', and is not exactly "-" or "--",
+   then it is an option element.  The characters of this element
+   (aside from the initial '-') are option characters.  If `getopt'
+   is called repeatedly, it returns successively each of the option characters
+   from each of the option elements.
+
+   If `getopt' finds another option character, it returns that character,
+   updating `optind' and `nextchar' so that the next call to `getopt' can
+   resume the scan with the following option character or ARGV-element.
+
+   If there are no more option characters, `getopt' returns `EOF'.
+   Then `optind' is the index in ARGV of the first ARGV-element
+   that is not an option.  (The ARGV-elements have been permuted
+   so that those that are not options now come last.)
+
+   OPTSTRING is a string containing the legitimate option characters.
+   If an option character is seen that is not listed in OPTSTRING,
+   return BAD_OPTION after printing an error message.  If you set `opterr' to
+   zero, the error message is suppressed but we still return BAD_OPTION.
+
+   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+   so the following text in the same ARGV-element, or the text of the following
+   ARGV-element, is returned in `optarg'.  Two colons mean an option that
+   wants an optional arg; if there is text in the current ARGV-element,
+   it is returned in `optarg', otherwise `optarg' is set to zero.
+
+   If OPTSTRING starts with `-' or `+', it requests different methods of
+   handling the non-option ARGV-elements.
+   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+   Long-named options begin with `--' instead of `-'.
+   Their names may be abbreviated as long as the abbreviation is unique
+   or is an exact match for some defined option.  If they have an
+   argument, it follows the option name in the same ARGV-element, separated
+   from the option name by a `=', or else the in next ARGV-element.
+   When `getopt' finds a long-named option, it returns 0 if that option's
+   `flag' field is nonzero, the value of the option's `val' field
+   if the `flag' field is zero.
+
+   The elements of ARGV aren't really const, because we permute them.
+   But we pretend they're const in the prototype to be compatible
+   with other systems.
+
+   LONGOPTS is a vector of `struct option' terminated by an
+   element containing a name which is zero.
+
+   LONGIND returns the index in LONGOPT of the long-named option found.
+   It is only valid when a long-named option has been found by the most
+   recent call.
+
+   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+   long-named options.  */
+
+int _getopt_internal(int argc, char *const *argv, const char *optstring,
+		     const struct option *longopts, int *longind, int long_only)
+{
+	int option_index;
+
+	optarg = 0;
+
+	/* Initialize the internal data when the first call is made.
+	   Start processing options with ARGV-element 1 (since ARGV-element 0
+	   is the program name); the sequence of previously skipped
+	   non-option ARGV-elements is empty.  */
+
+	if (optind == 0) {
+		first_nonopt = last_nonopt = optind = 1;
+
+		nextchar = NULL;
+
+		/* Determine how to handle the ordering of options and nonoptions.  */
+
+		if (optstring[0] == '-') {
+			ordering = RETURN_IN_ORDER;
+			++optstring;
+		} else if (optstring[0] == '+') {
+			ordering = REQUIRE_ORDER;
+			++optstring;
+		} else if (getenv("POSIXLY_CORRECT") != NULL)
+			ordering = REQUIRE_ORDER;
+		else
+			ordering = PERMUTE;
+	}
+
+	if (nextchar == NULL || *nextchar == '\0') {
+		if (ordering == PERMUTE) {
+			/* If we have just processed some options following some non-options,
+			   exchange them so that the options come first.  */
+
+			if (first_nonopt != last_nonopt && last_nonopt != optind)
+				exchange((char **) argv);
+			else if (last_nonopt != optind)
+				first_nonopt = optind;
+
+			/* Now skip any additional non-options
+			   and extend the range of non-options previously skipped.  */
+
+			while (optind < argc && (argv[optind][0] != '-' || argv[optind][1] == '\0')
+#ifdef GETOPT_COMPAT
+			       && (longopts == NULL
+				   || argv[optind][0] != '+' || argv[optind][1] == '\0')
+#endif				/* GETOPT_COMPAT */
+			    )
+				optind++;
+			last_nonopt = optind;
+		}
+
+		/* Special ARGV-element `--' means premature end of options.
+		   Skip it like a null option,
+		   then exchange with previous non-options as if it were an option,
+		   then skip everything else like a non-option.  */
+
+		if (optind != argc && !strcmp(argv[optind], "--")) {
+			optind++;
+
+			if (first_nonopt != last_nonopt && last_nonopt != optind)
+				exchange((char **) argv);
+			else if (first_nonopt == last_nonopt)
+				first_nonopt = optind;
+			last_nonopt = argc;
+
+			optind = argc;
+		}
+
+		/* If we have done all the ARGV-elements, stop the scan
+		   and back over any non-options that we skipped and permuted.  */
+
+		if (optind == argc) {
+			/* Set the next-arg-index to point at the non-options
+			   that we previously skipped, so the caller will digest them.  */
+			if (first_nonopt != last_nonopt)
+				optind = first_nonopt;
+			return EOF;
+		}
+
+		/* If we have come to a non-option and did not permute it,
+		   either stop the scan or describe it to the caller and pass it by.  */
+
+		if ((argv[optind][0] != '-' || argv[optind][1] == '\0')
+#ifdef GETOPT_COMPAT
+		    && (longopts == NULL || argv[optind][0] != '+' || argv[optind][1] == '\0')
+#endif				/* GETOPT_COMPAT */
+		    ) {
+			if (ordering == REQUIRE_ORDER)
+				return EOF;
+			optarg = argv[optind++];
+			return 1;
+		}
+
+		/* We have found another option-ARGV-element.
+		   Start decoding its characters.  */
+
+		nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-'));
+	}
+
+	if (longopts != NULL && ((argv[optind][0] == '-' && (argv[optind][1] == '-' || long_only))
+#ifdef GETOPT_COMPAT
+				 || argv[optind][0] == '+'
+#endif				/* GETOPT_COMPAT */
+	    )) {
+		const struct option *p;
+		char *s = nextchar;
+		int exact = 0;
+		int ambig = 0;
+		const struct option *pfound = NULL;
+		int indfound = 0;
+
+		while (*s && *s != '=')
+			s++;
+
+		/* Test all options for either exact match or abbreviated matches.  */
+		for (p = longopts, option_index = 0; p->name; p++, option_index++)
+			if (!strncmp(p->name, nextchar, s - nextchar)) {
+				if (s - nextchar == my_strlen(p->name)) {
+					/* Exact match found.  */
+					pfound = p;
+					indfound = option_index;
+					exact = 1;
+					break;
+				} else if (pfound == NULL) {
+					/* First nonexact match found.  */
+					pfound = p;
+					indfound = option_index;
+				} else
+					/* Second nonexact match found.  */
+					ambig = 1;
+			}
+
+		if (ambig && !exact) {
+			if (opterr)
+				fprintf(stderr, "%s: option `%s' is ambiguous\n",
+					argv[0], argv[optind]);
+			nextchar += my_strlen(nextchar);
+			optind++;
+			return BAD_OPTION;
+		}
+
+		if (pfound != NULL) {
+			option_index = indfound;
+			optind++;
+			if (*s) {
+				/* Don't test has_arg with >, because some C compilers don't
+				   allow it to be used on enums.  */
+				if (pfound->has_arg)
+					optarg = s + 1;
+				else {
+					if (opterr) {
+						if (argv[optind - 1][1] == '-')
+							/* --option */
+							fprintf(stderr,
+								"%s: option `--%s' doesn't allow an argument\n",
+								argv[0], pfound->name);
+						else
+							/* +option or -option */
+							fprintf(stderr,
+								"%s: option `%c%s' doesn't allow an argument\n",
+								argv[0], argv[optind - 1][0],
+								pfound->name);
+					}
+					nextchar += my_strlen(nextchar);
+					return BAD_OPTION;
+				}
+			} else if (pfound->has_arg == 1) {
+				if (optind < argc)
+					optarg = argv[optind++];
+				else {
+					if (opterr)
+						fprintf(stderr,
+							"%s: option `%s' requires an argument\n",
+							argv[0], argv[optind - 1]);
+					nextchar += my_strlen(nextchar);
+					return optstring[0] == ':' ? ':' : BAD_OPTION;
+				}
+			}
+			nextchar += my_strlen(nextchar);
+			if (longind != NULL)
+				*longind = option_index;
+			if (pfound->flag) {
+				*(pfound->flag) = pfound->val;
+				return 0;
+			}
+			return pfound->val;
+		}
+		/* Can't find it as a long option.  If this is not getopt_long_only,
+		   or the option starts with '--' or is not a valid short
+		   option, then it's an error.
+		   Otherwise interpret it as a short option.  */
+		if (!long_only || argv[optind][1] == '-'
+#ifdef GETOPT_COMPAT
+		    || argv[optind][0] == '+'
+#endif				/* GETOPT_COMPAT */
+		    || my_index(optstring, *nextchar) == NULL) {
+			if (opterr) {
+				if (argv[optind][1] == '-')
+					/* --option */
+					fprintf(stderr, "%s: unrecognized option `--%s'\n",
+						argv[0], nextchar);
+				else
+					/* +option or -option */
+					fprintf(stderr, "%s: unrecognized option `%c%s'\n",
+						argv[0], argv[optind][0], nextchar);
+			}
+			nextchar = (char *) "";
+			optind++;
+			return BAD_OPTION;
+		}
+	}
+
+	/* Look at and handle the next option-character.  */
+
+	{
+		char c = *nextchar++;
+		char *temp = my_index(optstring, c);
+
+		/* Increment `optind' when we start to process its last character.  */
+		if (*nextchar == '\0')
+			++optind;
+
+		if (temp == NULL || c == ':') {
+			if (opterr) {
+#if 0
+				if (c < 040 || c >= 0177)
+					fprintf(stderr,
+						"%s: unrecognized option, character code 0%o\n",
+						argv[0], c);
+				else
+					fprintf(stderr, "%s: unrecognized option `-%c'\n", argv[0],
+						c);
+#else
+				/* 1003.2 specifies the format of this message.  */
+				fprintf(stderr, "%s: illegal option -- %c\n", argv[0], c);
+#endif
+			}
+			optopt = c;
+			return BAD_OPTION;
+		}
+		if (temp[1] == ':') {
+			if (temp[2] == ':') {
+				/* This is an option that accepts an argument optionally.  */
+				if (*nextchar != '\0') {
+					optarg = nextchar;
+					optind++;
+				} else
+					optarg = 0;
+				nextchar = NULL;
+			} else {
+				/* This is an option that requires an argument.  */
+				if (*nextchar != '\0') {
+					optarg = nextchar;
+					/* If we end this ARGV-element by taking the rest as an arg,
+					   we must advance to the next element now.  */
+					optind++;
+				} else if (optind == argc) {
+					if (opterr) {
+#if 0
+						fprintf(stderr,
+							"%s: option `-%c' requires an argument\n",
+							argv[0], c);
+#else
+						/* 1003.2 specifies the format of this message.  */
+						fprintf(stderr,
+							"%s: option requires an argument -- %c\n",
+							argv[0], c);
+#endif
+					}
+					optopt = c;
+					if (optstring[0] == ':')
+						c = ':';
+					else
+						c = BAD_OPTION;
+				} else
+					/* We already incremented `optind' once;
+					   increment it again when taking next ARGV-elt as argument.  */
+					optarg = argv[optind++];
+				nextchar = NULL;
+			}
+		}
+		return c;
+	}
+}
+
+int getopt(int argc, char *const *argv, const char *optstring)
+{
+	return _getopt_internal(argc, argv, optstring, (const struct option *) 0, (int *) 0, 0);
+}
+
+int getopt_long(int argc, char *const *argv, const char *options, const struct option long_options, int *opt_index)
+{
+	return _getopt_internal(argc, argv, options, long_options, opt_index, 0);
+}
+
+#endif				/* _LIBC or not __GNU_LIBRARY__.  */
+
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+   the above definition of `getopt'.  */
+
+int main(int argc, char **argv)
+{
+	int c;
+	int digit_optind = 0;
+
+	while (1) {
+		int this_option_optind = optind ? optind : 1;
+
+		c = getopt(argc, argv, "abc:d:0123456789");
+		if (c == EOF)
+			break;
+
+		switch (c) {
+		case '0':
+		case '1':
+		case '2':
+		case '3':
+		case '4':
+		case '5':
+		case '6':
+		case '7':
+		case '8':
+		case '9':
+			if (digit_optind != 0 && digit_optind != this_option_optind)
+				printf("digits occur in two different argv-elements.\n");
+			digit_optind = this_option_optind;
+			printf("option %c\n", c);
+			break;
+
+		case 'a':
+			printf("option a\n");
+			break;
+
+		case 'b':
+			printf("option b\n");
+			break;
+
+		case 'c':
+			printf("option c with value `%s'\n", optarg);
+			break;
+
+		case BAD_OPTION:
+			break;
+
+		default:
+			printf("?? getopt returned character code 0%o ??\n", c);
+		}
+	}
+
+	if (optind < argc) {
+		printf("non-option ARGV-elements: ");
+		while (optind < argc)
+			printf("%s ", argv[optind++]);
+		printf("\n");
+	}
+
+	exit(0);
+}
+
+#endif				/* TEST */
diff -ruN pciutils-2.1.11/compat/getopt.h pciutils-2.2.0/compat/getopt.h
--- pciutils-2.1.11/compat/getopt.h	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/compat/getopt.h	2004-08-13 22:40:54 +0200
@@ -0,0 +1,127 @@
+/* Declarations for getopt.
+   Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#ifndef _GETOPT_H
+#define _GETOPT_H 1
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns EOF, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized.  */
+
+extern int optopt;
+
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of `struct option' terminated by an element containing a name which is
+   zero.
+
+   The field `has_arg' is:
+   no_argument		(or 0) if the option does not take an argument,
+   required_argument	(or 1) if the option requires an argument,
+   optional_argument 	(or 2) if the option takes an optional argument.
+
+   If the field `flag' is not NULL, it points to a variable that is set
+   to the value given in the field `val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an `int' to
+   a compiled-in constant, such as set a value from `optarg', set the
+   option's `flag' field to zero and its `val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero `flag' field, `getopt'
+   returns the contents of the `val' field.  */
+
+struct option
+{
+#if	__STDC__
+  const char *name;
+#else
+  char *name;
+#endif
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'.  */
+
+#define	no_argument		0
+#define required_argument	1
+#define optional_argument	2
+
+#if __STDC__ || defined(PROTO)
+#if defined(__GNU_LIBRARY__)
+/* Many other libraries have conflicting prototypes for getopt, with
+   differences in the consts, in stdlib.h.  To avoid compilation
+   errors, only prototype getopt for the GNU C library.  */
+extern int getopt (int argc, char *const *argv, const char *shortopts);
+#endif /* not __GNU_LIBRARY__ */
+extern int getopt_long (int argc, char *const *argv, const char *shortopts,
+		        const struct option *longopts, int *longind);
+extern int getopt_long_only (int argc, char *const *argv,
+			     const char *shortopts,
+		             const struct option *longopts, int *longind);
+
+/* Internal only.  Users should not call this directly.  */
+extern int _getopt_internal (int argc, char *const *argv,
+			     const char *shortopts,
+		             const struct option *longopts, int *longind,
+			     int long_only);
+#else /* not __STDC__ */
+extern int getopt ();
+extern int getopt_long ();
+extern int getopt_long_only ();
+
+extern int _getopt_internal ();
+#endif /* not __STDC__ */
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif /* _GETOPT_H */
diff -ruN pciutils-2.1.11/lib/Makefile pciutils-2.2.0/lib/Makefile
--- pciutils-2.1.11/lib/Makefile	2002-12-26 20:28:33 +0100
+++ pciutils-2.2.0/lib/Makefile	2004-08-13 22:29:06 +0200
@@ -1,48 +1,50 @@
-# $Id: Makefile,v 1.6 2002/12/26 19:28:33 mj Exp $
 # Makefile for The PCI Library
 # (c) 1999 Martin Mares <mj@ucw.cz>
 
 include config.mk
 
 OBJS=access.o generic.o dump.o names.o filter.o
-INCL=internal.h pci.h config.h
+INCL=internal.h pci.h config.h header.h sysdep.h types.h
 
 PCILIB=libpci.a
 
-ifdef HAVE_PM_LINUX_PROC
+ifdef PCI_HAVE_PM_LINUX_SYSFS
+OBJS += sysfs.o
+endif
+
+ifdef PCI_HAVE_PM_LINUX_PROC
 OBJS += proc.o
 endif
 
-ifdef HAVE_PM_INTEL_CONF
+ifdef PCI_HAVE_PM_INTEL_CONF
 OBJS += i386-ports.o
 endif
 
-ifdef HAVE_PM_DUMP
+ifdef PCI_HAVE_PM_DUMP
 OBJS += dump.o
 endif
 
-ifdef HAVE_PM_SYSCALLS
+ifdef PCI_HAVE_PM_SYSCALLS
 OBJS += syscalls.o
 endif
 
-ifdef HAVE_PM_FBSD_DEVICE
+ifdef PCI_HAVE_PM_FBSD_DEVICE
 OBJS += fbsd-device.o
 CFLAGS += -I/usr/src/sys
+ifdef FREEBSD_SYS
+CFLAGS += -I${FREEBSD_SYS}
+endif
 endif
 
-ifdef HAVE_PM_AIX_DEVICE
+ifdef PCI_HAVE_PM_AIX_DEVICE
 OBJS += aix-device.o
 endif
 
-ifdef HAVE_PM_NBSD_LIBPCI
+ifdef PCI_HAVE_PM_NBSD_LIBPCI
 OBJS += nbsd-libpci.o
 PCILIB=libpciutils.a
 endif
 
-ifdef HAVE_OWN_HEADER_H
-INCL += header.h
-endif
-
 all: $(PCILIB)
 
 $(PCILIB): $(OBJS)
@@ -51,8 +53,9 @@
 	ranlib $@
 
 access.o: access.c $(INCL)
-i386-ports.o: i386-ports.c $(INCL)
-proc.o: proc.c $(INCL)
+i386-ports.o: i386-ports.c $(INCL) i386-io-hurd.h i386-io-linux.h i386-io-sunos.h
+proc.o: proc.c $(INCL) pread.h
+sysfs.o: sysfs.c $(INCL) pread.h
 generic.o: generic.c $(INCL)
 syscalls.o: syscalls.c $(INCL)
 fbsd-device.o: fbsd-device.c $(INCL)
diff -ruN pciutils-2.1.11/lib/access.c pciutils-2.2.0/lib/access.c
--- pciutils-2.1.11/lib/access.c	2003-01-04 12:04:39 +0100
+++ pciutils-2.2.0/lib/access.c	2004-08-13 22:15:11 +0200
@@ -1,9 +1,7 @@
 /*
- *	$Id: access.c,v 1.10 2003/01/04 11:04:39 mj Exp $
- *
  *	The PCI Library -- User Access
  *
- *	Copyright (c) 1997--1999 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -17,34 +15,39 @@
 
 static struct pci_methods *pci_methods[PCI_ACCESS_MAX] = {
   NULL,
-#ifdef HAVE_PM_LINUX_PROC
+#ifdef PCI_HAVE_PM_LINUX_SYSFS
+  &pm_linux_sysfs,
+#else
+  NULL,
+#endif
+#ifdef PCI_HAVE_PM_LINUX_PROC
   &pm_linux_proc,
 #else
   NULL,
 #endif
-#ifdef HAVE_PM_INTEL_CONF
+#ifdef PCI_HAVE_PM_INTEL_CONF
   &pm_intel_conf1,
   &pm_intel_conf2,
 #else
   NULL,
   NULL,
 #endif
-#ifdef HAVE_PM_FBSD_DEVICE
+#ifdef PCI_HAVE_PM_FBSD_DEVICE
   &pm_fbsd_device,
 #else
   NULL,
 #endif
-#ifdef HAVE_PM_AIX_DEVICE
+#ifdef PCI_HAVE_PM_AIX_DEVICE
   &pm_aix_device,
 #else
   NULL,
 #endif
-#ifdef HAVE_PM_NBSD_LIBPCI
+#ifdef PCI_HAVE_PM_NBSD_LIBPCI
   &pm_nbsd_libpci,
 #else
   NULL,
 #endif
-#ifdef HAVE_PM_DUMP
+#ifdef PCI_HAVE_PM_DUMP
   &pm_dump,
 #else
   NULL,
@@ -58,7 +61,7 @@
   int i;
 
   bzero(a, sizeof(*a));
-  a->id_file_name = PATH_PCI_IDS;
+  a->id_file_name = PCI_PATH_IDS;
   for(i=0; i<PCI_ACCESS_MAX; i++)
     if (pci_methods[i] && pci_methods[i]->config)
       pci_methods[i]->config(a);
@@ -116,7 +119,7 @@
 }
 
 static void
-pci_null_debug(char * UNUSED msg, ...)
+pci_null_debug(char *msg UNUSED, ...)
 {
 }
 
@@ -191,6 +194,7 @@
   bzero(d, sizeof(*d));
   d->access = a;
   d->methods = a->methods;
+  d->hdrtype = -1;
   if (d->methods->init_dev)
     d->methods->init_dev(d);
   return d;
@@ -206,10 +210,11 @@
 }
 
 struct pci_dev *
-pci_get_dev(struct pci_access *a, int bus, int dev, int func)
+pci_get_dev(struct pci_access *a, int domain, int bus, int dev, int func)
 {
   struct pci_dev *d = pci_alloc_dev(a);
 
+  d->domain = domain;
   d->bus = bus;
   d->dev = dev;
   d->func = func;
diff -ruN pciutils-2.1.11/lib/aix-device.c pciutils-2.2.0/lib/aix-device.c
--- pciutils-2.1.11/lib/aix-device.c	2000-04-21 14:01:44 +0200
+++ pciutils-2.2.0/lib/aix-device.c	2004-06-27 12:42:15 +0200
@@ -222,8 +222,12 @@
 aix_read(struct pci_dev *d, int pos, byte *buf, int len)
 {
   struct mdio mdio;
-  int fd = aix_bus_open(d->access, d->bus);
+  int fd;
 
+  if (pos + len > 256)
+    return 0;
+
+  fd = aix_bus_open(d->access, d->bus);
   mdio.md_addr = (ulong) pos;
   mdio.md_size = len;
   mdio.md_incr = MV_BYTE;
@@ -240,8 +244,12 @@
 aix_write(struct pci_dev *d, int pos, byte *buf, int len)
 {
   struct mdio mdio;
-  int fd = aix_bus_open(d->access, d->bus);
+  int fd;
+
+  if (pos + len > 256)
+    return 0;
 
+  fd = aix_bus_open(d->access, d->bus);
   mdio.md_addr = (ulong) pos;
   mdio.md_size = len;
   mdio.md_incr = MV_BYTE;
diff -ruN pciutils-2.1.11/lib/configure pciutils-2.2.0/lib/configure
--- pciutils-2.1.11/lib/configure	2003-01-04 13:29:23 +0100
+++ pciutils-2.2.0/lib/configure	2005-09-21 13:42:03 +0200
@@ -10,7 +10,7 @@
 }
 
 echo_n "Configuring libpci for your system..."
-sharedir=${1:-/usr/share}
+idsdir=${1:-/usr/share}
 version=${2:-0.0}
 sys=`uname -s`
 rel=`uname -r`
@@ -20,66 +20,87 @@
 	proc=`/usr/sbin/lsdev -C -c processor -S available -F name | head -1`
 	cpu=`/usr/sbin/lsattr -F value -l $proc -a type | sed 's/_.*//'`
 else
-	cpu=`uname -m | sed 's/^i.86$/i386/;s/^sun4u$/sparc64/'`
+	cpu=`uname -m | sed 's/^i.86$/i386/;s/^sun4u$/sparc64/;s/^i86pc$/i386/'`
 fi
-echo " $sys/$cpu $rel"
+host=${3:-$cpu-$sys}
+host=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)$/\1--\2/' | tr 'A-Z' 'a-z'`
+cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+sys=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+rel=${4:-$rel}
+echo " $host $rel"
 
 c=config.h
-echo >$c "#define ARCH_`echo $cpu | tr 'a-z' 'A-Z'`"
-echo >>$c "#define OS_`echo $sys | tr 'a-z' 'A-Z'`"
+echo >$c "#define PCI_ARCH_`echo $cpu | tr 'a-z' 'A-Z'`"
+echo >>$c "#define PCI_OS_`echo $sys | tr 'a-z' 'A-Z'`"
 
 echo_n "Looking for access methods..."
 
 case $sys in
-	Linux)
+	linux*)
 		case $rel in
-			2.[1-9]*|[3-9]*)	echo_n " proc"
-						echo >>$c '#define HAVE_PM_LINUX_PROC'
-						echo >>$c '#define HAVE_LINUX_BYTEORDER_H'
-						echo >>$c '#define PATH_PROC_BUS_PCI "/proc/bus/pci"'
+			2.[1-9]*|[3-9]*)	echo_n " sysfs proc"
+						echo >>$c '#define PCI_HAVE_PM_LINUX_SYSFS'
+						echo >>$c '#define PCI_HAVE_PM_LINUX_PROC'
+						echo >>$c '#define PCI_HAVE_LINUX_BYTEORDER_H'
+						echo >>$c '#define PCI_PATH_PROC_BUS_PCI "/proc/bus/pci"'
+						echo >>$c '#define PCI_PATH_SYS_BUS_PCI "/sys/bus/pci"'
 						ok=1
 						;;
 		esac
 		case $cpu in
 				i386)		echo_n " i386-ports"
-						echo >>$c '#define HAVE_PM_INTEL_CONF'
+						echo >>$c '#define PCI_HAVE_PM_INTEL_CONF'
 						ok=1
 						;;
-				alpha|ia64)	echo >>$c '#define HAVE_64BIT_ADDRESS'
+		esac
+		echo >>$c '#define PCI_HAVE_64BIT_ADDRESS'
+		;;
+	sunos)
+		case $cpu in
+				i386)		echo_n " i386-ports"
+						echo >>$c "#define PCI_HAVE_PM_INTEL_CONF"
+						ok=1
 						;;
-				sparc|sparc64)	echo >>$c '#define HAVE_64BIT_ADDRESS'
-						echo >>$c '#define HAVE_LONG_ADDRESS'
+				*)
+						echo " The PCI library is does not support Solaris for this architecture: $cpu"
+						exit 1
 						;;
 		esac
 		;;
-	FreeBSD)
+		
+	freebsd)
 		echo_n " fbsd-device"
-		echo >>$c '#define HAVE_PM_FBSD_DEVICE'
-		echo >>$c '#define PATH_FBSD_DEVICE "/dev/pci"'
+		echo >>$c '#define PCI_HAVE_PM_FBSD_DEVICE'
+		echo >>$c '#define PCI_PATH_FBSD_DEVICE "/dev/pci"'
 		ok=1
 		;;
-	AIX)
+	aix)
 		echo_n " aix-device"
-		echo >>$c '#define HAVE_PM_AIX_DEVICE'
+		echo >>$c '#define PCI_HAVE_PM_AIX_DEVICE'
 		ok=1
 		;;
-	NetBSD)
+	netbsd)
 		echo_n " nbsd-libpci"
-		echo >>$c '#define HAVE_PM_NBSD_LIBPCI'
-		echo >>$c '#define PATH_NBSD_DEVICE "/dev/pci0"'
+		echo >>$c '#define PCI_HAVE_PM_NBSD_LIBPCI'
+		echo >>$c '#define PCI_PATH_NBSD_DEVICE "/dev/pci0"'
+		ok=1
+		;;
+    	gnu)
+		echo_n " i386-ports"
+		echo >>$c '#define PCI_HAVE_PM_INTEL_CONF'
 		ok=1
 		;;
         *)
-		echo " The PCI library currently supports only Linux, AIX, FreeBSD and NetBSD"
+		echo " Unfortunately, your OS is not supported by the PCI Library"
 		exit 1
 		;;
 esac
 
-echo >>$c '#define HAVE_PM_DUMP'
+echo >>$c '#define PCI_HAVE_PM_DUMP'
 echo " dump"
 if [ -z "$ok" ] ; then
 	echo "WARNING: No real configuration access method is available."
 fi
-echo >>$c "#define PATH_PCI_IDS \"$sharedir/pci.ids\""
+echo >>$c "#define PCI_PATH_IDS \"$idsdir/pci.ids\""
 echo >>$c "#define PCILIB_VERSION \"$version\""
 sed '/^#define [^ ]*$/!d;s/^#define \(.*\)/\1=1/' <$c >config.mk
diff -ruN pciutils-2.1.11/lib/dump.c pciutils-2.2.0/lib/dump.c
--- pciutils-2.1.11/lib/dump.c	2002-03-30 16:39:25 +0100
+++ pciutils-2.2.0/lib/dump.c	2005-08-23 21:54:57 +0200
@@ -1,9 +1,7 @@
 /*
- *	$Id: dump.c,v 1.2 2002/03/30 15:39:25 mj Exp $
- *
  *	The PCI Library -- Reading of Bus Dumps
  *
- *	Copyright (c) 1997--1999 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -15,6 +13,11 @@
 
 #include "internal.h"
 
+struct dump_data {
+  int len, allocated;
+  byte data[1];
+};
+
 static int
 dump_detect(struct pci_access *a)
 {
@@ -22,13 +25,23 @@
 }
 
 static void
+dump_alloc_data(struct pci_dev *dev, int len)
+{
+  struct dump_data *dd = pci_malloc(dev->access, sizeof(struct dump_data) + len - 1);
+  dd->allocated = len;
+  dd->len = 0;
+  memset(dd->data, 0xff, len);
+  dev->aux = dd;
+}
+
+static void
 dump_init(struct pci_access *a)
 {
   char *name = a->method_params[PCI_ACCESS_DUMP];
   FILE *f;
   char buf[256];
   struct pci_dev *dev = NULL;
-  int len, bn, dn, fn, i, j;
+  int len, mn, bn, dn, fn, i, j;
 
   if (!a)
     a->error("dump: File name not given.");
@@ -43,26 +56,41 @@
       if (z >= buf && *z == '\r')
 	*z-- = 0;
       len = z - buf + 1;
-      if (len >= 8 && buf[2] == ':' && buf[5] == '.' && buf[7] == ' ' &&
-	  sscanf(buf, "%x:%x.%d ", &bn, &dn, &fn) == 3)
+      mn = 0;
+      if ((len >= 8 && buf[2] == ':' && buf[5] == '.' && buf[7] == ' ' &&
+	   sscanf(buf, "%x:%x.%d ", &bn, &dn, &fn) == 3) ||
+	  (len >= 13 && buf[4] == ':' && buf[7] == ':' && buf[10] == '.' && buf[12] == ' ' &&
+	   sscanf(buf, "%x:%x:%x.%d", &mn, &bn, &dn, &fn) == 4))
 	{
-	  dev = pci_get_dev(a, bn, dn, fn);
-	  dev->aux = pci_malloc(a, 256);
-	  memset(dev->aux, 0xff, 256);
+	  dev = pci_get_dev(a, mn, bn, dn, fn);
+	  dump_alloc_data(dev, 256);
 	  pci_link_dev(a, dev);
 	}
       else if (!len)
 	dev = NULL;
-      else if (dev && len >= 51 && buf[2] == ':' && buf[3] == ' ' &&
+      else if (dev &&
+	       (len >= 51 && buf[2] == ':' && buf[3] == ' ' || len >= 52 && buf[3] == ':' && buf[4] == ' ') &&
 	       sscanf(buf, "%x: ", &i) == 1)
 	{
-	  z = buf+3;
+	  struct dump_data *dd = dev->aux;
+	  z = strchr(buf, ' ');
 	  while (isspace(z[0]) && isxdigit(z[1]) && isxdigit(z[2]))
 	    {
 	      z++;
 	      if (sscanf(z, "%x", &j) != 1 || i >= 256)
 		a->error("dump: Malformed line");
-	      ((byte *) dev->aux)[i++] = j;
+	      if (i >= 4096)
+		break;
+	      if (i > dd->allocated)	/* Need to re-allocate the buffer */
+		{
+		  dump_alloc_data(dev, 4096);
+		  memcpy(((struct dump_data *) dev->aux)->data, dd->data, 256);
+		  pci_mfree(dd);
+		  dd = dev->aux;
+		}
+	      dd->data[i++] = j;
+	      if (i > dd->len)
+		dd->len = i;
 	      z += 2;
 	    }
 	}
@@ -70,34 +98,36 @@
 }
 
 static void
-dump_cleanup(struct pci_access * UNUSED a)
+dump_cleanup(struct pci_access *a UNUSED)
 {
 }
 
 static void
-dump_scan(struct pci_access * UNUSED a)
+dump_scan(struct pci_access *a UNUSED)
 {
 }
 
 static int
 dump_read(struct pci_dev *d, int pos, byte *buf, int len)
 {
-  if (!d->aux)
+  struct dump_data *dd;
+  if (!(dd = d->aux))
     {
       struct pci_dev *e = d->access->devices;
       while (e && (e->bus != d->bus || e->dev != d->dev || e->func != d->func))
 	e = e->next;
-      if (e)
-	d = e;
-      else
+      if (!e)
 	return 0;
+      dd = e->aux;
     }
-  memcpy(buf, (byte *) d->aux + pos, len);
+  if (pos + len > dd->len)
+    return 0;
+  memcpy(buf, dd->data + pos, len);
   return 1;
 }
 
 static int
-dump_write(struct pci_dev * UNUSED d, int UNUSED pos, byte * UNUSED buf, int UNUSED len)
+dump_write(struct pci_dev *d UNUSED, int pos UNUSED, byte *buf UNUSED, int len UNUSED)
 {
   d->access->error("Writing to dump files is not supported.");
   return 0;
diff -ruN pciutils-2.1.11/lib/fbsd-device.c pciutils-2.2.0/lib/fbsd-device.c
--- pciutils-2.1.11/lib/fbsd-device.c	1999-07-20 16:01:31 +0200
+++ pciutils-2.2.0/lib/fbsd-device.c	2004-08-13 22:14:05 +0200
@@ -2,28 +2,34 @@
  *	The PCI Library -- FreeBSD /dev/pci access
  *
  *	Copyright (c) 1999 Jari Kirma <kirma@cs.hut.fi>
+ *	Updated in 2003 by Samy Al Bahra <samy@kerneled.com>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
 
-/*
- *      Read functionality of this driver is briefly tested, and seems
- *      to supply basic information correctly, but I promise no more.
- */
-
 #include <fcntl.h>
 #include <string.h>
 #include <unistd.h>
+#include <osreldate.h>
 
-#include <pci/pcivar.h>
-#include <pci/pci_ioctl.h>
+#if __FreeBSD_version < 500000
+#  include <pci/pcivar.h>
+#else
+#  include <dev/pci/pcivar.h>
+#endif
+
+#if __FreeBSD_version < 430000
+#  include <pci/pci_ioctl.h>
+#else
+#  include <sys/pciio.h>
+#endif
 
 #include "internal.h"
 
 static void
 fbsd_config(struct pci_access *a)
 {
-  a->method_params[PCI_ACCESS_FBSD_DEVICE] = PATH_FBSD_DEVICE;
+  a->method_params[PCI_ACCESS_FBSD_DEVICE] = PCI_PATH_FBSD_DEVICE;
 }
 
 static int
@@ -68,6 +74,9 @@
       return pci_generic_block_read(d, pos, buf, len);
     }
 
+  if (pos >= 256)
+    return 0;
+
   pi.pi_sel.pc_bus = d->bus;
   pi.pi_sel.pc_dev = d->dev;
   pi.pi_sel.pc_func = d->func;
@@ -103,6 +112,9 @@
       return pci_generic_block_write(d, pos, buf, len);
     }
 
+  if (pos >= 256)
+    return 0;
+
   pi.pi_sel.pc_bus = d->bus;
   pi.pi_sel.pc_dev = d->dev;
   pi.pi_sel.pc_func = d->func;
diff -ruN pciutils-2.1.11/lib/filter.c pciutils-2.2.0/lib/filter.c
--- pciutils-2.1.11/lib/filter.c	2002-03-30 16:39:25 +0100
+++ pciutils-2.2.0/lib/filter.c	2005-08-22 23:35:26 +0200
@@ -1,9 +1,7 @@
 /*
- *	$Id: filter.c,v 1.3 2002/03/30 15:39:25 mj Exp $
+ *	The PCI Library -- Device Filtering
  *
- *	Linux PCI Library -- Device Filtering
- *
- *	Copyright (c) 1998--2002 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1998--2003 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -14,29 +12,44 @@
 #include "internal.h"
 
 void
-pci_filter_init(struct pci_access * UNUSED a, struct pci_filter *f)
+pci_filter_init(struct pci_access *a UNUSED, struct pci_filter *f)
 {
-  f->bus = f->slot = f->func = -1;
+  f->domain = f->bus = f->slot = f->func = -1;
   f->vendor = f->device = -1;
 }
 
-/* Slot filter syntax: [[bus]:][slot][.[func]] */
+/* Slot filter syntax: [[[domain]:][bus]:][slot][.[func]] */
 
 char *
 pci_filter_parse_slot(struct pci_filter *f, char *str)
 {
-  char *colon = strchr(str, ':');
+  char *colon = strrchr(str, ':');
   char *dot = strchr((colon ? colon + 1 : str), '.');
   char *mid = str;
-  char *e;
+  char *e, *bus, *colon2;
 
   if (colon)
     {
       *colon++ = 0;
       mid = colon;
-      if (str[0] && strcmp(str, "*"))
+      colon2 = strchr(str, ':');
+      if (colon2)
+	{
+	  *colon2++ = 0;
+	  bus = colon2;
+	  if (str[0] && strcmp(str, "*"))
+	    {
+	      long int x = strtol(str, &e, 16);
+	      if ((e && *e) || (x < 0 || x > 0xffff))
+		return "Invalid domain number";
+	      f->domain = x;
+	    }
+	}
+      else
+	bus = str;
+      if (bus[0] && strcmp(bus, "*"))
 	{
-	  long int x = strtol(str, &e, 16);
+	  long int x = strtol(bus, &e, 16);
 	  if ((e && *e) || (x < 0 || x > 0xff))
 	    return "Invalid bus number";
 	  f->bus = x;
@@ -94,7 +107,8 @@
 int
 pci_filter_match(struct pci_filter *f, struct pci_dev *d)
 {
-  if ((f->bus >= 0 && f->bus != d->bus) ||
+  if ((f->domain >= 0 && f->domain != d->domain) ||
+      (f->bus >= 0 && f->bus != d->bus) ||
       (f->slot >= 0 && f->slot != d->dev) ||
       (f->func >= 0 && f->func != d->func))
     return 0;
diff -ruN pciutils-2.1.11/lib/generic.c pciutils-2.2.0/lib/generic.c
--- pciutils-2.1.11/lib/generic.c	2002-12-27 20:01:51 +0100
+++ pciutils-2.2.0/lib/generic.c	2004-08-13 22:15:23 +0200
@@ -1,6 +1,4 @@
 /*
- *	$Id: generic.c,v 1.8 2002/12/27 19:01:51 mj Exp $
- *
  *	The PCI Library -- Generic Direct Access Functions
  *
  *	Copyright (c) 1997--2000 Martin Mares <mj@ucw.cz>
@@ -16,7 +14,7 @@
 pci_generic_scan_bus(struct pci_access *a, byte *busmap, int bus)
 {
   int dev, multi, ht;
-  struct pci_dev *t = pci_alloc_dev(a);
+  struct pci_dev *t;
 
   a->debug("Scanning bus %02x for devices...\n", bus);
   if (busmap[bus])
@@ -25,6 +23,7 @@
       return;
     }
   busmap[bus] = 1;
+  t = pci_alloc_dev(a);
   t->bus = bus;
   for(dev=0; dev<32; dev++)
     {
@@ -59,10 +58,11 @@
 	      pci_generic_scan_bus(a, busmap, pci_read_byte(t, PCI_SECONDARY_BUS));
 	      break;
 	    default:
-	      a->debug("Device %02x:%02x.%d has unknown header type %02x.\n", d->bus, d->dev, d->func, ht);
+	      a->debug("Device %04x:%02x:%02x.%d has unknown header type %02x.\n", d->domain, d->bus, d->dev, d->func, ht);
 	    }
 	}
     }
+  pci_free_dev(t);
 }
 
 void
@@ -79,6 +79,8 @@
 {
   struct pci_access *a = d->access;
 
+  if ((flags & (PCI_FILL_BASES | PCI_FILL_ROM_BASE)) && d->hdrtype < 0)
+    d->hdrtype = pci_read_byte(d, PCI_HEADER_TYPE) & 0x7f;
   if (flags & PCI_FILL_IDENT)
     {
       d->vendor_id = pci_read_word(d, PCI_VENDOR_ID);
@@ -104,41 +106,32 @@
 	}
       if (cnt)
 	{
-	  u16 cmd = pci_read_word(d, PCI_COMMAND);
 	  for(i=0; i<cnt; i++)
 	    {
 	      u32 x = pci_read_long(d, PCI_BASE_ADDRESS_0 + i*4);
 	      if (!x || x == (u32) ~0)
 		continue;
-	      d->base_addr[i] = x;
-	      if (x & PCI_BASE_ADDRESS_SPACE_IO)
-		{
-		  if (!a->buscentric && !(cmd & PCI_COMMAND_IO))
-		    d->base_addr[i] = 0;
-		}
-	      else if (a->buscentric || (cmd & PCI_COMMAND_MEMORY))
+	      if ((x & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO)
+		d->base_addr[i] = x;
+	      else
 		{
-		  if ((x & PCI_BASE_ADDRESS_MEM_TYPE_MASK) == PCI_BASE_ADDRESS_MEM_TYPE_64)
+		  if ((x & PCI_BASE_ADDRESS_MEM_TYPE_MASK) != PCI_BASE_ADDRESS_MEM_TYPE_64)
+		    d->base_addr[i] = x;
+		  else if (i >= cnt-1)
+		    a->warning("%04x:%02x:%02x.%d: Invalid 64-bit address seen for BAR %d.", d->domain, d->bus, d->dev, d->func, i);
+		  else
 		    {
-		      if (i >= cnt-1)
-			a->warning("%02x:%02x.%d: Invalid 64-bit address seen.", d->bus, d->dev, d->func);
-		      else
-			{
-			  u32 y = pci_read_long(d, PCI_BASE_ADDRESS_0 + (++i)*4);
-#ifdef HAVE_64BIT_ADDRESS
-			  d->base_addr[i-1] |= ((pciaddr_t) y) << 32;
+		      u32 y = pci_read_long(d, PCI_BASE_ADDRESS_0 + (++i)*4);
+#ifdef PCI_HAVE_64BIT_ADDRESS
+		      d->base_addr[i-1] = x | (((pciaddr_t) y) << 32);
 #else
-			  if (y)
-			    {
-			      a->warning("%02x:%02x.%d 64-bit device address ignored.", d->bus, d->dev, d->func);
-			      d->base_addr[i-1] = 0;
-			    }
+		      if (y)
+			a->warning("%04x:%02x:%02x.%d 64-bit device address ignored.", d->domain, d->bus, d->dev, d->func);
+		      else
+			d->base_addr[i-1] = x;
 #endif
-			}
 		    }
 		}
-	      else
-		d->base_addr[i] = 0;
 	    }
 	}
     }
@@ -157,9 +150,9 @@
 	}
       if (reg)
 	{
-	  u32 a = pci_read_long(d, reg);
-	  if (a & PCI_ROM_ADDRESS_ENABLE)
-	    d->rom_base_addr = a;
+	  u32 u = pci_read_long(d, reg);
+	  if (u != 0xffffffff)
+	    d->rom_base_addr = u;
 	}
     }
   return flags & ~PCI_FILL_SIZES;
diff -ruN pciutils-2.1.11/lib/header.h pciutils-2.2.0/lib/header.h
--- pciutils-2.1.11/lib/header.h	2002-12-26 21:24:50 +0100
+++ pciutils-2.2.0/lib/header.h	2005-08-23 23:21:22 +0200
@@ -1,9 +1,7 @@
 /*
- *	$Id: header.h,v 1.9 2002/12/26 20:24:50 mj Exp $
+ *	The PCI Library -- PCI Header Structure (based on <linux/pci.h>)
  *
- *	The PCI Library -- PCI Header Structure (extracted from <linux/pci.h>)
- *
- *	Copyright (c) 1997--2002 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -80,8 +78,8 @@
 #define  PCI_BASE_ADDRESS_MEM_TYPE_1M	0x02	/* Below 1M [obsolete] */
 #define  PCI_BASE_ADDRESS_MEM_TYPE_64	0x04	/* 64 bit address */
 #define  PCI_BASE_ADDRESS_MEM_PREFETCH	0x08	/* prefetchable? */
-#define  PCI_BASE_ADDRESS_MEM_MASK	(~0x0fUL)
-#define  PCI_BASE_ADDRESS_IO_MASK	(~0x03UL)
+#define  PCI_BASE_ADDRESS_MEM_MASK	(~(pciaddr_t)0x0f)
+#define  PCI_BASE_ADDRESS_IO_MASK	(~(pciaddr_t)0x03)
 /* bit 1 is reserved if address_space = 1 */
 
 /* Header type 0 (normal devices) */
@@ -90,7 +88,7 @@
 #define PCI_SUBSYSTEM_ID	0x2e  
 #define PCI_ROM_ADDRESS		0x30	/* Bits 31..11 are address, 10..1 reserved */
 #define  PCI_ROM_ADDRESS_ENABLE	0x01
-#define PCI_ROM_ADDRESS_MASK	(~0x7ffUL)
+#define PCI_ROM_ADDRESS_MASK	(~(pciaddr_t)0x7ff)
 
 #define PCI_CAPABILITY_LIST	0x34	/* Offset of first capability list entry */
 
@@ -111,7 +109,7 @@
 #define  PCI_IO_RANGE_TYPE_16	0x00
 #define  PCI_IO_RANGE_TYPE_32	0x01
 #define  PCI_IO_RANGE_MASK	~0x0f
-#define PCI_SEC_STATUS		0x1e	/* Secondary status register, only bit 14 used */
+#define PCI_SEC_STATUS		0x1e	/* Secondary status register */
 #define PCI_MEMORY_BASE		0x20	/* Memory range behind */
 #define PCI_MEMORY_LIMIT	0x22
 #define  PCI_MEMORY_RANGE_TYPE_MASK 0x0f
@@ -186,10 +184,24 @@
 #define  PCI_CAP_ID_MSI		0x05	/* Message Signalled Interrupts */
 #define  PCI_CAP_ID_CHSWP	0x06	/* CompactPCI HotSwap */
 #define  PCI_CAP_ID_PCIX        0x07    /* PCI-X */
+#define  PCI_CAP_ID_HT          0x08    /* HyperTransport */
+#define  PCI_CAP_ID_VNDR	0x09	/* Vendor specific */
+#define  PCI_CAP_ID_DBG		0x0A	/* Debug port */
+#define  PCI_CAP_ID_CCRC	0x0B	/* CompactPCI Central Resource Control */
+#define  PCI_CAP_ID_AGP3	0x0E	/* AGP 8x */
+#define  PCI_CAP_ID_EXP		0x10	/* PCI Express */
+#define  PCI_CAP_ID_MSIX	0x11	/* MSI-X */
 #define PCI_CAP_LIST_NEXT	1	/* Next capability in the list */
 #define PCI_CAP_FLAGS		2	/* Capability defined flags (16 bits) */
 #define PCI_CAP_SIZEOF		4
 
+/* Capabilities residing in the PCI Express extended configuration space */
+
+#define PCI_EXT_CAP_ID_AER	0x01	/* Advanced Error Reporting */
+#define PCI_EXT_CAP_ID_VC	0x02	/* Virtual Channel */
+#define PCI_EXT_CAP_ID_DSN	0x03	/* Device Serial Number */
+#define PCI_EXT_CAP_ID_PB	0x04	/* Power Budgeting */
+
 /* Power Management Registers */
 
 #define  PCI_PM_CAP_VER_MASK	0x0007	/* Version (2=PM1.1) */
@@ -288,7 +300,8 @@
 #define PCI_PCIX_STATUS_DESIGNED_MAX_OUTSTANDING_SPLIT_TRANS   0x03800000
 #define PCI_PCIX_STATUS_DESIGNED_MAX_CUMULATIVE_READ_SIZE      0x1c000000
 #define PCI_PCIX_STATUS_RCVD_SC_ERR_MESS                       0x20000000 /* Received Split Completion Error Message */
-#define PCI_PCIX_STATUS_RESERVED                               0xc0000000
+#define PCI_PCIX_STATUS_266MHZ				       0x40000000 /* 266 MHz capable */
+#define PCI_PCIX_STATUS_533MHZ				       0x80000000 /* 533 MHz capable */
 #define PCI_PCIX_SIZEOF		4
 
 /* PCI-X Bridges */
@@ -318,6 +331,507 @@
 #define PCI_PCIX_BRIDGE_STR_COMMITMENT_LIMIT                   0xffff0000
 #define PCI_PCIX_BRIDGE_SIZEOF 12
 
+/* HyperTransport (as of spec rev. 2.00) */
+#define PCI_HT_CMD		2	/* Command Register */
+#define  PCI_HT_CMD_TYP_HI	0xe000	/* Capability Type high part */
+#define  PCI_HT_CMD_TYP_HI_PRI	0x0000	/* Slave or Primary Interface */
+#define  PCI_HT_CMD_TYP_HI_SEC	0x2000	/* Host or Secondary Interface */
+#define  PCI_HT_CMD_TYP		0xf800	/* Capability Type */
+#define  PCI_HT_CMD_TYP_SW	0x4000	/* Switch */
+#define  PCI_HT_CMD_TYP_IDC	0x8000	/* Interrupt Discovery and Configuration */
+#define  PCI_HT_CMD_TYP_RID	0x8800	/* Revision ID */
+#define  PCI_HT_CMD_TYP_UIDC	0x9000	/* UnitID Clumping */
+#define  PCI_HT_CMD_TYP_ECSA	0x9800	/* Extended Configuration Space Access */
+#define  PCI_HT_CMD_TYP_AM	0xa000	/* Address Mapping */
+#define  PCI_HT_CMD_TYP_MSIM	0xa800	/* MSI Mapping */
+#define  PCI_HT_CMD_TYP_DR	0xb000	/* DirectRoute */
+#define  PCI_HT_CMD_TYP_VCS	0xb800	/* VCSet */
+#define  PCI_HT_CMD_TYP_RM	0xc000	/* Retry Mode */
+#define  PCI_HT_CMD_TYP_X86	0xc800	/* X86 (reserved) */
+
+					/* Link Control Register */
+#define  PCI_HT_LCTR_CFLE	0x0002	/* CRC Flood Enable */
+#define  PCI_HT_LCTR_CST	0x0004	/* CRC Start Test */
+#define  PCI_HT_LCTR_CFE	0x0008	/* CRC Force Error */
+#define  PCI_HT_LCTR_LKFAIL	0x0010	/* Link Failure */
+#define  PCI_HT_LCTR_INIT	0x0020	/* Initialization Complete */
+#define  PCI_HT_LCTR_EOC	0x0040	/* End of Chain */
+#define  PCI_HT_LCTR_TXO	0x0080	/* Transmitter Off */
+#define  PCI_HT_LCTR_CRCERR	0x0f00	/* CRC Error */
+#define  PCI_HT_LCTR_ISOCEN	0x1000	/* Isochronous Flow Control Enable */
+#define  PCI_HT_LCTR_LSEN	0x2000	/* LDTSTOP# Tristate Enable */
+#define  PCI_HT_LCTR_EXTCTL	0x4000	/* Extended CTL Time */
+#define  PCI_HT_LCTR_64B	0x8000	/* 64-bit Addressing Enable */
+
+					/* Link Configuration Register */
+#define  PCI_HT_LCNF_MLWI	0x0007	/* Max Link Width In */
+#define  PCI_HT_LCNF_LW_8B	0x0	/* Link Width 8 bits */
+#define  PCI_HT_LCNF_LW_16B	0x1	/* Link Width 16 bits */
+#define  PCI_HT_LCNF_LW_32B	0x3	/* Link Width 32 bits */
+#define  PCI_HT_LCNF_LW_2B	0x4	/* Link Width 2 bits */
+#define  PCI_HT_LCNF_LW_4B	0x5	/* Link Width 4 bits */
+#define  PCI_HT_LCNF_LW_NC	0x7	/* Link physically not connected */
+#define  PCI_HT_LCNF_DFI	0x0008	/* Doubleword Flow Control In */
+#define  PCI_HT_LCNF_MLWO	0x0070	/* Max Link Width Out */
+#define  PCI_HT_LCNF_DFO	0x0080	/* Doubleword Flow Control Out */
+#define  PCI_HT_LCNF_LWI	0x0700	/* Link Width In */
+#define  PCI_HT_LCNF_DFIE	0x0800	/* Doubleword Flow Control In Enable */
+#define  PCI_HT_LCNF_LWO	0x7000	/* Link Width Out */
+#define  PCI_HT_LCNF_DFOE	0x8000	/* Doubleword Flow Control Out Enable */
+
+					/* Revision ID Register */
+#define  PCI_HT_RID_MIN		0x1f	/* Minor Revision */
+#define  PCI_HT_RID_MAJ		0xe0	/* Major Revision */
+
+					/* Link Frequency/Error Register */
+#define  PCI_HT_LFRER_FREQ	0x0f	/* Transmitter Clock Frequency */
+#define  PCI_HT_LFRER_200	0x00	/* 200MHz */
+#define  PCI_HT_LFRER_300	0x01	/* 300MHz */
+#define  PCI_HT_LFRER_400	0x02	/* 400MHz */
+#define  PCI_HT_LFRER_500	0x03	/* 500MHz */
+#define  PCI_HT_LFRER_600	0x04	/* 600MHz */
+#define  PCI_HT_LFRER_800	0x05	/* 800MHz */
+#define  PCI_HT_LFRER_1000	0x06	/* 1.0GHz */
+#define  PCI_HT_LFRER_1200	0x07	/* 1.2GHz */
+#define  PCI_HT_LFRER_1400	0x08	/* 1.4GHz */
+#define  PCI_HT_LFRER_1600	0x09	/* 1.6GHz */
+#define  PCI_HT_LFRER_VEND	0x0f	/* Vendor-Specific */
+#define  PCI_HT_LFRER_ERR	0xf0	/* Link Error */
+#define  PCI_HT_LFRER_PROT	0x10	/* Protocol Error */
+#define  PCI_HT_LFRER_OV	0x20	/* Overflow Error */
+#define  PCI_HT_LFRER_EOC	0x40	/* End of Chain Error */
+#define  PCI_HT_LFRER_CTLT	0x80	/* CTL Timeout */
+
+					/* Link Frequency Capability Register */
+#define  PCI_HT_LFCAP_200	0x0001	/* 200MHz */
+#define  PCI_HT_LFCAP_300	0x0002	/* 300MHz */
+#define  PCI_HT_LFCAP_400	0x0004	/* 400MHz */
+#define  PCI_HT_LFCAP_500	0x0008	/* 500MHz */
+#define  PCI_HT_LFCAP_600	0x0010	/* 600MHz */
+#define  PCI_HT_LFCAP_800	0x0020	/* 800MHz */
+#define  PCI_HT_LFCAP_1000	0x0040	/* 1.0GHz */
+#define  PCI_HT_LFCAP_1200	0x0080	/* 1.2GHz */
+#define  PCI_HT_LFCAP_1400	0x0100	/* 1.4GHz */
+#define  PCI_HT_LFCAP_1600	0x0200	/* 1.6GHz */
+#define  PCI_HT_LFCAP_VEND	0x8000	/* Vendor-Specific */
+
+					/* Feature Register */
+#define  PCI_HT_FTR_ISOCFC	0x0001	/* Isochronous Flow Control Mode */
+#define  PCI_HT_FTR_LDTSTOP	0x0002	/* LDTSTOP# Supported */
+#define  PCI_HT_FTR_CRCTM	0x0004	/* CRC Test Mode */
+#define  PCI_HT_FTR_ECTLT	0x0008	/* Extended CTL Time Required */
+#define  PCI_HT_FTR_64BA	0x0010	/* 64-bit Addressing */
+#define  PCI_HT_FTR_UIDRD	0x0020	/* UnitID Reorder Disable */
+
+					/* Error Handling Register */
+#define  PCI_HT_EH_PFLE		0x0001	/* Protocol Error Flood Enable */
+#define  PCI_HT_EH_OFLE		0x0002	/* Overflow Error Flood Enable */
+#define  PCI_HT_EH_PFE		0x0004	/* Protocol Error Fatal Enable */
+#define  PCI_HT_EH_OFE		0x0008	/* Overflow Error Fatal Enable */
+#define  PCI_HT_EH_EOCFE	0x0010	/* End of Chain Error Fatal Enable */
+#define  PCI_HT_EH_RFE		0x0020	/* Response Error Fatal Enable */
+#define  PCI_HT_EH_CRCFE	0x0040	/* CRC Error Fatal Enable */
+#define  PCI_HT_EH_SERRFE	0x0080	/* System Error Fatal Enable (B */
+#define  PCI_HT_EH_CF		0x0100	/* Chain Fail */
+#define  PCI_HT_EH_RE		0x0200	/* Response Error */
+#define  PCI_HT_EH_PNFE		0x0400	/* Protocol Error Nonfatal Enable */
+#define  PCI_HT_EH_ONFE		0x0800	/* Overflow Error Nonfatal Enable */
+#define  PCI_HT_EH_EOCNFE	0x1000	/* End of Chain Error Nonfatal Enable */
+#define  PCI_HT_EH_RNFE		0x2000	/* Response Error Nonfatal Enable */
+#define  PCI_HT_EH_CRCNFE	0x4000	/* CRC Error Nonfatal Enable */
+#define  PCI_HT_EH_SERRNFE	0x8000	/* System Error Nonfatal Enable */
+
+/* HyperTransport: Slave or Primary Interface */
+#define PCI_HT_PRI_CMD		2	/* Command Register */
+#define  PCI_HT_PRI_CMD_BUID	0x001f	/* Base UnitID */
+#define  PCI_HT_PRI_CMD_UC	0x03e0	/* Unit Count */
+#define  PCI_HT_PRI_CMD_MH	0x0400	/* Master Host */
+#define  PCI_HT_PRI_CMD_DD	0x0800	/* Default Direction */
+#define  PCI_HT_PRI_CMD_DUL	0x1000	/* Drop on Uninitialized Link */
+
+#define PCI_HT_PRI_LCTR0	4	/* Link Control 0 Register */
+#define PCI_HT_PRI_LCNF0	6	/* Link Config 0 Register */
+#define PCI_HT_PRI_LCTR1	8	/* Link Control 1 Register */
+#define PCI_HT_PRI_LCNF1	10	/* Link Config 1 Register */
+#define PCI_HT_PRI_RID		12	/* Revision ID Register */
+#define PCI_HT_PRI_LFRER0	13	/* Link Frequency/Error 0 Register */
+#define PCI_HT_PRI_LFCAP0	14	/* Link Frequency Capability 0 Register */
+#define PCI_HT_PRI_FTR		16	/* Feature Register */
+#define PCI_HT_PRI_LFRER1	17	/* Link Frequency/Error 1 Register */
+#define PCI_HT_PRI_LFCAP1	18	/* Link Frequency Capability 1 Register */
+#define PCI_HT_PRI_ES		20	/* Enumeration Scratchpad Register */
+#define PCI_HT_PRI_EH		22	/* Error Handling Register */
+#define PCI_HT_PRI_MBU		24	/* Memory Base Upper Register */
+#define PCI_HT_PRI_MLU		25	/* Memory Limit Upper Register */
+#define PCI_HT_PRI_BN		26	/* Bus Number Register */
+#define PCI_HT_PRI_SIZEOF	28
+
+/* HyperTransport: Host or Secondary Interface */
+#define PCI_HT_SEC_CMD		2	/* Command Register */
+#define  PCI_HT_SEC_CMD_WR	0x0001	/* Warm Reset */
+#define  PCI_HT_SEC_CMD_DE	0x0002	/* Double-Ended */
+#define  PCI_HT_SEC_CMD_DN	0x0076	/* Device Number */
+#define  PCI_HT_SEC_CMD_CS	0x0080	/* Chain Side */
+#define  PCI_HT_SEC_CMD_HH	0x0100	/* Host Hide */
+#define  PCI_HT_SEC_CMD_AS	0x0400	/* Act as Slave */
+#define  PCI_HT_SEC_CMD_HIECE	0x0800	/* Host Inbound End of Chain Error */
+#define  PCI_HT_SEC_CMD_DUL	0x1000	/* Drop on Uninitialized Link */
+
+#define PCI_HT_SEC_LCTR		4	/* Link Control Register */
+#define PCI_HT_SEC_LCNF		6	/* Link Config Register */
+#define PCI_HT_SEC_RID		8	/* Revision ID Register */
+#define PCI_HT_SEC_LFRER	9	/* Link Frequency/Error Register */
+#define PCI_HT_SEC_LFCAP	10	/* Link Frequency Capability Register */
+#define PCI_HT_SEC_FTR		12	/* Feature Register */
+#define  PCI_HT_SEC_FTR_EXTRS	0x0100	/* Extended Register Set */
+#define  PCI_HT_SEC_FTR_UCNFE	0x0200	/* Upstream Configuration Enable */
+#define PCI_HT_SEC_ES		16	/* Enumeration Scratchpad Register */
+#define PCI_HT_SEC_EH		18	/* Error Handling Register */
+#define PCI_HT_SEC_MBU		20	/* Memory Base Upper Register */
+#define PCI_HT_SEC_MLU		21	/* Memory Limit Upper Register */
+#define PCI_HT_SEC_SIZEOF	24
+
+/* HyperTransport: Switch */
+#define PCI_HT_SW_CMD		2	/* Switch Command Register */
+#define  PCI_HT_SW_CMD_VIBERR	0x0080	/* VIB Error */
+#define  PCI_HT_SW_CMD_VIBFL	0x0100	/* VIB Flood */
+#define  PCI_HT_SW_CMD_VIBFT	0x0200	/* VIB Fatal */
+#define  PCI_HT_SW_CMD_VIBNFT	0x0400	/* VIB Nonfatal */
+#define PCI_HT_SW_PMASK		4	/* Partition Mask Register */
+#define PCI_HT_SW_SWINF		8	/* Switch Info Register */
+#define  PCI_HT_SW_SWINF_DP	0x0000001f /* Default Port */
+#define  PCI_HT_SW_SWINF_EN	0x00000020 /* Enable Decode */
+#define  PCI_HT_SW_SWINF_CR	0x00000040 /* Cold Reset */
+#define  PCI_HT_SW_SWINF_PCIDX	0x00000f00 /* Performance Counter Index */
+#define  PCI_HT_SW_SWINF_BLRIDX	0x0003f000 /* Base/Limit Range Index */
+#define  PCI_HT_SW_SWINF_SBIDX	0x00002000 /* Secondary Base Range Index */
+#define  PCI_HT_SW_SWINF_HP	0x00040000 /* Hot Plug */
+#define  PCI_HT_SW_SWINF_HIDE	0x00080000 /* Hide Port */
+#define PCI_HT_SW_PCD		12	/* Performance Counter Data Register */
+#define PCI_HT_SW_BLRD		16	/* Base/Limit Range Data Register */
+#define PCI_HT_SW_SBD		20	/* Secondary Base Data Register */
+#define PCI_HT_SW_SIZEOF	24
+
+					/* Counter indices */
+#define  PCI_HT_SW_PC_PCR	0x0	/* Posted Command Receive */
+#define  PCI_HT_SW_PC_NPCR	0x1	/* Nonposted Command Receive */
+#define  PCI_HT_SW_PC_RCR	0x2	/* Response Command Receive */
+#define  PCI_HT_SW_PC_PDWR	0x3	/* Posted DW Receive */
+#define  PCI_HT_SW_PC_NPDWR	0x4	/* Nonposted DW Receive */
+#define  PCI_HT_SW_PC_RDWR	0x5	/* Response DW Receive */
+#define  PCI_HT_SW_PC_PCT	0x6	/* Posted Command Transmit */
+#define  PCI_HT_SW_PC_NPCT	0x7	/* Nonposted Command Transmit */
+#define  PCI_HT_SW_PC_RCT	0x8	/* Response Command Transmit */
+#define  PCI_HT_SW_PC_PDWT	0x9	/* Posted DW Transmit */
+#define  PCI_HT_SW_PC_NPDWT	0xa	/* Nonposted DW Transmit */
+#define  PCI_HT_SW_PC_RDWT	0xb	/* Response DW Transmit */
+
+					/* Base/Limit Range indices */
+#define  PCI_HT_SW_BLR_BASE0_LO	0x0	/* Base 0[31:1], Enable */
+#define  PCI_HT_SW_BLR_BASE0_HI	0x1	/* Base 0 Upper */
+#define  PCI_HT_SW_BLR_LIM0_LO	0x2	/* Limit 0 Lower */
+#define  PCI_HT_SW_BLR_LIM0_HI	0x3	/* Limit 0 Upper */
+
+					/* Secondary Base indices */
+#define  PCI_HT_SW_SB_LO	0x0	/* Secondary Base[31:1], Enable */
+#define  PCI_HT_SW_S0_HI	0x1	/* Secondary Base Upper */
+
+/* HyperTransport: Interrupt Discovery and Configuration */
+#define PCI_HT_IDC_IDX		2	/* Index Register */
+#define PCI_HT_IDC_DATA		4	/* Data Register */
+#define PCI_HT_IDC_SIZEOF	8
+
+					/* Register indices */
+#define  PCI_HT_IDC_IDX_LINT	0x01	/* Last Interrupt Register */
+#define   PCI_HT_IDC_LINT	0x00ff0000 /* Last interrupt definition */
+#define  PCI_HT_IDC_IDX_IDR	0x10	/* Interrupt Definition Registers */
+					/* Low part (at index) */
+#define   PCI_HT_IDC_IDR_MASK	0x10000001 /* Mask */
+#define   PCI_HT_IDC_IDR_POL	0x10000002 /* Polarity */
+#define   PCI_HT_IDC_IDR_II_2	0x1000001c /* IntrInfo[4:2]: Message Type */
+#define   PCI_HT_IDC_IDR_II_5	0x10000020 /* IntrInfo[5]: Request EOI */
+#define   PCI_HT_IDC_IDR_II_6	0x00ffffc0 /* IntrInfo[23:6] */
+#define   PCI_HT_IDC_IDR_II_24	0xff000000 /* IntrInfo[31:24] */
+					/* High part (at index + 1) */
+#define   PCI_HT_IDC_IDR_II_32	0x00ffffff /* IntrInfo[55:32] */
+#define   PCI_HT_IDC_IDR_PASSPW	0x40000000 /* PassPW setting for messages */
+#define   PCI_HT_IDC_IDR_WEOI	0x80000000 /* Waiting for EOI */
+
+/* HyperTransport: Revision ID */
+#define PCI_HT_RID_RID		2	/* Revision Register */
+#define PCI_HT_RID_SIZEOF	4
+
+/* HyperTransport: UnitID Clumping */
+#define PCI_HT_UIDC_CS		4	/* Clumping Support Register */
+#define PCI_HT_UIDC_CE		8	/* Clumping Enable Register */
+#define PCI_HT_UIDC_SIZEOF	12
+
+/* HyperTransport: Extended Configuration Space Access */
+#define PCI_HT_ECSA_ADDR	4	/* Configuration Address Register */
+#define  PCI_HT_ECSA_ADDR_REG	0x00000ffc /* Register */
+#define  PCI_HT_ECSA_ADDR_FUN	0x00007000 /* Function */
+#define  PCI_HT_ECSA_ADDR_DEV	0x000f1000 /* Device */
+#define  PCI_HT_ECSA_ADDR_BUS	0x0ff00000 /* Bus Number */
+#define  PCI_HT_ECSA_ADDR_TYPE	0x10000000 /* Access Type */
+#define PCI_HT_ECSA_DATA	8	/* Configuration Data Register */
+#define PCI_HT_ECSA_SIZEOF	12
+
+/* HyperTransport: Address Mapping */
+#define PCI_HT_AM_CMD		2	/* Command Register */
+#define  PCI_HT_AM_CMD_NDMA	0x000f	/* Number of DMA Mappings */
+#define  PCI_HT_AM_CMD_IOSIZ	0x01f0	/* I/O Size */
+#define  PCI_HT_AM_CMD_MT	0x0600	/* Map Type */
+#define  PCI_HT_AM_CMD_MT_40B	0x0000	/* 40-bit */
+#define  PCI_HT_AM_CMD_MT_64B	0x0200	/* 64-bit */
+
+					/* Window Control Register bits */
+#define  PCI_HT_AM_SBW_CTR_COMP	0x1	/* Compat */
+#define  PCI_HT_AM_SBW_CTR_NCOH	0x2	/* NonCoherent */
+#define  PCI_HT_AM_SBW_CTR_ISOC	0x4	/* Isochronous */
+#define  PCI_HT_AM_SBW_CTR_EN	0x8	/* Enable */
+
+/* HyperTransport: 40-bit Address Mapping */
+#define PCI_HT_AM40_SBNPW	4	/* Secondary Bus Non-Prefetchable Window Register */
+#define  PCI_HT_AM40_SBW_BASE	0x000fffff /* Window Base */
+#define  PCI_HT_AM40_SBW_CTR	0xf0000000 /* Window Control */
+#define PCI_HT_AM40_SBPW	8	/* Secondary Bus Prefetchable Window Register */
+#define PCI_HT_AM40_DMA_PBASE0	12	/* DMA Window Primary Base 0 Register */
+#define PCI_HT_AM40_DMA_CTR0	15	/* DMA Window Control 0 Register */
+#define  PCI_HT_AM40_DMA_CTR_CTR 0xf0	/* Window Control */
+#define PCI_HT_AM40_DMA_SLIM0	16	/* DMA Window Secondary Limit 0 Register */
+#define PCI_HT_AM40_DMA_SBASE0	18	/* DMA Window Secondary Base 0 Register */
+#define PCI_HT_AM40_SIZEOF	12	/* size is variable: 12 + 8 * NDMA */
+
+/* HyperTransport: 64-bit Address Mapping */
+#define PCI_HT_AM64_IDX		4	/* Index Register */
+#define PCI_HT_AM64_DATA_LO	8	/* Data Lower Register */
+#define PCI_HT_AM64_DATA_HI	12	/* Data Upper Register */
+#define PCI_HT_AM64_SIZEOF	16
+
+					/* Register indices */
+#define  PCI_HT_AM64_IDX_SBNPW	0x00	/* Secondary Bus Non-Prefetchable Window Register */
+#define   PCI_HT_AM64_W_BASE_LO	0xfff00000 /* Window Base Lower */
+#define   PCI_HT_AM64_W_CTR	0x0000000f /* Window Control */
+#define  PCI_HT_AM64_IDX_SBPW	0x01	/* Secondary Bus Prefetchable Window Register */
+#define   PCI_HT_AM64_IDX_PBNPW	0x02	/* Primary Bus Non-Prefetchable Window Register */
+#define   PCI_HT_AM64_IDX_DMAPB0 0x04	/* DMA Window Primary Base 0 Register */
+#define   PCI_HT_AM64_IDX_DMASB0 0x05	/* DMA Window Secondary Base 0 Register */
+#define   PCI_HT_AM64_IDX_DMASL0 0x06	/* DMA Window Secondary Limit 0 Register */
+
+/* HyperTransport: MSI Mapping */
+#define PCI_HT_MSIM_CMD		2	/* Command Register */
+#define  PCI_HT_MSIM_CMD_EN	0x0001	/* Mapping Active */
+#define  PCI_HT_MSIM_CMD_FIXD	0x0002	/* MSI Mapping Address Fixed */
+#define PCI_HT_MSIM_ADDR_LO	4	/* MSI Mapping Address Lower Register */
+#define PCI_HT_MSIM_ADDR_HI	8	/* MSI Mapping Address Upper Register */
+#define PCI_HT_MSIM_SIZEOF	12
+
+/* HyperTransport: DirectRoute */
+#define PCI_HT_DR_CMD		2	/* Command Register */
+#define  PCI_HT_DR_CMD_NDRS	0x000f	/* Number of DirectRoute Spaces */
+#define  PCI_HT_DR_CMD_IDX	0x01f0	/* Index */
+#define PCI_HT_DR_EN		4	/* Enable Vector Register */
+#define PCI_HT_DR_DATA		8	/* Data Register */
+#define PCI_HT_DR_SIZEOF	12
+
+					/* Register indices */
+#define  PCI_HT_DR_IDX_BASE_LO	0x00	/* DirectRoute Base Lower Register */
+#define   PCI_HT_DR_OTNRD	0x00000001 /* Opposite to Normal Request Direction */
+#define   PCI_HT_DR_BL_LO	0xffffff00 /* Base/Limit Lower */
+#define  PCI_HT_DR_IDX_BASE_HI	0x01	/* DirectRoute Base Upper Register */
+#define  PCI_HT_DR_IDX_LIMIT_LO	0x02	/* DirectRoute Limit Lower Register */
+#define  PCI_HT_DR_IDX_LIMIT_HI	0x03	/* DirectRoute Limit Upper Register */
+
+/* HyperTransport: VCSet */
+#define PCI_HT_VCS_SUP		4	/* VCSets Supported Register */
+#define PCI_HT_VCS_L1EN		5	/* Link 1 VCSets Enabled Register */
+#define PCI_HT_VCS_L0EN		6	/* Link 0 VCSets Enabled Register */
+#define PCI_HT_VCS_SBD		8	/* Stream Bucket Depth Register */
+#define PCI_HT_VCS_SINT		9	/* Stream Interval Register */
+#define PCI_HT_VCS_SSUP		10	/* Number of Streaming VCs Supported Register */
+#define  PCI_HT_VCS_SSUP_0	0x00	/* Streaming VC 0 */
+#define  PCI_HT_VCS_SSUP_3	0x01	/* Streaming VCs 0-3 */
+#define  PCI_HT_VCS_SSUP_15	0x02	/* Streaming VCs 0-15 */
+#define PCI_HT_VCS_NFCBD	12	/* Non-FC Bucket Depth Register */
+#define PCI_HT_VCS_NFCINT	13	/* Non-FC Bucket Interval Register */
+#define PCI_HT_VCS_SIZEOF	16
+
+/* HyperTransport: Retry Mode */
+#define PCI_HT_RM_CTR0		4	/* Control 0 Register */
+#define  PCI_HT_RM_CTR_LRETEN	0x01	/* Link Retry Enable */
+#define  PCI_HT_RM_CTR_FSER	0x02	/* Force Single Error */
+#define  PCI_HT_RM_CTR_ROLNEN	0x04	/* Rollover Nonfatal Enable */
+#define  PCI_HT_RM_CTR_FSS	0x08	/* Force Single Stomp */
+#define  PCI_HT_RM_CTR_RETNEN	0x10	/* Retry Nonfatal Enable */
+#define  PCI_HT_RM_CTR_RETFEN	0x20	/* Retry Fatal Enable */
+#define  PCI_HT_RM_CTR_AA	0xc0	/* Allowed Attempts */
+#define PCI_HT_RM_STS0		5	/* Status 0 Register */
+#define  PCI_HT_RM_STS_RETSNT	0x01	/* Retry Sent */
+#define  PCI_HT_RM_STS_CNTROL	0x02	/* Count Rollover */
+#define  PCI_HT_RM_STS_SRCV	0x04	/* Stomp Received */
+#define PCI_HT_RM_CTR1		6	/* Control 1 Register */
+#define PCI_HT_RM_STS1		7	/* Status 1 Register */
+#define PCI_HT_RM_CNT0		8	/* Retry Count 0 Register */
+#define PCI_HT_RM_CNT1		10	/* Retry Count 1 Register */
+#define PCI_HT_RM_SIZEOF	12
+
+/* PCI Express */
+#define PCI_EXP_FLAGS		0x2	/* Capabilities register */
+#define PCI_EXP_FLAGS_VERS	0x000f	/* Capability version */
+#define PCI_EXP_FLAGS_TYPE	0x00f0	/* Device/Port type */
+#define  PCI_EXP_TYPE_ENDPOINT	0x0	/* Express Endpoint */
+#define  PCI_EXP_TYPE_LEG_END	0x1	/* Legacy Endpoint */
+#define  PCI_EXP_TYPE_ROOT_PORT 0x4	/* Root Port */
+#define  PCI_EXP_TYPE_UPSTREAM	0x5	/* Upstream Port */
+#define  PCI_EXP_TYPE_DOWNSTREAM 0x6	/* Downstream Port */
+#define  PCI_EXP_TYPE_PCI_BRIDGE 0x7	/* PCI/PCI-X Bridge */
+#define PCI_EXP_FLAGS_SLOT	0x0100	/* Slot implemented */
+#define PCI_EXP_FLAGS_IRQ	0x3e00	/* Interrupt message number */
+#define PCI_EXP_DEVCAP		0x4	/* Device capabilities */
+#define  PCI_EXP_DEVCAP_PAYLOAD	0x07	/* Max_Payload_Size */
+#define  PCI_EXP_DEVCAP_PHANTOM	0x18	/* Phantom functions */
+#define  PCI_EXP_DEVCAP_EXT_TAG	0x20	/* Extended tags */
+#define  PCI_EXP_DEVCAP_L0S	0x1c0	/* L0s Acceptable Latency */
+#define  PCI_EXP_DEVCAP_L1	0xe00	/* L1 Acceptable Latency */
+#define  PCI_EXP_DEVCAP_ATN_BUT	0x1000	/* Attention Button Present */
+#define  PCI_EXP_DEVCAP_ATN_IND	0x2000	/* Attention Indicator Present */
+#define  PCI_EXP_DEVCAP_PWR_IND	0x4000	/* Power Indicator Present */
+#define  PCI_EXP_DEVCAP_PWR_VAL	0x3fc0000 /* Slot Power Limit Value */
+#define  PCI_EXP_DEVCAP_PWR_SCL	0xc000000 /* Slot Power Limit Scale */
+#define PCI_EXP_DEVCTL		0x8	/* Device Control */
+#define  PCI_EXP_DEVCTL_CERE	0x0001	/* Correctable Error Reporting En. */
+#define  PCI_EXP_DEVCTL_NFERE	0x0002	/* Non-Fatal Error Reporting Enable */
+#define  PCI_EXP_DEVCTL_FERE	0x0004	/* Fatal Error Reporting Enable */
+#define  PCI_EXP_DEVCTL_URRE	0x0008	/* Unsupported Request Reporting En. */
+#define  PCI_EXP_DEVCTL_RELAXED	0x0010	/* Enable Relaxed Ordering */
+#define  PCI_EXP_DEVCTL_PAYLOAD	0x00e0	/* Max_Payload_Size */
+#define  PCI_EXP_DEVCTL_EXT_TAG	0x0100	/* Extended Tag Field Enable */
+#define  PCI_EXP_DEVCTL_PHANTOM	0x0200	/* Phantom Functions Enable */
+#define  PCI_EXP_DEVCTL_AUX_PME	0x0400	/* Auxiliary Power PM Enable */
+#define  PCI_EXP_DEVCTL_NOSNOOP	0x0800	/* Enable No Snoop */
+#define  PCI_EXP_DEVCTL_READRQ	0x7000	/* Max_Read_Request_Size */
+#define PCI_EXP_DEVSTA		0xa	/* Device Status */
+#define  PCI_EXP_DEVSTA_CED	0x01	/* Correctable Error Detected */
+#define  PCI_EXP_DEVSTA_NFED	0x02	/* Non-Fatal Error Detected */
+#define  PCI_EXP_DEVSTA_FED	0x04	/* Fatal Error Detected */
+#define  PCI_EXP_DEVSTA_URD	0x08	/* Unsupported Request Detected */
+#define  PCI_EXP_DEVSTA_AUXPD	0x10	/* AUX Power Detected */
+#define  PCI_EXP_DEVSTA_TRPND	0x20	/* Transactions Pending */
+#define PCI_EXP_LNKCAP		0xc	/* Link Capabilities */
+#define  PCI_EXP_LNKCAP_SPEED	0x0000f	/* Maximum Link Speed */
+#define  PCI_EXP_LNKCAP_WIDTH	0x003f0	/* Maximum Link Width */
+#define  PCI_EXP_LNKCAP_ASPM	0x00c00	/* Active State Power Management */
+#define  PCI_EXP_LNKCAP_L0S	0x07000	/* L0s Acceptable Latency */
+#define  PCI_EXP_LNKCAP_L1	0x38000	/* L1 Acceptable Latency */
+#define  PCI_EXP_LNKCAP_PORT	0xff000000 /* Port Number */
+#define PCI_EXP_LNKCTL		0x10	/* Link Control */
+#define  PCI_EXP_LNKCTL_ASPM	0x0003	/* ASPM Control */
+#define  PCI_EXP_LNKCTL_RCB	0x0008	/* Read Completion Boundary */
+#define  PCI_EXP_LNKCTL_DISABLE	0x0010	/* Link Disable */
+#define  PCI_EXP_LNKCTL_RETRAIN	0x0020	/* Retrain Link */
+#define  PCI_EXP_LNKCTL_CLOCK	0x0040	/* Common Clock Configuration */
+#define  PCI_EXP_LNKCTL_XSYNCH	0x0080	/* Extended Synch */
+#define PCI_EXP_LNKSTA		0x12	/* Link Status */
+#define  PCI_EXP_LNKSTA_SPEED	0x000f	/* Negotiated Link Speed */
+#define  PCI_EXP_LNKSTA_WIDTH	0x03f0	/* Negotiated Link Width */
+#define  PCI_EXP_LNKSTA_TR_ERR	0x0400	/* Training Error */
+#define  PCI_EXP_LNKSTA_TRAIN	0x0800	/* Link Training */
+#define  PCI_EXP_LNKSTA_SL_CLK	0x1000	/* Slot Clock Configuration */
+#define PCI_EXP_SLTCAP		0x14	/* Slot Capabilities */
+#define  PCI_EXP_SLTCAP_ATNB	0x0001	/* Attention Button Present */
+#define  PCI_EXP_SLTCAP_PWRC	0x0002	/* Power Controller Present */
+#define  PCI_EXP_SLTCAP_MRL	0x0004	/* MRL Sensor Present */
+#define  PCI_EXP_SLTCAP_ATNI	0x0008	/* Attention Indicator Present */
+#define  PCI_EXP_SLTCAP_PWRI	0x0010	/* Power Indicator Present */
+#define  PCI_EXP_SLTCAP_HPS	0x0020	/* Hot-Plug Surprise */
+#define  PCI_EXP_SLTCAP_HPC	0x0040	/* Hot-Plug Capable */
+#define  PCI_EXP_SLTCAP_PWR_VAL	0x00007f80 /* Slot Power Limit Value */
+#define  PCI_EXP_SLTCAP_PWR_SCL	0x00018000 /* Slot Power Limit Scale */
+#define  PCI_EXP_SLTCAP_PSN	0xfff80000 /* Physical Slot Number */
+#define PCI_EXP_SLTCTL		0x18	/* Slot Control */
+#define  PCI_EXP_SLTCTL_ATNB	0x0001	/* Attention Button Pressed Enable */
+#define  PCI_EXP_SLTCTL_PWRF	0x0002	/* Power Fault Detected Enable */
+#define  PCI_EXP_SLTCTL_MRLS	0x0004	/* MRL Sensor Changed Enable */
+#define  PCI_EXP_SLTCTL_PRSD	0x0008	/* Presence Detect Changed Enable */
+#define  PCI_EXP_SLTCTL_CMDC	0x0010	/* Command Completed Interrupt Enable */
+#define  PCI_EXP_SLTCTL_HPIE	0x0020	/* Hot-Plug Interrupt Enable */
+#define  PCI_EXP_SLTCTL_ATNI	0x00C0	/* Attention Indicator Control */
+#define  PCI_EXP_SLTCTL_PWRI	0x0300	/* Power Indicator Control */
+#define  PCI_EXP_SLTCTL_PWRC	0x0400	/* Power Controller Control */
+#define PCI_EXP_SLTSTA		0x1a	/* Slot Status */
+#define PCI_EXP_RTCTL		0x1c	/* Root Control */
+#define  PCI_EXP_RTCTL_SECEE	0x1	/* System Error on Correctable Error */
+#define  PCI_EXP_RTCTL_SENFEE	0x1	/* System Error on Non-Fatal Error */
+#define  PCI_EXP_RTCTL_SEFEE	0x1	/* System Error on Fatal Error */
+#define  PCI_EXP_RTCTL_PMEIE	0x1	/* PME Interrupt Enable */
+#define PCI_EXP_RTSTA		0x20	/* Root Status */
+
+/* MSI-X */
+#define  PCI_MSIX_ENABLE	0x8000
+#define  PCI_MSIX_MASK		0x4000
+#define  PCI_MSIX_TABSIZE	0x03ff
+#define PCI_MSIX_TABLE		4
+#define PCI_MSIX_PBA		8
+#define  PCI_MSIX_BIR		0x7
+
+/* Advanced Error Reporting */
+#define PCI_ERR_UNCOR_STATUS	4	/* Uncorrectable Error Status */
+#define  PCI_ERR_UNC_TRAIN	0x00000001	/* Training */
+#define  PCI_ERR_UNC_DLP	0x00000010	/* Data Link Protocol */
+#define  PCI_ERR_UNC_POISON_TLP	0x00001000	/* Poisoned TLP */
+#define  PCI_ERR_UNC_FCP	0x00002000	/* Flow Control Protocol */
+#define  PCI_ERR_UNC_COMP_TIME	0x00004000	/* Completion Timeout */
+#define  PCI_ERR_UNC_COMP_ABORT	0x00008000	/* Completer Abort */
+#define  PCI_ERR_UNC_UNX_COMP	0x00010000	/* Unexpected Completion */
+#define  PCI_ERR_UNC_RX_OVER	0x00020000	/* Receiver Overflow */
+#define  PCI_ERR_UNC_MALF_TLP	0x00040000	/* Malformed TLP */
+#define  PCI_ERR_UNC_ECRC	0x00080000	/* ECRC Error Status */
+#define  PCI_ERR_UNC_UNSUP	0x00100000	/* Unsupported Request */
+#define PCI_ERR_UNCOR_MASK	8	/* Uncorrectable Error Mask */
+	/* Same bits as above */
+#define PCI_ERR_UNCOR_SEVER	12	/* Uncorrectable Error Severity */
+	/* Same bits as above */
+#define PCI_ERR_COR_STATUS	16	/* Correctable Error Status */
+#define  PCI_ERR_COR_RCVR	0x00000001	/* Receiver Error Status */
+#define  PCI_ERR_COR_BAD_TLP	0x00000040	/* Bad TLP Status */
+#define  PCI_ERR_COR_BAD_DLLP	0x00000080	/* Bad DLLP Status */
+#define  PCI_ERR_COR_REP_ROLL	0x00000100	/* REPLAY_NUM Rollover */
+#define  PCI_ERR_COR_REP_TIMER	0x00001000	/* Replay Timer Timeout */
+#define PCI_ERR_COR_MASK	20	/* Correctable Error Mask */
+	/* Same bits as above */
+#define PCI_ERR_CAP		24	/* Advanced Error Capabilities */
+#define  PCI_ERR_CAP_FEP(x)	((x) & 31)	/* First Error Pointer */
+#define  PCI_ERR_CAP_ECRC_GENC	0x00000020	/* ECRC Generation Capable */
+#define  PCI_ERR_CAP_ECRC_GENE	0x00000040	/* ECRC Generation Enable */
+#define  PCI_ERR_CAP_ECRC_CHKC	0x00000080	/* ECRC Check Capable */
+#define  PCI_ERR_CAP_ECRC_CHKE	0x00000100	/* ECRC Check Enable */
+#define PCI_ERR_HEADER_LOG	28	/* Header Log Register (16 bytes) */
+#define PCI_ERR_ROOT_COMMAND	44	/* Root Error Command */
+#define PCI_ERR_ROOT_STATUS	48
+#define PCI_ERR_ROOT_COR_SRC	52
+#define PCI_ERR_ROOT_SRC	54
+
+/* Virtual Channel */
+#define PCI_VC_PORT_REG1	4
+#define PCI_VC_PORT_REG2	8
+#define PCI_VC_PORT_CTRL	12
+#define PCI_VC_PORT_STATUS	14
+#define PCI_VC_RES_CAP		16
+#define PCI_VC_RES_CTRL		20
+#define PCI_VC_RES_STATUS	26
+
+/* Power Budgeting */
+#define PCI_PWR_DSR		4	/* Data Select Register */
+#define PCI_PWR_DATA		8	/* Data Register */
+#define  PCI_PWR_DATA_BASE(x)	((x) & 0xff)	    /* Base Power */
+#define  PCI_PWR_DATA_SCALE(x)	(((x) >> 8) & 3)    /* Data Scale */
+#define  PCI_PWR_DATA_PM_SUB(x)	(((x) >> 10) & 7)   /* PM Sub State */
+#define  PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
+#define  PCI_PWR_DATA_TYPE(x)	(((x) >> 15) & 7)   /* Type */
+#define  PCI_PWR_DATA_RAIL(x)	(((x) >> 18) & 7)   /* Power Rail */
+#define PCI_PWR_CAP		12	/* Capability */
+#define  PCI_PWR_CAP_BUDGET(x)	((x) & 1)	/* Included in system budget */
+
 /*
  * The PCI interface treats multi-function devices as independent
  * devices.  The slot/function address of each device is encoded
diff -ruN pciutils-2.1.11/lib/i386-io-hurd.h pciutils-2.2.0/lib/i386-io-hurd.h
--- pciutils-2.1.11/lib/i386-io-hurd.h	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/lib/i386-io-hurd.h	2003-12-27 00:04:38 +0100
@@ -0,0 +1,21 @@
+/*
+ *	The PCI Library -- Access to i386 I/O ports on GNU Hurd
+ *
+ *	Copyright (c) 2003 Marco Gerards <metgerards@student.han.nl>
+ *	Copyright (c) 2003 Martin Mares <mj@ucw.cz>
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <sys/io.h>
+
+static inline int
+intel_setup_io(void)
+{
+  return 1;
+}
+
+static inline int
+intel_cleanup_io(void)
+{
+}
diff -ruN pciutils-2.1.11/lib/i386-io-linux.h pciutils-2.2.0/lib/i386-io-linux.h
--- pciutils-2.1.11/lib/i386-io-linux.h	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/lib/i386-io-linux.h	2003-12-27 00:03:36 +0100
@@ -0,0 +1,31 @@
+/*
+ *	The PCI Library -- Access to i386 I/O ports on Linux
+ *
+ *	Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifdef __GLIBC__
+#include <sys/io.h>
+#else
+#include <asm/io.h>
+#endif
+
+static int intel_iopl_set = -1;
+
+static int
+intel_setup_io(void)
+{
+  if (intel_iopl_set < 0)
+    intel_iopl_set = (iopl(3) < 0) ? 0 : 1;
+  return intel_iopl_set;
+}
+
+static inline void
+intel_cleanup_io(void)
+{
+  if (intel_iopl_set > 0)
+    iopl(3);
+  intel_iopl_set = -1;
+}
diff -ruN pciutils-2.1.11/lib/i386-io-sunos.h pciutils-2.2.0/lib/i386-io-sunos.h
--- pciutils-2.1.11/lib/i386-io-sunos.h	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/lib/i386-io-sunos.h	2003-12-27 00:09:39 +0100
@@ -0,0 +1,78 @@
+/*
+ *	The PCI Library -- Access to i386 I/O ports on Solaris
+ *
+ *	Copyright (c) 2003 Bill Moore <billm@eng.sun.com>
+ *	Copyright (c) 2003 Martin Mares <mj@ucw.cz>
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <sys/sysi86.h>
+#include <sys/psw.h>
+
+static int intel_iopl_set = -1;
+
+static int
+intel_setup_io(void)
+{
+  if (intel_iopl_set < 0)
+    {
+      if (sysi86(SI86V86, V86SC_IOPL, PS_IOPL) < 0)
+	intel_iopl_set = 0;
+      else
+	intel_iopl_set = 1;
+    }
+  return intel_iopl_set;
+}
+
+static inline void
+intel_cleanup_io(void)
+{
+  if (intel_iopl_set > 0)
+    {
+      /* FIXME: How to switch off I/O port access? */
+    }
+  intel_iopl_set = -1;
+}
+
+static inline u8
+inb (u16 port)
+{
+  u8 v;
+  __asm__ __volatile__ ("inb (%w1)":"=a" (v):"Nd" (port));
+  return v;
+}
+
+static inline u16
+inw (u16 port)
+{
+  u16 v;
+  __asm__ __volatile__ ("inw (%w1)":"=a" (v):"Nd" (port));
+  return v;
+}
+
+static inline u32
+inl (u16 port)
+{
+  u32 v;
+  __asm__ __volatile__ ("inl (%w1)":"=a" (v):"Nd" (port));
+  return v;
+}
+
+static inline void
+outb (u8 value, u16 port)
+{
+  __asm__ __volatile__ ("outb (%w1)": :"a" (value), "Nd" (port));
+}
+
+static inline void
+outw (u16 value, u16 port)
+{
+  __asm__ __volatile__ ("outw (%w1)": :"a" (value), "Nd" (port));
+}
+
+static inline void
+outl (u32 value, u16 port)
+{
+  __asm__ __volatile__ ("outl (%w1)": :"a" (value), "Nd" (port));
+}
diff -ruN pciutils-2.1.11/lib/i386-io-windows.h pciutils-2.2.0/lib/i386-io-windows.h
--- pciutils-2.1.11/lib/i386-io-windows.h	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/lib/i386-io-windows.h	2004-05-29 22:16:07 +0200
@@ -0,0 +1,65 @@
+/*
+ *	The PCI Library -- Access to i386 I/O ports on Windows
+ *
+ *	Copyright (c) 2004 Alexander Stock <stock.alexander@gmx.de>
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <io.h>
+#include <conio.h>
+#include <windows.h>
+  
+#define outb(x,y) _outp(y,x)
+#define outw(x,y) _outpw(y,x)
+#define outl(x,y) _outpd(y,x)
+  
+#define inb(x) _inp(x)
+#define inw(x) _inpw(x)
+#define inl(x) _inpd(x)
+
+static int intel_iopl_set = -1;
+
+static int
+intel_setup_io(void)
+{
+  if (intel_iopl_set < 0)
+    {
+      typedef int (*MYPROC)(void);
+      MYPROC InitializeWinIo;  
+      HMODULE lib;
+
+      intel_iopl_set = 0;
+
+      lib = LoadLibrary("WinIo.dll");
+      if (!lib)
+	{
+	  fprintf(stderr, "libpci: Couldn't load WinIo.dll.\n");
+	  return 0;
+	}
+      GetProcAddress(lib, "InitializeWinIo");
+  
+      InitializeWinIo = (MYPROC) GetProcAddress(lib, "InitializeWinIo");
+      if (!InitializeWinIo)
+	{
+	  fprintf(stderr, "libpci: Couldn't find InitialieWinIo function.\n");
+	  return 0;
+	}
+
+      if (!InitializeWinIo())
+	{
+	  fprintf(stderr, "libpci: InitializeWinIo() failed.\n");
+	  return 0;
+	}
+
+      intel_iopl_set=1;
+    }
+  return intel_iopl_set;
+}
+
+static inline void
+intel_cleanup_io(void)
+{
+  //TODO: DeInitializeWinIo!
+  //intel_iopl_set = -1;
+}
diff -ruN pciutils-2.1.11/lib/i386-ports.c pciutils-2.2.0/lib/i386-ports.c
--- pciutils-2.1.11/lib/i386-ports.c	2002-03-30 16:39:25 +0100
+++ pciutils-2.2.0/lib/i386-ports.c	2004-08-13 22:13:11 +0200
@@ -1,32 +1,26 @@
 /*
- *	$Id: i386-ports.c,v 1.3 2002/03/30 15:39:25 mj Exp $
- *
  *	The PCI Library -- Direct Configuration access via i386 Ports
  *
- *	Copyright (c) 1997--1999 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
 
 #include <unistd.h>
 
-#ifdef __GLIBC__
-#include <sys/io.h>
-#else
-#include <asm/io.h>
-#endif
-
 #include "internal.h"
 
-static int intel_iopl_set = -1;
-
-static int
-intel_setup_io(void)
-{
-  if (intel_iopl_set < 0)
-    intel_iopl_set = (iopl(3) < 0) ? 0 : 1;
-  return intel_iopl_set;
-}
+#if defined(PCI_OS_LINUX)
+#include "i386-io-linux.h"
+#elif defined(PCI_OS_GNU)
+#include "i386-io-hurd.h"
+#elif defined(PCI_OS_SUNOS)
+#include "i386-io-sunos.h"
+#elif defined(PCI_OS_WINDOWS)
+#include "i386-io-windows.h"
+#else
+#error Do not know how to access I/O ports on this OS.
+#endif
 
 static void
 conf12_init(struct pci_access *a)
@@ -36,10 +30,9 @@
 }
 
 static void
-conf12_cleanup(struct pci_access * UNUSED a)
+conf12_cleanup(struct pci_access *a UNUSED)
 {
-  iopl(3);
-  intel_iopl_set = -1;
+  intel_cleanup_io();
 }
 
 /*
@@ -109,6 +102,10 @@
 conf1_read(struct pci_dev *d, int pos, byte *buf, int len)
 {
   int addr = 0xcfc + (pos&3);
+
+  if (pos >= 256)
+    return 0;
+
   outl(0x80000000 | ((d->bus & 0xff) << 16) | (PCI_DEVFN(d->dev, d->func) << 8) | (pos&~3), 0xcf8);
 
   switch (len)
@@ -132,6 +129,10 @@
 conf1_write(struct pci_dev *d, int pos, byte *buf, int len)
 {
   int addr = 0xcfc + (pos&3);
+
+  if (pos >= 256)
+    return 0;
+
   outl(0x80000000 | ((d->bus & 0xff) << 16) | (PCI_DEVFN(d->dev, d->func) << 8) | (pos&~3), 0xcf8);
 
   switch (len)
@@ -180,6 +181,9 @@
 {
   int addr = 0xc000 | (d->dev << 8) | pos;
 
+  if (pos >= 256)
+    return 0;
+
   if (d->dev >= 16)
     /* conf2 supports only 16 devices per bus */
     return 0;
@@ -209,6 +213,9 @@
 {
   int addr = 0xc000 | (d->dev << 8) | pos;
 
+  if (pos >= 256)
+    return 0;
+
   if (d->dev >= 16)
     d->access->error("conf2_write: only first 16 devices exist.");
   outb((d->func << 1) | 0xf0, 0xcf8);
diff -ruN pciutils-2.1.11/lib/internal.h pciutils-2.2.0/lib/internal.h
--- pciutils-2.1.11/lib/internal.h	2002-12-26 20:28:33 +0100
+++ pciutils-2.2.0/lib/internal.h	2004-08-13 22:21:22 +0200
@@ -1,68 +1,13 @@
 /*
- *	$Id: internal.h,v 1.7 2002/12/26 19:28:33 mj Exp $
+ *	The PCI Library -- Internal Stuff
  *
- *	The PCI Library -- Internal Include File
- *
- *	Copyright (c) 1997--2000 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
 
 #include "pci.h"
-
-#ifdef __GNUC__
-#define UNUSED __attribute__((unused))
-#else
-#define UNUSED
-#define inline
-#endif
-
-#ifdef HAVE_PM_LINUX_BYTEORDER_H
-
-#include <asm/byteorder.h>
-#define cpu_to_le16 __cpu_to_le16
-#define cpu_to_le32 __cpu_to_le32
-#define le16_to_cpu __le16_to_cpu
-#define le32_to_cpu __le32_to_cpu
-
-#else
-
-#ifdef OS_LINUX
-#include <endian.h>
-#define BYTE_ORDER __BYTE_ORDER
-#define BIG_ENDIAN __BIG_ENDIAN
-#endif
-
-#ifdef OS_FREEBSD
-#include <sys/types.h>
-#endif
-
-#if BYTE_ORDER == BIG_ENDIAN
-#define cpu_to_le16 swab16
-#define cpu_to_le32 swab32
-#define le16_to_cpu swab16
-#define le32_to_cpu swab32
-
-static inline word swab16(word w)
-{
-  return (w << 8) | ((w >> 8) & 0xff);
-}
-
-static inline u32 swab32(u32 w)
-{
-  return ((w & 0xff000000) >> 24) |
-         ((w & 0x00ff0000) >> 8) |
-         ((w & 0x0000ff00) << 8)  |
-         ((w & 0x000000ff) << 24);
-}
-#else
-#define cpu_to_le16(x) (x)
-#define cpu_to_le32(x) (x)
-#define le16_to_cpu(x) (x)
-#define le32_to_cpu(x) (x)
-#endif
-
-#endif
+#include "sysdep.h"
 
 struct pci_methods {
   char *name;
@@ -91,4 +36,4 @@
 int pci_link_dev(struct pci_access *, struct pci_dev *);
 
 extern struct pci_methods pm_intel_conf1, pm_intel_conf2, pm_linux_proc,
-  pm_syscalls, pm_fbsd_device, pm_aix_device, pm_nbsd_libpci, pm_dump;
+  pm_fbsd_device, pm_aix_device, pm_nbsd_libpci, pm_dump, pm_linux_sysfs;
diff -ruN pciutils-2.1.11/lib/names.c pciutils-2.2.0/lib/names.c
--- pciutils-2.1.11/lib/names.c	2002-03-30 16:39:25 +0100
+++ pciutils-2.2.0/lib/names.c	2005-09-10 14:23:55 +0200
@@ -1,338 +1,483 @@
 /*
- *	$Id: names.c,v 1.9 2002/03/30 15:39:25 mj Exp $
- *
  *	The PCI Library -- ID to Name Translation
  *
- *	Copyright (c) 1997--2002 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdarg.h>
 #include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/stat.h>
 #include <errno.h>
 
 #include "internal.h"
 
-struct nl_entry {
-  struct nl_entry *next;
-  word id1, id2, id3, id4;
-  int cat;
-  byte *name;
+struct id_entry {
+  struct id_entry *next;
+  u32 id12, id34;
+  byte cat;
+  byte name[1];
 };
 
-#define NL_VENDOR 0
-#define NL_DEVICE 1
-#define NL_SUBSYSTEM 2
-#define NL_CLASS 3
-#define NL_SUBCLASS 4
-#define NL_PROGIF 5
+enum id_entry_type {
+  ID_UNKNOWN,
+  ID_VENDOR,
+  ID_DEVICE,
+  ID_SUBSYSTEM,
+  ID_GEN_SUBSYSTEM,
+  ID_CLASS,
+  ID_SUBCLASS,
+  ID_PROGIF
+};
 
-#define HASH_SIZE 1024
+struct id_bucket {
+  struct id_bucket *next;
+  unsigned int full;
+};
 
-static inline unsigned int nl_calc_hash(int cat, int id1, int id2, int id3, int id4)
+#define MAX_LINE 1024
+#define BUCKET_SIZE 8192
+#define HASH_SIZE 4099
+
+#ifdef __GNUC__
+#define BUCKET_ALIGNMENT __alignof__(struct id_bucket)
+#else
+union id_align {
+  struct id_bucket *next;
+  unsigned int full;
+};
+#define BUCKET_ALIGNMENT sizeof(union id_align)
+#endif
+#define BUCKET_ALIGN(n) ((n)+BUCKET_ALIGNMENT-(n)%BUCKET_ALIGNMENT)
+
+static void *id_alloc(struct pci_access *a, unsigned int size)
 {
-  unsigned int h;
+  struct id_bucket *buck = a->current_id_bucket;
+  unsigned int pos;
+  if (!buck || buck->full + size > BUCKET_SIZE)
+    {
+      buck = pci_malloc(a, BUCKET_SIZE);
+      buck->next = a->current_id_bucket;
+      a->current_id_bucket = buck;
+      buck->full = BUCKET_ALIGN(sizeof(struct id_bucket));
+    }
+  pos = buck->full;
+  buck->full = BUCKET_ALIGN(buck->full + size);
+  return (byte *)buck + pos;
+}
 
-  h = id1 ^ id2 ^ id3 ^ id4 ^ (cat << 5);
-  h += (h >> 6);
-  return h & (HASH_SIZE-1);
+static inline u32 id_pair(unsigned int x, unsigned int y)
+{
+  return ((x << 16) | y);
 }
 
-static struct nl_entry *nl_lookup(struct pci_access *a, int num, int cat, int id1, int id2, int id3, int id4)
+static inline unsigned int id_hash(int cat, u32 id12, u32 id34)
 {
   unsigned int h;
-  struct nl_entry *n;
 
-  if (num)
-    return NULL;
-  h = nl_calc_hash(cat, id1, id2, id3, id4);
-  n = a->nl_hash[h];
-  while (n && (n->id1 != id1 || n->id2 != id2 || n->id3 != id3 || n->id4 != id4 || n->cat != cat))
+  h = id12 ^ (id34 << 3) ^ (cat << 5);
+  return h % HASH_SIZE;
+}
+
+static struct id_entry *id_lookup(struct pci_access *a, int cat, int id1, int id2, int id3, int id4)
+{
+  struct id_entry *n;
+  u32 id12 = id_pair(id1, id2);
+  u32 id34 = id_pair(id3, id4);
+
+  n = a->id_hash[id_hash(cat, id12, id34)];
+  while (n && (n->id12 != id12 || n->id34 != id34 || n->cat != cat))
     n = n->next;
   return n;
 }
 
-static int nl_add(struct pci_access *a, int cat, int id1, int id2, int id3, int id4, byte *text)
+static int id_insert(struct pci_access *a, int cat, int id1, int id2, int id3, int id4, byte *text)
 {
-  unsigned int h = nl_calc_hash(cat, id1, id2, id3, id4);
-  struct nl_entry *n = a->nl_hash[h];
+  u32 id12 = id_pair(id1, id2);
+  u32 id34 = id_pair(id3, id4);
+  unsigned int h = id_hash(cat, id12, id34);
+  struct id_entry *n = a->id_hash[h];
+  int len = strlen(text);
 
-  while (n && (n->id1 != id1 || n->id2 != id2 || n->id3 != id3 || n->id4 != id4 || n->cat != cat))
+  while (n && (n->id12 != id12 || n->id34 != id34 || n->cat != cat))
     n = n->next;
   if (n)
     return 1;
-  n = pci_malloc(a, sizeof(struct nl_entry));
-  n->id1 = id1;
-  n->id2 = id2;
-  n->id3 = id3;
-  n->id4 = id4;
+  n = id_alloc(a, sizeof(struct id_entry) + len);
+  n->id12 = id12;
+  n->id34 = id34;
   n->cat = cat;
-  n->name = text;
-  n->next = a->nl_hash[h];
-  a->nl_hash[h] = n;
+  memcpy(n->name, text, len+1);
+  n->next = a->id_hash[h];
+  a->id_hash[h] = n;
   return 0;
 }
 
-static void
-err_name_list(struct pci_access *a, char *msg)
+static int id_hex(byte *p, int cnt)
 {
-  a->error("%s: %s: %s\n", a->id_file_name, msg, strerror(errno));
+  int x = 0;
+  while (cnt--)
+    {
+      x <<= 4;
+      if (*p >= '0' && *p <= '9')
+	x += (*p - '0');
+      else if (*p >= 'a' && *p <= 'f')
+	x += (*p - 'a' + 10);
+      else if (*p >= 'A' && *p <= 'F')
+	x += (*p - 'A' + 10);
+      else
+	return -1;
+      p++;
+    }
+  return x;
 }
 
-static void
-parse_name_list(struct pci_access *a)
+static inline int id_white_p(int c)
 {
-  byte *p = a->nl_list;
-  byte *q, *r;
-  int lino = 0;
-  unsigned int id1=0, id2=0, id3=0, id4=0;
+  return (c == ' ') || (c == '\t');
+}
+
+static const char *id_parse_list(struct pci_access *a, FILE *f, int *lino)
+{
+  byte line[MAX_LINE];
+  byte *p;
+  int id1=0, id2=0, id3=0, id4=0;
   int cat = -1;
+  int nest;
+  static const char parse_error[] = "Parse error";
 
-  while (*p)
+  *lino = 0;
+  while (fgets(line, sizeof(line), f))
     {
-      lino++;
-      q = p;
-      while (*p && *p != '\n')
+      (*lino)++;
+      p = line;
+      while (*p && *p != '\n' && *p != '\r')
 	p++;
-      if (*p == '\n')
-	*p++ = 0;
-      if (!*q || *q == '#')
+      if (!*p && !feof(f))
+	return "Line too long";
+      *p = 0;
+      if (p > line && (p[-1] == ' ' || p[-1] == '\t'))
+	*--p = 0;
+
+      p = line;
+      while (id_white_p(*p))
+	p++;
+      if (!*p || *p == '#')
 	continue;
-      r = p;
-      while (r > q && r[-1] == ' ')
-	*--r = 0;
-      r = q;
-      while (*q == '\t')
-	q++;
-      if (q == r)
+
+      p = line;
+      while (*p == '\t')
+	p++;
+      nest = p - line;
+
+      if (!nest)					/* Top-level entries */
 	{
-	  if (q[0] == 'C' && q[1] == ' ')
+	  if (p[0] == 'C' && p[1] == ' ')		/* Class block */
 	    {
-	      if (strlen(q+2) < 3 ||
-		  q[4] != ' ' ||
-		  sscanf(q+2, "%x", &id1) != 1)
-		goto parserr;
-	      cat = NL_CLASS;
+	      if ((id1 = id_hex(p+2, 2)) < 0 || !id_white_p(p[4]))
+		return parse_error;
+	      cat = ID_CLASS;
+	      p += 5;
+	    }
+	  else if (p[0] == 'S' && p[1] == ' ')
+	    {						/* Generic subsystem block */
+	      if ((id1 = id_hex(p+2, 4)) < 0 || p[6])
+		return parse_error;
+	      if (!id_lookup(a, ID_VENDOR, id1, 0, 0, 0))
+		return "Vendor does not exist";
+	      cat = ID_GEN_SUBSYSTEM;
+	      continue;
+	    }
+	  else if (p[0] >= 'A' && p[0] <= 'Z' && p[1] == ' ')
+	    {						/* Unrecognized block (RFU) */
+	      cat = ID_UNKNOWN;
+	      continue;
 	    }
-	  else
+	  else						/* Vendor ID */
 	    {
-	      if (strlen(q) < 5 ||
-		  q[4] != ' ' ||
-		  sscanf(q, "%x", &id1) != 1)
-		goto parserr;
-	      cat = NL_VENDOR;
+	      if ((id1 = id_hex(p, 4)) < 0 || !id_white_p(p[4]))
+		return parse_error;
+	      cat = ID_VENDOR;
+	      p += 5;
 	    }
 	  id2 = id3 = id4 = 0;
-	  q += 4;
 	}
-      else if (q == r+1) 
+      else if (cat == ID_UNKNOWN)			/* Nested entries in RFU blocks are skipped */
+	continue;
+      else if (nest == 1)				/* Nesting level 1 */
 	switch (cat)
 	  {
-	  case NL_VENDOR:
-	  case NL_DEVICE:
-	  case NL_SUBSYSTEM:
-	    if (sscanf(q, "%x", &id2) != 1 || q[4] != ' ')
-	      goto parserr;
-	    q += 5;
-	    cat = NL_DEVICE;
+	  case ID_VENDOR:
+	  case ID_DEVICE:
+	  case ID_SUBSYSTEM:
+	    if ((id2 = id_hex(p, 4)) < 0 || !id_white_p(p[4]))
+	      return parse_error;
+	    p += 5;
+	    cat = ID_DEVICE;
+	    id3 = id4 = 0;
+	    break;
+	  case ID_GEN_SUBSYSTEM:
+	    if ((id2 = id_hex(p, 4)) < 0 || !id_white_p(p[4]))
+	      return parse_error;
+	    p += 5;
 	    id3 = id4 = 0;
 	    break;
-	  case NL_CLASS:
-	  case NL_SUBCLASS:
-	  case NL_PROGIF:
-	    if (sscanf(q, "%x", &id2) != 1 || q[2] != ' ')
-	      goto parserr;
-	    q += 3;
-	    cat = NL_SUBCLASS;
+	  case ID_CLASS:
+	  case ID_SUBCLASS:
+	  case ID_PROGIF:
+	    if ((id2 = id_hex(p, 2)) < 0 || !id_white_p(p[2]))
+	      return parse_error;
+	    p += 3;
+	    cat = ID_SUBCLASS;
 	    id3 = id4 = 0;
 	    break;
 	  default:
-	    goto parserr;
+	    return parse_error;
 	  }
-      else if (q == r+2)
+      else if (nest == 2)				/* Nesting level 2 */
 	switch (cat)
 	  {
-	  case NL_DEVICE:
-	  case NL_SUBSYSTEM:
-	    if (sscanf(q, "%x%x", &id3, &id4) != 2 || q[9] != ' ')
-	      goto parserr;
-	    q += 10;
-	    cat = NL_SUBSYSTEM;
+	  case ID_DEVICE:
+	  case ID_SUBSYSTEM:
+	    if ((id3 = id_hex(p, 4)) < 0 || !id_white_p(p[4]) || (id4 = id_hex(p+5, 4)) < 0 || !id_white_p(p[9]))
+	      return parse_error;
+	    p += 10;
+	    cat = ID_SUBSYSTEM;
 	    break;
-	  case NL_CLASS:
-	  case NL_SUBCLASS:
-	  case NL_PROGIF:
-	    if (sscanf(q, "%x", &id3) != 1 || q[2] != ' ')
-	      goto parserr;
-	    q += 3;
-	    cat = NL_PROGIF;
+	  case ID_CLASS:
+	  case ID_SUBCLASS:
+	  case ID_PROGIF:
+	    if ((id3 = id_hex(p, 2)) < 0 || !id_white_p(p[2]))
+	      return parse_error;
+	    p += 3;
+	    cat = ID_PROGIF;
 	    id4 = 0;
 	    break;
 	  default:
-	    goto parserr;
+	    return parse_error;
 	  }
-      else
-	goto parserr;
-      while (*q == ' ')
-	q++;
-      if (!*q)
-	goto parserr;
-      if (nl_add(a, cat, id1, id2, id3, id4, q))
-	a->error("%s, line %d: duplicate entry", a->id_file_name, lino);
+      else						/* Nesting level 3 or more */
+	return parse_error;
+      while (id_white_p(*p))
+	p++;
+      if (!*p)
+	return parse_error;
+      if (id_insert(a, cat, id1, id2, id3, id4, p))
+	return "Duplicate entry";
     }
-  return;
-
-parserr:
-  a->error("%s, line %d: parse error", a->id_file_name, lino);
+  return NULL;
 }
 
-static void
-load_name_list(struct pci_access *a)
+int
+pci_load_name_list(struct pci_access *a)
 {
-  int fd;
-  struct stat st;
+  FILE *f;
+  int lino;
+  const char *err;
+
+  pci_free_name_list(a);
+  if (!(f = fopen(a->id_file_name, "r")))
+    return 0;
+  a->id_hash = pci_malloc(a, sizeof(struct id_entry *) * HASH_SIZE);
+  bzero(a->id_hash, sizeof(struct id_entry *) * HASH_SIZE);
+  err = id_parse_list(a, f, &lino);
+  if (!err && ferror(f))
+    err = "I/O error";
+  fclose(f);
+  if (err)
+    a->error("%s at %s, line %d\n", err, a->id_file_name, lino);
+  return 1;
+}
 
-  fd = open(a->id_file_name, O_RDONLY);
-  if (fd < 0)
+void
+pci_free_name_list(struct pci_access *a)
+{
+  pci_mfree(a->id_hash);
+  a->id_hash = NULL;
+  while (a->current_id_bucket)
     {
-      a->numeric_ids = 1;
-      return;
+      struct id_bucket *buck = a->current_id_bucket;
+      a->current_id_bucket = buck->next;
+      pci_mfree(buck);
     }
-  if (fstat(fd, &st) < 0)
-    err_name_list(a, "stat");
-  a->nl_list = pci_malloc(a, st.st_size + 1);
-  if (read(fd, a->nl_list, st.st_size) != st.st_size)
-    err_name_list(a, "read");
-  a->nl_list[st.st_size] = 0;
-  a->nl_hash = pci_malloc(a, sizeof(struct nl_entry *) * HASH_SIZE);
-  bzero(a->nl_hash, sizeof(struct nl_entry *) * HASH_SIZE);
-  parse_name_list(a);
-  close(fd);
 }
 
-void
-pci_free_name_list(struct pci_access *a)
+static struct id_entry *id_lookup_subsys(struct pci_access *a, int iv, int id, int isv, int isd)
 {
-  pci_mfree(a->nl_list);
-  a->nl_list = NULL;
-  pci_mfree(a->nl_hash);
-  a->nl_hash = NULL;
+  struct id_entry *d = NULL;
+  if (iv > 0 && id > 0)						/* Per-device lookup */
+    d = id_lookup(a, ID_SUBSYSTEM, iv, id, isv, isd);
+  if (!d)							/* Generic lookup */
+    d = id_lookup(a, ID_GEN_SUBSYSTEM, isv, isd, 0, 0);
+  if (!d && iv == isv && id == isd)				/* Check for subsystem == device */
+    d = id_lookup(a, ID_DEVICE, iv, id, 0, 0);
+  return d;
 }
 
 char *
-pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, u32 arg1, u32 arg2, u32 arg3, u32 arg4)
+pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, ...)
 {
-  int num = a->numeric_ids;
-  int res;
-  struct nl_entry *n;
+  va_list args;
+  int num, res, synth;
+  struct id_entry *v, *d, *cls, *pif;
+  int iv, id, isv, isd, icls, ipif;
+
+  va_start(args, flags);
 
-  if (flags & PCI_LOOKUP_NUMERIC)
+  num = 0;
+  if ((flags & PCI_LOOKUP_NUMERIC) || a->numeric_ids)
     {
-      flags &= PCI_LOOKUP_NUMERIC;
+      flags &= ~PCI_LOOKUP_NUMERIC;
       num = 1;
     }
-  if (!a->nl_hash && !num)
+  else if (!a->id_hash)
     {
-      load_name_list(a);
-      num = a->numeric_ids;
+      if (!pci_load_name_list(a))
+	num = a->numeric_ids = 1;
     }
+
+  if (flags & PCI_LOOKUP_NO_NUMBERS)
+    {
+      flags &= ~PCI_LOOKUP_NO_NUMBERS;
+      synth = 0;
+      if (num)
+	return NULL;
+    }
+  else
+    synth = 1;
+
   switch (flags)
     {
     case PCI_LOOKUP_VENDOR:
-      if (n = nl_lookup(a, num, NL_VENDOR, arg1, 0, 0, 0))
-	return n->name;
+      iv = va_arg(args, int);
+      if (num)
+	res = snprintf(buf, size, "%04x", iv);
+      else if (v = id_lookup(a, ID_VENDOR, iv, 0, 0, 0))
+	return v->name;
       else
-	res = snprintf(buf, size, "%04x", arg1);
+	res = snprintf(buf, size, "Unknown vendor %04x", iv);
       break;
     case PCI_LOOKUP_DEVICE:
-      if (n = nl_lookup(a, num, NL_DEVICE, arg1, arg2, 0, 0))
-	return n->name;
+      iv = va_arg(args, int);
+      id = va_arg(args, int);
+      if (num)
+	res = snprintf(buf, size, "%04x", id);
+      else if (d = id_lookup(a, ID_DEVICE, iv, id, 0, 0))
+	return d->name;
+      else if (synth)
+	res = snprintf(buf, size, "Unknown device %04x", id);
       else
-	res = snprintf(buf, size, "%04x", arg2);
+	return NULL;
       break;
     case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE:
-      if (!num)
+      iv = va_arg(args, int);
+      id = va_arg(args, int);
+      if (num)
+	res = snprintf(buf, size, "%04x:%04x", iv, id);
+      else
 	{
-	  struct nl_entry *e, *e2;
-	  e = nl_lookup(a, 0, NL_VENDOR, arg1, 0, 0, 0);
-	  e2 = nl_lookup(a, 0, NL_DEVICE, arg1, arg2, 0, 0);
-	  if (!e)
-	    res = snprintf(buf, size, "Unknown device %04x:%04x", arg1, arg2);
-	  else if (!e2)
-	    res = snprintf(buf, size, "%s: Unknown device %04x", e->name, arg2);
-	  else
-	    res = snprintf(buf, size, "%s %s", e->name, e2->name);
+	  v = id_lookup(a, ID_VENDOR, iv, 0, 0, 0);
+	  d = id_lookup(a, ID_DEVICE, iv, id, 0, 0);
+	  if (v && d)
+	    res = snprintf(buf, size, "%s %s", v->name, d->name);
+	  else if (!synth)
+	    return NULL;
+	  else if (!v)
+	    res = snprintf(buf, size, "Unknown device %04x:%04x", iv, id);
+	  else	/* !d */
+	    res = snprintf(buf, size, "%s Unknown device %04x", v->name, id);
 	}
-      else
-	res = snprintf(buf, size, "%04x:%04x", arg1, arg2);
       break;
-    case PCI_LOOKUP_VENDOR | PCI_LOOKUP_SUBSYSTEM:
-      if (n = nl_lookup(a, num, NL_VENDOR, arg3, 0, 0, 0))
-	return n->name;
+    case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR:
+      isv = va_arg(args, int);
+      if (num)
+	res = snprintf(buf, size, "%04x", isv);
+      else if (v = id_lookup(a, ID_VENDOR, isv, 0, 0, 0))
+	return v->name;
+      else if (synth)
+	res = snprintf(buf, size, "Unknown vendor %04x", isv);
       else
-	res = snprintf(buf, size, "%04x", arg2);
+	return NULL;
       break;
-    case PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
-      if (n = nl_lookup(a, num, NL_SUBSYSTEM, arg1, arg2, arg3, arg4))
-	return n->name;
-      else if (arg1 == arg3 && arg2 == arg4 && (n = nl_lookup(a, num, NL_DEVICE, arg1, arg2, 0, 0)))
-	return n->name;
+    case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE:
+      iv = va_arg(args, int);
+      id = va_arg(args, int);
+      isv = va_arg(args, int);
+      isd = va_arg(args, int);
+      if (num)
+	res = snprintf(buf, size, "%04x", isd);
+      else if (d = id_lookup_subsys(a, iv, id, isv, isd))
+	return d->name;
+      else if (synth)
+	res = snprintf(buf, size, "Unknown device %04x", isd);
       else
-	res = snprintf(buf, size, "%04x", arg4);
+	return NULL;
       break;
     case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
-      if (!num)
+      iv = va_arg(args, int);
+      id = va_arg(args, int);
+      isv = va_arg(args, int);
+      isd = va_arg(args, int);
+      if (num)
+	res = snprintf(buf, size, "%04x:%04x", isv, isd);
+      else
 	{
-	  struct nl_entry *e, *e2;
-	  e = nl_lookup(a, 0, NL_VENDOR, arg3, 0, 0, 0);
-	  e2 = nl_lookup(a, 0, NL_SUBSYSTEM, arg1, arg2, arg3, arg4);
-	  if (!e2 && arg1 == arg3 && arg2 == arg4)
-	    /* Cheat for vendors blindly setting subsystem ID same as device ID */
-	    e2 = nl_lookup(a, 0, NL_DEVICE, arg1, arg2, 0, 0);
-	  if (!e)
-	    res = snprintf(buf, size, "Unknown device %04x:%04x", arg3, arg4);
-	  else if (!e2)
-	    res = snprintf(buf, size, "%s: Unknown device %04x", e->name, arg4);
-	  else
-	    res = snprintf(buf, size, "%s %s", e->name, e2->name);
+	  v = id_lookup(a, ID_VENDOR, isv, 0, 0, 0);
+	  d = id_lookup_subsys(a, iv, id, isv, isd);
+	  if (v && d)
+	    res = snprintf(buf, size, "%s %s", v->name, d->name);
+	  else if (!synth)
+	    return NULL;
+	  else if (!v)
+	    res = snprintf(buf, size, "Unknown device %04x:%04x", isv, isd);
+	  else /* !d */
+	    res = snprintf(buf, size, "%s Unknown device %04x", v->name, isd);
 	}
-      else
-	res = snprintf(buf, size, "%04x:%04x", arg3, arg4);
       break;
     case PCI_LOOKUP_CLASS:
-      if (n = nl_lookup(a, num, NL_SUBCLASS, arg1 >> 8, arg1 & 0xff, 0, 0))
-	return n->name;
-      else if (n = nl_lookup(a, num, NL_CLASS, arg1, 0, 0, 0))
-	res = snprintf(buf, size, "%s [%04x]", n->name, arg1);
+      icls = va_arg(args, int);
+      if (num)
+	res = snprintf(buf, size, "%04x", icls);
+      else if (cls = id_lookup(a, ID_SUBCLASS, icls >> 8, icls & 0xff, 0, 0))
+	return cls->name;
+      else if (cls = id_lookup(a, ID_CLASS, icls, 0, 0, 0))
+	res = snprintf(buf, size, "%s [%04x]", cls->name, icls);
+      else if (synth)
+	res = snprintf(buf, size, "Class %04x", icls);
       else
-	res = snprintf(buf, size, "Class %04x", arg1);
+	return NULL;
       break;
     case PCI_LOOKUP_PROGIF:
-      if (n = nl_lookup(a, num, NL_PROGIF, arg1 >> 8, arg1 & 0xff, arg2, 0))
-	return n->name;
-      if (arg1 == 0x0101)
+      icls = va_arg(args, int);
+      ipif = va_arg(args, int);
+      if (num)
+	res = snprintf(buf, size, "%02x", ipif);
+      else if (pif = id_lookup(a, ID_PROGIF, icls >> 8, icls & 0xff, ipif, 0))
+	return pif->name;
+      else if (icls == 0x0101 && !(ipif & 0x70))
 	{
 	  /* IDE controllers have complex prog-if semantics */
-	  if (arg2 & 0x70)
-	    return NULL;
 	  res = snprintf(buf, size, "%s%s%s%s%s",
-			 (arg2 & 0x80) ? "Master " : "",
-			 (arg2 & 0x08) ? "SecP " : "",
-			 (arg2 & 0x04) ? "SecO " : "",
-			 (arg2 & 0x02) ? "PriP " : "",
-			 (arg2 & 0x01) ? "PriO " : "");
-	  if (res)
+			 (ipif & 0x80) ? "Master " : "",
+			 (ipif & 0x08) ? "SecP " : "",
+			 (ipif & 0x04) ? "SecO " : "",
+			 (ipif & 0x02) ? "PriP " : "",
+			 (ipif & 0x01) ? "PriO " : "");
+	  if (res > 0 && res < size)
 	    buf[--res] = 0;
-	  break;
 	}
-      return NULL;
+      else if (synth)
+	res = snprintf(buf, size, "ProgIf %02x", ipif);
+      else
+	return NULL;
+      break;
     default:
       return "<pci_lookup_name: invalid request>";
     }
-  return (res == size) ? "<too-large>" : buf;
+  if (res < 0 || res >= size)
+    return "<pci_lookup_name: buffer too small>";
+  else
+    return buf;
 }
diff -ruN pciutils-2.1.11/lib/nbsd-libpci.c pciutils-2.2.0/lib/nbsd-libpci.c
--- pciutils-2.1.11/lib/nbsd-libpci.c	2002-12-28 00:50:33 +0100
+++ pciutils-2.2.0/lib/nbsd-libpci.c	2004-08-13 22:14:10 +0200
@@ -25,7 +25,7 @@
 static void
 nbsd_config(struct pci_access *a)
 {
-  a->method_params[PCI_ACCESS_NBSD_LIBPCI] = PATH_NBSD_DEVICE;
+  a->method_params[PCI_ACCESS_NBSD_LIBPCI] = PCI_PATH_NBSD_DEVICE;
 }
 
 static int
@@ -67,6 +67,9 @@
   if (!(len == 1 || len == 2 || len == 4))
     return pci_generic_block_read(d, pos, buf, len);
 
+  if (pos >= 256)
+    return 0;
+
   shift = 8*(pos % 4);
   pos &= ~3;
 	
@@ -97,6 +100,9 @@
   if (!(len == 1 || len == 2 || len == 4))
     return pci_generic_block_write(d, pos, buf, len);
 
+  if (pos >= 256)
+    return 0;
+
   /*
    *  BEWARE: NetBSD seems to support only 32-bit access, so we have
    *  to emulate byte and word writes by read-modify-write, possibly
diff -ruN pciutils-2.1.11/lib/pci.h pciutils-2.2.0/lib/pci.h
--- pciutils-2.1.11/lib/pci.h	2003-01-04 12:04:39 +0100
+++ pciutils-2.2.0/lib/pci.h	2005-09-10 14:10:54 +0200
@@ -1,9 +1,7 @@
 /*
- *	$Id: pci.h,v 1.12 2003/01/04 11:04:39 mj Exp $
- *
  *	The PCI Library
  *
- *	Copyright (c) 1997--2002 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -13,67 +11,20 @@
 
 #include "config.h"
 #include "header.h"
+#include "types.h"
 
-/*
- *	Types
- */
-
-#ifdef OS_LINUX
-#include <linux/types.h>
-
-typedef __u8 byte;
-typedef __u8 u8;
-typedef __u16 word;
-typedef __u16 u16;
-typedef __u32 u32;
-#endif
-
-#ifdef OS_FREEBSD
-#include <sys/types.h>
-
-typedef u_int8_t byte;
-typedef u_int8_t u8;
-typedef u_int16_t word;
-typedef u_int16_t u16;
-typedef u_int32_t u32;
-#endif
-
-#ifdef OS_NETBSD
-#include <sys/types.h>
-
-typedef u_int8_t byte;
-typedef u_int8_t u8;
-typedef u_int16_t word;
-typedef u_int16_t u16;
-typedef u_int32_t u32;
-#endif
-
-#ifdef OS_AIX
-#include <sys/param.h>
-
-typedef u_int8_t byte;
-typedef u_int8_t u8;
-typedef u_int16_t word;
-typedef u_int16_t u16;
-typedef u_int32_t u32;
-#endif
-
-#ifdef HAVE_LONG_ADDRESS
-typedef unsigned long long pciaddr_t;
-#else
-typedef unsigned long pciaddr_t;
-#endif
+#define PCI_LIB_VERSION 0x020200
 
 /*
  *	PCI Access Structure
  */
 
 struct pci_methods;
-struct nl_entry;
 
 enum pci_access_type {
   /* Known access methods, remember to update access.c as well */
   PCI_ACCESS_AUTO,			/* Autodetection (params: none) */
+  PCI_ACCESS_SYS_BUS_PCI,		/* Linux /sys/bus/pci (params: path) */
   PCI_ACCESS_PROC_BUS_PCI,		/* Linux /proc/bus/pci (params: path) */
   PCI_ACCESS_I386_TYPE1,		/* i386 ports, type 1 (params: none) */
   PCI_ACCESS_I386_TYPE2,		/* i386 ports, type 2 (params: none) */
@@ -103,8 +54,8 @@
 
   /* Fields used internally: */
   struct pci_methods *methods;
-  char *nl_list;			/* Name list cache */
-  struct nl_entry **nl_hash;
+  struct id_entry **id_hash;		/* names.c */
+  struct id_bucket *current_id_bucket;
   int fd;				/* proc: fd */
   int fd_rw;				/* proc: fd opened read-write */
   struct pci_dev *cached_dev;		/* proc: device the fd is for */
@@ -118,7 +69,7 @@
 
 /* Scanning of devices */
 void pci_scan_bus(struct pci_access *acc);
-struct pci_dev *pci_get_dev(struct pci_access *acc, int bus, int dev, int func); /* Raw access to specified device */
+struct pci_dev *pci_get_dev(struct pci_access *acc, int domain, int bus, int dev, int func); /* Raw access to specified device */
 void pci_free_dev(struct pci_dev *);
 
 /*
@@ -127,12 +78,12 @@
 
 struct pci_dev {
   struct pci_dev *next;			/* Next device in the chain */
-  word bus;				/* Higher byte can select host bridges */
-  byte dev, func;			/* Device and function */
+  u16 domain;				/* PCI domain (host bridge) */
+  u8 bus, dev, func;			/* Bus inside domain, device and function */
 
   /* These fields are set by pci_fill_info() */
   int known_fields;			/* Set of info fields already known */
-  word vendor_id, device_id;		/* Identity of the device */
+  u16 vendor_id, device_id;		/* Identity of the device */
   int irq;				/* IRQ number */
   pciaddr_t base_addr[6];		/* Base addresses */
   pciaddr_t size[6];			/* Region sizes */
@@ -142,23 +93,23 @@
   /* Fields used internally: */
   struct pci_access *access;
   struct pci_methods *methods;
-  byte *cache;				/* Cached information */
+  u8 *cache;				/* Cached config registers */
   int cache_len;
-  int hdrtype;				/* Direct methods: header type */
+  int hdrtype;				/* Cached low 7 bits of header type, -1 if unknown */
   void *aux;				/* Auxillary data */
 };
 
 #define PCI_ADDR_IO_MASK (~(pciaddr_t) 0x3)
 #define PCI_ADDR_MEM_MASK (~(pciaddr_t) 0xf)
 
-byte pci_read_byte(struct pci_dev *, int pos); /* Access to configuration space */
-word pci_read_word(struct pci_dev *, int pos);
+u8 pci_read_byte(struct pci_dev *, int pos); /* Access to configuration space */
+u16 pci_read_word(struct pci_dev *, int pos);
 u32  pci_read_long(struct pci_dev *, int pos);
-int pci_read_block(struct pci_dev *, int pos, byte *buf, int len);
-int pci_write_byte(struct pci_dev *, int pos, byte data);
-int pci_write_word(struct pci_dev *, int pos, word data);
+int pci_read_block(struct pci_dev *, int pos, u8 *buf, int len);
+int pci_write_byte(struct pci_dev *, int pos, u8 data);
+int pci_write_word(struct pci_dev *, int pos, u16 data);
 int pci_write_long(struct pci_dev *, int pos, u32 data);
-int pci_write_block(struct pci_dev *, int pos, byte *buf, int len);
+int pci_write_block(struct pci_dev *, int pos, u8 *buf, int len);
 
 int pci_fill_info(struct pci_dev *, int flags); /* Fill in device information */
 
@@ -169,14 +120,14 @@
 #define PCI_FILL_SIZES		16
 #define PCI_FILL_RESCAN		0x10000
 
-void pci_setup_cache(struct pci_dev *, byte *cache, int len);
+void pci_setup_cache(struct pci_dev *, u8 *cache, int len);
 
 /*
  *	Filters
  */
 
 struct pci_filter {
-  int bus, slot, func;			/* -1 = ANY */
+  int domain, bus, slot, func;			/* -1 = ANY */
   int vendor, device;
 };
 
@@ -186,17 +137,34 @@
 int pci_filter_match(struct pci_filter *, struct pci_dev *);
 
 /*
- *	Device names
- */
-
-char *pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, u32 arg1, u32 arg2, u32 arg3, u32 arg4);
-void pci_free_name_list(struct pci_access *a);
-
-#define PCI_LOOKUP_VENDOR 1
-#define PCI_LOOKUP_DEVICE 2
-#define PCI_LOOKUP_CLASS 4
-#define PCI_LOOKUP_SUBSYSTEM 8
-#define PCI_LOOKUP_PROGIF 16
-#define PCI_LOOKUP_NUMERIC 0x10000
+ *	Conversion of PCI ID's to names (according to the pci.ids file)
+ *
+ *	Call pci_lookup_name() to identify different types of ID's:
+ *
+ *	VENDOR				(vendorID) -> vendor
+ *	DEVICE				(vendorID, deviceID) -> device
+ *	VENDOR | DEVICE			(vendorID, deviceID) -> combined vendor and device
+ *	SUBSYSTEM | VENDOR		(subvendorID) -> subsystem vendor
+ *	SUBSYSTEM | DEVICE		(vendorID, deviceID, subvendorID, subdevID) -> subsystem device
+ *	SUBSYSTEM | VENDOR | DEVICE	(vendorID, deviceID, subvendorID, subdevID) -> combined subsystem v+d
+ *	SUBSYSTEM | ...			(-1, -1, subvendorID, subdevID) -> generic subsystem
+ *	CLASS				(classID) -> class
+ *	PROGIF				(classID, progif) -> programming interface
+ */
+
+char *pci_lookup_name(struct pci_access *a, char *buf, int size, int flags, ...);
+
+int pci_load_name_list(struct pci_access *a);	/* Called automatically by pci_lookup_*() when needed; returns success */
+void pci_free_name_list(struct pci_access *a);	/* Called automatically by pci_cleanup() */
+
+enum pci_lookup_mode {
+  PCI_LOOKUP_VENDOR = 1,		/* Vendor name (args: vendorID) */
+  PCI_LOOKUP_DEVICE = 2,		/* Device name (args: vendorID, deviceID) */
+  PCI_LOOKUP_CLASS = 4,			/* Device class (args: classID) */
+  PCI_LOOKUP_SUBSYSTEM = 8,
+  PCI_LOOKUP_PROGIF = 16,		/* Programming interface (args: classID, prog_if) */
+  PCI_LOOKUP_NUMERIC = 0x10000,		/* Want only formatted numbers; default if access->numeric_ids is set */
+  PCI_LOOKUP_NO_NUMBERS = 0x20000	/* Return NULL if not found in the database; default is to print numerically */
+};
 
 #endif
diff -ruN pciutils-2.1.11/lib/pread.h pciutils-2.2.0/lib/pread.h
--- pciutils-2.1.11/lib/pread.h	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/lib/pread.h	2004-08-13 22:15:46 +0200
@@ -0,0 +1,66 @@
+/*
+ *	The PCI Library -- Portable interface to pread() and pwrite()
+ *
+ *	Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+/*
+ *  We'd like to use pread/pwrite for configuration space accesses, but
+ *  unfortunately it isn't simple at all since all libc's until glibc 2.1
+ *  don't define it.
+ */
+
+#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ > 0
+/* glibc 2.1 or newer -> pread/pwrite supported automatically */
+
+#elif defined(i386) && defined(__GLIBC__)
+/* glibc 2.0 on i386 -> call syscalls directly */
+#include <asm/unistd.h>
+#include <syscall-list.h>
+#ifndef SYS_pread
+#define SYS_pread 180
+#endif
+static int pread(unsigned int fd, void *buf, size_t size, loff_t where)
+{ return syscall(SYS_pread, fd, buf, size, where); }
+#ifndef SYS_pwrite
+#define SYS_pwrite 181
+#endif
+static int pwrite(unsigned int fd, void *buf, size_t size, loff_t where)
+{ return syscall(SYS_pwrite, fd, buf, size, where); }
+
+#elif defined(i386)
+/* old libc on i386 -> call syscalls directly the old way */
+#include <asm/unistd.h>
+static _syscall5(int, pread, unsigned int, fd, void *, buf, size_t, size, u32, where_lo, u32, where_hi);
+static _syscall5(int, pwrite, unsigned int, fd, void *, buf, size_t, size, u32, where_lo, u32, where_hi);
+static int do_read(struct pci_dev *d UNUSED, int fd, void *buf, size_t size, int where) { return pread(fd, buf, size, where, 0); }
+static int do_write(struct pci_dev *d UNUSED, int fd, void *buf, size_t size, int where) { return pwrite(fd, buf, size, where, 0); }
+#define PCI_HAVE_DO_READ
+
+#else
+/* In all other cases we use lseek/read/write instead to be safe */
+#define make_rw_glue(op) \
+	static int do_##op(struct pci_dev *d, int fd, void *buf, size_t size, int where)	\
+	{											\
+	  struct pci_access *a = d->access;							\
+	  int r;										\
+	  if (a->fd_pos != where && lseek(fd, where, SEEK_SET) < 0)				\
+	    return -1;										\
+	  r = op(fd, buf, size);								\
+	  if (r < 0)										\
+	    a->fd_pos = -1;									\
+	  else											\
+	    a->fd_pos = where + r;								\
+	  return r;										\
+	}
+make_rw_glue(read)
+make_rw_glue(write)
+#define PCI_HAVE_DO_READ
+#endif
+
+#ifndef PCI_HAVE_DO_READ
+#define do_read(d,f,b,l,p) pread(f,b,l,p)
+#define do_write(d,f,b,l,p) pwrite(f,b,l,p)
+#endif
diff -ruN pciutils-2.1.11/lib/proc.c pciutils-2.2.0/lib/proc.c
--- pciutils-2.1.11/lib/proc.c	2002-12-26 21:24:08 +0100
+++ pciutils-2.2.0/lib/proc.c	2004-08-13 22:14:21 +0200
@@ -1,9 +1,7 @@
 /*
- *	$Id: proc.c,v 1.10 2002/12/26 20:24:08 mj Exp $
- *
  *	The PCI Library -- Configuration Access via /proc/bus/pci
  *
- *	Copyright (c) 1997--1999 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -18,70 +16,12 @@
 #include <sys/types.h>
 
 #include "internal.h"
-
-/*
- *  We'd like to use pread/pwrite for configuration space accesses, but
- *  unfortunately it isn't simple at all since all libc's until glibc 2.1
- *  don't define it.
- */
-
-#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ > 0
-/* glibc 2.1 or newer -> pread/pwrite supported automatically */
-
-#elif defined(i386) && defined(__GLIBC__)
-/* glibc 2.0 on i386 -> call syscalls directly */
-#include <asm/unistd.h>
-#include <syscall-list.h>
-#ifndef SYS_pread
-#define SYS_pread 180
-#endif
-static int pread(unsigned int fd, void *buf, size_t size, loff_t where)
-{ return syscall(SYS_pread, fd, buf, size, where); }
-#ifndef SYS_pwrite
-#define SYS_pwrite 181
-#endif
-static int pwrite(unsigned int fd, void *buf, size_t size, loff_t where)
-{ return syscall(SYS_pwrite, fd, buf, size, where); }
-
-#elif defined(i386)
-/* old libc on i386 -> call syscalls directly the old way */
-#include <asm/unistd.h>
-static _syscall5(int, pread, unsigned int, fd, void *, buf, size_t, size, u32, where_lo, u32, where_hi);
-static _syscall5(int, pwrite, unsigned int, fd, void *, buf, size_t, size, u32, where_lo, u32, where_hi);
-static int do_read(struct pci_dev *d UNUSED, int fd, void *buf, size_t size, int where) { return pread(fd, buf, size, where, 0); }
-static int do_write(struct pci_dev *d UNUSED, int fd, void *buf, size_t size, int where) { return pwrite(fd, buf, size, where, 0); }
-#define HAVE_DO_READ
-
-#else
-/* In all other cases we use lseek/read/write instead to be safe */
-#define make_rw_glue(op) \
-	static int do_##op(struct pci_dev *d, int fd, void *buf, size_t size, int where)	\
-	{											\
-	  struct pci_access *a = d->access;							\
-	  int r;										\
-	  if (a->fd_pos != where && lseek(fd, where, SEEK_SET) < 0)				\
-	    return -1;										\
-	  r = op(fd, buf, size);								\
-	  if (r < 0)										\
-	    a->fd_pos = -1;									\
-	  else											\
-	    a->fd_pos = where + r;								\
-	  return r;										\
-	}
-make_rw_glue(read)
-make_rw_glue(write)
-#define HAVE_DO_READ
-#endif
-
-#ifndef HAVE_DO_READ
-#define do_read(d,f,b,l,p) pread(f,b,l,p)
-#define do_write(d,f,b,l,p) pwrite(f,b,l,p)
-#endif
+#include "pread.h"
 
 static void
 proc_config(struct pci_access *a)
 {
-  a->method_params[PCI_ACCESS_PROC_BUS_PCI] = PATH_PROC_BUS_PCI;
+  a->method_params[PCI_ACCESS_PROC_BUS_PCI] = PCI_PATH_PROC_BUS_PCI;
 }
 
 static int
@@ -130,12 +70,8 @@
       struct pci_dev *d = pci_alloc_dev(a);
       unsigned int dfn, vend, cnt, known;
 
-      cnt = sscanf(buf,
-#ifdef HAVE_LONG_ADDRESS
-	     "%x %x %x %llx %llx %llx %llx %llx %llx %llx %llx %llx %llx %llx %llx %llx %llx",
-#else
-	     "%x %x %x %lx %lx %lx %lx %lx %lx %lx %lx %lx %lx %lx %lx %lx %lx",
-#endif
+#define F " " PCIADDR_T_FMT
+      cnt = sscanf(buf, "%x %x %x" F F F F F F F F F F F F F F,
 	     &dfn,
 	     &vend,
 	     &d->irq,
@@ -153,6 +89,7 @@
 	     &d->size[4],
 	     &d->size[5],
 	     &d->rom_size);
+#undef F
       if (cnt != 9 && cnt != 10 && cnt != 17)
 	a->error("proc: parse error (read only %d items)", cnt);
       d->bus = dfn >> 8U;
@@ -160,7 +97,6 @@
       d->func = PCI_FUNC(dfn & 0xff);
       d->vendor_id = vend >> 16U;
       d->device_id = vend & 0xffff;
-      d->hdrtype = pci_read_byte(d, PCI_HEADER_TYPE);
       known = PCI_FILL_IDENT;
       if (!a->buscentric)
 	{
@@ -183,11 +119,14 @@
 
   if (a->cached_dev != d || a->fd_rw < rw)
     {
-      char buf[256];
+      char buf[1024];
+      int e;
       if (a->fd >= 0)
 	close(a->fd);
-      if (snprintf(buf, sizeof(buf), "%s/%02x/%02x.%d", a->method_params[PCI_ACCESS_PROC_BUS_PCI],
-		   d->bus, d->dev, d->func) == sizeof(buf))
+      e = snprintf(buf, sizeof(buf), "%s/%02x/%02x.%d",
+		   a->method_params[PCI_ACCESS_PROC_BUS_PCI],
+		   d->bus, d->dev, d->func);
+      if (e < 0 || e >= (int) sizeof(buf))
 	a->error("File name too long");
       a->fd_rw = a->writeable || rw;
       a->fd = open(buf, a->fd_rw ? O_RDWR : O_RDONLY);
@@ -214,10 +153,7 @@
       return 0;
     }
   else if (res != len)
-    {
-      d->access->warning("proc_read: tried to read %d bytes at %d, but got only %d", len, pos, res);
-      return 0;
-    }
+    return 0;
   return 1;
 }
 
@@ -237,7 +173,7 @@
     }
   else if (res != len)
     {
-      d->access->warning("proc_write: tried to write %d bytes at %d, but got only %d", len, pos, res);
+      d->access->warning("proc_write: tried to write %d bytes at %d, but only %d succeeded", len, pos, res);
       return 0;
     }
   return 1;
@@ -251,7 +187,7 @@
 }
 
 struct pci_methods pm_linux_proc = {
-  "/proc/bus/pci",
+  "Linux-proc",
   proc_config,
   proc_detect,
   proc_init,
diff -ruN pciutils-2.1.11/lib/sysdep.h pciutils-2.2.0/lib/sysdep.h
--- pciutils-2.1.11/lib/sysdep.h	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/lib/sysdep.h	2004-08-13 22:55:56 +0200
@@ -0,0 +1,89 @@
+/*
+ *	The PCI Library -- System-Dependent Stuff
+ *
+ *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifdef __GNUC__
+#define UNUSED __attribute__((unused))
+#define NONRET __attribute__((noreturn))
+#else
+#define UNUSED
+#define NONRET
+#define inline
+#endif
+
+typedef u8 byte;
+typedef u16 word;
+
+#ifdef PCI_OS_WINDOWS
+#define bzero(x,y) memset(x,0,y)
+#define strcasecmp strcmpi
+#endif
+
+#ifdef PCI_HAVE_LINUX_BYTEORDER_H
+
+#include <asm/byteorder.h>
+#define cpu_to_le16 __cpu_to_le16
+#define cpu_to_le32 __cpu_to_le32
+#define le16_to_cpu __le16_to_cpu
+#define le32_to_cpu __le32_to_cpu
+
+#else
+
+#ifdef PCI_OS_LINUX
+#include <endian.h>
+#define BYTE_ORDER __BYTE_ORDER
+#define BIG_ENDIAN __BIG_ENDIAN
+#endif
+
+#ifdef PCI_OS_SUNOS
+#include <sys/byteorder.h>
+#define BIG_ENDIAN 4321
+#ifdef _LITTLE_ENDIAN
+#define BYTE_ORDER 1234
+#else
+#define BYTE_ORDER 4321
+#endif
+#endif
+
+#ifdef PCI_OS_WINDOWS
+#ifdef __MINGW32__
+  #include <sys/param.h>
+#else
+  #include <io.h>
+  #define BIG_ENDIAN 4321
+  #define LITTLE_ENDIAN	1234
+  #define BYTE_ORDER LITTLE_ENDIAN
+  #define snprintf _snprintf
+#endif
+#endif
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define cpu_to_le16 swab16
+#define cpu_to_le32 swab32
+#define le16_to_cpu swab16
+#define le32_to_cpu swab32
+
+static inline word swab16(word w)
+{
+  return (w << 8) | ((w >> 8) & 0xff);
+}
+
+static inline u32 swab32(u32 w)
+{
+  return ((w & 0xff000000) >> 24) |
+         ((w & 0x00ff0000) >> 8) |
+         ((w & 0x0000ff00) << 8)  |
+         ((w & 0x000000ff) << 24);
+}
+#else
+#define cpu_to_le16(x) (x)
+#define cpu_to_le32(x) (x)
+#define le16_to_cpu(x) (x)
+#define le32_to_cpu(x) (x)
+#endif
+
+#endif
diff -ruN pciutils-2.1.11/lib/sysfs.c pciutils-2.2.0/lib/sysfs.c
--- pciutils-2.1.11/lib/sysfs.c	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/lib/sysfs.c	2005-09-21 13:51:00 +0200
@@ -0,0 +1,268 @@
+/*
+ *	The PCI Library -- Configuration Access via /sys/bus/pci
+ *
+ * 	Copyright (c) 2003 Matthew Wilcox <willy@fc.hp.com>
+ *	Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <errno.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <sys/types.h>
+
+#include "internal.h"
+#include "pread.h"
+
+static void
+sysfs_config(struct pci_access *a)
+{
+  a->method_params[PCI_ACCESS_SYS_BUS_PCI] = PCI_PATH_SYS_BUS_PCI;
+}
+
+static inline char *
+sysfs_name(struct pci_access *a)
+{
+  return a->method_params[PCI_ACCESS_SYS_BUS_PCI];
+}
+
+static int
+sysfs_detect(struct pci_access *a)
+{
+  if (access(sysfs_name(a), R_OK))
+    {
+      a->debug("...cannot open %s", sysfs_name(a));
+      return 0;
+    }
+  a->debug("...using %s", sysfs_name(a));
+  return 1;
+}
+
+static void
+sysfs_init(struct pci_access *a)
+{
+  a->fd = -1;
+}
+
+static void
+sysfs_cleanup(struct pci_access *a)
+{
+  if (a->fd >= 0)
+    {
+      close(a->fd);
+      a->fd = -1;
+    }
+}
+
+#define OBJNAMELEN 1024
+static void
+sysfs_obj_name(struct pci_dev *d, char *object, char *buf)
+{
+  int n = snprintf(buf, OBJNAMELEN, "%s/devices/%04x:%02x:%02x.%d/%s",
+		   sysfs_name(d->access), d->domain, d->bus, d->dev, d->func, object);
+  if (n < 0 || n >= OBJNAMELEN)
+    d->access->error("File name too long");
+}
+
+static int
+sysfs_get_value(struct pci_dev *d, char *object)
+{
+  struct pci_access *a = d->access;
+  int fd, n;
+  char namebuf[OBJNAMELEN], buf[256];
+
+  sysfs_obj_name(d, object, namebuf);
+  fd = open(namebuf, O_RDONLY);
+  if (fd < 0)
+    a->error("Cannot open %s: %s", namebuf, strerror(errno));
+  n = read(fd, buf, sizeof(buf));
+  close(fd);
+  if (n < 0)
+    a->error("Error reading %s: %s", namebuf, strerror(errno));
+  if (n >= (int) sizeof(buf))
+    a->error("Value in %s too long", namebuf);
+  buf[n] = 0;
+  return strtol(buf, NULL, 0);
+}
+
+static void
+sysfs_get_resources(struct pci_dev *d)
+{
+  struct pci_access *a = d->access;
+  char namebuf[OBJNAMELEN], buf[256];
+  FILE *file;
+  int i;
+
+  sysfs_obj_name(d, "resource", namebuf);
+  file = fopen(namebuf, "r");
+  if (!file)
+    a->error("Cannot open %s: %s", namebuf, strerror(errno));
+  for (i = 0; i < 7; i++)
+    {
+      unsigned long long start, end, size;
+      if (!fgets(buf, sizeof(buf), file))
+	break;
+      if (sscanf(buf, "%llx %llx", &start, &end) != 2)
+	a->error("Syntax error in %s", namebuf);
+      if (start)
+	size = end - start + 1;
+      else
+	size = 0;
+      if (i < 6)
+	{
+	  d->base_addr[i] = start;
+	  d->size[i] = size;
+	}
+      else
+	{
+	  d->rom_base_addr = start;
+	  d->rom_size = size;
+	}
+    }
+  fclose(file);
+}
+
+static void sysfs_scan(struct pci_access *a)
+{
+  char dirname[1024];
+  DIR *dir;
+  struct dirent *entry;
+  int n;
+
+  n = snprintf(dirname, sizeof(dirname), "%s/devices", sysfs_name(a));
+  if (n < 0 || n >= (int) sizeof(dirname))
+    a->error("Directory name too long");
+  dir = opendir(dirname);
+  if (!dir)
+    a->error("Cannot open %s", dirname);
+  while ((entry = readdir(dir)))
+    {
+      struct pci_dev *d;
+      unsigned int dom, bus, dev, func;
+
+      /* ".", ".." or a special non-device perhaps */
+      if (entry->d_name[0] == '.')
+	continue;
+
+      d = pci_alloc_dev(a);
+      if (sscanf(entry->d_name, "%x:%x:%x.%d", &dom, &bus, &dev, &func) < 4)
+	a->error("sysfs_scan: Couldn't parse entry name %s", entry->d_name);
+      d->domain = dom;
+      d->bus = bus;
+      d->dev = dev;
+      d->func = func;
+      if (!a->buscentric)
+	{
+	  sysfs_get_resources(d);
+	  d->irq = sysfs_get_value(d, "irq");
+	  d->known_fields = PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE | PCI_FILL_SIZES;
+#if 0
+	  /*
+	   *  We prefer reading these from the config registers, it's faster.
+	   *  However, it would be possible and maybe even useful to hack the kernel
+	   *  to believe that some device has a different ID. If you do it, just
+	   *  enable this piece of code.  --mj
+	   */
+	  d->vendor_id = sysfs_get_value(d, "vendor");
+	  d->device_id = sysfs_get_value(d, "device");
+	  d->known_fields |= PCI_FILL_IDENT;
+#endif
+	}
+      pci_link_dev(a, d);
+    }
+  closedir(dir);
+}
+
+static int
+sysfs_setup(struct pci_dev *d, int rw)
+{
+  struct pci_access *a = d->access;
+
+  if (a->cached_dev != d || a->fd_rw < rw)
+    {
+      char namebuf[OBJNAMELEN];
+      if (a->fd >= 0)
+	close(a->fd);
+      sysfs_obj_name(d, "config", namebuf);
+      a->fd_rw = a->writeable || rw;
+      a->fd = open(namebuf, a->fd_rw ? O_RDWR : O_RDONLY);
+      if (a->fd < 0)
+	a->warning("Cannot open %s", namebuf);
+      a->cached_dev = d;
+      a->fd_pos = 0;
+    }
+  return a->fd;
+}
+
+static int sysfs_read(struct pci_dev *d, int pos, byte *buf, int len)
+{
+  int fd = sysfs_setup(d, 0);
+  int res;
+
+  if (fd < 0)
+    return 0;
+  res = do_read(d, fd, buf, len, pos);
+  if (res < 0)
+    {
+      d->access->warning("sysfs_read: read failed: %s", strerror(errno));
+      return 0;
+    }
+  else if (res != len)
+    return 0;
+  return 1;
+}
+
+static int sysfs_write(struct pci_dev *d, int pos, byte *buf, int len)
+{
+  int fd = sysfs_setup(d, 1);
+  int res;
+
+  if (fd < 0)
+    return 0;
+  res = do_write(d, fd, buf, len, pos);
+  if (res < 0)
+    {
+      d->access->warning("sysfs_write: write failed: %s", strerror(errno));
+      return 0;
+    }
+  else if (res != len)
+    {
+      d->access->warning("sysfs_write: tried to write %d bytes at %d, but only %d succeeded", len, pos, res);
+      return 0;
+    }
+  return 1;
+}
+
+static void sysfs_cleanup_dev(struct pci_dev *d)
+{
+  struct pci_access *a = d->access;
+
+  if (a->cached_dev == d)
+    {
+      a->cached_dev = NULL;
+      close(a->fd);
+      a->fd = -1;
+    }
+}
+
+struct pci_methods pm_linux_sysfs = {
+  "Linux-sysfs",
+  sysfs_config,
+  sysfs_detect,
+  sysfs_init,
+  sysfs_cleanup,
+  sysfs_scan,
+  pci_generic_fill_info,
+  sysfs_read,
+  sysfs_write,
+  NULL,					/* init_dev */
+  sysfs_cleanup_dev
+};
diff -ruN pciutils-2.1.11/lib/types.h pciutils-2.2.0/lib/types.h
--- pciutils-2.1.11/lib/types.h	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/lib/types.h	2005-09-21 13:43:02 +0200
@@ -0,0 +1,53 @@
+/*
+ *	The PCI Library -- Types and Format Strings
+ *
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
+ *
+ *	Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <sys/types.h>
+
+#ifndef PCI_HAVE_Uxx_TYPES
+
+#ifdef PCI_OS_WINDOWS
+typedef unsigned __int8 u8;
+typedef unsigned __int16 u16;
+typedef unsigned __int32 u32;
+#else
+typedef u_int8_t u8;
+typedef u_int16_t u16;
+typedef u_int32_t u32;
+#endif
+
+#ifdef PCI_HAVE_64BIT_ADDRESS
+#include <limits.h>
+#if ULONG_MAX > 0xffffffff
+typedef unsigned long u64;
+#define PCI_U64_FMT "l"
+#else
+typedef unsigned long long u64;
+#define PCI_U64_FMT "ll"
+#endif
+#endif
+
+#endif	/* PCI_HAVE_Uxx_TYPES */
+
+#ifdef PCI_HAVE_64BIT_ADDRESS
+typedef u64 pciaddr_t;
+#define PCIADDR_T_FMT "%08" PCI_U64_FMT "x"
+#define PCIADDR_PORT_FMT "%04" PCI_U64_FMT "x"
+#else
+typedef u32 pciaddr_t;
+#define PCIADDR_T_FMT "%08x"
+#define PCIADDR_PORT_FMT "%04x"
+#endif
+
+#ifdef PCI_ARCH_SPARC64
+/* On sparc64 Linux the kernel reports remapped port addresses and IRQ numbers */
+#undef PCIADDR_PORT_FMT
+#define PCIADDR_PORT_FMT PCIADDR_T_FMT
+#define PCIIRQ_FMT "%08x"
+#else
+#define PCIIRQ_FMT "%d"
+#endif
diff -ruN pciutils-2.1.11/lspci.c pciutils-2.2.0/lspci.c
--- pciutils-2.1.11/lspci.c	2002-12-26 21:24:50 +0100
+++ pciutils-2.2.0/lspci.c	2005-09-21 13:56:18 +0200
@@ -1,9 +1,7 @@
 /*
- *	$Id: lspci.c,v 1.43 2002/12/26 20:24:50 mj Exp $
+ *	The PCI Utilities -- List All PCI Devices
  *
- *	Linux PCI Utilities -- List All PCI Devices
- *
- *	Copyright (c) 1997--2002 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2005 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -36,7 +34,8 @@
 -b\t\tBus-centric view (PCI addresses and IRQ's instead of those seen by the CPU)\n\
 -x\t\tShow hex-dump of the standard portion of config space\n\
 -xxx\t\tShow hex-dump of the whole config space (dangerous; root only)\n\
--s [[<bus>]:][<slot>][.[<func>]]\tShow only devices in selected slots\n\
+-xxxx\t\tShow hex-dump of the 4096-byte extended config space (root only)\n\
+-s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]]\tShow only devices in selected slots\n\
 -d [<vendor>]:[<device>]\tShow only selected devices\n\
 -t\t\tShow bus tree\n\
 -m\t\tProduce machine-readable output\n\
@@ -49,40 +48,15 @@
 
 static struct pci_access *pacc;
 
-/* Format strings used for IRQ numbers and memory addresses */
-
-#ifdef ARCH_SPARC64
-#define IRQ_FORMAT "%08x"
-#else
-#define IRQ_FORMAT "%d"
-#endif
-
-#ifdef HAVE_64BIT_ADDRESS
-#ifdef HAVE_LONG_ADDRESS
-#define ADDR_FORMAT "%016Lx"
-#else
-#define ADDR_FORMAT "%016lx"
-#endif
-#else
-#define ADDR_FORMAT "%08lx"
-#endif
-
-#ifdef ARCH_SPARC64
-#define IO_FORMAT "%016Lx"
-#elif defined(HAVE_LONG_ADDRESS)
-#define IO_FORMAT "%04Lx"
-#else
-#define IO_FORMAT "%04lx"
-#endif
-
 /*
- *  If we aren't being compiled by GCC, use malloc() instead of alloca().
+ *  If we aren't being compiled by GCC, use xmalloc() instead of alloca().
  *  This increases our memory footprint, but only slightly since we don't
  *  use alloca() much.
  */
 
 #ifndef __GNUC__
-#define alloca malloc
+#undef alloca
+#define alloca xmalloc
 #endif
 
 /* Our view of the PCI bus */
@@ -90,16 +64,44 @@
 struct device {
   struct device *next;
   struct pci_dev *dev;
-  unsigned int config_cnt;
-  byte config[256];
+  unsigned int config_cached, config_bufsize;
+  byte *config;				/* Cached configuration space data */
+  byte *present;			/* Maps which configuration bytes are present */
 };
 
 static struct device *first_dev;
 
+static int
+config_fetch(struct device *d, unsigned int pos, unsigned int len)
+{
+  unsigned int end = pos+len;
+  int result;
+
+  while (pos < d->config_bufsize && len && d->present[pos])
+    pos++, len--;
+  while (pos+len <= d->config_bufsize && len && d->present[pos+len-1])
+    len--;
+  if (!len)
+    return 1;
+
+  if (end > d->config_bufsize)
+    {
+      int orig_size = d->config_bufsize;
+      while (end > d->config_bufsize)
+	d->config_bufsize *= 2;
+      d->config = xrealloc(d->config, d->config_bufsize);
+      d->present = xrealloc(d->present, d->config_bufsize);
+      bzero(d->present + orig_size, d->config_bufsize - orig_size);
+    }
+  result = pci_read_block(d->dev, pos, d->config + pos, len);
+  if (result)
+    memset(d->present + pos, 1, len);
+  return result;
+}
+
 static struct device *
 scan_device(struct pci_dev *p)
 {
-  int how_much = (show_hex > 2) ? 256 : 64;
   struct device *d;
 
   if (!pci_filter_match(&filter, p))
@@ -107,17 +109,20 @@
   d = xmalloc(sizeof(struct device));
   bzero(d, sizeof(*d));
   d->dev = p;
-  if (!pci_read_block(p, 0, d->config, how_much))
-    die("Unable to read %d bytes of configuration space.", how_much);
-  if (how_much < 128 && (d->config[PCI_HEADER_TYPE] & 0x7f) == PCI_HEADER_TYPE_CARDBUS)
-    {
-      /* For cardbus bridges, we need to fetch 64 bytes more to get the full standard header... */
-      if (!pci_read_block(p, 64, d->config+64, 64))
-	die("Unable to read cardbus bridge extension data.");
-      how_much = 128;
+  d->config_cached = d->config_bufsize = 64;
+  d->config = xmalloc(64);
+  d->present = xmalloc(64);
+  memset(d->present, 1, 64);
+  if (!pci_read_block(p, 0, d->config, 64))
+    die("Unable to read the standard configuration space header");
+  if ((d->config[PCI_HEADER_TYPE] & 0x7f) == PCI_HEADER_TYPE_CARDBUS)
+    {
+      /* For cardbus bridges, we need to fetch 64 bytes more to get the
+       * full standard header... */
+      if (config_fetch(d, 64, 64))
+	d->config_cached += 64;
     }
-  d->config_cnt = how_much;
-  pci_setup_cache(p, d->config, d->config_cnt);
+  pci_setup_cache(p, d->config, d->config_cached);
   pci_fill_info(p, PCI_FILL_IDENT | PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE | PCI_FILL_SIZES);
   return d;
 }
@@ -137,43 +142,36 @@
       }
 }
 
-static int
-check_root(void)
-{
-  static int is_root = -1;
-
-  if (is_root < 0)
-    is_root = !geteuid();
-  return is_root;
-}
+/* Config space accesses */
 
-static int
-config_fetch(struct device *d, unsigned int pos, unsigned int len)
+static void
+check_conf_range(struct device *d, unsigned int pos, unsigned int len)
 {
-  if (pos + len < d->config_cnt)
-    return 1;
-  if (pacc->method != PCI_ACCESS_DUMP && !check_root())
-    return 0;
-  return pci_read_block(d->dev, pos, d->config + pos, len);
+  while (len)
+    if (!d->present[pos])
+      die("Internal bug: Accessing non-read configuration byte at position %x", pos);
+    else
+      pos++, len--;
 }
 
-/* Config space accesses */
-
 static inline byte
 get_conf_byte(struct device *d, unsigned int pos)
 {
+  check_conf_range(d, pos, 1);
   return d->config[pos];
 }
 
 static word
 get_conf_word(struct device *d, unsigned int pos)
 {
+  check_conf_range(d, pos, 2);
   return d->config[pos] | (d->config[pos+1] << 8);
 }
 
 static u32
 get_conf_long(struct device *d, unsigned int pos)
 {
+  check_conf_range(d, pos, 4);
   return d->config[pos] |
     (d->config[pos+1] << 8) |
     (d->config[pos+2] << 16) |
@@ -188,6 +186,10 @@
   const struct pci_dev *a = (*(const struct device **)A)->dev;
   const struct pci_dev *b = (*(const struct device **)B)->dev;
 
+  if (a->domain < b->domain)
+    return -1;
+  if (a->domain > b->domain)
+    return 1;
   if (a->bus < b->bus)
     return -1;
   if (a->bus > b->bus)
@@ -233,22 +235,30 @@
 #define FLAG(x,y) ((x & y) ? '+' : '-')
 
 static void
+show_slot_name(struct device *d)
+{
+  struct pci_dev *p = d->dev;
+
+  if (p->domain)
+    printf("%04x:", p->domain);
+  printf("%02x:%02x.%d", p->bus, p->dev, p->func);
+}
+
+static void
 show_terse(struct device *d)
 {
   int c;
   struct pci_dev *p = d->dev;
   byte classbuf[128], devbuf[128];
 
-  printf("%02x:%02x.%x %s: %s",
-	 p->bus,
-	 p->dev,
-	 p->func,
+  show_slot_name(d);
+  printf(" %s: %s",
 	 pci_lookup_name(pacc, classbuf, sizeof(classbuf),
 			 PCI_LOOKUP_CLASS,
-			 get_conf_word(d, PCI_CLASS_DEVICE), 0, 0, 0),
+			 get_conf_word(d, PCI_CLASS_DEVICE)),
 	 pci_lookup_name(pacc, devbuf, sizeof(devbuf),
 			 PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
-			 p->vendor_id, p->device_id, 0, 0));
+			 p->vendor_id, p->device_id));
   if (c = get_conf_byte(d, PCI_REVISION_ID))
     printf(" (rev %02x)", c);
   if (verbose)
@@ -256,8 +266,8 @@
       char *x;
       c = get_conf_byte(d, PCI_CLASS_PROG);
       x = pci_lookup_name(pacc, devbuf, sizeof(devbuf),
-			  PCI_LOOKUP_PROGIF,
-			  get_conf_word(d, PCI_CLASS_DEVICE), c, 0, 0);
+			  PCI_LOOKUP_PROGIF | PCI_LOOKUP_NO_NUMBERS,
+			  get_conf_word(d, PCI_CLASS_DEVICE), c);
       if (c || x)
 	{
 	  printf(" (prog-if %02x", c);
@@ -282,7 +292,7 @@
   else if (x < 0x80000000)
     printf("%dM", (int)(x / 1048576));
   else
-    printf(ADDR_FORMAT, x);
+    printf(PCIADDR_T_FMT, x);
   putchar(']');
 }
 
@@ -316,7 +326,7 @@
 	  pciaddr_t a = pos & PCI_BASE_ADDRESS_IO_MASK;
 	  printf("I/O ports at ");
 	  if (a)
-	    printf(IO_FORMAT, a);
+	    printf(PCIADDR_PORT_FMT, a);
 	  else if (flg & PCI_BASE_ADDRESS_IO_MASK)
 	    printf("<ignored>");
 	  else
@@ -345,8 +355,9 @@
 		  z = get_conf_long(d, PCI_BASE_ADDRESS_0 + 4*i);
 		  if (buscentric_view)
 		    {
+		      u32 y = a & 0xffffffff;
 		      if (a || z)
-			printf("%08x" ADDR_FORMAT, z, a);
+			printf("%08x%08x", z, y);
 		      else
 			printf("<unassigned>");
 		      done = 1;
@@ -356,7 +367,7 @@
 	  if (!done)
 	    {
 	      if (a)
-		printf(ADDR_FORMAT, a);
+		printf(PCIADDR_T_FMT, a);
 	      else
 		printf(((flg & PCI_BASE_ADDRESS_MEM_MASK) || z) ? "<ignored>" : "<unassigned>");
 	    }
@@ -393,7 +404,8 @@
 	 FLAG(cap, PCI_PM_CAP_PME_D2),
 	 FLAG(cap, PCI_PM_CAP_PME_D3_HOT),
 	 FLAG(cap, PCI_PM_CAP_PME_D3_COLD));
-  config_fetch(d, where + PCI_PM_CTRL, PCI_PM_SIZEOF - PCI_PM_CTRL);
+  if (!config_fetch(d, where + PCI_PM_CTRL, PCI_PM_SIZEOF - PCI_PM_CTRL))
+    return;
   t = get_conf_word(d, where + PCI_PM_CTRL);
   printf("\t\tStatus: D%d PME-Enable%c DSel=%d DScale=%d PME%c\n",
 	 t & PCI_PM_CTRL_STATE_MASK,
@@ -419,8 +431,7 @@
       {
 	if (c != buf)
 	  *c++ = ',';
-	*c++ = 'x';
-	*c++ = '0' + (1 << (i + 2*agp3));
+	c += sprintf(c, "x%d", 1 << (i + 2*agp3));
       }
   if (c != buf)
     *c = 0;
@@ -432,7 +443,7 @@
 show_agp(struct device *d, int where, int cap)
 {
   u32 t;
-  char rate[8];
+  char rate[16];
   int ver, rev;
   int agp3 = 0;
 
@@ -441,7 +452,8 @@
   printf("AGP version %x.%x\n", ver, rev);
   if (verbose < 2)
     return;
-  config_fetch(d, where + PCI_AGP_STATUS, PCI_AGP_SIZEOF - PCI_AGP_STATUS);
+  if (!config_fetch(d, where + PCI_AGP_STATUS, PCI_AGP_SIZEOF - PCI_AGP_STATUS))
+    return;
   t = get_conf_long(d, where + PCI_AGP_STATUS);
   if (ver >= 3 && (t & PCI_AGP_STATUS_AGP3))
     agp3 = 1;
@@ -476,53 +488,71 @@
 static void
 show_pcix_nobridge(struct device *d, int where)
 {
-  u16 command = get_conf_word(d, where + PCI_PCIX_COMMAND);
-  u32 status = get_conf_long(d, where + PCI_PCIX_STATUS);
-  printf("PCI-X non-bridge device.\n");
+  u16 command;
+  u32 status;
+  static const byte max_outstanding[8] = { 1, 2, 3, 4, 8, 12, 16, 32 };
+
+  printf("PCI-X non-bridge device\n");
+      
   if (verbose < 2)
     return;
+
+  if (!config_fetch(d, where + PCI_PCIX_STATUS, 4))
+    return;
+  
+  command = get_conf_word(d, where + PCI_PCIX_COMMAND);
+  status = get_conf_long(d, where + PCI_PCIX_STATUS);
   printf("\t\tCommand: DPERE%c ERO%c RBC=%d OST=%d\n",
 	 FLAG(command, PCI_PCIX_COMMAND_DPERE),
 	 FLAG(command, PCI_PCIX_COMMAND_ERO),
-	 ((command & PCI_PCIX_COMMAND_MAX_MEM_READ_BYTE_COUNT) >> 2U),
-	 ((command & PCI_PCIX_COMMAND_MAX_OUTSTANDING_SPLIT_TRANS) >> 4U));
-  printf("\t\tStatus: Bus=%u Dev=%u Func=%u 64bit%c 133MHz%c SCD%c USC%c, DC=%s, DMMRBC=%u, DMOST=%u, DMCRS=%u, RSCEM%c",
-	 ((status >> 8) & 0xffU), // bus
-	 ((status >> 3) & 0x1fU), // dev
-	 (status & PCI_PCIX_BRIDGE_STATUS_FUNCTION), // function
+	 1 << (9 + ((command & PCI_PCIX_COMMAND_MAX_MEM_READ_BYTE_COUNT) >> 2U)),
+	 max_outstanding[(command & PCI_PCIX_COMMAND_MAX_OUTSTANDING_SPLIT_TRANS) >> 4U]);
+  printf("\t\tStatus: Dev=%02x:%02x.%d 64bit%c 133MHz%c SCD%c USC%c DC=%s DMMRBC=%u DMOST=%u DMCRS=%u RSCEM%c 266MHz%c 533MHz%c\n",
+	 ((status >> 8) & 0xff),
+	 ((status >> 3) & 0x1f),
+	 (status & PCI_PCIX_STATUS_FUNCTION),
 	 FLAG(status, PCI_PCIX_STATUS_64BIT),
 	 FLAG(status, PCI_PCIX_STATUS_133MHZ),
 	 FLAG(status, PCI_PCIX_STATUS_SC_DISCARDED),
 	 FLAG(status, PCI_PCIX_STATUS_UNEXPECTED_SC),
 	 ((status & PCI_PCIX_STATUS_DEVICE_COMPLEXITY) ? "bridge" : "simple"),
-	 ((status >> 21) & 3U),
-	 ((status >> 23) & 7U),
-	 ((status >> 26) & 7U),
-	 FLAG(status, PCI_PCIX_STATUS_RCVD_SC_ERR_MESS));
+	 1 << (9 + ((status >> 21) & 3U)),
+	 max_outstanding[(status >> 23) & 7U],
+	 1 << (3 + ((status >> 26) & 7U)),
+	 FLAG(status, PCI_PCIX_STATUS_RCVD_SC_ERR_MESS),
+	 FLAG(status, PCI_PCIX_STATUS_266MHZ),
+	 FLAG(status, PCI_PCIX_STATUS_533MHZ));
 }
 
 static void
 show_pcix_bridge(struct device *d, int where)
 {
+  static const byte * const sec_clock_freq[8] = { "conv", "66MHz", "100MHz", "133MHz", "?4", "?5", "?6", "?7" };
   u16 secstatus;
   u32 status, upstcr, downstcr;
-  printf("PCI-X bridge device.\n");
+  
+  printf("PCI-X bridge device\n");
+  
   if (verbose < 2)
     return;
+  
+  if (!config_fetch(d, where + PCI_PCIX_BRIDGE_STATUS, 12))
+    return;
+  
   secstatus = get_conf_word(d, where + PCI_PCIX_BRIDGE_SEC_STATUS);
-  printf("\t\tSecondary Status: 64bit%c, 133MHz%c, SCD%c, USC%c, SCO%c, SRD%c Freq=%d\n",
+  printf("\t\tSecondary Status: 64bit%c 133MHz%c SCD%c USC%c SCO%c SRD%c Freq=%s\n",
 	 FLAG(secstatus, PCI_PCIX_BRIDGE_SEC_STATUS_64BIT),
 	 FLAG(secstatus, PCI_PCIX_BRIDGE_SEC_STATUS_133MHZ),
 	 FLAG(secstatus, PCI_PCIX_BRIDGE_SEC_STATUS_SC_DISCARDED),
 	 FLAG(secstatus, PCI_PCIX_BRIDGE_SEC_STATUS_UNEXPECTED_SC),
 	 FLAG(secstatus, PCI_PCIX_BRIDGE_SEC_STATUS_SC_OVERRUN),
 	 FLAG(secstatus, PCI_PCIX_BRIDGE_SEC_STATUS_SPLIT_REQUEST_DELAYED),
-	 ((secstatus >> 6) & 7));
+	 sec_clock_freq[(secstatus >> 6) & 7]);
   status = get_conf_long(d, where + PCI_PCIX_BRIDGE_STATUS);
-  printf("\t\tStatus: Bus=%u Dev=%u Func=%u 64bit%c 133MHz%c SCD%c USC%c, SCO%c, SRD%c\n", 
-	 ((status >> 8) & 0xff), // bus
-	 ((status >> 3) & 0x1f), // dev
-	 (status & PCI_PCIX_BRIDGE_STATUS_FUNCTION), // function
+  printf("\t\tStatus: Dev=%02x:%02x.%d 64bit%c 133MHz%c SCD%c USC%c SCO%c SRD%c\n", 
+	 ((status >> 8) & 0xff),
+	 ((status >> 3) & 0x1f),
+	 (status & PCI_PCIX_BRIDGE_STATUS_FUNCTION),
 	 FLAG(status, PCI_PCIX_BRIDGE_STATUS_64BIT),
 	 FLAG(status, PCI_PCIX_BRIDGE_STATUS_133MHZ),
 	 FLAG(status, PCI_PCIX_BRIDGE_STATUS_SC_DISCARDED),
@@ -530,11 +560,11 @@
 	 FLAG(status, PCI_PCIX_BRIDGE_STATUS_SC_OVERRUN),
 	 FLAG(status, PCI_PCIX_BRIDGE_STATUS_SPLIT_REQUEST_DELAYED));
   upstcr = get_conf_long(d, where + PCI_PCIX_BRIDGE_UPSTREAM_SPLIT_TRANS_CTRL);
-  printf("\t\t: Upstream: Capacity=%u, Commitment Limit=%u\n",
+  printf("\t\tUpstream: Capacity=%u CommitmentLimit=%u\n",
 	 (upstcr & PCI_PCIX_BRIDGE_STR_CAPACITY),
 	 (upstcr >> 16) & 0xffff);
   downstcr = get_conf_long(d, where + PCI_PCIX_BRIDGE_DOWNSTREAM_SPLIT_TRANS_CTRL);
-  printf("\t\t: Downstream: Capacity=%u, Commitment Limit=%u\n",
+  printf("\t\tDownstream: Capacity=%u CommitmentLimit=%u\n",
 	 (downstcr & PCI_PCIX_BRIDGE_STR_CAPACITY),
 	 (downstcr >> 16) & 0xffff);
 }
@@ -542,7 +572,7 @@
 static void
 show_pcix(struct device *d, int where)
 {
-  switch (d->dev->hdrtype)
+  switch (get_conf_byte(d, PCI_HEADER_TYPE) & 0x7f)
     {
     case PCI_HEADER_TYPE_NORMAL:
       show_pcix_nobridge(d, where);
@@ -553,22 +583,396 @@
     }
 }
 
+static inline char *
+ht_link_width(unsigned width)
+{
+  static char * const widths[8] = { "8bit", "16bit", "[2]", "32bit", "2bit", "4bit", "[6]", "N/C" };
+  return widths[width];
+}
+
+static inline char *
+ht_link_freq(unsigned freq)
+{
+  static char * const freqs[16] = { "200MHz", "300MHz", "400MHz", "500MHz", "600MHz", "800MHz", "1.0GHz", "1.2GHz",
+				    "1.4GHz", "1.6GHz", "[a]", "[b]", "[c]", "[d]", "[e]", "Vend" };
+  return freqs[freq];
+}
+
+static void
+show_ht_pri(struct device *d, int where, int cmd)
+{
+  u16 lctr0, lcnf0, lctr1, lcnf1, eh;
+  u8 rid, lfrer0, lfcap0, ftr, lfrer1, lfcap1, mbu, mlu, bn;
+  char *fmt;
+
+  printf("HyperTransport: Slave or Primary Interface\n");
+  if (verbose < 2)
+    return;
+
+  if (!config_fetch(d, where + PCI_HT_PRI_LCTR0, PCI_HT_PRI_SIZEOF - PCI_HT_PRI_LCTR0))
+    return;
+  rid = get_conf_byte(d, where + PCI_HT_PRI_RID);
+  if (rid < 0x23 && rid > 0x11)
+    printf("\t\t!!! Possibly incomplete decoding\n");
+
+  if (rid >= 0x23)
+    fmt = "\t\tCommand: BaseUnitID=%u UnitCnt=%u MastHost%c DefDir%c DUL%c\n";
+  else
+    fmt = "\t\tCommand: BaseUnitID=%u UnitCnt=%u MastHost%c DefDir%c\n";
+  printf(fmt,
+	 (cmd & PCI_HT_PRI_CMD_BUID),
+	 (cmd & PCI_HT_PRI_CMD_UC) >> 5,
+	 FLAG(cmd, PCI_HT_PRI_CMD_MH),
+	 FLAG(cmd, PCI_HT_PRI_CMD_DD),
+	 FLAG(cmd, PCI_HT_PRI_CMD_DUL));
+  lctr0 = get_conf_word(d, where + PCI_HT_PRI_LCTR0);
+  if (rid >= 0x23)
+    fmt = "\t\tLink Control 0: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x IsocEn%c LSEn%c ExtCTL%c 64b%c\n";
+  else
+    fmt = "\t\tLink Control 0: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x\n";
+  printf(fmt,
+	 FLAG(lctr0, PCI_HT_LCTR_CFLE),
+	 FLAG(lctr0, PCI_HT_LCTR_CST),
+	 FLAG(lctr0, PCI_HT_LCTR_CFE),
+	 FLAG(lctr0, PCI_HT_LCTR_LKFAIL),
+	 FLAG(lctr0, PCI_HT_LCTR_INIT),
+	 FLAG(lctr0, PCI_HT_LCTR_EOC),
+	 FLAG(lctr0, PCI_HT_LCTR_TXO),
+	 (lctr0 & PCI_HT_LCTR_CRCERR) >> 8,
+	 FLAG(lctr0, PCI_HT_LCTR_ISOCEN),
+	 FLAG(lctr0, PCI_HT_LCTR_LSEN),
+	 FLAG(lctr0, PCI_HT_LCTR_EXTCTL),
+	 FLAG(lctr0, PCI_HT_LCTR_64B));
+  lcnf0 = get_conf_word(d, where + PCI_HT_PRI_LCNF0);
+  if (rid >= 0x23)
+    fmt = "\t\tLink Config 0: MLWI=%1$s DwFcIn%5$c MLWO=%2$s DwFcOut%6$c LWI=%3$s DwFcInEn%7$c LWO=%4$s DwFcOutEn%8$c\n";
+  else
+    fmt = "\t\tLink Config 0: MLWI=%s MLWO=%s LWI=%s LWO=%s\n";
+  printf(fmt,
+	 ht_link_width(lcnf0 & PCI_HT_LCNF_MLWI),
+	 ht_link_width((lcnf0 & PCI_HT_LCNF_MLWO) >> 4),
+	 ht_link_width((lcnf0 & PCI_HT_LCNF_LWI) >> 8),
+	 ht_link_width((lcnf0 & PCI_HT_LCNF_LWO) >> 12),
+	 FLAG(lcnf0, PCI_HT_LCNF_DFI),
+	 FLAG(lcnf0, PCI_HT_LCNF_DFO),
+	 FLAG(lcnf0, PCI_HT_LCNF_DFIE),
+	 FLAG(lcnf0, PCI_HT_LCNF_DFOE));
+  lctr1 = get_conf_word(d, where + PCI_HT_PRI_LCTR1);
+  if (rid >= 0x23)
+    fmt = "\t\tLink Control 1: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x IsocEn%c LSEn%c ExtCTL%c 64b%c\n";
+  else
+    fmt = "\t\tLink Control 1: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x\n";
+  printf(fmt,
+	 FLAG(lctr1, PCI_HT_LCTR_CFLE),
+	 FLAG(lctr1, PCI_HT_LCTR_CST),
+	 FLAG(lctr1, PCI_HT_LCTR_CFE),
+	 FLAG(lctr1, PCI_HT_LCTR_LKFAIL),
+	 FLAG(lctr1, PCI_HT_LCTR_INIT),
+	 FLAG(lctr1, PCI_HT_LCTR_EOC),
+	 FLAG(lctr1, PCI_HT_LCTR_TXO),
+	 (lctr1 & PCI_HT_LCTR_CRCERR) >> 8,
+	 FLAG(lctr1, PCI_HT_LCTR_ISOCEN),
+	 FLAG(lctr1, PCI_HT_LCTR_LSEN),
+	 FLAG(lctr1, PCI_HT_LCTR_EXTCTL),
+	 FLAG(lctr1, PCI_HT_LCTR_64B));
+  lcnf1 = get_conf_word(d, where + PCI_HT_PRI_LCNF1);
+  if (rid >= 0x23)
+    fmt = "\t\tLink Config 1: MLWI=%1$s DwFcIn%5$c MLWO=%2$s DwFcOut%6$c LWI=%3$s DwFcInEn%7$c LWO=%4$s DwFcOutEn%8$c\n";
+  else
+    fmt = "\t\tLink Config 1: MLWI=%s MLWO=%s LWI=%s LWO=%s\n";
+  printf(fmt,
+	 ht_link_width(lcnf1 & PCI_HT_LCNF_MLWI),
+	 ht_link_width((lcnf1 & PCI_HT_LCNF_MLWO) >> 4),
+	 ht_link_width((lcnf1 & PCI_HT_LCNF_LWI) >> 8),
+	 ht_link_width((lcnf1 & PCI_HT_LCNF_LWO) >> 12),
+	 FLAG(lcnf1, PCI_HT_LCNF_DFI),
+	 FLAG(lcnf1, PCI_HT_LCNF_DFO),
+	 FLAG(lcnf1, PCI_HT_LCNF_DFIE),
+	 FLAG(lcnf1, PCI_HT_LCNF_DFOE));
+  printf("\t\tRevision ID: %u.%02u\n",
+	 (rid & PCI_HT_RID_MAJ) >> 5, (rid & PCI_HT_RID_MIN));
+  if (rid < 0x23)
+    return;
+  lfrer0 = get_conf_byte(d, where + PCI_HT_PRI_LFRER0);
+  printf("\t\tLink Frequency 0: %s\n", ht_link_freq(lfrer0 & PCI_HT_LFRER_FREQ));
+  printf("\t\tLink Error 0: <Prot%c <Ovfl%c <EOC%c CTLTm%c\n",
+	 FLAG(lfrer0, PCI_HT_LFRER_PROT),
+	 FLAG(lfrer0, PCI_HT_LFRER_OV),
+	 FLAG(lfrer0, PCI_HT_LFRER_EOC),
+	 FLAG(lfrer0, PCI_HT_LFRER_CTLT));
+  lfcap0 = get_conf_byte(d, where + PCI_HT_PRI_LFCAP0);
+  printf("\t\tLink Frequency Capability 0: 200MHz%c 300MHz%c 400MHz%c 500MHz%c 600MHz%c 800MHz%c 1.0GHz%c 1.2GHz%c 1.4GHz%c 1.6GHz%c Vend%c\n",
+	 FLAG(lfcap0, PCI_HT_LFCAP_200),
+	 FLAG(lfcap0, PCI_HT_LFCAP_300),
+	 FLAG(lfcap0, PCI_HT_LFCAP_400),
+	 FLAG(lfcap0, PCI_HT_LFCAP_500),
+	 FLAG(lfcap0, PCI_HT_LFCAP_600),
+	 FLAG(lfcap0, PCI_HT_LFCAP_800),
+	 FLAG(lfcap0, PCI_HT_LFCAP_1000),
+	 FLAG(lfcap0, PCI_HT_LFCAP_1200),
+	 FLAG(lfcap0, PCI_HT_LFCAP_1400),
+	 FLAG(lfcap0, PCI_HT_LFCAP_1600),
+	 FLAG(lfcap0, PCI_HT_LFCAP_VEND));
+  ftr = get_conf_byte(d, where + PCI_HT_PRI_FTR);
+  printf("\t\tFeature Capability: IsocFC%c LDTSTOP%c CRCTM%c ECTLT%c 64bA%c UIDRD%c\n",
+	 FLAG(ftr, PCI_HT_FTR_ISOCFC),
+	 FLAG(ftr, PCI_HT_FTR_LDTSTOP),
+	 FLAG(ftr, PCI_HT_FTR_CRCTM),
+	 FLAG(ftr, PCI_HT_FTR_ECTLT),
+	 FLAG(ftr, PCI_HT_FTR_64BA),
+	 FLAG(ftr, PCI_HT_FTR_UIDRD));
+  lfrer1 = get_conf_byte(d, where + PCI_HT_PRI_LFRER1);
+  printf("\t\tLink Frequency 1: %s\n", ht_link_freq(lfrer1 & PCI_HT_LFRER_FREQ));
+  printf("\t\tLink Error 1: <Prot%c <Ovfl%c <EOC%c CTLTm%c\n",
+	 FLAG(lfrer1, PCI_HT_LFRER_PROT),
+	 FLAG(lfrer1, PCI_HT_LFRER_OV),
+	 FLAG(lfrer1, PCI_HT_LFRER_EOC),
+	 FLAG(lfrer1, PCI_HT_LFRER_CTLT));
+  lfcap1 = get_conf_byte(d, where + PCI_HT_PRI_LFCAP1);
+  printf("\t\tLink Frequency Capability 1: 200MHz%c 300MHz%c 400MHz%c 500MHz%c 600MHz%c 800MHz%c 1.0GHz%c 1.2GHz%c 1.4GHz%c 1.6GHz%c Vend%c\n",
+	 FLAG(lfcap1, PCI_HT_LFCAP_200),
+	 FLAG(lfcap1, PCI_HT_LFCAP_300),
+	 FLAG(lfcap1, PCI_HT_LFCAP_400),
+	 FLAG(lfcap1, PCI_HT_LFCAP_500),
+	 FLAG(lfcap1, PCI_HT_LFCAP_600),
+	 FLAG(lfcap1, PCI_HT_LFCAP_800),
+	 FLAG(lfcap1, PCI_HT_LFCAP_1000),
+	 FLAG(lfcap1, PCI_HT_LFCAP_1200),
+	 FLAG(lfcap1, PCI_HT_LFCAP_1400),
+	 FLAG(lfcap1, PCI_HT_LFCAP_1600),
+	 FLAG(lfcap1, PCI_HT_LFCAP_VEND));
+  eh = get_conf_word(d, where + PCI_HT_PRI_EH);
+  printf("\t\tError Handling: PFlE%c OFlE%c PFE%c OFE%c EOCFE%c RFE%c CRCFE%c SERRFE%c CF%c RE%c PNFE%c ONFE%c EOCNFE%c RNFE%c CRCNFE%c SERRNFE%c\n",
+	 FLAG(eh, PCI_HT_EH_PFLE),
+	 FLAG(eh, PCI_HT_EH_OFLE),
+	 FLAG(eh, PCI_HT_EH_PFE),
+	 FLAG(eh, PCI_HT_EH_OFE),
+	 FLAG(eh, PCI_HT_EH_EOCFE),
+	 FLAG(eh, PCI_HT_EH_RFE),
+	 FLAG(eh, PCI_HT_EH_CRCFE),
+	 FLAG(eh, PCI_HT_EH_SERRFE),
+	 FLAG(eh, PCI_HT_EH_CF),
+	 FLAG(eh, PCI_HT_EH_RE),
+	 FLAG(eh, PCI_HT_EH_PNFE),
+	 FLAG(eh, PCI_HT_EH_ONFE),
+	 FLAG(eh, PCI_HT_EH_EOCNFE),
+	 FLAG(eh, PCI_HT_EH_RNFE),
+	 FLAG(eh, PCI_HT_EH_CRCNFE),
+	 FLAG(eh, PCI_HT_EH_SERRNFE));
+  mbu = get_conf_byte(d, where + PCI_HT_PRI_MBU);
+  mlu = get_conf_byte(d, where + PCI_HT_PRI_MLU);
+  printf("\t\tPrefetchable memory behind bridge Upper: %02x-%02x\n", mbu, mlu);
+  bn = get_conf_byte(d, where + PCI_HT_PRI_BN);
+  printf("\t\tBus Number: %02x\n", bn);
+}
+
+static void
+show_ht_sec(struct device *d, int where, int cmd)
+{
+  u16 lctr, lcnf, ftr, eh;
+  u8 rid, lfrer, lfcap, mbu, mlu;
+  char *fmt;
+
+  printf("HyperTransport: Host or Secondary Interface\n");
+  if (verbose < 2)
+    return;
+
+  if (!config_fetch(d, where + PCI_HT_SEC_LCTR, PCI_HT_SEC_SIZEOF - PCI_HT_SEC_LCTR))
+    return;
+  rid = get_conf_byte(d, where + PCI_HT_SEC_RID);
+  if (rid < 0x23 && rid > 0x11)
+    printf("\t\t!!! Possibly incomplete decoding\n");
+
+  if (rid >= 0x23)
+    fmt = "\t\tCommand: WarmRst%c DblEnd%c DevNum=%u ChainSide%c HostHide%c Slave%c <EOCErr%c DUL%c\n";
+  else
+    fmt = "\t\tCommand: WarmRst%c DblEnd%c\n";
+  printf(fmt,
+	 FLAG(cmd, PCI_HT_SEC_CMD_WR),
+	 FLAG(cmd, PCI_HT_SEC_CMD_DE),
+	 (cmd & PCI_HT_SEC_CMD_DN) >> 2,
+	 FLAG(cmd, PCI_HT_SEC_CMD_CS),
+	 FLAG(cmd, PCI_HT_SEC_CMD_HH),
+	 FLAG(cmd, PCI_HT_SEC_CMD_AS),
+	 FLAG(cmd, PCI_HT_SEC_CMD_HIECE),
+	 FLAG(cmd, PCI_HT_SEC_CMD_DUL));
+  lctr = get_conf_word(d, where + PCI_HT_SEC_LCTR);
+  if (rid >= 0x23)
+    fmt = "\t\tLink Control: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x IsocEn%c LSEn%c ExtCTL%c 64b%c\n";
+  else
+    fmt = "\t\tLink Control: CFlE%c CST%c CFE%c <LkFail%c Init%c EOC%c TXO%c <CRCErr=%x\n";
+  printf(fmt,
+	 FLAG(lctr, PCI_HT_LCTR_CFLE),
+	 FLAG(lctr, PCI_HT_LCTR_CST),
+	 FLAG(lctr, PCI_HT_LCTR_CFE),
+	 FLAG(lctr, PCI_HT_LCTR_LKFAIL),
+	 FLAG(lctr, PCI_HT_LCTR_INIT),
+	 FLAG(lctr, PCI_HT_LCTR_EOC),
+	 FLAG(lctr, PCI_HT_LCTR_TXO),
+	 (lctr & PCI_HT_LCTR_CRCERR) >> 8,
+	 FLAG(lctr, PCI_HT_LCTR_ISOCEN),
+	 FLAG(lctr, PCI_HT_LCTR_LSEN),
+	 FLAG(lctr, PCI_HT_LCTR_EXTCTL),
+	 FLAG(lctr, PCI_HT_LCTR_64B));
+  lcnf = get_conf_word(d, where + PCI_HT_SEC_LCNF);
+  if (rid >= 0x23)
+    fmt = "\t\tLink Config: MLWI=%1$s DwFcIn%5$c MLWO=%2$s DwFcOut%6$c LWI=%3$s DwFcInEn%7$c LWO=%4$s DwFcOutEn%8$c\n";
+  else
+    fmt = "\t\tLink Config: MLWI=%s MLWO=%s LWI=%s LWO=%s\n";
+  printf(fmt,
+	 ht_link_width(lcnf & PCI_HT_LCNF_MLWI),
+	 ht_link_width((lcnf & PCI_HT_LCNF_MLWO) >> 4),
+	 ht_link_width((lcnf & PCI_HT_LCNF_LWI) >> 8),
+	 ht_link_width((lcnf & PCI_HT_LCNF_LWO) >> 12),
+	 FLAG(lcnf, PCI_HT_LCNF_DFI),
+	 FLAG(lcnf, PCI_HT_LCNF_DFO),
+	 FLAG(lcnf, PCI_HT_LCNF_DFIE),
+	 FLAG(lcnf, PCI_HT_LCNF_DFOE));
+  printf("\t\tRevision ID: %u.%02u\n",
+	 (rid & PCI_HT_RID_MAJ) >> 5, (rid & PCI_HT_RID_MIN));
+  if (rid < 0x23)
+    return;
+  lfrer = get_conf_byte(d, where + PCI_HT_SEC_LFRER);
+  printf("\t\tLink Frequency: %s\n", ht_link_freq(lfrer & PCI_HT_LFRER_FREQ));
+  printf("\t\tLink Error: <Prot%c <Ovfl%c <EOC%c CTLTm%c\n",
+	 FLAG(lfrer, PCI_HT_LFRER_PROT),
+	 FLAG(lfrer, PCI_HT_LFRER_OV),
+	 FLAG(lfrer, PCI_HT_LFRER_EOC),
+	 FLAG(lfrer, PCI_HT_LFRER_CTLT));
+  lfcap = get_conf_byte(d, where + PCI_HT_SEC_LFCAP);
+  printf("\t\tLink Frequency Capability: 200MHz%c 300MHz%c 400MHz%c 500MHz%c 600MHz%c 800MHz%c 1.0GHz%c 1.2GHz%c 1.4GHz%c 1.6GHz%c Vend%c\n",
+	 FLAG(lfcap, PCI_HT_LFCAP_200),
+	 FLAG(lfcap, PCI_HT_LFCAP_300),
+	 FLAG(lfcap, PCI_HT_LFCAP_400),
+	 FLAG(lfcap, PCI_HT_LFCAP_500),
+	 FLAG(lfcap, PCI_HT_LFCAP_600),
+	 FLAG(lfcap, PCI_HT_LFCAP_800),
+	 FLAG(lfcap, PCI_HT_LFCAP_1000),
+	 FLAG(lfcap, PCI_HT_LFCAP_1200),
+	 FLAG(lfcap, PCI_HT_LFCAP_1400),
+	 FLAG(lfcap, PCI_HT_LFCAP_1600),
+	 FLAG(lfcap, PCI_HT_LFCAP_VEND));
+  ftr = get_conf_word(d, where + PCI_HT_SEC_FTR);
+  printf("\t\tFeature Capability: IsocFC%c LDTSTOP%c CRCTM%c ECTLT%c 64bA%c UIDRD%c ExtRS%c UCnfE%c\n",
+	 FLAG(ftr, PCI_HT_FTR_ISOCFC),
+	 FLAG(ftr, PCI_HT_FTR_LDTSTOP),
+	 FLAG(ftr, PCI_HT_FTR_CRCTM),
+	 FLAG(ftr, PCI_HT_FTR_ECTLT),
+	 FLAG(ftr, PCI_HT_FTR_64BA),
+	 FLAG(ftr, PCI_HT_FTR_UIDRD),
+	 FLAG(ftr, PCI_HT_SEC_FTR_EXTRS),
+	 FLAG(ftr, PCI_HT_SEC_FTR_UCNFE));
+  if (ftr & PCI_HT_SEC_FTR_EXTRS)
+    {
+      eh = get_conf_word(d, where + PCI_HT_SEC_EH);
+      printf("\t\tError Handling: PFlE%c OFlE%c PFE%c OFE%c EOCFE%c RFE%c CRCFE%c SERRFE%c CF%c RE%c PNFE%c ONFE%c EOCNFE%c RNFE%c CRCNFE%c SERRNFE%c\n",
+	     FLAG(eh, PCI_HT_EH_PFLE),
+	     FLAG(eh, PCI_HT_EH_OFLE),
+	     FLAG(eh, PCI_HT_EH_PFE),
+	     FLAG(eh, PCI_HT_EH_OFE),
+	     FLAG(eh, PCI_HT_EH_EOCFE),
+	     FLAG(eh, PCI_HT_EH_RFE),
+	     FLAG(eh, PCI_HT_EH_CRCFE),
+	     FLAG(eh, PCI_HT_EH_SERRFE),
+	     FLAG(eh, PCI_HT_EH_CF),
+	     FLAG(eh, PCI_HT_EH_RE),
+	     FLAG(eh, PCI_HT_EH_PNFE),
+	     FLAG(eh, PCI_HT_EH_ONFE),
+	     FLAG(eh, PCI_HT_EH_EOCNFE),
+	     FLAG(eh, PCI_HT_EH_RNFE),
+	     FLAG(eh, PCI_HT_EH_CRCNFE),
+	     FLAG(eh, PCI_HT_EH_SERRNFE));
+      mbu = get_conf_byte(d, where + PCI_HT_SEC_MBU);
+      mlu = get_conf_byte(d, where + PCI_HT_SEC_MLU);
+      printf("\t\tPrefetchable memory behind bridge Upper: %02x-%02x\n", mbu, mlu);
+    }
+}
+
+static void
+show_ht(struct device *d, int where, int cmd)
+{
+  int type;
+
+  switch (cmd & PCI_HT_CMD_TYP_HI)
+    {
+    case PCI_HT_CMD_TYP_HI_PRI:
+      show_ht_pri(d, where, cmd);
+      return;
+    case PCI_HT_CMD_TYP_HI_SEC:
+      show_ht_sec(d, where, cmd);
+      return;
+    }
+
+  type = cmd & PCI_HT_CMD_TYP;
+  switch (type)
+    {
+    case PCI_HT_CMD_TYP_SW:
+      printf("HyperTransport: Switch\n");
+      break;
+    case PCI_HT_CMD_TYP_IDC:
+      printf("HyperTransport: Interrupt Discovery and Configuration\n");
+      break;
+    case PCI_HT_CMD_TYP_RID:
+      printf("HyperTransport: Revision ID: %u.%02u\n",
+	     (cmd & PCI_HT_RID_MAJ) >> 5, (cmd & PCI_HT_RID_MIN));
+      break;
+    case PCI_HT_CMD_TYP_UIDC:
+      printf("HyperTransport: UnitID Clumping\n");
+      break;
+    case PCI_HT_CMD_TYP_ECSA:
+      printf("HyperTransport: Extended Configuration Space Access\n");
+      break;
+    case PCI_HT_CMD_TYP_AM:
+      printf("HyperTransport: Address Mapping\n");
+      break;
+    case PCI_HT_CMD_TYP_MSIM:
+      printf("HyperTransport: MSI Mapping\n");
+      break;
+    case PCI_HT_CMD_TYP_DR:
+      printf("HyperTransport: DirectRoute\n");
+      break;
+    case PCI_HT_CMD_TYP_VCS:
+      printf("HyperTransport: VCSet\n");
+      break;
+    case PCI_HT_CMD_TYP_RM:
+      printf("HyperTransport: Retry Mode\n");
+      break;
+    case PCI_HT_CMD_TYP_X86:
+      printf("HyperTransport: X86 (reserved)\n");
+      break;
+    default:
+      printf("HyperTransport: #%02x\n", type >> 11);
+    }
+}
+
 static void
-show_rom(struct device *d)
+show_rom(struct device *d, int reg)
 {
   struct pci_dev *p = d->dev;
   pciaddr_t rom = p->rom_base_addr;
   pciaddr_t len = (p->known_fields & PCI_FILL_SIZES) ? p->rom_size : 0;
+  u32 flg = get_conf_long(d, reg);
+  word cmd = get_conf_word(d, PCI_COMMAND);
 
-  if (!rom && !len)
+  if (!rom && !flg && !len)
     return;
-  printf("\tExpansion ROM at ");
+  putchar('\t');
+  if ((rom & PCI_ROM_ADDRESS_MASK) && !(flg & PCI_ROM_ADDRESS_MASK))
+    {
+      printf("[virtual] ");
+      flg = rom;
+    }
+  printf("Expansion ROM at ");
   if (rom & PCI_ROM_ADDRESS_MASK)
-    printf(ADDR_FORMAT, rom & PCI_ROM_ADDRESS_MASK);
+    printf(PCIADDR_T_FMT, rom & PCI_ROM_ADDRESS_MASK);
+  else if (flg & PCI_ROM_ADDRESS_MASK)
+    printf("<ignored>");
   else
     printf("<unassigned>");
-  if (!(rom & PCI_ROM_ADDRESS_ENABLE))
+  if (!(flg & PCI_ROM_ADDRESS_ENABLE))
     printf(" [disabled]");
+  else if (!(cmd & PCI_COMMAND_MEMORY))
+    printf(" [disabled by cmd]");
   show_size(len);
   putchar('\n');
 }
@@ -588,7 +992,8 @@
   if (verbose < 2)
     return;
   is64 = cap & PCI_MSI_FLAGS_64BIT;
-  config_fetch(d, where + PCI_MSI_ADDRESS_LO, (is64 ? PCI_MSI_DATA_64 : PCI_MSI_DATA_32) + 2 - PCI_MSI_ADDRESS_LO);
+  if (!config_fetch(d, where + PCI_MSI_ADDRESS_LO, (is64 ? PCI_MSI_DATA_64 : PCI_MSI_DATA_32) + 2 - PCI_MSI_ADDRESS_LO))
+    return;
   printf("\t\tAddress: ");
   if (is64)
     {
@@ -602,6 +1007,251 @@
   printf("%08x  Data: %04x\n", t, w);
 }
 
+static void show_vendor(void)
+{
+  printf("Vendor Specific Information\n");
+}
+
+static void show_debug(void)
+{
+  printf("Debug port\n");
+}
+
+static float power_limit(int value, int scale)
+{
+  static const float scales[4] = { 1.0, 0.1, 0.01, 0.001 };
+  return value * scales[scale];
+}
+
+static const char *latency_l0s(int value)
+{
+  static const char *latencies[] = { "<64ns", "<128ns", "<256ns", "<512ns", "<1us", "<2us", "<4us", "unlimited" };
+  return latencies[value];
+}
+
+static const char *latency_l1(int value)
+{
+  static const char *latencies[] = { "<1us", "<2us", "<4us", "<8us", "<16us", "<32us", "<64us", "unlimited" };
+  return latencies[value];
+}
+
+static void show_express_dev(struct device *d, int where, int type)
+{
+  u32 t;
+  u16 w;
+
+  t = get_conf_long(d, where + PCI_EXP_DEVCAP);
+  printf("\t\tDevice: Supported: MaxPayload %d bytes, PhantFunc %d, ExtTag%c\n",
+	128 << (t & PCI_EXP_DEVCAP_PAYLOAD),
+	(1 << ((t & PCI_EXP_DEVCAP_PHANTOM) >> 3)) - 1,
+	FLAG(t, PCI_EXP_DEVCAP_EXT_TAG));
+  printf("\t\tDevice: Latency L0s %s, L1 %s\n",
+	latency_l0s((t & PCI_EXP_DEVCAP_L0S) >> 6),
+	latency_l1((t & PCI_EXP_DEVCAP_L1) >> 9));
+  if ((type == PCI_EXP_TYPE_ENDPOINT) || (type == PCI_EXP_TYPE_LEG_END) ||
+      (type == PCI_EXP_TYPE_UPSTREAM) || (type == PCI_EXP_TYPE_PCI_BRIDGE))
+    printf("\t\tDevice: AtnBtn%c AtnInd%c PwrInd%c\n",
+	FLAG(t, PCI_EXP_DEVCAP_ATN_BUT),
+	FLAG(t, PCI_EXP_DEVCAP_ATN_IND), FLAG(t, PCI_EXP_DEVCAP_PWR_IND));
+  if (type == PCI_EXP_TYPE_UPSTREAM)
+    printf("\t\tDevice: SlotPowerLimit %f\n",
+	power_limit((t & PCI_EXP_DEVCAP_PWR_VAL) >> 18,
+		    (t & PCI_EXP_DEVCAP_PWR_SCL) >> 26));
+
+  w = get_conf_word(d, where + PCI_EXP_DEVCTL);
+  printf("\t\tDevice: Errors: Correctable%c Non-Fatal%c Fatal%c Unsupported%c\n",
+	FLAG(w, PCI_EXP_DEVCTL_CERE), 
+	FLAG(w, PCI_EXP_DEVCTL_NFERE), 
+	FLAG(w, PCI_EXP_DEVCTL_FERE), 
+	FLAG(w, PCI_EXP_DEVCTL_URRE));
+  printf("\t\tDevice: RlxdOrd%c ExtTag%c PhantFunc%c AuxPwr%c NoSnoop%c\n",
+	FLAG(w, PCI_EXP_DEVCTL_RELAXED),
+	FLAG(w, PCI_EXP_DEVCTL_EXT_TAG),
+	FLAG(w, PCI_EXP_DEVCTL_PHANTOM),
+	FLAG(w, PCI_EXP_DEVCTL_AUX_PME),
+	FLAG(w, PCI_EXP_DEVCTL_NOSNOOP));
+  printf("\t\tDevice: MaxPayload %d bytes, MaxReadReq %d bytes\n",
+	128 << ((w & PCI_EXP_DEVCTL_PAYLOAD) >> 5),
+	128 << ((w & PCI_EXP_DEVCTL_READRQ) >> 12));
+}
+
+static char *link_speed(int speed)
+{
+  switch (speed)
+    {
+      case 1:
+	return "2.5Gb/s";
+      default:
+	return "unknown";
+    }
+}
+
+static char *aspm_support(int code)
+{
+  switch (code)
+    {
+      case 1:
+	return "L0s";
+      case 3:
+	return "L0s L1";
+      default:
+	return "unknown";
+    }
+}
+
+static const char *aspm_enabled(int code)
+{
+  static const char *desc[] = { "Disabled", "L0s Enabled", "L1 Enabled", "L0s L1 Enabled" };
+  return desc[code];
+}
+
+static void show_express_link(struct device *d, int where, int type)
+{
+  u32 t;
+  u16 w;
+
+  t = get_conf_long(d, where + PCI_EXP_LNKCAP);
+  printf("\t\tLink: Supported Speed %s, Width x%d, ASPM %s, Port %d\n",
+	link_speed(t & PCI_EXP_LNKCAP_SPEED), (t & PCI_EXP_LNKCAP_WIDTH) >> 4,
+	aspm_support((t & PCI_EXP_LNKCAP_ASPM) >> 10),
+	t >> 24);
+  printf("\t\tLink: Latency L0s %s, L1 %s\n",
+	latency_l0s((t & PCI_EXP_LNKCAP_L0S) >> 12),
+	latency_l1((t & PCI_EXP_LNKCAP_L1) >> 15));
+  w = get_conf_word(d, where + PCI_EXP_LNKCTL);
+  printf("\t\tLink: ASPM %s", aspm_enabled(w & PCI_EXP_LNKCTL_ASPM));
+  if ((type == PCI_EXP_TYPE_ROOT_PORT) || (type == PCI_EXP_TYPE_ENDPOINT) ||
+      (type == PCI_EXP_TYPE_LEG_END))
+    printf(" RCB %d bytes", w & PCI_EXP_LNKCTL_RCB ? 128 : 64);
+  if (w & PCI_EXP_LNKCTL_DISABLE)
+    printf(" Disabled");
+  printf(" CommClk%c ExtSynch%c\n", FLAG(w, PCI_EXP_LNKCTL_CLOCK),
+	FLAG(w, PCI_EXP_LNKCTL_XSYNCH));
+  w = get_conf_word(d, where + PCI_EXP_LNKSTA);
+  printf("\t\tLink: Speed %s, Width x%d\n",
+	link_speed(t & PCI_EXP_LNKSTA_SPEED), (t & PCI_EXP_LNKSTA_WIDTH) >> 4);
+}
+
+static const char *indicator(int code)
+{
+  static const char *names[] = { "Unknown", "On", "Blink", "Off" };
+  return names[code];
+}
+
+static void show_express_slot(struct device *d, int where)
+{
+  u32 t;
+  u16 w;
+
+  t = get_conf_long(d, where + PCI_EXP_SLTCAP);
+  printf("\t\tSlot: AtnBtn%c PwrCtrl%c MRL%c AtnInd%c PwrInd%c HotPlug%c Surpise%c\n",
+	FLAG(t, PCI_EXP_SLTCAP_ATNB),
+	FLAG(t, PCI_EXP_SLTCAP_PWRC),
+	FLAG(t, PCI_EXP_SLTCAP_MRL),
+	FLAG(t, PCI_EXP_SLTCAP_ATNI),
+	FLAG(t, PCI_EXP_SLTCAP_PWRI),
+	FLAG(t, PCI_EXP_SLTCAP_HPC),
+	FLAG(t, PCI_EXP_SLTCAP_HPS));
+  printf("\t\tSlot: Number %d, PowerLimit %f\n", t >> 19,
+		power_limit((t & PCI_EXP_SLTCAP_PWR_VAL) >> 7,
+			(t & PCI_EXP_SLTCAP_PWR_SCL) >> 15));
+  w = get_conf_word(d, where + PCI_EXP_SLTCTL);
+  printf("\t\tSlot: Enabled AtnBtn%c PwrFlt%c MRL%c PresDet%c CmdCplt%c HPIrq%c\n",
+	FLAG(w, PCI_EXP_SLTCTL_ATNB),
+	FLAG(w, PCI_EXP_SLTCTL_PWRF),
+	FLAG(w, PCI_EXP_SLTCTL_MRLS),
+	FLAG(w, PCI_EXP_SLTCTL_PRSD),
+	FLAG(w, PCI_EXP_SLTCTL_CMDC),
+	FLAG(w, PCI_EXP_SLTCTL_HPIE));
+  printf("\t\tSlot: AttnInd %s, PwrInd %s, Power%c\n",
+	indicator((w & PCI_EXP_SLTCTL_ATNI) >> 6),
+	indicator((w & PCI_EXP_SLTCTL_PWRI) >> 8),
+	FLAG(w, w & PCI_EXP_SLTCTL_PWRC));
+}
+
+static void show_express_root(struct device *d, int where)
+{
+  u16 w = get_conf_word(d, where + PCI_EXP_RTCTL);
+  printf("\t\tRoot: Correctable%c Non-Fatal%c Fatal%c PME%c\n",
+	FLAG(w, PCI_EXP_RTCTL_SECEE),
+	FLAG(w, PCI_EXP_RTCTL_SENFEE),
+	FLAG(w, PCI_EXP_RTCTL_SEFEE),
+	FLAG(w, PCI_EXP_RTCTL_PMEIE));
+}
+
+static void
+show_express(struct device *d, int where, int cap)
+{
+  int type = (cap & PCI_EXP_FLAGS_TYPE) >> 4;
+  int size;
+  int slot = 0;
+
+  printf("Express ");
+  switch (type)
+    {
+    case PCI_EXP_TYPE_ENDPOINT:
+      printf("Endpoint");
+      break;
+    case PCI_EXP_TYPE_LEG_END:
+      printf("Legacy Endpoint");
+      break;
+    case PCI_EXP_TYPE_ROOT_PORT:
+      slot = cap & PCI_EXP_FLAGS_SLOT;
+      printf("Root Port (Slot%c)", FLAG(cap, PCI_EXP_FLAGS_SLOT));
+      break;
+    case PCI_EXP_TYPE_UPSTREAM:
+      printf("Upstream Port");
+      break;
+    case PCI_EXP_TYPE_DOWNSTREAM:
+      slot = cap & PCI_EXP_FLAGS_SLOT;
+      printf("Downstream Port (Slot%c)", FLAG(cap, PCI_EXP_FLAGS_SLOT));
+      break;
+    case PCI_EXP_TYPE_PCI_BRIDGE:
+      printf("PCI/PCI-X Bridge");
+      break;
+    default:
+      printf("Unknown type");
+  }
+  printf(" IRQ %d\n", (cap & PCI_EXP_FLAGS_IRQ) >> 9);
+  if (verbose < 2)
+    return;
+
+  size = 16;
+  if (slot)
+    size = 24;
+  if (type == PCI_EXP_TYPE_ROOT_PORT)
+    size = 32;
+  if (!config_fetch(d, where + PCI_EXP_DEVCAP, size))
+    return;
+
+  show_express_dev(d, where, type);
+  show_express_link(d, where, type);
+  if (slot)
+    show_express_slot(d, where);
+  if (type == PCI_EXP_TYPE_ROOT_PORT)
+    show_express_root(d, where);
+}
+
+static void
+show_msix(struct device *d, int where, int cap)
+{
+  u32 off;
+
+  printf("MSI-X: Enable%c Mask%c TabSize=%d\n",
+	 FLAG(cap, PCI_MSIX_ENABLE),
+	 FLAG(cap, PCI_MSIX_MASK),
+	 (cap & PCI_MSIX_TABSIZE) + 1);
+  if (verbose < 2 || !config_fetch(d, where + PCI_MSIX_TABLE, 8))
+    return;
+
+  off = get_conf_long(d, where + PCI_MSIX_TABLE);
+  printf("\t\tVector table: BAR=%d offset=%08x\n",
+	 off & PCI_MSIX_BIR, off & ~PCI_MSIX_BIR);
+  off = get_conf_long(d, where + PCI_MSIX_PBA);
+  printf("\t\tPBA: BAR=%d offset=%08x\n",
+	 off & PCI_MSIX_BIR, off & ~PCI_MSIX_BIR);
+}
+
 static void
 show_slotid(int cap)
 {
@@ -615,8 +1265,79 @@
 }
 
 static void
+show_aer(struct device *d UNUSED, int where UNUSED)
+{
+  printf("Advanced Error Reporting\n");
+}
+
+static void
+show_vc(struct device *d UNUSED, int where UNUSED)
+{
+  printf("Virtual Channel\n");
+}
+
+static void
+show_dsn(struct device *d, int where)
+{
+  u32 t1, t2;
+  if (!config_fetch(d, where + 4, 8))
+    return;
+  t1 = get_conf_long(d, where + 4);
+  t2 = get_conf_long(d, where + 8);
+  printf("Device Serial Number %02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\n",
+	t1 & 0xff, (t1 >> 8) & 0xff, (t1 >> 16) & 0xff, t1 >> 24,
+	t2 & 0xff, (t2 >> 8) & 0xff, (t2 >> 16) & 0xff, t2 >> 24);
+}
+
+static void
+show_pb(struct device *d UNUSED, int where UNUSED)
+{
+  printf("Power Budgeting\n");
+}
+
+static void
+show_ext_caps(struct device *d)
+{
+  int where = 0x100;
+  do
+    {
+      u32 header;
+      int id;
+
+      if (!config_fetch(d, where, 4))
+	break;
+      header = get_conf_long(d, where);
+      if (!header)
+	break;
+      id = header & 0xffff;
+      printf("\tCapabilities: [%03x] ", where);
+      switch (id)
+	{
+	  case PCI_EXT_CAP_ID_AER:
+	    show_aer(d, where);
+	    break;
+	  case PCI_EXT_CAP_ID_VC:
+	    show_vc(d, where);
+	    break;
+	  case PCI_EXT_CAP_ID_DSN:
+	    show_dsn(d, where);
+	    break;
+	  case PCI_EXT_CAP_ID_PB:
+	    show_pb(d, where);
+	    break;
+	  default:
+	    printf("Unknown (%d)\n", id);
+	    break;
+	}
+      where = header >> 20;
+    } while (where);
+}
+
+static void
 show_caps(struct device *d)
 {
+  int can_have_ext_caps = 0;
+
   if (get_conf_word(d, PCI_STATUS) & PCI_STATUS_CAP_LIST)
     {
       int where = get_conf_byte(d, PCI_CAPABILITY_LIST) & ~3;
@@ -626,7 +1347,7 @@
 	  printf("\tCapabilities: ");
 	  if (!config_fetch(d, where, 4))
 	    {
-	      puts("<available only to root>");
+	      puts("<access denied>");
 	      break;
 	    }
 	  id = get_conf_byte(d, where + PCI_CAP_LIST_ID);
@@ -657,6 +1378,23 @@
 	      break;
 	    case PCI_CAP_ID_PCIX:
 	      show_pcix(d, where);
+	      can_have_ext_caps = 1;
+	      break;
+	    case PCI_CAP_ID_HT:
+	      show_ht(d, where, cap);
+	      break;
+	    case PCI_CAP_ID_VNDR:
+	      show_vendor();
+	      break;
+	    case PCI_CAP_ID_DBG:
+	      show_debug();
+	      break;
+	    case PCI_CAP_ID_EXP:
+	      show_express(d, where, cap);
+	      can_have_ext_caps = 1;
+	      break;
+	    case PCI_CAP_ID_MSIX:
+	      show_msix(d, where, cap);
 	      break;
 	    default:
 	      printf("#%02x [%04x]\n", id, cap);
@@ -664,13 +1402,15 @@
 	  where = next;
 	}
     }
+  if (can_have_ext_caps)
+    show_ext_caps(d);
 }
 
 static void
 show_htype0(struct device *d)
 {
   show_bases(d, 6);
-  show_rom(d);
+  show_rom(d, PCI_ROM_ADDRESS);
   show_caps(d);
 }
 
@@ -686,6 +1426,7 @@
   u32 pref_base = get_conf_word(d, PCI_PREF_MEMORY_BASE);
   u32 pref_limit = get_conf_word(d, PCI_PREF_MEMORY_LIMIT);
   u32 pref_type = pref_base & PCI_PREF_RANGE_TYPE_MASK;
+  word sec_stat = get_conf_word(d, PCI_SEC_STATUS);
   word brc = get_conf_word(d, PCI_BRIDGE_CONTROL);
   int verb = verbose > 2;
 
@@ -743,10 +1484,21 @@
 	}
     }
 
-  if (get_conf_word(d, PCI_SEC_STATUS) & PCI_STATUS_SIG_SYSTEM_ERROR)
-    printf("\tSecondary status: SERR\n");
+  if (verbose > 1)
+    printf("\tSecondary status: 66MHz%c FastB2B%c ParErr%c DEVSEL=%s >TAbort%c <TAbort%c <MAbort%c <SERR%c <PERR%c\n",
+	     FLAG(sec_stat, PCI_STATUS_66MHZ),
+	     FLAG(sec_stat, PCI_STATUS_FAST_BACK),
+	     FLAG(sec_stat, PCI_STATUS_PARITY),
+	     ((sec_stat & PCI_STATUS_DEVSEL_MASK) == PCI_STATUS_DEVSEL_SLOW) ? "slow" :
+	     ((sec_stat & PCI_STATUS_DEVSEL_MASK) == PCI_STATUS_DEVSEL_MEDIUM) ? "medium" :
+	     ((sec_stat & PCI_STATUS_DEVSEL_MASK) == PCI_STATUS_DEVSEL_FAST) ? "fast" : "??",
+	     FLAG(sec_stat, PCI_STATUS_SIG_TARGET_ABORT),
+	     FLAG(sec_stat, PCI_STATUS_REC_TARGET_ABORT),
+	     FLAG(sec_stat, PCI_STATUS_REC_MASTER_ABORT),
+	     FLAG(sec_stat, PCI_STATUS_SIG_SYSTEM_ERROR),
+	     FLAG(sec_stat, PCI_STATUS_DETECTED_PARITY));
 
-  show_rom(d);
+  show_rom(d, PCI_ROM_ADDRESS1);
 
   if (verbose > 1)
     printf("\tBridgeCtl: Parity%c SERR%c NoISA%c VGA%c MAbort%c >Reset%c FastB2B%c\n",
@@ -767,7 +1519,7 @@
   int i;
   word cmd = get_conf_word(d, PCI_COMMAND);
   word brc = get_conf_word(d, PCI_CB_BRIDGE_CONTROL);
-  word exca = get_conf_word(d, PCI_CB_LEGACY_MODE_BASE);
+  word exca;
   int verb = verbose > 2;
 
   show_bases(d, 1);
@@ -815,6 +1567,14 @@
 	   FLAG(brc, PCI_CB_BRIDGE_CTL_CB_RESET),
 	   FLAG(brc, PCI_CB_BRIDGE_CTL_16BIT_INT),
 	   FLAG(brc, PCI_CB_BRIDGE_CTL_POST_WRITES));
+
+  if (d->config_cached < 128)
+    {
+      printf("\t<access denied to the rest>\n");
+      return;
+    }
+
+  exca = get_conf_word(d, PCI_CB_LEGACY_MODE_BASE);
   if (exca)
     printf("\t16-bit legacy interface ports at %04x\n", exca);
 }
@@ -833,7 +1593,7 @@
   byte max_lat, min_gnt;
   byte int_pin = get_conf_byte(d, PCI_INTERRUPT_PIN);
   unsigned int irq = p->irq;
-  word subsys_v, subsys_d;
+  word subsys_v = 0, subsys_d = 0;
   char ssnamebuf[256];
 
   show_terse(d);
@@ -849,17 +1609,19 @@
       subsys_d = get_conf_word(d, PCI_SUBSYSTEM_ID);
       break;
     case PCI_HEADER_TYPE_BRIDGE:
-      if (class != PCI_CLASS_BRIDGE_PCI)
+      if ((class >> 8) != PCI_BASE_CLASS_BRIDGE)
 	printf("\t!!! Invalid class %04x for header type %02x\n", class, htype);
       irq = int_pin = min_gnt = max_lat = 0;
-      subsys_v = subsys_d = 0;
       break;
     case PCI_HEADER_TYPE_CARDBUS:
       if ((class >> 8) != PCI_BASE_CLASS_BRIDGE)
 	printf("\t!!! Invalid class %04x for header type %02x\n", class, htype);
       min_gnt = max_lat = 0;
-      subsys_v = get_conf_word(d, PCI_CB_SUBSYSTEM_VENDOR_ID);
-      subsys_d = get_conf_word(d, PCI_CB_SUBSYSTEM_ID);
+      if (d->config_cached >= 128)
+	{
+	  subsys_v = get_conf_word(d, PCI_CB_SUBSYSTEM_VENDOR_ID);
+	  subsys_d = get_conf_word(d, PCI_CB_SUBSYSTEM_ID);
+	}
       break;
     default:
       printf("\t!!! Unknown header type %02x\n", htype);
@@ -885,7 +1647,7 @@
 	     FLAG(cmd, PCI_COMMAND_WAIT),
 	     FLAG(cmd, PCI_COMMAND_SERR),
 	     FLAG(cmd, PCI_COMMAND_FAST_BACK));
-      printf("\tStatus: Cap%c 66Mhz%c UDF%c FastB2B%c ParErr%c DEVSEL=%s >TAbort%c <TAbort%c <MAbort%c >SERR%c <PERR%c\n",
+      printf("\tStatus: Cap%c 66MHz%c UDF%c FastB2B%c ParErr%c DEVSEL=%s >TAbort%c <TAbort%c <MAbort%c >SERR%c <PERR%c\n",
 	     FLAG(status, PCI_STATUS_CAP_LIST),
 	     FLAG(status, PCI_STATUS_66MHZ),
 	     FLAG(status, PCI_STATUS_UDF),
@@ -914,11 +1676,11 @@
 	      putchar(')');
 	    }
 	  if (cache_line)
-	    printf(", cache line size %02x", cache_line);
+	    printf(", Cache Line Size %02x", cache_line);
 	  putchar('\n');
 	}
       if (int_pin || irq)
-	printf("\tInterrupt: pin %c routed to IRQ " IRQ_FORMAT "\n",
+	printf("\tInterrupt: pin %c routed to IRQ " PCIIRQ_FMT "\n",
 	       (int_pin ? 'A' + int_pin - 1 : '?'), irq);
     }
   else
@@ -933,7 +1695,7 @@
       if (cmd & PCI_COMMAND_FAST_BACK)
 	printf("fast Back2Back, ");
       if (status & PCI_STATUS_66MHZ)
-	printf("66Mhz, ");
+	printf("66MHz, ");
       if (status & PCI_STATUS_UDF)
 	printf("user-definable features, ");
       printf("%s devsel",
@@ -943,7 +1705,7 @@
       if (cmd & PCI_COMMAND_MASTER)
 	printf(", latency %d", latency);
       if (irq)
-	printf(", IRQ " IRQ_FORMAT, irq);
+	printf(", IRQ " PCIIRQ_FMT, irq);
       putchar('\n');
     }
 
@@ -972,9 +1734,17 @@
 static void
 show_hex_dump(struct device *d)
 {
-  unsigned int i;
+  unsigned int i, cnt;
 
-  for(i=0; i<d->config_cnt; i++)
+  cnt = d->config_cached;
+  if (show_hex >= 3 && config_fetch(d, cnt, 256-cnt))
+    {
+      cnt = 256;
+      if (show_hex >= 4 && config_fetch(d, 256, 4096-256))
+	cnt = 4096;
+    }
+
+  for(i=0; i<cnt; i++)
     {
       if (! (i & 15))
 	printf("%02x:", i);
@@ -999,20 +1769,25 @@
       sd_id = get_conf_word(d, PCI_SUBSYSTEM_ID);
       break;
     case PCI_HEADER_TYPE_CARDBUS:
-      sv_id = get_conf_word(d, PCI_CB_SUBSYSTEM_VENDOR_ID);
-      sd_id = get_conf_word(d, PCI_CB_SUBSYSTEM_ID);
+      if (d->config_cached >= 128)
+	{
+	  sv_id = get_conf_word(d, PCI_CB_SUBSYSTEM_VENDOR_ID);
+	  sd_id = get_conf_word(d, PCI_CB_SUBSYSTEM_ID);
+	}
       break;
     }
 
   if (verbose)
     {
-      printf("Device:\t%02x:%02x.%x\n", p->bus, p->dev, p->func);
+      printf("Device:\t");
+      show_slot_name(d);
+      putchar('\n');
       printf("Class:\t%s\n",
-	     pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS, get_conf_word(d, PCI_CLASS_DEVICE), 0, 0, 0));
+	     pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS, get_conf_word(d, PCI_CLASS_DEVICE)));
       printf("Vendor:\t%s\n",
-	     pci_lookup_name(pacc, vendbuf, sizeof(vendbuf), PCI_LOOKUP_VENDOR, p->vendor_id, p->device_id, 0, 0));
+	     pci_lookup_name(pacc, vendbuf, sizeof(vendbuf), PCI_LOOKUP_VENDOR, p->vendor_id, p->device_id));
       printf("Device:\t%s\n",
-	     pci_lookup_name(pacc, devbuf, sizeof(devbuf), PCI_LOOKUP_DEVICE, p->vendor_id, p->device_id, 0, 0));
+	     pci_lookup_name(pacc, devbuf, sizeof(devbuf), PCI_LOOKUP_DEVICE, p->vendor_id, p->device_id));
       if (sv_id && sv_id != 0xffff)
 	{
 	  printf("SVendor:\t%s\n",
@@ -1027,14 +1802,14 @@
     }
   else
     {
-      printf("%02x:%02x.%x ", p->bus, p->dev, p->func);
-      printf("\"%s\" \"%s\" \"%s\"",
+      show_slot_name(d);
+      printf(" \"%s\" \"%s\" \"%s\"",
 	     pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS,
-			     get_conf_word(d, PCI_CLASS_DEVICE), 0, 0, 0),
+			     get_conf_word(d, PCI_CLASS_DEVICE)),
 	     pci_lookup_name(pacc, vendbuf, sizeof(vendbuf), PCI_LOOKUP_VENDOR,
-			     p->vendor_id, p->device_id, 0, 0),
+			     p->vendor_id, p->device_id),
 	     pci_lookup_name(pacc, devbuf, sizeof(devbuf), PCI_LOOKUP_DEVICE,
-			     p->vendor_id, p->device_id, 0, 0));
+			     p->vendor_id, p->device_id));
       if (c = get_conf_byte(d, PCI_REVISION_ID))
 	printf(" -r%02x", c);
       if (c = get_conf_byte(d, PCI_CLASS_PROG))
@@ -1078,36 +1853,39 @@
 struct bridge {
   struct bridge *chain;			/* Single-linked list of bridges */
   struct bridge *next, *child;		/* Tree of bridges */
-  struct bus *first_bus;		/* List of busses connected to this bridge */
+  struct bus *first_bus;		/* List of buses connected to this bridge */
+  unsigned int domain;
   unsigned int primary, secondary, subordinate;	/* Bus numbers */
   struct device *br_dev;
 };
 
 struct bus {
+  unsigned int domain;
   unsigned int number;
   struct bus *sibling;
   struct device *first_dev, **last_dev;
 };
 
-static struct bridge host_bridge = { NULL, NULL, NULL, NULL, ~0, 0, ~0, NULL };
+static struct bridge host_bridge = { NULL, NULL, NULL, NULL, 0, ~0, 0, ~0, NULL };
 
 static struct bus *
-find_bus(struct bridge *b, unsigned int n)
+find_bus(struct bridge *b, unsigned int domain, unsigned int n)
 {
   struct bus *bus;
 
   for(bus=b->first_bus; bus; bus=bus->sibling)
-    if (bus->number == n)
+    if (bus->domain == domain && bus->number == n)
       break;
   return bus;
 }
 
 static struct bus *
-new_bus(struct bridge *b, unsigned int n)
+new_bus(struct bridge *b, unsigned int domain, unsigned int n)
 {
   struct bus *bus = xmalloc(sizeof(struct bus));
 
   bus = xmalloc(sizeof(struct bus));
+  bus->domain = domain;
   bus->number = n;
   bus->sibling = b->first_bus;
   bus->first_dev = NULL;
@@ -1122,19 +1900,19 @@
   struct pci_dev *p = d->dev;
   struct bus *bus;
 
-  if (! (bus = find_bus(b, p->bus)))
+  if (! (bus = find_bus(b, p->domain, p->bus)))
     {
       struct bridge *c;
       for(c=b->child; c; c=c->next)
-	if (c->secondary <= p->bus && p->bus <= c->subordinate)
+	if (c->domain == p->domain && c->secondary <= p->bus && p->bus <= c->subordinate)
           {
             insert_dev(d, c);
             return;
           }
-      bus = new_bus(b, p->bus);
+      bus = new_bus(b, p->domain, p->bus);
     }
   /* Simple insertion at the end _does_ guarantee the correct order as the
-   * original device list was sorted by (bus, devfn) lexicographically
+   * original device list was sorted by (domain, bus, devfn) lexicographically
    * and all devices on the new list have the same bus number.
    */
   *bus->last_dev = d;
@@ -1159,6 +1937,7 @@
 	  (ht == PCI_HEADER_TYPE_BRIDGE || ht == PCI_HEADER_TYPE_CARDBUS))
 	{
 	  b = xmalloc(sizeof(struct bridge));
+	  b->domain = d->dev->domain;
 	  if (ht == PCI_HEADER_TYPE_BRIDGE)
 	    {
 	      b->primary = get_conf_byte(d, PCI_CB_PRIMARY_BUS);
@@ -1187,7 +1966,8 @@
       struct bridge *c, *best;
       best = NULL;
       for(c=&host_bridge; c; c=c->chain)
-	if (c != b && b->primary >= c->secondary && b->primary <= c->subordinate &&
+	if (c != b && (c == &host_bridge || b->domain == c->domain) &&
+	    b->primary >= c->secondary && b->primary <= c->subordinate &&
 	    (!best || best->subordinate - best->primary > c->subordinate - c->primary))
 	  best = c;
       if (best)
@@ -1200,8 +1980,8 @@
   /* Insert secondary bus for each bridge */
 
   for(b=&host_bridge; b; b=b->chain)
-    if (!find_bus(b, b->secondary))
-      new_bus(b, b->secondary);
+    if (!find_bus(b, b->domain, b->secondary))
+      new_bus(b, b->domain, b->secondary);
 
   /* Create bus structs and link devices */
 
@@ -1240,9 +2020,9 @@
     if (b->br_dev == d)
       {
 	if (b->secondary == b->subordinate)
-	  p += sprintf(p, "-[%02x]-", b->secondary);
+	  p += sprintf(p, "-[%04x:%02x]-", b->domain, b->secondary);
 	else
-	  p += sprintf(p, "-[%02x-%02x]-", b->secondary, b->subordinate);
+	  p += sprintf(p, "-[%04x:%02x-%02x]-", b->domain, b->secondary, b->subordinate);
         show_tree_bridge(b, line, p);
         return;
       }
@@ -1250,7 +2030,7 @@
     p += sprintf(p, "  %s",
 		 pci_lookup_name(pacc, namebuf, sizeof(namebuf),
 				 PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
-				 q->vendor_id, q->device_id, 0, 0));
+				 q->vendor_id, q->device_id));
   print_it(line, p);
 }
 
@@ -1288,7 +2068,7 @@
   if (!b->first_bus->sibling)
     {
       if (b == &host_bridge)
-        p += sprintf(p, "[%02x]-", b->first_bus->number);
+        p += sprintf(p, "[%04x:%02x]-", b->domain, b->first_bus->number);
       show_tree_bus(b->first_bus, line, p);
     }
   else
@@ -1298,11 +2078,11 @@
 
       while (u->sibling)
         {
-          k = p + sprintf(p, "+-[%02x]-", u->number);
+          k = p + sprintf(p, "+-[%04x:%02x]-", u->domain, u->number);
           show_tree_bus(u, line, k);
           u = u->sibling;
         }
-      k = p + sprintf(p, "\\-[%02x]-", u->number);
+      k = p + sprintf(p, "\\-[%04x:%02x]-", u->domain, u->number);
       show_tree_bus(u, line, k);
     }
 }
@@ -1372,7 +2152,8 @@
 	for(func = 0; func < func_limit; func++)
 	  if (filter.func < 0 || filter.func == func)
 	    {
-	      struct pci_dev *p = pci_get_dev(pacc, bus, dev, func);
+	      /* XXX: Bus mapping supports only domain 0 */
+	      struct pci_dev *p = pci_get_dev(pacc, 0, bus, dev, func);
 	      u16 vendor = pci_read_word(p, PCI_VENDOR_ID);
 	      if (vendor && vendor != 0xffff)
 		{
@@ -1471,8 +2252,6 @@
   if (pacc->method == PCI_ACCESS_PROC_BUS_PCI ||
       pacc->method == PCI_ACCESS_DUMP)
     printf("WARNING: Bus mapping can be reliable only with direct hardware access enabled.\n\n");
-  else if (!check_root())
-    die("Only root can map the bus.");
   bus_info = xmalloc(sizeof(struct bus_info) * 256);
   bzero(bus_info, sizeof(struct bus_info) * 256);
   if (filter.bus >= 0)
@@ -1519,7 +2298,7 @@
 	break;
       case 's':
 	if (msg = pci_filter_parse_slot(&filter, optarg))
-	  die("-f: %s", msg);
+	  die("-s: %s", msg);
 	break;
       case 'd':
 	if (msg = pci_filter_parse_id(&filter, optarg))
diff -ruN pciutils-2.1.11/lspci.man pciutils-2.2.0/lspci.man
--- pciutils-2.1.11/lspci.man	2003-01-04 13:51:16 +0100
+++ pciutils-2.2.0/lspci.man	2005-08-23 23:24:16 +0200
@@ -1,4 +1,4 @@
-.TH lspci 8 "@TODAY@" "@VERSION@" "Linux PCI Utilities"
+.TH lspci 8 "@TODAY@" "@VERSION@" "The PCI Utilities"
 .IX lspci
 .SH NAME
 lspci \- list all PCI devices
@@ -10,42 +10,65 @@
 is a utility for displaying information about all PCI buses in the system and
 all devices connected to them.
 
+By default, it shows a brief list of devices. Use the options described
+below to request either a more verbose output or output intended for
+parsing by other programs.
+
 If you are going to report bugs in PCI device drivers or in
 .I lspci
-itself, please include output of "lspci -vvx".
+itself, please include output of "lspci -vvx" or even better "lspci -vvxxx"
+(however, see below for possible caveats).
+
+Some parts of the output, especially in the highly verbose modes, is probably
+intelligible only to experienced PCI hackers. For the exact definitions of
+the fields, please consult either the PCI specifications or the
+.B header.h
+and
+.B /usr/include/linux/pci.h
+include files.
+
+Access to some parts of the PCI configuration space is restricted to root
+on many operating systems, so the features of
+.I lspci
+available to normal users are limited. However,
+.I lspci
+tries its best to display as much as available and mark all other
+information with
+.I <access denied>
+text.
 
 .SH OPTIONS
 .TP
 .B -v
-Tells
-.I lspci
-to be verbose and display detailed information about all devices.
+Be verbose and display detailed information about all devices.
 .TP
 .B -vv
-Tells
-.I lspci
-to be very verbose and display even more information (actually everything the
-PCI device is able to tell). The exact meaning of these data is not explained
-in this manual page, if you want to know more, consult
-.B /usr/include/linux/pci.h
-or the PCI specs.
+Be very verbose and display more details. This level includes everything deemed
+useful.
+.TP
+.B -vvv
+Be even more verbose and display everything we are able to parse,
+even if it doesn't look interesting at all (e.g., undefined memory regions).
 .TP
 .B -n
 Show PCI vendor and device codes as numbers instead of looking them up in the
-PCI ID database.
+PCI ID list.
 .TP
 .B -x
-Show hexadecimal dump of first 64 bytes of the PCI configuration space (the standard
-header). Useful for debugging of drivers and
-.I lspci
-itself.
+Show hexadecimal dump of the standard part of the configuration space (the first
+64 bytes or 128 bytes for CardBus bridges).
 .TP
 .B -xxx
-Show hexadecimal dump of whole PCI configuration space. Available only for root
+Show hexadecimal dump of the whole PCI configuration space. It is available only to root
 as several PCI devices
 .B crash
-when you try to read undefined portions of the config space (this behaviour probably
-doesn't violate the PCI standard, but it's at least very stupid).
+when you try to read some parts of the config space (this behavior probably
+doesn't violate the PCI standard, but it's at least very stupid). However, such
+devices are rare, so you needn't worry much.
+.TP
+.B -xxxx
+Show hexadecimal dump of the extended (4096-byte) PCI configuration space available
+on PCI-X 2.0 and PCI Express buses.
 .TP
 .B -b
 Bus-centric view. Show all IRQ numbers and addresses as seen by the cards on the
@@ -55,84 +78,114 @@
 Show a tree-like diagram containing all buses, bridges, devices and connections
 between them.
 .TP
-.B -s [[<bus>]:][<slot>][.[<func>]]
-Show only devices in specified bus, slot and function. Each component of the device
-address can be omitted or set as "*" meaning "any value". All numbers are
+.B -s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]]
+Show only devices in the specified domain (in case your machine has several host bridges,
+they can either share a common bus number space or each of them can address a PCI domain
+of its own; domains are numbered from 0 to ffff), bus (0 to ff), slot (0 to 1f) and function (0 to 7).
+Each component of the device address can be omitted or set to "*", both meaning "any value". All numbers are
 hexadecimal.  E.g., "0:" means all devices on bus 0, "0" means all functions of device 0
 on any bus, "0.3" selects third function of device 0 on all buses and ".4" shows only
-fourth function of each device.
+the fourth function of each device.
 .TP
 .B -d [<vendor>]:[<device>]
 Show only devices with specified vendor and device ID. Both ID's are given in
-hexadecimal and may be omitted or given as "*" meaning "any value".
+hexadecimal and may be omitted or given as "*", both meaning "any value".
 .TP
 .B -i <file>
 Use
 .B
 <file>
-as PCI ID database instead of /usr/share/pci.ids.
-.TP
-.B -p <dir>
-Use
-.B <dir>
-as directory containing PCI bus information instead of /proc/bus/pci.
+as the PCI ID list instead of @IDSDIR@/pci.ids.
 .TP
 .B -m
 Dump PCI device data in machine readable form (both normal and verbose format supported)
 for easy parsing by scripts.
 .TP
 .B -M
-Invoke bus mapping mode which scans the bus extensively to find all devices including
-those behind misconfigured bridges etc. Please note that this is intended only for
-debugging and as it can crash the machine (only in case of buggy devices, but
-unfortunately these happen to exist), it's available only to root. Also using
--M on PCI access methods which don't directly touch the hardware has no
-sense since the results are (modulo bugs in lspci) identical to normal listing
-modes.
+Invoke bus mapping mode which performs a thorough scan of all PCI devices, including
+those behind misconfigured bridges etc. This option is available only to root and it
+gives meaningful results only if combined with direct hardware access mode (otherwise
+the results are identical to normal listing modes, modulo bugs in lspci). Please note
+that the bus mapper doesn't support PCI domains and scans only domain 0.
 .TP
 .B --version
 Shows 
 .I lspci
-version. This option should be used standalone.
+version. This option should be used stand-alone.
 
-.SH PCILIB OPTIONS
+.SH PCILIB AND ITS OPTIONS
 The PCI utilities use PCILIB (a portable library providing platform-independent
-functions for PCI configuration space access) to talk to the PCI cards. The following
-options control parameters of the library, especially what access method it uses.
+functions for PCI configuration space access) to talk to the PCI cards. It supports
+the following access methods:
+
+.TP
+.B linux_sysfs
+The
+.B /sys
+filesystem on Linux 2.6 and newer. The standard header of the config space is available
+to all users, the rest only to root. Supports extended configuration space and PCI domains.
+.TP
+.B linux_proc
+The
+.B /proc/bus/pci
+interface supported by Linux 2.1 and newer. The standard header of the config space is available
+to all users, the rest only to root.
+.TP
+.B intel_conf1
+Direct hardware access via Intel configuration mechanism 1. Available on i386 and compatibles
+on Linux, Solaris/x86, GNU Hurd and Windows. Requires root privileges.
+.TP
+.B intel_conf2
+Direct hardware access via Intel configuration mechanism 2. Available on i386 and compatibles
+on Linux, Solaris/x86 and GNU Hurd. Requires root privileges. Warning: This method
+is able to address only first 16 devices on any bus and it seems to be very
+unreliable in many cases.
+.TP
+.B fbsd_device
+The
+.B /dev/pci
+device on FreeBSD. Requires root privileges.
+.TP
+.B aix_device
+Access method used on AIX. Requires root privileges.
+.TP
+.B nbsd_libpci
+The
+.B /dev/pci0
+device on NetBSD accessed using the local libpci library.
+
+.P
 By default, PCILIB uses the first available access method and displays no debugging
-messages. Each switch is accompanied by a list of hardware/software configurations
-it's supported in.
+messages, but you can use the following switches to control its behavior:
 
 .TP
 .B -P <dir>
-Force use of Linux /proc/bus/pci style configuration access, using
+Force use of the linux_proc access method, using
 .B <dir>
-instead of /proc/bus/pci. (Linux 2.1 or newer only)
+instead of /proc/bus/pci.
 .TP
 .B -H1
-Use direct hardware access via Intel configuration mechanism 1. (i386 and compatible only)
+Use direct hardware access via Intel configuration mechanism 1.
 .TP
 .B -H2
-Use direct hardware access via Intel configuration mechanism 2. Warning: This method
-is able to address only first 16 devices on any bus and it seems to be very
-unrealiable in many cases. (i386 and compatible only)
-.TP
-.B -S
-Use PCI access syscalls. (Linux on Alpha and UltraSparc only)
+Use direct hardware access via Intel configuration mechanism 2.
 .TP
 .B -F <file>
 Extract all information from given file containing output of lspci -x. This is very
 useful for analysis of user-supplied bug reports, because you can display the
 hardware configuration in any way you want without disturbing the user with
-requests for more dumps. (All systems)
+requests for more dumps.
 .TP
 .B -G
-Increase debug level of the library. (All systems)
+Increase debug level of the library.
 
 .SH FILES
 .TP
-.B @SHAREDIR@/pci.ids
-A list of all known PCI ID's (vendors, devices, classes and subclasses).
+.B @IDSDIR@/pci.ids
+A list of all known PCI ID's (vendors, devices, classes and subclasses). Maintained
+at http://pciids.sourceforge.net/, use the
+.B update-pciids
+utility to download the most recent version.
 .TP
 .B /proc/bus/pci
 An interface to PCI bus configuration space provided by the post-2.1.82 Linux
@@ -141,7 +194,8 @@
 file containing a list of all PCI devices.
 
 .SH SEE ALSO
-.BR setpci (8), update-pciids (8)
+.BR setpci (8),
+.BR update-pciids (8)
 
 .SH AUTHOR
-The Linux PCI Utilities are maintained by Martin Mares <mj@ucw.cz>.
+The PCI Utilities are maintained by Martin Mares <mj@ucw.cz>.
diff -ruN pciutils-2.1.11/maint/release pciutils-2.2.0/maint/release
--- pciutils-2.1.11/maint/release	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/maint/release	2005-09-21 14:08:30 +0200
@@ -0,0 +1,39 @@
+#!/usr/bin/perl
+# A simple script for making releases of the pciutils
+# (c) 2003--2004 Martin Mares <mj@ucw.cz>
+
+use strict;
+use warnings;
+require "maint/release.pm";
+
+my $r = new UCW::Release("pciutils");
+my $ver = $r->GetVersionFromFile("Makefile", "VERSION=(.*)");
+$r->GetVersionsFromChangelog("ChangeLog", "Released as (.*)\.");
+push @{$r->{"rules"}}, '^win32/config.h' => 's';
+if ($ver =~ /-/) {
+	$r->{"ALPHADIR"} = "alpha/";
+	$r->{"conditions"}->{"ALPHA_VERSION"} = 1;
+} else {
+	$r->{"ALPHADIR"} = "";
+	$r->{"conditions"}->{"ALPHA_VERSION"} = -1;
+}
+push @{$r->{"uploads"}}, {
+	"url" => "scp://atrey.karlin.mff.cuni.cz/~ftp/pub/linux/pci/" . $r->{"ALPHADIR"}
+	},{
+	"url" => "scp://master.kernel.org/pub/software/utils/pciutils/" . $r->{"ALPHADIR"}
+	};
+push @{$r->{"uploads"}}, {
+	"url" => "ftp://metalab.unc.edu/incoming/linux/",
+	"filter" => '(\.tar\.gz|\.lsm)$'
+	} if $r->{"ALPHADIR"} ne "";
+$r->ParseOptions;
+$r->InitDist("maint/dist");
+my $reldir = $r->GenPackage;
+$r->GenFile("README");
+$r->GenFile("pciutils.lsm");
+$r->Dispatch;
+if ($r->{"do_upload"}) {
+	print "Uploading pci.ids to Jabberwock\n";
+	`scp -C pci.ids pciids\@jabberwock.ucw.cz:05-pciutils.new`; die if $?;
+	`ssh pciids\@jabberwock.ucw.cz mv 05-pciutils.new origs/05-pciutils`; die if $?;
+}
diff -ruN pciutils-2.1.11/maint/release.pm pciutils-2.2.0/maint/release.pm
--- pciutils-2.1.11/maint/release.pm	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/maint/release.pm	2005-02-19 15:52:48 +0100
@@ -0,0 +1,317 @@
+#!/usr/bin/perl
+# A simple system for making software releases
+# (c) 2003 Martin Mares <mj@ucw.cz>
+
+package UCW::Release;
+use strict;
+use warnings;
+use Getopt::Long;
+
+our $verbose = 0;
+
+sub new($$) {
+	my ($class,$basename) = @_;
+	my $s = {
+		"PACKAGE" => $basename,
+		"rules" => [
+			# p=preprocess, s=subst, -=discard
+			'(^|/)(CVS|\.arch-ids|{arch}|tmp)/' => '-',
+			'\.(lsm|spec)$' => 'ps',
+			'(^|/)README$' => 's'
+			],
+		"directories" => [
+			],
+		"conditions" => {
+			},
+		"DATE" => `date '+%Y-%m-%d' | tr -d '\n'`,
+		"LSMDATE" => `date '+%y%m%d' | tr -d '\n'`,
+		"distfiles" => [
+			],
+		"archivedir" => "/home/mj/tmp/archives/$basename",
+		"uploads" => [
+			],
+		# Options
+		"do_test" => 1,
+		"do_patch" => 1,
+		"diff_against" => "",
+		"do_upload" => 1
+	};
+	bless $s;
+	return $s;
+}
+
+sub GetVersionFromFile($) {
+	my ($s,$file,$rx) = @_;
+	open F, $file or die "Unable to open $file for version autodetection";
+	while (<F>) {
+		chomp;
+		if (/$rx/) {
+			$s->{"VERSION"} = $1;
+			print "Detected version $1 from $file\n" if $verbose;
+			last;
+		}
+	}
+	close F;
+	if (!defined $s->{"VERSION"}) { die "Failed to auto-detect version"; }
+	return $s->{"VERSION"};
+}
+
+sub GetVersionsFromChangelog($) {
+	my ($s,$file,$rx) = @_;
+	open F, $file or die "Unable to open $file for version autodetection";
+	while (<F>) {
+		chomp;
+		if (/$rx/) {
+			if (!defined $s->{"VERSION"}) {
+				$s->{"VERSION"} = $1;
+				print "Detected version $1 from $file\n" if $verbose;
+			} elsif ($s->{"VERSION"} eq $1) {
+				# do nothing
+			} else {
+				$s->{"OLDVERSION"} = $1;
+				print "Detected previous version $1 from $file\n" if $verbose;
+				last;
+			}
+		}
+	}
+	close F;
+	if (!defined $s->{"VERSION"}) { die "Failed to auto-detect version"; }
+	return $s->{"VERSION"};
+}
+
+sub InitDist($) {
+	my ($s,$dd) = @_;
+	$s->{"DISTDIR"} = $dd;
+	print "Initializing dist directory $dd\n" if $verbose;
+	`rm -rf $dd`; die if $?;
+	`mkdir -p $dd`; die if $?;
+}
+
+sub ExpandVar($$) {
+	my ($s,$v) = @_;
+	if (defined $s->{$v}) {
+		return $s->{$v};
+	} else {
+		die "Reference to unknown variable $v";
+	}
+}
+
+sub CopyFile($$$$) {
+	my ($s,$f,$dir,$action) = @_;
+
+	(my $d = $f) =~ s@(^|/)[^/]*$@@;
+	$d = "$dir/$d";
+	-d $d || `mkdir -p $d`; die if $?;
+
+	my $preprocess = ($action =~ /p/);
+	my $subst = ($action =~ /s/);
+	if ($preprocess || $subst) {
+		open I, "$f" or die "open($f): $?";
+		open O, ">$dir/$f" or die "open($dir/$f): $!";
+		my @ifs = ();	# stack of conditions, 1=satisfied
+		my $empty = 0;	# last line was empty
+		my $is_makefile = ($f =~ /(Makefile|.mk)$/);
+		while (<I>) {
+			if ($subst) {
+				s/@([0-9A-Za-z_]+)@/$s->ExpandVar($1)/ge;
+			}
+			if ($preprocess) {
+				if (/^#/ || $is_makefile) {
+					if (/^#?ifdef\s+(\w+)/) {
+						if (defined ${$s->{"conditions"}}{$1}) {
+							push @ifs, ${$s->{"conditions"}}{$1};
+							next;
+						}
+						push @ifs, 0;
+					} elsif (/^#ifndef\s+(\w+)/) {
+						if (defined ${$s->{"conditions"}}{$1}) {
+							push @ifs, -${$s->{"conditions"}}{$1};
+							next;
+						}
+						push @ifs, 0;
+					} elsif (/^#if\s+/) {
+						push @ifs, 0;
+					} elsif (/^#?endif/) {
+						my $x = pop @ifs;
+						defined $x or die "Improper nesting of conditionals";
+						$x && next;
+					} elsif (/^#?else/) {
+						my $x = pop @ifs;
+						defined $x or die "Improper nesting of conditionals";
+						push @ifs, -$x;
+						$x && next;
+					}
+				}
+				@ifs && $ifs[$#ifs] < 0 && next;
+				if (/^$/) {
+					$empty && next;
+					$empty = 1;
+				} else { $empty = 0; }
+			}		
+			print O;
+		}
+		close O;
+		close I;
+		! -x $f or chmod(0755, "$dir/$f") or die "chmod($dir/$f): $!";
+	} else {
+		`cp -a $f $dir/$f`; die if $?;
+	}
+}
+
+sub GenPackage($) {
+	my ($s) = @_;
+	$s->{"PKG"} = $s->{"PACKAGE"} . "-" . $s->{"VERSION"};
+	my $dd = $s->{"DISTDIR"};
+	my $pkg = $s->{"PKG"};
+	my $dir = "$dd/$pkg";
+	print "Generating $dir\n";
+
+	FILES: foreach my $f (`find . -type f`) {
+		chomp $f;
+		$f =~ s/^\.\///;
+		my $action = "";
+		my @rules = @{$s->{"rules"}};
+		while (@rules) {
+			my $rule = shift @rules;
+			my $act = shift @rules;
+			if ($f =~ $rule) {
+				$action = $act;
+				last;
+			}
+		}
+		($action =~ /-/) && next FILES;
+		print "$f ($action)\n" if $verbose;
+		$s->CopyFile($f, $dir, $action);
+	}
+
+	foreach my $d (@{$s->{"directories"}}) {
+		`mkdir -p $dir/$d`; die if $?;
+	}
+
+	if (-f "$dir/Makefile") {
+		print "Cleaning up\n";
+		`cd $dir && make distclean >&2`; die if $?;
+	}
+
+	print "Creating $dd/$pkg.tar.gz\n";
+	my $tarvv = $verbose ? "vv" : "";
+	`cd $dd && tar cz${tarvv}f $pkg.tar.gz $pkg >&2`; die if $?;
+	push @{$s->{"distfiles"}}, "$dd/$pkg.tar.gz";
+
+	my $adir = $s->{"archivedir"};
+	my $afile = "$adir/$pkg.tar.gz";
+	print "Archiving to $afile\n";
+	-d $adir or `mkdir -p $adir`;
+	`cp $dd/$pkg.tar.gz $afile`; die if $?;
+
+	return $dir;
+}
+
+sub GenFile($$) {
+	my ($s,$f) = @_;
+	my $sf = $s->{"DISTDIR"} . "/" . $s->{"PKG"} . "/$f";
+	my $df = $s->{"DISTDIR"} . "/$f";
+	print "Generating $df\n";
+	`cp $sf $df`; die if $?;
+	push @{$s->{"distfiles"}}, $df;
+}
+
+sub ParseOptions($) {
+	my ($s) = @_;
+	GetOptions(
+		"verbose!" => \$verbose,
+		"test!" => \$s->{"do_test"},
+		"patch!" => \$s->{"do_patch"},
+		"diff-against=s" => \$s->{"diff_against"},
+		"upload!" => \$s->{"do_upload"}
+	) || die "Syntax: release [--verbose] [--test] [--nopatch] [--diff-against=<version>] [--noupload]";
+}
+
+sub Test($) {
+	my ($s) = @_;
+	my $dd = $s->{"DISTDIR"};
+	my $pkg = $s->{"PKG"};
+	my $log = "$dd/$pkg.log";
+	print "Doing a test compilation\n";
+	`( cd $dd/$pkg && make ) >$log 2>&1`;
+	die "There were errors. Please inspect $log" if $?;
+	`grep -q [Ww]arning $log`;
+	$? or print "There were warnings! Please inspect $log.\n";
+	print "Cleaning up\n";
+	`cd $dd/$pkg && make distclean`; die if $?;
+}
+
+sub MakePatch($) {
+	my ($s) = @_;
+	my $dd = $s->{"DISTDIR"};
+	my $pkg1 = $s->{"PKG"};
+	my $oldver;
+	if ($s->{"diff_against"} ne "") {
+		$oldver = $s->{"diff_against"};
+	} elsif (defined $s->{"OLDVERSION"}) {
+		$oldver = $s->{"OLDVERSION"};
+	} else {
+		print "WARNING: No previous version known. No patch generated.\n";
+		return;
+	}
+	my $pkg0 = $s->{"PACKAGE"} . "-" . $oldver;
+
+	my $oldarch = $s->{"archivedir"} . "/" . $pkg0 . ".tar.gz";
+	-f $oldarch or die "MakePatch: $oldarch not found";
+	print "Unpacking $pkg0 from $oldarch\n";
+	`cd $dd && tar xzf $oldarch`; die if $?;
+
+	my $diff = $s->{"PACKAGE"} . "-" . $oldver . "-" . $s->{"VERSION"} . ".diff.gz";
+	print "Creating a patch from $pkg0 to $pkg1: $diff\n";
+	`cd $dd && diff -ruN $pkg0 $pkg1 | gzip >$diff`; die if $?;
+	push @{$s->{"distfiles"}}, "$dd/$diff";
+}
+
+sub Upload($) {
+	my ($s) = @_;
+	foreach my $u (@{$s->{"uploads"}}) {
+		my $url = $u->{"url"};
+		print "Upload to $url :\n";
+		my @files = ();
+		my $filter = $u->{"filter"} || ".*";
+		foreach my $f (@{$s->{"distfiles"}}) {
+			if ($f =~ $filter) {
+				print "\t$f\n";
+				push @files, $f;
+			}
+		}
+		print "<confirm> "; <STDIN>;
+		if ($url =~ m@^scp://([^/]+)(.*)@) {
+			$, = " ";
+			my $host = $1;
+			my $dir = $2;
+			$dir =~ s@^/~@~@;
+			$dir =~ s@^/\./@@;
+			my $cmd = "scp @files $host:$dir\n";
+			`$cmd`; die if $?;
+		} elsif ($url =~ m@ftp://([^/]+)(.*)@) {
+			my $host = $1;
+			my $dir = $2;
+			open FTP, "|ftp -v $host" or die;
+			print FTP "cd $dir\n";
+			foreach my $f (@files) {
+				(my $ff = $f) =~ s@.*\/([^/].*)@$1@;
+				print FTP "put $f $ff\n";
+			}
+			print FTP "bye\n";
+			close FTP;
+			die if $?;
+		} else {
+			die "Don't know how to handle this URL scheme";
+		}
+	}
+}
+
+sub Dispatch($) {
+	my ($s) = @_;
+	$s->Test if $s->{"do_test"};
+	$s->MakePatch if $s->{"do_patch"};
+	$s->Upload if $s->{"do_upload"};
+}
+
+1;
diff -ruN pciutils-2.1.11/pci.ids pciutils-2.2.0/pci.ids
--- pciutils-2.1.11/pci.ids	2003-01-04 13:15:43 +0100
+++ pciutils-2.2.0/pci.ids	2005-09-21 14:07:36 +0200
@@ -1,13 +1,17 @@
 #
 #	List of PCI ID's
 #
-#	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.
+#       Maintained by Martin Mares <mj@ucw.cz> and other volunteers from the
+#       Linux PCI ID's Project at http://pciids.sf.net/.
 #
-#	Daily snapshot on Sat 2003-01-04 11:00:02
+#       New data are always welcome, especially if accurate. If you have
+#       anything to contribute, please follow the instructions at the web site
+#       or send a diff -u against the most recent pci.ids to pci-ids@ucw.cz.
+#
+#       This file can be distributed under either the GNU General Public License
+#       (version 2 or higher) or the 3-clause BSD License.
+#
+#	$Id: pci.ids,v 1.51 2005/09/10 12:19:17 mares Exp $
 #
 
 # Vendors, devices and subsystems. Please keep sorted.
@@ -24,20 +28,71 @@
 # Real TJN ID is e159, but they got it wrong several times --mj
 0059  Tiger Jet Network Inc. (Wrong ID)
 0070  Hauppauge computer works Inc.
+	4000  WinTV PVR-350
+	4001  WinTV PVR-250 (v1)
+	4009  WinTV PVR-250
+	4801  WinTV PVR-250 MCE
+0071  Nebula Electronics Ltd.
+0095  Silicon Image, Inc. (Wrong ID)
+	0680  Ultra ATA/133 IDE RAID CONTROLLER CARD
 0100  Ncipher Corp Ltd
+# 018a is not LevelOne but there is a board misprogrammed
+018a  LevelOne
+	0106  FPC-0106TX misprogrammed [RTL81xx]
+# 021b is not Compaq but there is a board misprogrammed
+021b  Compaq Computer Corporation
+	8139  HNE-300 (RealTek RTL8139c) [iPaq Networking]
+0291  Davicom Semiconductor, Inc.
+	8212  DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40)
+# SpeedStream is Efficient Networks, Inc, a Siemens Company
+02ac  SpeedStream
+	1012  1012 PCMCIA 10/100 Ethernet Card [RTL81xx]
+0357  TTTech AG
+	000a  TTP-Monitoring Card V2.0
+0432  SCM Microsystems, Inc.
+	0001  Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]
+045e  Microsoft
+	006e  MN-510 802.11b wireless USB paddle
+	00c2  MN-710 wireless USB paddle
+05e3  CyberDoor
+	0701  CBD516
 0675  Dynalink
 	1700  IS64PH ISDN Adapter
 	1702  IS64PH ISDN Adapter
+	1703  ISDN Adapter (PCI Bus, DV, W)
+	1704  ISDN Adapter (PCI Bus, D, C)
+067b  Prolific Technology, Inc.
+	3507  PL-3507 Hi-Speed USB & IEEE 1394 Combo to IDE Bridge Controller
+07e2  ELMEG Communication Systems GmbH
 # Wrong ID used in subsystem ID of VIA USB controllers.
 0925  VIA Technologies, Inc. (Wrong ID)
 09c1  Arris
 	0704  CM 200E Cable Modem
 0a89  BREA Technologies Inc
+0b49  ASCII Corporation
+	064f  Trance Vibrator
 0e11  Compaq Computer Corporation
 	0001  PCI to EISA Bridge
 	0002  PCI to ISA Bridge
+	0046  Smart Array 64xx
+		0e11 409a  Smart Array 641
+		0e11 409b  Smart Array 642
+		0e11 409c  Smart Array 6400
+		0e11 409d  Smart Array 6400 EM
 	0049  NC7132 Gigabit Upgrade Module
 	004a  NC6136 Gigabit Server Adapter
+	005a  Remote Insight II board - Lights-Out
+	007c  NC7770 1000BaseTX
+	007d  NC6770 1000BaseTX
+	0085  NC7780 1000BaseTX
+	00b1  Remote Insight II board - PCI device
+	00bb  NC7760
+	00ca  NC7771
+	00cb  NC7781
+	00cf  NC7772
+	00d0  NC7782
+	00d1  NC7783
+	00e3  NC7761
 	0508  Netelligent 4/16 Token Ring
 	1000  Triflex/Pentium Bridge, Model 1000
 	2000  Triflex/Pentium Bridge, Model 2000
@@ -45,6 +100,25 @@
 	3033  QVision 1280/p
 	3034  QVision 1280/p
 	4000  4000 [Triflex]
+	4030  SMART-2/P
+	4031  SMART-2SL
+	4032  Smart Array 3200
+	4033  Smart Array 3100ES
+	4034  Smart Array 221
+	4040  Integrated Array
+	4048  Compaq Raid LC2
+	4050  Smart Array 4200
+	4051  Smart Array 4250ES
+	4058  Smart Array 431
+	4070  Smart Array 5300
+	4080  Smart Array 5i
+	4082  Smart Array 532
+	4083  Smart Array 5312
+	4091  Smart Array 6i
+	409a  Smart Array 641
+	409b  Smart Array 642
+	409c  Smart Array 6400
+	409d  Smart Array 6400 EM
 	6010  HotPlug PCI Bridge 6010
 	7020  USB Controller
 	a0ec  Fibre Channel Host Controller
@@ -54,7 +128,7 @@
 		8086 002a  PCI Hotplug Controller A
 		8086 002b  PCI Hotplug Controller B
 	a0f8  ZFMicro Chipset USB
-	a0fc  Fibre Channel Host Controller
+	a0fc  FibreChannel HBA Tachyon
 	ae10  Smart-2/P RAID Controller
 		0e11 4030  Smart-2/P Array Controller
 		0e11 4031  Smart-2SL Array Controller
@@ -64,21 +138,21 @@
 	ae2a  MPC
 	ae2b  MIS-E
 	ae31  System Management Controller
-	ae32  Netelligent 10/100
+	ae32  Netelligent 10/100 TX PCI UTP
 	ae33  Triflex Dual EIDE Controller
-	ae34  Netelligent 10
+	ae34  Netelligent 10 T PCI UTP
 	ae35  Integrated NetFlex-3/P
-	ae40  Netelligent 10/100 Dual
-	ae43  ProLiant Integrated Netelligent 10/100
+	ae40  Netelligent Dual 10/100 TX PCI UTP
+	ae43  Netelligent Integrated 10/100 TX UTP
 	ae69  CETUS-L
 	ae6c  Northstar
 	ae6d  NorthStar CPU to PCI Bridge
-	b011  Integrated Netelligent 10/100
-	b012  Netelligent 10 T/2
+	b011  Netelligent 10/100 TX Embedded UTP
+	b012  Netelligent 10 T/2 PCI UTP/Coax
 	b01e  NC3120 Fast Ethernet NIC
 	b01f  NC3122 Fast Ethernet NIC
 	b02f  NC1120 Ethernet NIC
-	b030  Netelligent WS 5100
+	b030  Netelligent 10/100 TX UTP
 	b04a  10/100 TX PCI Intel WOL UTP Controller
 	b060  Smart Array 5300 Controller
 	b0c6  NC3161 Fast Ethernet NIC
@@ -96,60 +170,155 @@
 	b163  NC3134 Fast Ethernet NIC
 	b164  NC3165 Fast Ethernet Upgrade Module
 	b178  Smart Array 5i/532
+		0e11 4080  Smart Array 5i
+		0e11 4082  Smart Array 532
+		0e11 4083  Smart Array 5312
 	b1a4  NC7131 Gigabit Server Adapter
+# HP Memory Hot-Plug Controller
+	b200  Memory Hot-Plug Controller
+	b203  Integrated Lights Out Controller
+	b204  Integrated Lights Out  Processor
 	f130  NetFlex-3/P ThunderLAN 1.0
 	f150  NetFlex-3/P ThunderLAN 2.3
 0e55  HaSoTec GmbH
 # Formerly NCR
 1000  LSI Logic / Symbios Logic
 	0001  53c810
-		1000 1000  8100S
+		1000 1000  LSI53C810AE PCI to SCSI I/O Processor
 	0002  53c820
 	0003  53c825
+		1000 1000  LSI53C825AE PCI to SCSI I/O Processor (Ultra Wide)
 	0004  53c815
 	0005  53c810AP
 	0006  53c860
+		1000 1000  LSI53C860E PCI to Ultra SCSI I/O Processor
 	000a  53c1510
-	000b  53c896
+		1000 1000  LSI53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Nonintelligent mode)
+	000b  53C896/897
+		0e11 6004  EOB003 Series SCSI host adapter
+		1000 1000  LSI53C896/7 PCI to Dual Channel Ultra2 SCSI Multifunction Controller
+		1000 1010  LSI22910 PCI to Dual Channel Ultra2 SCSI host adapter
+		1000 1020  LSI21002 PCI to Dual Channel Ultra2 SCSI host adapter
+# multifunction PCI card: Dual U2W SCSI, dual 10/100TX, graphics
+		13e9 1000  6221L-4U
 	000c  53c895
+		1000 1010  LSI8951U PCI to Ultra2 SCSI host adapter
+		1000 1020  LSI8952U PCI to Ultra2 SCSI host adapter
+		1de1 3906  DC-390U2B SCSI adapter
 		1de1 3907  DC-390U2W
 	000d  53c885
 	000f  53c875
 		0e11 7004  Embedded Ultra Wide SCSI Controller
+		1000 1000  LSI53C876/E PCI to Dual Channel SCSI Controller
+		1000 1010  LSI22801 PCI to Dual Channel Ultra SCSI host adapter
+		1000 1020  LSI22802 PCI to Dual Channel Ultra SCSI host adapter
 		1092 8760  FirePort 40 Dual SCSI Controller
-		1de1 3904  DC390F Ultra Wide SCSI Controller
-	0010  53c895
+		1de1 3904  DC390F/U Ultra Wide SCSI Adapter
+		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard
+		4c53 1050  CT7 mainboard
+	0010  53C1510
 		0e11 4040  Integrated Array Controller
-		0e11 4048  Integrated Array Controller
+		0e11 4048  RAID LC2 Controller
+		1000 1000  53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Intelligent mode)
 	0012  53c895a
+		1000 1000  LSI53C895A PCI to Ultra2 SCSI Controller
 	0013  53c875a
+		1000 1000  LSI53C875A PCI to Ultra SCSI Controller
 	0020  53c1010 Ultra3 SCSI Adapter
+		1000 1000  LSI53C1010-33 PCI to Dual Channel Ultra160 SCSI Controller
 		1de1 1020  DC-390U3W
 	0021  53c1010 66MHz  Ultra3 SCSI Adapter
-	0030  53c1030
+		1000 1000  LSI53C1000/1000R/1010R/1010-66 PCI to Ultra160 SCSI Controller
+		1000 1010  Asus TR-DLS onboard 53C1010-66
+		124b 1070  PMC-USCSI3
+		4c53 1080  CT8 mainboard
+		4c53 1300  P017 mezzanine (32-bit PMC)
+		4c53 1310  P017 mezzanine (64-bit PMC)
+	0030  53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI
+		1028 0123  PowerEdge 2600
+		1028 014a  PowerEdge 1750
+		1028 016c  PowerEdge 1850 MPT Fusion SCSI/RAID (Perc 4)
+		1028 0183  PowerEdge 1800
 		1028 1010  LSI U320 SCSI Controller
-	0040  53c1035
+		124b 1170  PMC-USCSI320
+		1734 1052  Primergy RX300 S2
+	0031  53c1030ZC PCI-X Fusion-MPT Dual Ultra320 SCSI
+	0032  53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI
+		1000 1000  LSI53C1020/1030 PCI-X to Ultra320 SCSI Controller
+	0033  1030ZC_53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI
+	0040  53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI
+		1000 0033  MegaRAID SCSI 320-2XR
+		1000 0066  MegaRAID SCSI 320-2XRWS
+	0041  53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI
+	0050  SAS1064 PCI-X Fusion-MPT SAS
+	0054  SAS1068 PCI-X Fusion-MPT SAS
+	0056  SAS1064E PCI-Express Fusion-MPT SAS
+	0058  SAS1068E PCI-Express Fusion-MPT SAS
+	005a  SAS1066E PCI-Express Fusion-MPT SAS
+	005c  SAS1064A PCI-X Fusion-MPT SAS
+	005e  SAS1066 PCI-X Fusion-MPT SAS
+	0060  SAS1078 PCI-X Fusion-MPT SAS
 	008f  53c875J
 		1092 8000  FirePort 40 SCSI Controller
 		1092 8760  FirePort 40 Dual SCSI Host Adapter
-	0621  FC909
-	0622  FC929
+	0407  MegaRAID
+		1000 0530  MegaRAID 530 SCSI 320-0X RAID Controller
+		1000 0531  MegaRAID 531 SCSI 320-4X RAID Controller
+		1000 0532  MegaRAID 532 SCSI 320-2X RAID Controller
+		1028 0531  PowerEdge Expandable RAID Controller 4/QC
+		1028 0533  PowerEdge Expandable RAID Controller 4/QC
+		8086 0530  MegaRAID Intel RAID Controller SRCZCRX
+		8086 0532  MegaRAID Intel RAID Controller SRCU42X
+	0408  MegaRAID
+		1000 0001  MegaRAID SCSI 320-1E RAID Controller
+		1000 0002  MegaRAID SCSI 320-2E RAID Controller
+		1025 004d  MegaRAID ACER ROMB-2E RAID Controller
+		1028 0001  PowerEdge RAID Controller PERC4e/SC
+		1028 0002  PowerEdge RAID Controller PERC4e/DC
+		1734 1065  FSC MegaRAID PCI Express ROMB
+		8086 0002  MegaRAID Intel RAID Controller SRCU42E
+	0409  MegaRAID
+		1000 3004  MegaRAID SATA 300-4X RAID Controller
+		1000 3008  MegaRAID SATA 300-8X RAID Controller
+		8086 3008  MegaRAID RAID Controller SRCS28X
+		8086 3431  MegaRAID RAID Controller Alief SROMBU42E
+		8086 3499  MegaRAID RAID Controller Harwich SROMBU42E
+	0621  FC909 Fibre Channel Adapter
+	0622  FC929 Fibre Channel Adapter
+		1000 1020  44929 O Dual Fibre Channel card
 	0623  FC929 LAN
-	0624  FC919
+	0624  FC919 Fibre Channel Adapter
 	0625  FC919 LAN
-	0626  FC929X
+	0626  FC929X Fibre Channel Adapter
+		1000 1010  7202-XP-LC Dual Fibre Channel card
 	0627  FC929X LAN
-	0628  FC919X
+	0628  FC919X Fibre Channel Adapter
 	0629  FC919X LAN
+	0640  FC949X Fibre Channel Adapter
+	0642  FC939X Fibre Channel Adapter
+	0646  FC949ES Fibre Channel Adapter
 	0701  83C885 NT50 DigitalScape Fast Ethernet
 	0702  Yellowfin G-NIC gigabit ethernet
 		1318 0000  PEI100X
+	0804  SA2010
+	0805  SA2010ZC
+	0806  SA2020
+	0807  SA2020ZC
 	0901  61C102
 	1000  63C815
-	1960  PowerEdge Expandable RAID Controller 4
-		1028 0518  PowerEdge Expandable RAID Controller 4/DC
-		1028 0520  PowerEdge Expandable RAID Controller 4/SC
+	1960  MegaRAID
+		1000 0518  MegaRAID 518 SCSI 320-2 Controller
+		1000 0520  MegaRAID 520 SCSI 320-1 Controller
+		1000 0522  MegaRAID 522 i4 133 RAID Controller
+		1000 0523  MegaRAID SATA 150-6 RAID Controller
+		1000 4523  MegaRAID SATA 150-4 RAID Controller
+		1000 a520  MegaRAID ZCR SCSI 320-0 Controller
+		1028 0518  MegaRAID 518 DELL PERC 4/DC RAID Controller
+		1028 0520  MegaRAID 520 DELL PERC 4/SC RAID Controller
 		1028 0531  PowerEdge Expandable RAID Controller 4/QC
+		1028 0533  PowerEdge Expandable RAID Controller 4/QC
+		8086 0520  MegaRAIDRAID Controller SRCU41L
+		8086 0523  MegaRAID RAID Controller SRCS16
 1001  Kolter Electronic
 	0010  PCI 1616 Measurement card with 32 digital I/O lines
 	0011  OPTO-PCI Opto-Isolated digital I/O board
@@ -161,12 +330,97 @@
 	0017  PROTO-3 PCI Prototyping board
 	9100  INI-9100/9100W SCSI Host
 1002  ATI Technologies Inc
+	3150  M24 1P [Radeon Mobility X600]
+	3154  M24 1T [FireGL M24 GL]
+	3e50  RV380 0x3e50 [Radeon X600]
+	3e54  RV380 0x3e54 [FireGL V3200]
+	3e70  RV380 [Radeon X600] Secondary
+	4136  Radeon IGP 320 M
+	4137  Radeon IGP330/340/350
+	4144  R300 AD [Radeon 9500 Pro]
+	4145  R300 AE [Radeon 9700 Pro]
+	4146  R300 AF [Radeon 9700 Pro]
+	4147  R300 AG [FireGL Z1/X1]
+	4148  R350 AH [Radeon 9800]
+	4149  R350 AI [Radeon 9800]
+	414a  R350 AJ [Radeon 9800]
+	414b  R350 AK [Fire GL X2]
+	4150  RV350 AP [Radeon 9600]
+		1002 0002  R9600 Pro primary (Asus OEM for HP)
+		1002 0003  R9600 Pro secondary (Asus OEM for HP)
+		1458 4024  Giga-Byte GV-R96128D Primary
+		148c 2064  PowerColor R96A-C3N
+		148c 2066  PowerColor R96A-C3N
+		174b 7c19  Sapphire Atlantis Radeon 9600 Pro
+		174b 7c29  GC-R9600PRO Primary [Sapphire]
+		17ee 2002  Radeon 9600 256Mb Primary
+		18bc 0101  GC-R9600PRO Primary
+	4151  RV350 AQ [Radeon 9600]
+		1043 c004  A9600SE
+	4152  RV350 AR [Radeon 9600]
+		1002 0002  Radeon 9600XT
+		1002 4772  All-in-Wonder 9600 XT
+		1043 c002  Radeon 9600 XT TVD
+		174b 7c29  Sapphire Radeon 9600XT
+		1787 4002  Radeon 9600 XT
+	4153  RV350 AS [Radeon 9550]
+	4154  RV350 AT [Fire GL T2]
+	4155  RV350 AU [Fire GL T2]
+	4156  RV350 AV [Fire GL T2]
+	4157  RV350 AW [Fire GL T2]
 	4158  68800AX [Mach32]
-	4242  Radeon R200 BB [Radeon All in Wonder 8500DV]
+	4164  R300 AD [Radeon 9500 Pro] (Secondary)
+	4165  R300 AE [Radeon 9700 Pro] (Secondary)
+	4166  R300 AF [Radeon 9700 Pro] (Secondary)
+	4168  Radeon R350 [Radeon 9800] (Secondary)
+	4170  RV350 AP [Radeon 9600] (Secondary)
+		1458 4025  Giga-Byte GV-R96128D Secondary
+		148c 2067  PowerColor R96A-C3N (Secondary)
+		174b 7c28  GC-R9600PRO Secondary [Sapphire]
+		17ee 2003  Radeon 9600 256Mb Secondary
+		18bc 0100  GC-R9600PRO Secondary
+	4171  RV350 AQ [Radeon 9600] (Secondary)
+		1043 c005  A9600SE (Secondary)
+	4172  RV350 AR [Radeon 9600] (Secondary)
+		1002 0003  Radeon 9600XT (Secondary)
+		1002 4773  All-in-Wonder 9600 XT (Secondary)
+		1043 c003  A9600XT (Secondary)
+		174b 7c28  Sapphire Radeon 9600XT (Secondary)
+		1787 4003  Radeon 9600 XT (Secondary)
+	4173  RV350 ?? [Radeon 9550] (Secondary)
+	4237  Radeon 7000 IGP
+	4242  R200 BB [Radeon All in Wonder 8500DV]
 		1002 02aa  Radeon 8500 AIW DV Edition
+	4243  R200 BC [Radeon All in Wonder 8500]
 	4336  Radeon Mobility U1
+		103c 0024  Pavilion ze4400 builtin Video
+		161f 2029  eMachines M5312 builtin Video
+	4337  Radeon IGP 330M/340M/350M
+		1014 053a  ThinkPad R40e (2684-HVG) builtin VGA controller
+		103c 0850  Radeon IGP 345M
+	4341  IXP150 AC'97 Audio Controller
+	4345  EHCI USB Controller
+	4347  OHCI USB Controller #1
+	4348  OHCI USB Controller #2
+	4349  ATI Dual Channel Bus Master PCI IDE Controller
+	434d  IXP AC'97 Modem
+	4353  ATI SMBus
 	4354  215CT [Mach64 CT]
 	4358  210888CX [Mach64 CX]
+	4363  ATI SMBus
+	436e  ATI 436E Serial ATA Controller
+	4370  IXP SB400 AC'97 Audio Controller
+	4371  IXP SB400 PCI-PCI Bridge
+	4372  IXP SB400 SMBus Controller
+	4373  IXP SB400 USB2 Host Controller
+	4374  IXP SB400 USB Host Controller
+	4375  IXP SB400 USB Host Controller
+	4376  Standard Dual Channel PCI IDE Controller ATI
+	4377  IXP SB400 PCI-ISA Bridge
+	4378  ATI SB400 - AC'97 Modem Controller
+	4379  ATI 4379 Serial ATA Controller
+	437a  ATI 437A Serial ATA Controller
+	4437  Radeon Mobility 7000 IGP
 	4554  210888ET [Mach64 ET]
 	4654  Mach64 VT
 	4742  3D Rage Pro AGP 1X/2X
@@ -214,7 +468,14 @@
 	4752  Rage XL
 		1002 0008  Rage XL
 		1002 4752  Rage XL
+		1002 8008  Rage XL
+		1028 00ce  PowerEdge 1400
 		1028 00d1  PowerEdge 2550
+		1028 00d9  PowerEdge 2500
+		1028 0134  Poweredge SC600
+		1734 007a  Primergy RX300
+		8086 3411  SDS2 Mainboard
+		8086 3427  S875WP1-E mainboard
 	4753  Rage XC
 		1002 4753  Rage XC
 	4754  3D Rage I/II 215GT [Mach64 GT]
@@ -230,21 +491,36 @@
 	4758  210888GX [Mach64 GX]
 	4759  3D Rage IIC
 	475a  3D Rage IIC AGP
+		1002 0084  Rage 3D Pro AGP 2x XPERT 98
 		1002 0087  Rage 3D IIC
 		1002 475a  Rage IIC AGP
-	4964  Radeon R250 Id [Radeon 9000]
-	4965  Radeon R250 Ie [Radeon 9000]
-	4966  Radeon R250 If [Radeon 9000]
-		10f1 0002  R250 If [Tachyon G9000 PRO]
-		148c 2039  R250 If [Radeon 9000 Pro "Evil Commando"]
-		1509 9a00  R250 If [Radeon 9000 "AT009"]
-		174b 7176  R250 If [Sapphire Radeon 9000 Pro]
-		174b 7192  R250 If [Radeon 9000 "Atlantis"]
-		17af 2005  R250 If [Excalibur Radeon 9000 Pro]
-		17af 2006  R250 If [Excalibur Radeon 9000]
-	4967  Radeon R250 Ig [Radeon 9000]
-	496e  Radeon R250 [Radeon 9000] (Secondary)
+	4964  Radeon RV250 Id [Radeon 9000]
+	4965  Radeon RV250 Ie [Radeon 9000]
+	4966  Radeon RV250 If [Radeon 9000]
+		10f1 0002  RV250 If [Tachyon G9000 PRO]
+		148c 2039  RV250 If [Radeon 9000 Pro "Evil Commando"]
+		1509 9a00  RV250 If [Radeon 9000 "AT009"]
+# New subdevice - 3D Prophet 9000 PCI by Hercules. AGP version probably would have same ID, so not specified.
+		1681 0040  RV250 If [3D prophet 9000]
+		174b 7176  RV250 If [Sapphire Radeon 9000 Pro]
+		174b 7192  RV250 If [Radeon 9000 "Atlantis"]
+		17af 2005  RV250 If [Excalibur Radeon 9000 Pro]
+		17af 2006  RV250 If [Excalibur Radeon 9000]
+	4967  Radeon RV250 Ig [Radeon 9000]
+	496e  Radeon RV250 [Radeon 9000] (Secondary)
+	4a48  R420 JH [Radeon X800]
+	4a49  R420 JI [Radeon X800PRO]
+	4a4a  R420 JJ [Radeon X800SE]
+	4a4b  R420 JK [Radeon X800]
+	4a4c  R420 JL [Radeon X800]
+	4a4d  R420 JM [FireGL X3]
+	4a4e  M18 JN [Radeon Mobility 9800]
+	4a50  R420 JP [Radeon X800XT]
+	4a70  R420 [X800XT-PE] (Secondary)
+	4b49  R480 [Radeon X850XT]
+	4b69  R480 [Radeon X850XT secondary]
 	4c42  3D Rage LT Pro AGP-133
+		0e11 b0e7  Rage LT Pro (Compaq Presario 5240)
 		0e11 b0e8  Rage 3D LT Pro
 		0e11 b10e  3D Rage LT Pro (Compaq Armada 1750)
 		1002 0040  Rage LT Pro AGP 2X
@@ -255,6 +531,7 @@
 	4c44  3D Rage LT Pro AGP-66
 	4c45  Rage Mobility M3 AGP
 	4c46  Rage Mobility M3 AGP 2x
+		1028 00b1  Latitude C600
 	4c47  3D Rage LT-G 215LG
 	4c49  3D Rage LT Pro
 		1002 0004  Rage LT Pro
@@ -262,36 +539,72 @@
 		1002 0044  Rage LT Pro
 		1002 4c49  Rage LT Pro
 	4c4d  Rage Mobility P/M AGP 2x
+		0e11 b111  Armada M700
+		0e11 b160  Armada E500
 		1002 0084  Xpert 98 AGP 2X (Mobility)
 		1014 0154  ThinkPad A20m
+		1028 00aa  Latitude CPt
+		1028 00bb  Latitude CPx
+		10e1 10cf  Fujitsu Siemens LifeBook C Series
 	4c4e  Rage Mobility L AGP 2x
 	4c50  3D Rage LT Pro
 		1002 4c50  Rage LT Pro
 	4c51  3D Rage LT Pro
 	4c52  Rage Mobility P/M
+		1033 8112  Versa Note VXi
 	4c53  Rage Mobility L
 	4c54  264LT [Mach64 LT]
 	4c57  Radeon Mobility M7 LW [Radeon Mobility 7500]
 		1014 0517  ThinkPad T30
 		1028 00e6  Radeon Mobility M7 LW (Dell Inspiron 8100)
+		1028 012a  Latitude C640
 		144d c006  Radeon Mobility M7 LW in vpr Matrix 170B4
-	4c58  Radeon Mobility M7 LX [Radeon Mobility FireGL 7800]
+	4c58  Radeon RV200 LX [Mobility FireGL 7800 M7]
 	4c59  Radeon Mobility M6 LY
-		1014 0235  ThinkPad A30p (2653-64G)
+		1014 0235  ThinkPad A30/A30p (2652/2653)
 		1014 0239  ThinkPad X22/X23/X24
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+		1509 1930  Medion MD9703
 	4c5a  Radeon Mobility M6 LZ
-	4c64  Radeon R250 Ld [Radeon Mobility 9000]
-	4c65  Radeon R250 Le [Radeon Mobility 9000]
-	4c66  Radeon R250 Lf [Radeon Mobility 9000]
-	4c67  Radeon R250 Lg [Radeon Mobility 9000]
+	4c64  Radeon R250 Ld [Radeon Mobility 9000 M9]
+	4c65  Radeon R250 Le [Radeon Mobility 9000 M9]
+	4c66  Radeon R250 Lf [FireGL 9000]
+	4c67  Radeon R250 Lg [Radeon Mobility 9000 M9]
+# Secondary chip to the Lf
+	4c6e  Radeon R250 Ln [Radeon Mobility 9000 M9] [Secondary]
 	4d46  Rage Mobility M4 AGP
 	4d4c  Rage Mobility M4 AGP
-	4e44  Radeon R300 ND [Radeon 9700]
-	4e45  Radeon R300 NE [Radeon 9700]
-	4e46  Radeon R300 NF [Radeon 9700]
-	4e47  Radeon R300 NG [Radeon 9700]
-	4e64  Radeon R300 [Radeon 9700] (Secondary)
+	4e44  Radeon R300 ND [Radeon 9700 Pro]
+	4e45  Radeon R300 NE [Radeon 9500 Pro]
+		1002 0002  Radeon R300 NE [Radeon 9500 Pro]
+		1681 0002  Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro]
+	4e46  RV350 NF [Radeon 9600]
+	4e47  Radeon R300 NG [FireGL X1]
+	4e48  Radeon R350 [Radeon 9800 Pro]
+	4e49  Radeon R350 [Radeon 9800]
+	4e4a  RV350 NJ [Radeon 9800 XT]
+	4e4b  R350 NK [Fire GL X2]
+	4e50  RV350 [Mobility Radeon 9600 M10]
+		1025 005a  TravelMate 290
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+		1734 1055  Amilo M1420W
+	4e51  M10 NQ [Radeon Mobility 9600]
+	4e52  RV350 [Mobility Radeon 9600 M10]
+	4e53  M10 NS [Radeon Mobility 9600]
+	4e54  M10 NT [FireGL Mobility T2]
+	4e56  M11 NV [FireGL Mobility T2e]
+	4e64  Radeon R300 [Radeon 9700 Pro] (Secondary)
+	4e65  Radeon R300 [Radeon 9500 Pro] (Secondary)
+		1002 0003  Radeon R300 NE [Radeon 9500 Pro]
+		1681 0003  Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] (Secondary)
+	4e66  RV350 NF [Radeon 9600] (Secondary)
+	4e67  Radeon R300 [FireGL X1] (Secondary)
+	4e68  Radeon R350 [Radeon 9800 Pro] (Secondary)
+	4e69  Radeon R350 [Radeon 9800] (Secondary)
+	4e6a  RV350 NJ [Radeon 9800 XT] (Secondary)
+		1002 4e71  ATI Technologies Inc M10 NQ [Radeon Mobility 9600]
+	4e71  M10 NQ [Radeon Mobility 9600] (secondary)
 	5041  Rage 128 PA/PRO
 	5042  Rage 128 PB/PRO AGP 2x
 	5043  Rage 128 PC/PRO AGP 4x
@@ -328,7 +641,7 @@
 	5056  Rage 128 PV/PRO TMDS
 	5057  Rage 128 PW/PRO AGP 2x TMDS
 	5058  Rage 128 PX/PRO AGP 4x TMDS
-	5144  Radeon R100 QD [Radeon 64 DDR]
+	5144  Radeon R100 QD [Radeon 7200]
 		1002 0008  Radeon 7000/Radeon VE
 		1002 0009  Radeon 7000/Radeon
 		1002 000a  Radeon 7000/Radeon
@@ -357,34 +670,46 @@
 		1002 003a  Radeon R200 QL [Radeon 8500 LE]
 		1002 013a  Radeon 8500
 		148c 2026  R200 QL [Radeon 8500 Evil Master II Multi Display Edition]
+		1681 0010  Radeon 8500 [3D Prophet 8500 128Mb]
 		174b 7149  Radeon R200 QL [Sapphire Radeon 8500 LE]
+	514d  Radeon R200 QM [Radeon 9100]
+	514e  Radeon R200 QN [Radeon 8500LE]
+	514f  Radeon R200 QO [Radeon 8500LE]
+	5154  R200 QT [Radeon 8500]
+	5155  R200 QU [Radeon 9100]
 	5157  Radeon RV200 QW [Radeon 7500]
 		1002 013a  Radeon 7500
+		1002 103a  Dell Optiplex GX260
 		1458 4000  RV200 QW [RADEON 7500 PRO MAYA AR]
 		148c 2024  RV200 QW [Radeon 7500LE Dual Display]
 		148c 2025  RV200 QW [Radeon 7500 Evil Master Multi Display Edition]
 		148c 2036  RV200 QW [Radeon 7500 PCI Dual Display]
+		174b 7146  RV200 QW [Radeon 7500 LE]
 		174b 7147  RV200 QW [Sapphire Radeon 7500LE]
 		174b 7161  Radeon RV200 QW [Radeon 7500 LE]
 		17af 0202  RV200 QW [Excalibur Radeon 7500LE]
 	5158  Radeon RV200 QX [Radeon 7500]
-	5159  Radeon VE QY
+	5159  Radeon RV100 QY [Radeon 7000/VE]
 		1002 000a  Radeon 7000/Radeon VE
 		1002 000b  Radeon 7000
 		1002 0038  Radeon 7000/Radeon VE
 		1002 003a  Radeon 7000/Radeon VE
 		1002 00ba  Radeon 7000/Radeon VE
 		1002 013a  Radeon 7000/Radeon VE
+		1028 019a  PowerEdge SC1425
 		1458 4002  RV100 QY [RADEON 7000 PRO MAYA AV Series]
 		148c 2003  RV100 QY [Radeon 7000 Multi-Display Edition]
 		148c 2023  RV100 QY [Radeon 7000 Evil Master Multi-Display]
 		174b 7112  RV100 QY [Sapphire Radeon VE 7000]
+		174b 7c28  Sapphire Radeon VE 7000 DDR
 		1787 0202  RV100 QY [Excalibur Radeon 7000]
-	515a  Radeon VE QZ
+	515a  Radeon RV100 QZ [Radeon 7000/VE]
 	5168  Radeon R200 Qh
 	5169  Radeon R200 Qi
 	516a  Radeon R200 Qj
 	516b  Radeon R200 Qk
+# This one is not in ATI documentation, but is in XFree86 source code
+	516c  Radeon R200 Ql
 	5245  Rage 128 RE/SG
 		1002 0008  Xpert 128
 		1002 0028  Rage 128 AIW
@@ -404,6 +729,7 @@
 		1002 0088  Xpert 99
 	5345  Rage 128 SE/4x
 	5346  Rage 128 SF/4x AGP 2x
+		1002 0048  RAGE 128 16MB VGA TVOUT AMC PAL
 	5347  Rage 128 SG/4x AGP 4x
 	5348  Rage 128 SH
 	534b  Rage 128 SK/4x
@@ -430,11 +756,103 @@
 	5453  Rage 128 Pro Ultra TS
 	5454  Rage 128 Pro Ultra TT
 	5455  Rage 128 Pro Ultra TU
+	5460  M22 [Radeon Mobility M300]
+	5464  M22 [FireGL GL]
+	5548  R423 UH [Radeon X800 (PCIE)]
+	5549  R423 UI [Radeon X800PRO (PCIE)]
+	554a  R423 UJ [Radeon X800LE (PCIE)]
+	554b  R423 UK [Radeon X800SE (PCIE)]
+	554d  R430 [Radeon X800 XL] (PCIe)
+	5551  R423 UQ [FireGL V7200 (PCIE)]
+	5552  R423 UR [FireGL V5100 (PCIE)]
+	5554  R423 UT [FireGL V7100 (PCIE)]
+	556b  Radeon R423 UK (PCIE) [X800 SE] (Secondary)
+	556d  R430 [Radeon X800 XL] (PCIe) Secondary
+	5653  Radeon Mobility X700 (PCIE)
 	5654  264VT [Mach64 VT]
 		1002 5654  Mach64VT Reference
 	5655  264VT3 [Mach64 VT3]
 	5656  264VT4 [Mach64 VT4]
-	700f  U1/A3 AGP Bridge [IGP 320M]
+	5830  RS300 Host Bridge
+	5831  RS300 Host Bridge
+	5832  RS300 Host Bridge
+	5833  Radeon 9100 IGP Host Bridge
+	5834  Radeon 9100 IGP
+	5835  RS300M AGP [Radeon Mobility 9100IGP]
+	5838  Radeon 9100 IGP AGP Bridge
+	5941  RV280 [Radeon 9200] (Secondary)
+		1458 4019  Gigabyte Radeon 9200
+		174b 7c12  Sapphire Radeon 9200
+		17af 200d  Excalibur Radeon 9200
+		18bc 0050  GeXcube GC-R9200-C3 (Secondary)
+	5944  RV280 [Radeon 9200 SE (PCI)]
+	5950  RS480 Host Bridge
+	5951  ATI Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge
+	5954  RS480 [Radeon Xpress 200G Series]
+		1002 5954  RV370 [Radeon Xpress 200G Series]
+	5955  ATI Radeon XPRESS 200M 5955 (PCIE)
+		1002 5955  RS480 0x5955 [ATI Radeon XPRESS 200M 5955 (PCIE)]
+	5960  RV280 [Radeon 9200 PRO]
+	5961  RV280 [Radeon 9200]
+		1002 2f72  All-in-Wonder 9200 Series
+		1019 4c30  Radeon 9200 VIVO
+		12ab 5961  YUAN SMARTVGA Radeon 9200
+		1458 4018  Gigabyte Radeon 9200
+		174b 7c13  Sapphire Radeon 9200
+		17af 200c  Excalibur Radeon 9200
+		18bc 0050  Radeon 9200 Game Buster
+		18bc 0051  GeXcube GC-R9200-C3
+		18bc 0053  Radeon 9200 Game Buster VIVO
+	5962  RV280 [Radeon 9200]
+	5964  RV280 [Radeon 9200 SE]
+		1043 c006  ASUS Radeon 9200 SE / TD / 128M
+		1458 4018  Radeon 9200 SE
+		148c 2073  CN-AG92E
+		174b 7c13  Sapphire Radeon 9200 SE
+		1787 5964  Excalibur 9200SE VIVO 128M
+		17af 2012  Radeon 9200 SE Excalibur
+		18bc 0170  Sapphire Radeon 9200 SE 128MB Game Buster
+		18bc 0173  GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]
+	5a34  RS480 PCI-X Root Port
+	5b60  RV370 5B60 [Radeon X300 (PCIE)]
+		1043 002a  Extreme AX300SE-X
+		1043 032e  Extreme AX300/TD
+	5b62  RV370 5B62 [Radeon X600 (PCIE)]
+	5b64  RV370 5B64 [FireGL V3100 (PCIE)]
+	5b65  RV370 5B65 [FireGL D1100 (PCIE)]
+	5b70  RV370 [Radeon X300SE]
+	5b72  Radeon X600(RV380)
+	5b74  RV370 5B64 [FireGL V3100 (PCIE)] (Secondary)
+	5c61  M9+ 5C61 [Radeon Mobility 9200 (AGP)]
+	5c63  M9+ 5C63 [Radeon Mobility 9200 (AGP)]
+		1002 5c63  Apple iBook G4 2004
+	5d44  RV280 [Radeon 9200 SE] (Secondary)
+		1458 4019  Radeon 9200 SE (Secondary)
+		174b 7c12  Sapphire Radeon 9200 SE (Secondary)
+		1787 5965  Excalibur 9200SE VIVO 128M (Secondary)
+		17af 2013  Radeon 9200 SE Excalibur (Secondary)
+		18bc 0171  Radeon 9200 SE 128MB Game Buster (Secondary)
+		18bc 0172  GC-R9200L(SE)-C3H [Radeon 9200 Game Buster]
+	5d4a  Mobility Radeon X800
+	5d4d  R480 [Radeon X850XT Platinum (PCIE)]
+	5d52  R480 [Radeon X850XT (PCIE)] (Primary)
+	5d57  R423 5F57 [Radeon X800XT (PCIE)]
+	5d6d  R480 [Radeon X850XT Platinum (PCIE)] (Secondary)
+	5d72  R480 [Radeon X850XT (PCIE)] (Secondary)
+	5d77  R423 5F57 [Radeon X800XT (PCIE)] (Secondary)
+	5e4b  RV410 [Radeon X700 Pro (PCIE)]
+	5e6b  RV410 [Radeon X700 Pro (PCIE)] Secondary
+	700f  PCI Bridge [IGP 320M]
+	7010  PCI Bridge [IGP 340M]
+	7833  Radeon 9100 IGP Host Bridge
+	7834  Radeon 9100 PRO IGP
+	7835  Radeon Mobility 9200 IGP
+	7838  Radeon 9100 IGP PCI/AGP Bridge
+	7c37  RV350 AQ [Radeon 9600 SE]
+	cab0  AGP Bridge [IGP 320M]
+	cab2  RS200/RS200M AGP Bridge [IGP 340M]
+	cab3  R200 AGP Bridge [Mobility Radeon 7000 IGP]
+	cbb2  RS200/RS200M AGP Bridge [IGP 340M]
 1003  ULSI Systems
 	0201  US201
 1004  VLSI Technology Inc
@@ -488,13 +906,26 @@
 	0011  NS87560 National PCI System I/O
 	0012  USB Controller
 	0020  DP83815 (MacPhyter) Ethernet Controller
+		103c 0024  Pavilion ze4400 builtin Network
+		1385 f311  FA311 / FA312 (FA311 with WoL HW)
 	0022  DP83820 10/100/1000 Ethernet Controller
+	0028  Geode GX2 Host Bridge
+	002a  CS5535 South Bridge
+	002b  CS5535 ISA bridge
+	002d  CS5535 IDE
+	002e  CS5535 Audio
+	002f  CS5535 USB
+	0030  Geode GX2 Graphics Processor
+	0035  DP83065 [Saturn] 10/100/1000 Ethernet Controller
 	0500  SCx200 Bridge
 	0501  SCx200 SMI
 	0502  SCx200 IDE
 	0503  SCx200 Audio
 	0504  SCx200 Video
 	0505  SCx200 XBus
+	0510  SC1100 Bridge
+	0511  SC1100 SMI
+	0515  SC1100 XBus
 	d001  87410 IDE
 100c  Tseng Labs Inc
 	3202  ET4000/W32p rev A
@@ -540,6 +971,7 @@
 	0014  DECchip 21041 [Tulip Pass 3]
 		1186 0100  DE-530+
 	0016  DGLPB [OPPO]
+	0017  PV-PCI Graphics Controller (ZLXp-L)
 	0019  DECchip 21142/43
 		1011 500a  DE500A Fast Ethernet
 		1011 500b  DE500B Fast Ethernet
@@ -563,6 +995,7 @@
 		1186 1100  DFE-500TX Fast Ethernet
 		1186 1101  DFE-500TX Fast Ethernet
 		1186 1102  DFE-500TX Fast Ethernet
+		1186 1112  DFE-570TX Quad Fast Ethernet
 		1259 2800  AT-2800Tx Fast Ethernet
 		1266 0004  Eagle Fast EtherMAX
 		12af 0019  NetFlyer Cardbus Fast Ethernet
@@ -570,10 +1003,12 @@
 		1374 0002  Cardbus Ethernet Card 10/100
 		1374 0007  Cardbus Ethernet Card 10/100
 		1374 0008  Cardbus Ethernet Card 10/100
+		1385 2100  FA510
 		1395 0001  10/100 Ethernet CardBus PC Card
 		13d1 ab01  EtherFast 10/100 Cardbus (PCMPC200)
+		14cb 0100  LNDL-100N 100Base-TX Ethernet PC Card
 		8086 0001  EtherExpress PRO/100 Mobile CardBus 32
-	001a  Farallon PN9000SX
+	001a  Farallon PN9000SX Gigabit Ethernet
 	0021  DECchip 21052
 	0022  DECchip 21150
 	0023  DECchip 21150
@@ -588,8 +1023,11 @@
 		0e11 4051  Integrated Smart Array
 		0e11 4058  Integrated Smart Array
 		103c 10c2  Hewlett-Packard NetRAID-4M
-		12d9 000a  VoIP PCI Gateway
-		9005 0365  Adaptec 5400S
+		12d9 000a  IP Telephony card
+		4c53 1050  CT7 mainboard
+		4c53 1051  CE7 mainboard
+		9005 0364  5400S (Mustang)
+		9005 0365  5400S (Mustang)
 		9005 1364  Dell PowerEdge RAID Controller 2
 		9005 1365  Dell PowerEdge RAID Controller 2
 		e4bf 1000  CC8-1-BLUES
@@ -624,11 +1062,13 @@
 	1200  GD 7542 [Nordic]
 	1202  GD 7543 [Viking]
 	1204  GD 7541 [Nordic Light]
+	4000  MD 5620 [CLM Data Fax Voice]
 	4400  CD 4400
 	6001  CS 4610/11 [CrystalClear SoundFusion Audio Accelerator]
 		1014 1010  CS4610 SoundFusion Audio Accelerator
 	6003  CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]
 		1013 4280  Crystal SoundFusion PCI Audio Accelerator
+		153b 1136  SiXPack 5.1+
 		1681 0050  Game Theater XP
 		1681 a011  Fortissimo III 7.1
 	6004  CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]
@@ -653,14 +1093,20 @@
 	001b  GXT-150P
 	001c  Carrera
 	001d  82G2675
-	0020  MCA
+	0020  GXT1000 Graphics Adapter
 	0022  IBM27-82351
 	002d  Python
-	002e  ServeRAID Controller
+# [official name in AIX 5]
+	002e  SCSI RAID Adapter [ServeRAID]
 		1014 002e  ServeRAID-3x
 		1014 022e  ServeRAID-4H
+	0031  2 Port Serial Adapter
+# AS400 iSeries PCI sync serial card
+		1014 0031  2721 WAN IOA - 2 Port Sync Serial Adapter
 	0036  Miami
+	0037  82660 CPU to PCI Bridge
 	003a  CPU to PCI Bridge
+	003c  GXT250P/GXT255P Graphics Adapter
 	003e  16/4 Token ring UTP/STP controller
 		1014 003e  Token-Ring Adapter
 		1014 00cd  Token-Ring Adapter + Wake-On-LAN
@@ -678,23 +1124,32 @@
 	004f  ATM Controller (14104f00)
 	0050  ATM Controller (14105000)
 	0053  25 MBit ATM Controller
+	0054  GXT500P/GXT550P Graphics Adapter
 	0057  MPEG PCI Bridge
 	005c  i82557B 10/100
+	005e  GXT800P Graphics Adapter
 	007c  ATM Controller (14107c00)
 	007d  3780IDSP [MWave]
+	008b  EADS PCI to PCI Bridge
+	008e  GXT3000P Graphics Adapter
 	0090  GXT 3000P
 		1014 008e  GXT-3000P
+	0091  SSA Adapter
 	0095  20H2999 PCI Docking Bridge
 	0096  Chukar chipset SCSI controller
 		1014 0097  iSeries 2778 DASD IOA
 		1014 0098  iSeries 2763 DASD IOA
 		1014 0099  iSeries 2748 DASD IOA
+	009f  PCI 4758 Cryptographic Accelerator
 	00a5  ATM Controller (1410a500)
 	00a6  ATM 155MBPS MM Controller (1410a600)
 	00b7  256-bit Graphics Rasterizer [Fire GL1]
+		1092 00b8  FireGL1 AGP 32Mb
+	00b8  GXT2000P Graphics Adapter
 	00be  ATM 622MBPS Controller (1410be00)
 	00dc  Advanced Systems Management Adapter (ASMA)
 	00fc  CPC710 Dual Bridge and Memory Controller (PCI-64)
+	0104  Gigabit Ethernet-SX Adapter
 	0105  CPC710 Dual Bridge and Memory Controller (PCI-32)
 	010f  Remote Supervisor Adapter (RSA)
 	0142  Yotta Video Compositor Input
@@ -702,6 +1157,15 @@
 	0144  Yotta Video Compositor Output
 		1014 0145  Yotta Output Controller (ytout)
 	0156  405GP PLB to PCI Bridge
+	015e  622Mbps ATM PCI Adapter
+	0160  64bit/66MHz PCI ATM 155 MMF
+	016e  GXT4000P Graphics Adapter
+	0170  GXT6000P Graphics Adapter
+	017d  GXT300P Graphics Adapter
+	0180  Snipe chipset SCSI controller
+		1014 0241  iSeries 2757 DASD IOA
+		1014 0264  Quad Channel PCI-X U320 SCSI RAID Adapter (2780)
+	0188  EADS-X PCI-X to PCI-X Bridge
 	01a7  PCI-X to PCI-X Bridge
 	01bd  ServeRAID Controller
 		1014 01be  ServeRAID-4M
@@ -711,7 +1175,25 @@
 		1014 022e  ServeRAID-4H
 		1014 0258  ServeRAID-5i
 		1014 0259  ServeRAID-5i
-	0302  XA-32 chipset [Summit]
+	01c1  64bit/66MHz PCI ATM 155 UTP
+	01e6  Cryptographic Accelerator
+	01ff  10/100 Mbps Ethernet
+	0219  Multiport Serial Adapter
+		1014 021a  Dual RVX
+		1014 0251  Internal Modem/RVX
+		1014 0252  Quad Internal Modem
+	021b  GXT6500P Graphics Adapter
+	021c  GXT4500P Graphics Adapter
+	0233  GXT135P Graphics Adapter
+	0266  PCI-X Dual Channel SCSI
+	0268  Gigabit Ethernet-SX Adapter (PCI-X)
+	0269  10/100/1000 Base-TX Ethernet Adapter (PCI-X)
+	028c  Citrine chipset SCSI controller
+		1014 028d  Dual Channel PCI-X DDR SAS RAID Adapter (572E)
+		1014 02be  Dual Channel PCI-X DDR U320 SCSI RAID Adapter (571B)
+		1014 02c0  Dual Channel PCI-X DDR U320 SCSI Adapter (571A)
+	0302  Winnipeg PCI-X Host Bridge
+	0314  ZISC 036 Neural accelerator card
 	ffff  MPIC-2 interrupt controller
 1015  LSI Logic Corp of Canada
 1016  ICL Personal Systems
@@ -735,14 +1217,21 @@
 	9712  Pipeline 9712
 	c24a  90C
 101e  American Megatrends Inc.
+	0009  MegaRAID 428 Ultra RAID Controller (rev 03)
 	1960  MegaRAID
 		101e 0471  MegaRAID 471 Enterprise 1600 RAID Controller
-		101e 0475  MegaRAID 475 Express 500 RAID Controller
+		101e 0475  MegaRAID 475 Express 500/500LC RAID Controller
+		101e 0477  MegaRAID 477 Elite 3100 RAID Controller
 		101e 0493  MegaRAID 493 Elite 1600 RAID Controller
+		101e 0494  MegaRAID 494 Elite 1650 RAID Controller
+		101e 0503  MegaRAID 503 Enterprise 1650 RAID Controller
+		101e 0511  MegaRAID 511 i4 IDE RAID Controller
+		101e 0522  MegaRAID 522 i4133 RAID Controller
 		1028 0471  PowerEdge RAID Controller 3/QC
 		1028 0475  PowerEdge RAID Controller 3/SC
 		1028 0493  PowerEdge RAID Controller 3/DC
 		1028 0511  PowerEdge Cost Effective RAID Controller ATA100/4Ch
+		103c 60e7  NetRAID-1M
 	9010  MegaRAID 428 Ultra RAID Controller
 	9030  EIDE Controller
 	9031  EIDE Controller
@@ -756,12 +1245,13 @@
 1020  Hitachi Computer Products
 1021  OKI Electric Industry Co. Ltd.
 1022  Advanced Micro Devices [AMD]
-	1100  K8 NorthBridge
-	1101  K8 NorthBridge
-	1102  K8 NorthBridge
-	1103  K8 NorthBridge
+	1100  K8 [Athlon64/Opteron] HyperTransport Technology Configuration
+	1101  K8 [Athlon64/Opteron] Address Map
+	1102  K8 [Athlon64/Opteron] DRAM Controller
+	1103  K8 [Athlon64/Opteron] Miscellaneous Control
 	2000  79c970 [PCnet32 LANCE]
 		1014 2000  NetFinity 10/100 Fast Ethernet
+		1022 2000  PCnet - Fast 79C971
 		103c 104c  Ethernet with LAN remote power Adapter
 		103c 1064  Ethernet with LAN remote power Adapter
 		103c 1065  Ethernet with LAN remote power Adapter
@@ -773,14 +1263,25 @@
 		1259 2454  AT-2450v4 10Mb Ethernet Adapter
 		1259 2700  AT-2700TX 10/100 Fast Ethernet
 		1259 2701  AT-2700FX 100Mb Ethernet
+		1259 2703  AT-2701FX
+		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard
+		4c53 1010  CP5/CR6 mainboard
+		4c53 1020  VR6 mainboard
+		4c53 1030  PC5 mainboard
+		4c53 1040  CL7 mainboard
+		4c53 1060  PC7 mainboard
 	2001  79c978 [HomePNA]
 		1092 0a78  Multimedia Home Network Adapter
 		1668 0299  ActionLink Home Network Adapter
+	2003  Am 1771 MBW [Alchemy]
 	2020  53c974 [PCscsi]
 	2040  79c974
+	208f  CS5536 GeodeLink PCI South Bridge
 	3000  ELanSC520 Microcontroller
 	7006  AMD-751 [Irongate] System Controller
 	7007  AMD-751 [Irongate] AGP Bridge
+	700a  AMD-IGR4 AGP Host to PCI Bridge
+	700b  AMD-IGR4 PCI to PCI Bridge
 	700c  AMD-760 MP [IGD4-2P] System Controller
 	700d  AMD-760 MP [IGD4-2P] AGP Bridge
 	700e  AMD-760 [IGD4-1P] System Controller
@@ -807,23 +1308,36 @@
 	7448  AMD-768 [Opus] PCI
 	7449  AMD-768 [Opus] USB
 	7450  AMD-8131 PCI-X Bridge
-	7451  AMD-8131 PCI-X APIC
+	7451  AMD-8131 PCI-X IOAPIC
 	7454  AMD-8151 System Controller
 	7455  AMD-8151 AGP Bridge
+	7458  AMD-8132 PCI-X Bridge
+	7459  AMD-8132 PCI-X IOAPIC
 	7460  AMD-8111 PCI
+		161f 3017  HDAMB
 	7461  AMD-8111 USB
 	7462  AMD-8111 Ethernet
 	7464  AMD-8111 USB
+		161f 3017  HDAMB
 	7468  AMD-8111 LPC
+		161f 3017  HDAMB
 	7469  AMD-8111 IDE
+		1022 2b80  AMD-8111 IDE [Quartet]
+		161f 3017  HDAMB
 	746a  AMD-8111 SMBus 2.0
 	746b  AMD-8111 ACPI
+		161f 3017  HDAMB
 	746d  AMD-8111 AC97 Audio
+		161f 3017  HDAMB
 	746e  AMD-8111 MC97 Modem
+	756b  AMD-8111 ACPI
 1023  Trident Microsystems
 	0194  82C194
 	2000  4DWave DX
 	2001  4DWave NX
+		122d 1400  Trident PCI288-Q3DII (NX)
+	2100  CyberBlade XP4m32
+	2200  XGI Volari XP5
 	8400  CyberBlade/i7
 		1023 8400  CyberBlade i7 AGP
 	8420  CyberBlade/i7d
@@ -833,7 +1347,8 @@
 		0e11 b16e  CyberBlade i1 AGP
 		1023 8520  CyberBlade i1 AGP
 	8620  CyberBlade/i1
-		1014 0502  ThinkPad T30
+		1014 0502  ThinkPad R30/T30
+		1014 1025  Travelmate 352TE
 	8820  CyberBlade XPAi1
 	9320  TGUI 9320
 	9350  GUI Accelerator
@@ -900,6 +1415,8 @@
 	1631  M1631 Northbridge+3D Graphics [Aladdin TNT2]
 	1641  M1641 Northbridge [Aladdin-Pro IV]
 	1647  M1647 [MaGiK1] PCI North Bridge
+	1671  M1671 Northbridge [ALADDiN-P4]
+	1672  Northbridge [CyberALADDiN-P4]
 	3141  M3141
 	3143  M3143
 	3145  M3145
@@ -929,38 +1446,54 @@
 	5453  M5453 PCI AC-Link Controller Modem Device
 	7101  M7101 PCI PMU Power Management Controller
 		10b9 7101  M7101 PCI PMU Power Management Controller
-1028  Dell Computer Corporation
+1028  Dell
 	0001  PowerEdge Expandable RAID Controller 2/Si
-		1028 0001  PowerEdge Expandable RAID Controller 2/Si
-	0002  PowerEdge Expandable RAID Controller 3
-		1028 0002  PowerEdge Expandable RAID Controller 3/Di
-		1028 00d1  PowerEdge Expandable RAID Controller 3/Di
-		1028 00d9  PowerEdge Expandable RAID Controller 3/Di
+		1028 0001  PowerEdge 2400
+	0002  PowerEdge Expandable RAID Controller 3/Di
+		1028 0002  PowerEdge 4400
 	0003  PowerEdge Expandable RAID Controller 3/Si
-		1028 0003  PowerEdge Expandable RAID Controller 3/Si
-	0004  PowerEdge Expandable RAID Controller 3/Si
-		1028 00d0  PowerEdge Expandable RAID Controller 3/Si
-	0005  PowerEdge Expandable RAID Controller 3/Di
+		1028 0003  PowerEdge 2450
 	0006  PowerEdge Expandable RAID Controller 3/Di
-	0007  Remote Assistant Card 3
-	0008  PowerEdge Expandable RAID Controller 3/Di
-	000a  PowerEdge Expandable RAID Controller 3
-		1028 0106  PowerEdge Expandable RAID Controller 3/Di
-		1028 011b  PowerEdge Expandable RAID Controller 3/Di
-		1028 0121  PowerEdge Expandable RAID Controller 3/Di
-	000c  Embedded Systems Management Device 4
-	000e  PowerEdge Expandable RAID Controller
-	000f  PowerEdge Expandable RAID Controller 4/Di
+	0007  Remote Access Card III
+	0008  Remote Access Card III
+	0009  Remote Access Card III: BMC/SMIC device not present
+	000a  PowerEdge Expandable RAID Controller 3/Di
+	000c  Embedded Remote Access or ERA/O
+	000d  Embedded Remote Access: BMC/SMIC device
+	000e  PowerEdge Expandable RAID controller 4/Di
+	000f  PowerEdge Expandable RAID controller 4/Di
+	0010  Remote Access Card 4
+	0011  Remote Access Card 4 Daughter Card
+	0012  Remote Access Card 4 Daughter Card Virtual UART
+	0013  PowerEdge Expandable RAID controller 4
+		1028 016c  PowerEdge Expandable RAID Controller 4e/Si
+		1028 016d  PowerEdge Expandable RAID Controller 4e/Di
+		1028 016e  PowerEdge Expandable RAID Controller 4e/Di
+		1028 016f  PowerEdge Expandable RAID Controller 4e/Di
+		1028 0170  PowerEdge Expandable RAID Controller 4e/Di
+	0014  Remote Access Card 4 Daughter Card SMIC interface
+	0015  PowerEdge Expandable RAID controller 5
 1029  Siemens Nixdorf IS
 102a  LSI Logic
 	0000  HYDRA
 	0010  ASPEN
+	001f  AHA-2940U2/U2W /7890/7891 SCSI Controllers
+		9005 000f  2940U2W SCSI Controller
+		9005 0106  2940U2W SCSI Controller
+		9005 a180  2940U2W SCSI Controller
+	00c5  AIC-7899 U160/m SCSI Controller
+		1028 00c5  PowerEdge 2550/2650/4600
+	00cf  AIC-7899P U160/m
+		1028 0106  PowerEdge 4600
+		1028 0121  PowerEdge 2650
 102b  Matrox Graphics, Inc.
 # DJ: I've a suspicion that 0010 is a duplicate of 0d10.
 	0010  MGA-I [Impression?]
+	0100  MGA 1064SG [Mystique]
 	0518  MGA-II [Athena]
 	0519  MGA 2064W [Millennium]
 	051a  MGA 1064SG [Mystique]
+		102b 0100  MGA-1064SG Mystique
 		102b 1100  MGA-1084SG Mystique
 		102b 1200  MGA-1084SG Mystique
 		1100 102b  MGA-1084SG Mystique
@@ -1014,7 +1547,7 @@
 		102b ff03  Millennium G200 AGP
 		102b ff04  Marvel G200 AGP
 		110a 0032  MGA-G200 AGP
-	0525  MGA G400 AGP
+	0525  G400/G450
 		0e11 b16f  MGA-G400 AGP
 		102b 0328  Millennium G400 16Mb SDRAM
 		102b 0338  Millennium G400 16Mb SDRAM
@@ -1029,6 +1562,7 @@
 		102b 07c1  Millennium G450 SDR Dual Head LE
 		102b 0d41  Millennium G450 Dual Head PCI
 		102b 0d42  Millennium G450 Dual Head LX PCI
+		102b 0d43  Millennium G450 32Mb Dual Head PCI
 		102b 0e00  Marvel G450 eTV
 		102b 0e01  Marvel G450 eTV
 		102b 0e02  Marvel G450 eTV
@@ -1061,6 +1595,12 @@
 		1705 0004  Millennium G450 16MB
 	0527  MGA Parhelia AGP
 		102b 0840  Parhelia 128Mb
+		102b 0850  Parhelia 256MB AGP 4X
+	0528  Parhelia 8X
+		102b 1020  Parhelia 128MB
+		102b 1030  Parhelia 256 MB Dual DVI
+		102b 14e1  Parhelia PCI 256MB
+		102b 2021  QID Pro
 	0d10  MGA Ultima/Impression
 	1000  MGA G100 [Productiva]
 		102b ff01  Productiva G100
@@ -1078,12 +1618,30 @@
 		102b 0f83  Millennium G550
 		102b 0f84  Millennium G550 Dual Head DDR 32Mb
 		102b 1e41  Millennium G550
+	2537  Millenium P650/P750
+		102b 1820  Millennium P750 64MB
+		102b 1830  Millennium P650 64MB
+		102b 1c10  QID 128MB
+		102b 2811  Millennium P650 Low-profile PCI 64MB
+		102b 2c11  QID Low-profile PCI
+	2538  Millenium P650 PCIe
+		102b 08c7  Millennium P650 PCIe 128MB
+		102b 0907  Millennium P650 PCIe 64MB
+		102b 1047  Millennium P650 LP PCIe 128MB
+		102b 1087  Millennium P650 LP PCIe 64MB
+		102b 3007  QID Low-profile PCIe
 	4536  VIA Framegrabber
 	6573  Shark 10/100 Multiport SwitchNIC
 102c  Chips and Technologies
 	00b8  F64310
 	00c0  F69000 HiQVideo
 		102c 00c0  F69000 HiQVideo
+		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard
+		4c53 1010  CP5/CR6 mainboard
+		4c53 1020  VR6 mainboard
+		4c53 1030  PC5 mainboard
+		4c53 1050  CT7 mainboard
+		4c53 1051  CE7 mainboard
 	00d0  F65545
 	00d8  F65545
 	00dc  F65548
@@ -1091,17 +1649,32 @@
 	00e4  F65554
 	00e5  F65555 HiQVPro
 		0e11 b049  Armada 1700 Laptop Display Controller
+		1179 0001  Satellite Pro
 	00f0  F68554
 	00f4  F68554 HiQVision
 	00f5  F68555
 	0c30  F69030
+		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard
+		4c53 1050  CT7 mainboard
+		4c53 1051  CE7 mainboard
+		4c53 1080  CT8 mainboard
 102d  Wyse Technology Inc.
 	50dc  3328 Audio
 102e  Olivetti Advanced Technology
 102f  Toshiba America
 	0009  r4x00
+	000a  TX3927 MIPS RISC PCI Controller
 	0020  ATM Meteor 155
 		102f 00f8  ATM Meteor 155
+	0030  TC35815CF PCI 10/100 Mbit Ethernet Controller
+	0031  TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL
+	0105  TC86C001 [goku-s] IDE
+	0106  TC86C001 [goku-s] USB 1.1 Host
+	0107  TC86C001 [goku-s] USB Device Controller
+	0108  TC86C001 [goku-s] I2C/SIO/GPIO Controller
+	0180  TX4927/38 MIPS RISC PCI Controller
+	0181  TX4925 MIPS RISC PCI Controller
+	0182  TX4937 MIPS RISC PCI Controller
 1030  TMC Research
 1031  Miro Computer Products AG
 	5601  DC20 ASIC
@@ -1110,6 +1683,7 @@
 	6057  MiroVideo DC10/DC30+
 1032  Compaq
 1033  NEC Corporation
+	0000  Vr4181A USB Host or Function Control Unit
 	0001  PCI to 486-like bus Bridge
 	0002  PCI to VL98 Bridge
 	0003  ATM Controller
@@ -1129,7 +1703,11 @@
 	0035  USB
 		1179 0001  USB
 		12ee 7000  Root Hub
+		14c2 0105  PTI-205N USB 2.0 Host Controller
 		1799 0001  Root Hub
+		1931 000a  GlobeTrotter Fusion Quad Lite (PPP data)
+		1931 000b  GlobeTrotter Fusion Quad Lite (GSM data)
+		807d 0035  PCI-USB2 (OHCI subsystem)
 	003b  PCI to C-bus Bridge
 	003e  NAPCCARD Cardbus Controller
 	0046  PowerVR PCX2 [midas]
@@ -1144,15 +1722,25 @@
 		1010 00a0  PowerVR Neon 250 AGP 32Mb
 		1010 00a8  PowerVR Neon 250 32Mb
 		1010 0120  PowerVR Neon 250 AGP 32Mb
+	0072  uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr
 	0074  56k Voice Modem
 		1033 8014  RCV56ACF 56k Voice Modem
 	009b  Vrc5476
+	00a5  VRC4173
 	00a6  VRC5477 AC97
 	00cd  IEEE 1394 [OrangeLink] Host Controller
 		12ee 8011  Root hub
+	00ce  IEEE 1394 Host Controller
+	00df  Vr4131
 	00e0  USB 2.0
 		12ee 7001  Root hub
+		14c2 0205  PTI-205N USB 2.0 Host Controller
 		1799 0002  Root Hub
+		807d 1043  PCI-USB2 (EHCI subsystem)
+	00e7  IEEE 1394 Host Controller
+	00f2  uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr
+	00f3  uPD6113x Multimedia Decoder/Processor [EMMA2]
+	010c  VR7701
 1034  Framatome Connectors USA Inc.
 1035  Comp. & Comm. Research Lab
 1036  Future Domain Corp.
@@ -1160,22 +1748,35 @@
 1037  Hitachi Micro Systems
 1038  AMP, Inc
 1039  Silicon Integrated Systems [SiS]
-	0001  5591/5592 AGP
+	0001  Virtual PCI-to-PCI bridge (AGP)
 	0002  SG86C202
+	0003  SiS AGP Port (virtual PCI-to-PCI bridge)
+	0004  PCI-to-PCI bridge
 	0006  85C501/2/3
-	0008  85C503/5513
+	0008  SiS85C503/5513 (LPC Bridge)
 	0009  ACPI
+	000a  PCI-to-PCI bridge
+	0016  SiS961/2 SMBus Controller
 	0018  SiS85C503/5513 (LPC Bridge)
+	0180  RAID bus controller 180 SATA/PATA  [SiS]
+	0181  SATA
+	0182  182 SATA/RAID Controller
+	0191  191 Gigabit Ethernet Adapter
 	0200  5597/5598/6326 VGA
 		1039 0000  SiS5597 SVGA (Shared RAM)
 	0204  82C204
 	0205  SG86C205
-	0300  300/200
+	0300  300/305 PCI/AGP VGA Display Adapter
 		107d 2720  Leadtek WinFast VR300
+	0310  315H PCI/AGP VGA Display Adapter
+	0315  315 PCI/AGP VGA Display Adapter
+	0325  315PRO PCI/AGP VGA Display Adapter
+	0330  330 [Xabre] PCI/AGP VGA Display Adapter
 	0406  85C501/2
 	0496  85C496
 	0530  530 Host
 	0540  540 Host
+	0550  550 Host
 	0597  5513C
 	0601  85C601
 	0620  620 Host
@@ -1184,25 +1785,41 @@
 	0635  635 Host
 	0645  SiS645 Host & Memory & AGP Controller
 	0646  SiS645DX Host & Memory & AGP Controller
-	0650  650 Host
-	0651  SiS651 Host
+	0648  645xx
+	0650  650/M650 Host
+	0651  651 Host
+	0655  655 Host
+	0660  660 Host
+	0661  661FX/M661FX/M661MX Host
 	0730  730 Host
 	0733  733 Host
 	0735  735 Host
 	0740  740 Host
+	0741  741/741GX/M741 Host
 	0745  745 Host
-	0900  SiS900 10/100 Ethernet
+	0746  746 Host
+	0755  755 Host
+	0760  760/M760 Host
+	0761  761/M761 Host
+	0900  SiS900 PCI Fast Ethernet
+		1019 0a14  K7S5A motherboard
 		1039 0900  SiS900 10/100 Ethernet Adapter
+		1043 8035  CUSI-FX motherboard
 	0961  SiS961 [MuTIOL Media IO]
 	0962  SiS962 [MuTIOL Media IO]
+	0963  SiS963 [MuTIOL Media IO]
+	0964  SiS964 [MuTIOL Media IO]
+	0965  SiS965 [MuTIOL Media IO]
 	3602  83C602
 	5107  5107
 	5300  SiS540 PCI Display Adapter
+	5315  550 PCI/AGP VGA Display Adapter
 	5401  486 PCI Chipset
 	5511  5511/5512
 	5513  5513 [IDE]
 		1019 0970  P6STP-FL motherboard
 		1039 5513  SiS5513 EIDE Controller (A,B step)
+		1043 8035  CUSI-FX motherboard
 	5517  5517
 	5571  5571
 	5581  5581 Pentium Chipset
@@ -1214,10 +1831,12 @@
 	6204  Video decoder & MPEG interface
 	6205  VGA Controller
 	6236  6236 3D-AGP
-	6300  SiS630 GUI Accelerator+3D
+	6300  630/730 PCI/AGP VGA Display Adapter
 		1019 0970  P6STP-FL motherboard
-	6306  SiS530 3D PCI/AGP
+		1043 8035  CUSI-FX motherboard
+	6306  530/620 PCI/AGP VGA Display Adapter
 		1039 6306  SiS530,620 GUI Accelerator+3D
+	6325  65x/M650/740 PCI/AGP VGA Display Adapter
 	6326  86C326 5598/6326
 		1039 6326  SiS6326 GUI Accelerator
 		1092 0a50  SpeedStar A50
@@ -1225,14 +1844,18 @@
 		1092 4910  SpeedStar A70
 		1092 4920  SpeedStar A70
 		1569 6326  SiS6326 GUI Accelerator
-	7001  7001
+	6330  661/741/760/761 PCI/AGP VGA Display Adapter
+		1039 6330  [M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter
+	7001  USB 1.0 Controller
+		1019 0a14  K7S5A motherboard
 		1039 7000  Onboard USB Controller
-	7002  SiS7002 USB 2.0
+	7002  USB 2.0 Controller
 		1509 7002  Onboard USB Controller
 	7007  FireWire Controller
-	7012  SiS7012 PCI Audio Accelerator
-	7013  Intel 537 [56k Winmodem]
-	7016  SiS7016 10/100 Ethernet Adapter
+	7012  Sound Controller
+# There are may be different modem codecs here (Intel537 compatible and incompatible)
+	7013  AC'97 Modem Controller
+	7016  SiS7016 PCI Fast Ethernet Adapter
 		1039 7016  SiS7016 10/100 Ethernet Adapter
 	7018  SiS PCI Audio Accelerator
 		1014 01b6  SiS PCI Audio Accelerator
@@ -1257,6 +1880,7 @@
 		15c5 0111  SiS PCI Audio Accelerator
 		270f a171  SiS PCI Audio Accelerator
 		a0a0 0022  SiS PCI Audio Accelerator
+	7019  SiS7019 Audio Accelerator
 103a  Seiko Epson Corporation
 103b  Tatung Co. of America
 103c  Hewlett-Packard Company
@@ -1285,14 +1909,18 @@
 		103c 1049  Tosca Console
 		103c 104a  Tosca Secondary
 		103c 104b  Maestro SP2
-		103c 1223  Halfdome Console
+		103c 1223  Superdome Console
 		103c 1226  Keystone SP2
 		103c 1227  Powerbar SP2
 		103c 1282  Everest SP2
+		103c 1301  Diva RMP3
+	1054  PCI Local Bus Adapter
 	1064  79C970 PCnet Ethernet Controller
 	108b  Visualize FXe
 	10c1  NetServer Smart IRQ Router
 	10ed  TopTools Remote Control
+	10f0  rio System Bus Adapter
+	10f1  rio I/O Controller
 	1200  82557B 10/100 NIC
 	1219  NetServer PCI Hot-Plug Controller
 	121a  NetServer SMIC Controller
@@ -1301,22 +1929,39 @@
 	1229  zx1 System Bus Adapter
 	122a  zx1 I/O Controller
 	122e  zx1 Local Bus Adapter
+	127c  sx1000 I/O Controller
 	1290  Auxiliary Diva Serial Port
+	12b4  zx1 QuickSilver AGP8x Local Bus Adapter
+	12fa  BCM4306 802.11b/g Wireless LAN Controller
 	2910  E2910A PCIBus Exerciser
 	2925  E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer
+	3080  Pavilion ze2028ea
+	3220  Hewlett-Packard Smart Array P600
+	3230  Hewlett-Packard Smart Array Controller
 103e  Solliday Engineering
 103f  Synopsys/Logic Modeling Group
 1040  Accelgraphics Inc.
 1041  Computrend
 1042  Micron
-	1000  FDC 37C665
-	1001  37C922
+	1000  PC Tech RZ1000
+	1001  PC Tech RZ1001
 	3000  Samurai_0
 	3010  Samurai_1
 	3020  Samurai_IDE
-1043  Asustek Computer, Inc.
+1043  ASUSTeK Computer Inc.
 	0675  ISDNLink P-IN100-ST-D
-1044  Distributed Processing Technology
+		0675 1704  ISDN Adapter (PCI Bus, D, C)
+		0675 1707  ISDN Adapter (PCI Bus, DV, W)
+		10cf 105e  ISDN Adapter (PCI Bus, DV, W)
+	4015  v7100 SDRAM [GeForce2 MX]
+	4021  v7100 Combo Deluxe [GeForce2 MX + TV tuner]
+	4057  v8200 GeForce 3
+	8043  v8240 PAL 128M [P4T] Motherboard
+	807b  v9280/TD [Geforce4 TI4200 8X With TV-Out and DVI]
+	80bb  v9180 Magic/T [GeForce4 MX440 AGP 8x 64MB TV-out]
+	80c5  nForce3 chipset motherboard [SK8N]
+	80df  v9520 Magic/T
+1044  Adaptec (formerly DPT)
 	1012  Domino RAID Engine
 	a400  SmartCache/Raid I-IV Controller
 	a500  PCI Bridge
@@ -1354,9 +1999,10 @@
 		1044 c05a  2400A UDMA Four Channel
 		1044 c05b  2400A UDMA Four Channel DAC
 		1044 c064  3010S Ultra3 Dual Channel
-		1044 c065  3010S Ultra3 Four Channel
+		1044 c065  3410S Ultra160 Four Channel
 		1044 c066  3010S Fibre Channel
 	a511  SmartRAID V Controller
+		1044 c032  ASR-2005S I2O Zero Channel
 1045  OPTi Inc.
 	a0f8  82C750 [Vendetta] USB Controller
 	c101  92C264
@@ -1377,24 +2023,36 @@
 	c832  82C832
 	c861  82C861
 	c895  82C895
-	c935  EV1935 ECTIVA MachOne PCI Audio
+	c935  EV1935 ECTIVA MachOne PCIAudio
 	d568  82C825 [Firebridge 2]
 	d721  IDE [FireStar]
 1046  IPC Corporation, Ltd.
 1047  Genoa Systems Corp
 1048  Elsa AG
+	0c60  Gladiac MX
 	0d22  Quadro4 900XGL [ELSA GLoria4 900XGL]
 	1000  QuickStep 1000
 	3000  QuickStep 3000
+	8901  Gloria XL
+		1048 0935  GLoria XL (Virge)
 1049  Fountain Technologies, Inc.
-104a  SGS Thomson Microelectronics
+# # nee SGS Thomson Microelectronics
+104a  STMicroelectronics
 	0008  STG 2000X
 	0009  STG 1764X
 	0010  STG4000 [3D Prophet Kyro Series]
-	0981  DEC-Tulip compatible 10/100 Ethernet
+	0209  STPC Consumer/Industrial North- and Southbridge
+	020a  STPC Atlas/ConsumerS/Consumer IIA Northbridge
+	0210  STPC Atlas ISA Bridge
+	021a  STPC Consumer S Southbridge
+	021b  STPC Consumer IIA Southbridge
+	0500  ST70137 [Unicorn] ADSL DMT Transceiver
+	0564  STPC Client Northbridge
+	0981  21x4x DEC-Tulip compatible 10/100 Ethernet
 	1746  STG 1764X
-	2774  DEC-Tulip compatible 10/100 Ethernet
+	2774  21x4x DEC-Tulip compatible 10/100 Ethernet
 	3520  MPEG-II decoder card
+	55cc  STPC Client Southbridge
 104b  BusLogic
 	0140  BT-946C (old) [multimaster  01]
 	1040  BT-946C (BA80C30) [MultiMaster 10]
@@ -1403,6 +2061,7 @@
 	0500  100 MBit LAN Controller
 	0508  TMS380C2X Compressor Interface
 	1000  Eagle i/f AS
+	104c  PCI1510 PC card Cardbus Controller
 	3d04  TVP4010 [Permedia]
 	3d07  TVP4020 [Permedia 2]
 		1011 4d10  Comet
@@ -1410,7 +2069,11 @@
 		1040 0011  AccelStar II
 		1048 0a31  WINNER 2000
 		1048 0a32  GLoria Synergy
+		1048 0a34  GLoria Synergy
 		1048 0a35  GLoria Synergy
+		1048 0a36  GLoria Synergy
+		1048 0a43  GLoria Synergy
+		1048 0a44  GLoria Synergy
 		107d 2633  WinFast 3D L2300
 		1092 0127  FIRE GL 1000 PRO
 		1092 0136  FIRE GL 1000 PRO
@@ -1437,32 +2100,76 @@
 		11bd 000e  Studio DV
 		e4bf 1010  CF2-1-CYMBAL
 	8020  TSB12LV26 IEEE-1394 Controller (Link)
+		11bd 000f  Studio DV500-1394
 	8021  TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated)
 		104d 80df  Vaio PCG-FX403
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 	8022  TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link)
 	8023  TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
+		103c 088c  nc8000 laptop
+		1043 808b  K8N4-E Mainboard
 	8024  TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
+	8025  TSB82AA2 IEEE-1394b Link Layer Controller
 	8026  TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)
+		1043 808d  A7V333 mainboard.
 	8027  PCI4451 IEEE-1394 Controller
 		1028 00e6  PCI4451 IEEE-1394 Controller (Dell Inspiron 8100)
-	8400  USR2210 22Mbps Wireless PC Card
+	8029  PCI4510 IEEE-1394 Controller
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		1071 8160  MIM2900
+	802b  PCI7410,7510,7610 OHCI-Lynx Controller
+		1028 0139  Latitude D400
+		1028 014e  PCI7410,7510,7610 OHCI-Lynx Controller (Dell Latitude D800)
+	802e  PCI7x20 1394a-2000 OHCI Two-Port PHY/Link-Layer Controller
+	8031  PCIxx21/x515 Cardbus Controller
+		103c 099c  nx6110
+	8032  OHCI Compliant IEEE 1394 Host Controller
+		103c 099c  nx6110
+	8033  PCIxx21 Integrated FlashMedia Controller
+	8034  PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller
+	8035  PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Smart Card Controller (SMC)
+	8036  PCI6515 Cardbus Controller
+	8038  PCI6515 SmartCard Controller
+	8201  PCI1620 Firmware Loading Function
+	8204  PCI7410,7510,7610 PCI Firmware Loading Function
+		1028 0139  Latitude D400
+		1028 014e  Latitude D800
+	8400  ACX 100 22Mbps Wireless Interface
+		1186 3b00  DWL-650+ PC Card cardbus 22Mbs Wireless Adapter [AirPlus]
+		1186 3b01  DWL-520+ 22Mbps PCI Wireless Adapter
+	8401  ACX 100 22Mbps Wireless Interface
+# OK, this info is almost useless as is, but at least it's known that it's a wireless card. More info requested from reporter.
+	9000  Wireless Interface (of unknown type)
+	9066  ACX 111 54Mbps Wireless Interface
+		104c 9066  Netgear WG311v2 802.11b/g 54Mbps Wifi PCI card
+		1186 3b04  DWL-G520+ Wireless PCI Adapter
+		1186 3b05  DWL-G650+ AirPlusG+ CardBus Wireless LAN
+		13d1 aba0  SWLMP-54108 108Mbps Wireless mini PCI card 802.11g+
 	a001  TDC1570
 	a100  TDC1561
 	a102  TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f
-	a106  TMS320C6205
+	a106  TMS320C6414 TMS320C6415 TMS320C6416
+		175c 5000  ASI50xx Audio Adapter
+		175c 6400  ASI6400 Cobranet series
+		175c 8700  ASI87xx Radio Tuner card
 	ac10  PCI1050
 	ac11  PCI1053
 	ac12  PCI1130
 	ac13  PCI1031
 	ac15  PCI1131
 	ac16  PCI1250
+		1014 0092  ThinkPad 600
 	ac17  PCI1220
 	ac18  PCI1260
 	ac19  PCI1221
 	ac1a  PCI1210
 	ac1b  PCI1450
+		0e11 b113  Armada M700
+		1014 0130  Thinkpad T20
 	ac1c  PCI1225
+		0e11 b121  Armada E500
+		1028 0088  Latitude CPi A400XT
 	ac1d  PCI1251A
 	ac1e  PCI1211
 	ac1f  PCI1251B
@@ -1476,19 +2183,45 @@
 	ac41  PCI4410 PC card Cardbus Controller
 	ac42  PCI4451 PC card Cardbus Controller
 		1028 00e6  PCI4451 PC card CardBus Controller (Dell Inspiron 8100)
+	ac44  PCI4510 PC card Cardbus Controller
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		1071 8160  MIM2000
+	ac46  PCI4520 PC card Cardbus Controller
+	ac47  PCI7510 PC card Cardbus Controller
+		1028 0139  Latitude D400
+		1028 014e  Latitude D800
+	ac4a  PCI7510,7610 PC card Cardbus Controller
+		1028 0139  Latitude D400
+		1028 014e  Latitude D800
 	ac50  PCI1410 PC card Cardbus Controller
 	ac51  PCI1420
 		1014 023b  ThinkPad T23 (2647-4MG)
+		1028 00b1  Latitude C600
+		1028 012a  Latitude C640
+		1033 80cd  Versa Note VXi
+		1095 10cf  Fujitsu-Siemens LifeBook C Series
 		10cf 1095  Lifebook C6155
 		e4bf 1000  CP2-2-HIPHOP
 	ac52  PCI1451 PC card Cardbus Controller
 	ac53  PCI1421 PC card Cardbus Controller
-	ac55  PCI1250 PC card Cardbus Controller
-		1014 0512  ThinkPad T30
+	ac54  PCI1620 PC Card Controller
+	ac55  PCI1520 PC card Cardbus Controller
+		1014 0512  ThinkPad T30/T40
+	ac56  PCI1510 PC card Cardbus Controller
+		1014 0528  ThinkPad R40e (2684-HVG) Cardbus Controller
 	ac60  PCI2040 PCI to DSP Bridge Controller
+		175c 5100  ASI51xx Audio Adapter
+		175c 6100  ASI61xx Audio Adapter
+		175c 6200  ASI62xx Audio Adapter
+		175c 8800  ASI88xx Audio Adapter
+	ac8d  PCI 7620
+	ac8e  PCI7420 CardBus Controller
+	ac8f  PCI7420/PCI7620 Dual Socket CardBus and Smart Card Cont. w/ 1394a-2000 OHCI Two-Port  PHY/Link-Layer Cont. and SD/MS-Pro Sockets
 	fe00  FireWire Host Controller
 	fe03  12C01A FireWire Host Controller
 104d  Sony Corporation
+	8004  DTL-H2500 [Playstation development board]
 	8009  CXD1947Q i.LINK Controller
 	8039  CXD3222 i.LINK Controller
 	8056  Rockwell HCF 56K modem
@@ -1511,6 +2244,14 @@
 	0940  W89C940
 	5a5a  W89C940F
 	6692  W6692
+		1043 1702  ISDN Adapter (PCI Bus, D, W)
+		1043 1703  ISDN Adapter (PCI Bus, DV, W)
+		1043 1707  ISDN Adapter (PCI Bus, DV, W)
+		144f 1702  ISDN Adapter (PCI Bus, D, W)
+		144f 1703  ISDN Adapter (PCI Bus, DV, W)
+		144f 1707  ISDN Adapter (PCI Bus, DV, W)
+	9921  W99200F MPEG-1 Video Encoder
+	9922  W99200F/W9922PF MPEG-1/2 Video Encoder
 	9970  W9970CF
 1051  Anigma, Inc.
 1052  ?Young Micro Systems
@@ -1529,11 +2270,50 @@
 	0003  MPC8240 [Kahlua]
 	0004  MPC107
 	0006  MPC8245 [Unity]
+	0008  MPC8540
+	0009  MPC8560
 	0100  MC145575 [HFC-PCI]
 	0431  KTI829c 100VG
-	1801  Audio I/O Controller (MIDI)
-		ecc0 0030  Layla
-	18c0  MPC8265A/MPC8266
+	1801  DSP56301 Digital Signal Processor
+		14fb 0101  Transas Radar Imitator Board [RIM]
+		14fb 0102  Transas Radar Imitator Board [RIM-2]
+		14fb 0202  Transas Radar Integrator Board [RIB-2]
+		14fb 0611  1 channel CAN bus Controller [CanPci-1]
+		14fb 0612  2 channels CAN bus Controller [CanPci-2]
+		14fb 0613  3 channels CAN bus Controller [CanPci-3]
+		14fb 0614  4 channels CAN bus Controller [CanPci-4]
+		14fb 0621  1 channel CAN bus Controller [CanPci2-1]
+		14fb 0622  2 channels CAN bus Controller [CanPci2-2]
+		14fb 0810  Transas VTS Radar Integrator Board [RIB-4]
+		175c 4200  ASI4215 Audio Adapter
+		175c 4300  ASI43xx Audio Adapter
+		175c 4400  ASI4401 Audio Adapter
+		ecc0 0010  Darla
+		ecc0 0020  Gina
+		ecc0 0030  Layla rev.0
+		ecc0 0031  Layla rev.1
+		ecc0 0040  Darla24 rev.0
+		ecc0 0041  Darla24 rev.1
+		ecc0 0050  Gina24 rev.0
+		ecc0 0051  Gina24 rev.1
+		ecc0 0070  Mona rev.0
+		ecc0 0071  Mona rev.1
+		ecc0 0072  Mona rev.2
+	18c0  MPC8265A/8266/8272
+	18c1  MPC8271/MPC8272
+	3410  DSP56361 Digital Signal Processor
+		ecc0 0050  Gina24 rev.0
+		ecc0 0051  Gina24 rev.1
+		ecc0 0060  Layla24
+		ecc0 0070  Mona rev.0
+		ecc0 0071  Mona rev.1
+		ecc0 0072  Mona rev.2
+		ecc0 0080  Mia rev.0
+		ecc0 0081  Mia rev.1
+		ecc0 0090  Indigo
+		ecc0 00a0  Indigo IO
+		ecc0 00b0  Indigo DJ
+		ecc0 0100  3G
 	4801  Raven
 	4802  Falcon
 	4803  Hawk
@@ -1557,36 +2337,66 @@
 		14c8 0302  SM56 PCI Fax Modem
 		1668 0300  SM56 PCI Speakerphone Modem
 		1668 0302  SM56 PCI Fax Modem
+	5803  MPC5200
+	5808  MPC8220
 	6400  MPC190 Security Processor (S1 family, encryption)
+	6405  MPC184 Security Processor (S1 family)
 1058  Electronics & Telecommunications RSH
 1059  Teknor Industrial Computers Inc
 105a  Promise Technology, Inc.
-	0d30  20265
+	0d30  PDC20265 (FastTrak100 Lite/Ultra100)
 		105a 4d33  Ultra100
 	0d38  20263
 		105a 4d39  Fasttrak66
 	1275  20275
-	3376  PDC20376
-	4d30  20267
+	3318  PDC20318 (SATA150 TX4)
+	3319  PDC20319 (FastTrak S150 TX4)
+		8086 3427  S875WP1-E mainboard
+	3371  PDC20371 (FastTrak S150 TX2plus)
+	3373  PDC20378 (FastTrak 378/SATA 378)
+		1043 80f5  K8V Deluxe/PC-DL Deluxe motherboard
+		1462 702e  K8T NEO FIS2R motherboard
+	3375  PDC20375 (SATA150 TX2plus)
+	3376  PDC20376 (FastTrak 376)
+		1043 809e  A7V8X motherboard
+	3515  PDC40719
+	3519  PDC40519 (FastTrak TX4200)
+	3571  PDC20571 (FastTrak TX2200)
+	3574  PDC20579 SATAII 150 IDE Controller
+	3577  PDC40779 (SATA 300 779)
+	3d17  PDC20718 (SATA 300 TX4)
+	3d18  PDC20518/PDC40518 (SATAII 150 TX4)
+	3d73  PDC40775 (SATA 300 TX2plus)
+	3d75  PDC20575 (SATAII150 TX2plus)
+	4d30  PDC20267 (FastTrak100/Ultra100)
 		105a 4d33  Ultra100
-		105a 4d39  Fasttrak100
+		105a 4d39  FastTrak100
 	4d33  20246
 		105a 4d33  20246 IDE Controller
-	4d38  20262
+	4d38  PDC20262 (FastTrak66/Ultra66)
 		105a 4d30  Ultra Device on SuperTrak
 		105a 4d33  Ultra66
-		105a 4d39  Fasttrak66
-	4d68  20268
+		105a 4d39  FastTrak66
+	4d68  PDC20268 (Ultra100 TX2)
 		105a 4d68  Ultra100TX2
 	4d69  20269
-	5275  PDC20276 IDE
+		105a 4d68  Ultra133TX2
+	5275  PDC20276 (MBFastTrak133 Lite)
+		1043 807e  A7V333 motherboard.
 		105a 0275  SuperTrak SX6000 IDE
+		105a 1275  MBFastTrak133 Lite (tm) Controller (RAID mode)
+		1458 b001  MBUltra 133
 	5300  DC5300
-	6268  20268R
-	6269  PDC20271
+	6268  PDC20270 (FastTrak100 LP/TX2/TX4)
+		105a 4d68  FastTrak100 TX2
+	6269  PDC20271 (FastTrak TX2000)
 		105a 6269  FastTrak TX2/TX2000
-	6621  PDC20621 [SX4000] 4 Channel IDE RAID Controller
-	7275  PDC20277
+	6621  PDC20621 (FastTrak S150 SX4/FastTrak SX4000 lite)
+	6622  PDC20621 [SATA150 SX4] 4 Channel IDE RAID Controller
+	6626  PDC20618 (Ultra 618)
+	6629  PDC20619 (FastTrak TX4000)
+	7275  PDC20277 (SBFastTrak133 Lite)
+	8002  SATAII150 SX8
 105b  Foxconn International, Inc.
 105c  Wipro Infotech Limited
 105d  Number 9 Computer Company
@@ -1623,6 +2433,7 @@
 		13cc 0009  Barco Metheus 5 Megapixel, Dual Head
 		13cc 000a  Barco Metheus 5 Megapixel, Dual Head
 	5348  Revolution 4
+		105d 0037  Revolution IV-FP AGP (For SGI 1600SW)
 105e  Vtech Computers Ltd
 105f  Infotronic America Inc
 1060  United Microelectronics [UMC]
@@ -1664,15 +2475,36 @@
 	0005  National PC87550 System Controller
 	8002  PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave
 1067  Mitsubishi Electric
+	0301  AccelGraphics AccelECLIPSE
+	0304  AccelGALAXY A2100 [OEM Evans & Sutherland]
+	0308  Tornado 3000 [OEM Evans & Sutherland]
 	1002  VG500 [VolumePro Volume Rendering Accelerator]
 1068  Diversified Technology
 1069  Mylex Corporation
 	0001  DAC960P
 	0002  DAC960PD
-	0010  DAC960PX
+	0010  DAC960PG
+	0020  DAC960LA
 	0050  AcceleRAID 352/170/160 support Device
+		1069 0050  AcceleRAID 352 support Device
+		1069 0052  AcceleRAID 170 support Device
+		1069 0054  AcceleRAID 160 support Device
+	b166  AcceleRAID 600/500/400/Sapphire support Device
+		1014 0242  iSeries 2872 DASD IOA
+		1014 0266  Dual Channel PCI-X U320 SCSI Adapter
+		1014 0278  Dual Channel PCI-X U320 SCSI RAID Adapter
+		1014 02d3  Dual Channel PCI-X U320 SCSI Adapter
+		1014 02d4  Dual Channel PCI-X U320 SCSI RAID Adapter
+		1069 0200  AcceleRAID 400, Single Channel, PCI-X, U320, SCSI RAID
+		1069 0202  AcceleRAID Sapphire, Dual Channel, PCI-X, U320, SCSI RAID
+		1069 0204  AcceleRAID 500, Dual Channel, Low-Profile, PCI-X, U320, SCSI RAID
+		1069 0206  AcceleRAID 600, Dual Channel, PCI-X, U320, SCSI RAID
 	ba55  eXtremeRAID 1100 support Device
 	ba56  eXtremeRAID 2000/3000 support Device
+		1069 0030  eXtremeRAID 3000 support Device
+		1069 0040  eXtremeRAID 2000 support Device
+	ba57  eXtremeRAID 4000/5000 support Device
+		1069 0072  eXtremeRAID 5000 support Device
 106a  Aten Research Inc
 106b  Apple Computer Inc.
 	0001  Bandit PowerPC host bridge
@@ -1680,6 +2512,7 @@
 	0003  Control Video
 	0004  PlanB Video-In
 	0007  O'Hare I/O
+	000c  DOS on Mac
 	000e  Hydra Mac I/O
 	0010  Heathrow Mac I/O
 	0017  Paddington Mac I/O
@@ -1701,11 +2534,37 @@
 	002f  UniNorth 1.5 Internal PCI
 	0030  UniNorth/Pangea FireWire
 	0031  UniNorth 2 FireWire
+		106b 5811  iBook G4 2004
 	0032  UniNorth 2 GMAC (Sun GEM)
 	0033  UniNorth 2 ATA/100
 	0034  UniNorth 2 AGP
+	0035  UniNorth 2 PCI
+	0036  UniNorth 2 Internal PCI
+	003b  UniNorth/Intrepid ATA/100
+	003e  KeyLargo/Intrepid Mac I/O
+	003f  KeyLargo/Intrepid USB
+	0040  K2 KeyLargo USB
+	0041  K2 KeyLargo Mac/IO
+	0042  K2 FireWire
+	0043  K2 ATA/100
+	0045  K2 HT-PCI Bridge
+	0046  K2 HT-PCI Bridge
+	0047  K2 HT-PCI Bridge
+	0048  K2 HT-PCI Bridge
+	0049  K2 HT-PCI Bridge
+	004b  U3 AGP
+	004c  K2 GMAC (Sun GEM)
+	004f  Shasta Mac I/O
+	0050  Shasta IDE
+	0051  Shasta (Sun GEM)
+	0052  Shasta Firewire
+	0053  Shasta PCI Bridge
+	0054  Shasta PCI Bridge
+	0055  Shasta PCI Bridge
+	0058  U3L AGP Bridge
+	0059  U3H AGP Bridge
 	1645  Tigon3 Gigabit Ethernet NIC (BCM5701)
-106c  Hyundai Electronics America
+106c  Hynix Semiconductor
 	8801  Dual Pentium ISA/PCI Motherboard
 	8802  PowerPC ISA/PCI Motherboard
 	8803  Dual Window Graphics Accelerator
@@ -1716,6 +2575,7 @@
 106f  City Gate Development Ltd
 1070  Daewoo Telecom Ltd
 1071  Mitac
+	8160  Mitac 8060B Mobile Platform
 1072  GIT Co Ltd
 1073  Yamaha Corporation
 	0001  3D GUI Accelerator
@@ -1756,12 +2616,13 @@
 		101e 8471  QLA12160 on AMI MegaRAID
 		101e 8493  QLA12160 on AMI MegaRAID
 	1240  ISP1240 SCSI Host Adapter
-	1280  ISP1280
+	1280  ISP1280 SCSI Host Adapter
 	2020  ISP2020A Fast!SCSI Basic Adapter
 	2100  QLA2100 64-bit Fibre Channel Adapter
 		1077 0001  QLA2100 64-bit Fibre Channel Adapter
-	2200  QLA2200
-	2300  QLA2300 64-bit FC-AL Adapter
+	2200  QLA2200 64-bit Fibre Channel Adapter
+		1077 0002  QLA2200
+	2300  QLA2300 64-bit Fibre Channel Adapter
 	2312  QLA2312 Fibre Channel Adapter
 1078  Cyrix Corporation
 	0000  5510 [Grappa]
@@ -1782,6 +2643,8 @@
 107c  LG Electronics [Lucky Goldstar Co. Ltd]
 107d  LeadTek Research Inc.
 	0000  P86C850
+	2134  WinFast 3D S320 II
+	2971  [GeForce FX 5900] WinFast A350 TDH MyViVo
 107e  Interphase Corporation
 	0001  5515 ATM Adapter [Flipper]
 	0002  100 VG AnyLan Controller
@@ -1851,15 +2714,19 @@
 	1101  RIO GEM
 	1102  RIO 1394
 	1103  RIO USB
+	1648  [bge] Gigabit Ethernet
 	2bad  GEM
 	5000  Simba Advanced PCI Bridge
 	5043  SunPCI Co-processor
 	8000  Psycho PCI Bus Module
 	8001  Schizo PCI Bus Module
+	8002  Schizo+ PCI Bus Module
 	a000  Ultra IIi
 	a001  Ultra IIe
+	a801  Tomatillo PCI Bus Module
+	abba  Cassini 10/100/1000
 108f  Systemsoft
-1090  Encore Computer Corporation
+1090  Compro Computer Services, Inc.
 1091  Intergraph Corporation
 	0020  3D graphics processor
 	0021  3D graphics processor w/Texturing
@@ -1868,6 +2735,8 @@
 	0060  Proprietary bus bridge
 	00e4  Powerstorm 4D50T
 	0720  Motion JPEG codec
+	07a0  Sun Expert3D-Lite Graphics Accelerator
+	1091  Sun Expert3D Graphics Accelerator
 1092  Diamond Multimedia Systems
 	00a0  Speedstar Pro SE
 	00a8  Speedstar 64
@@ -1895,9 +2764,23 @@
 	1170  PCI-MIO-16XE-10
 	1180  PCI-MIO-16E-1
 	1190  PCI-MIO-16E-4
+	1310  PCI-6602
 	1330  PCI-6031E
 	1350  PCI-6071E
+	14e0  PCI-6110
+	14f0  PCI-6111
+	17d0  PCI-6503
+	1870  PCI-6713
+	1880  PCI-6711
+	18b0  PCI-6052E
+	2410  PCI-6733
+	2890  PCI-6036E
 	2a60  PCI-6023E
+	2a70  PCI-6024E
+	2a80  PCI-6025E
+	2c80  PCI-6035E
+	2ca0  PCI-6034E
+	70b8  PCI-6251 [M Series - High Speed Multifunction DAQ]
 	b001  IMAQ-PCI-1408
 	b011  IMAQ-PXI-1408
 	b021  IMAQ-PCI-1424
@@ -1911,13 +2794,15 @@
 	c801  PCI-GPIB
 	c831  PCI-GPIB bridge
 1094  First International Computers [FIC]
-1095  CMD Technology Inc
+# nee CMD Technology Inc
+1095  Silicon Image, Inc.
+	0240  Adaptec AAR-1210SA SATA HostRAID Controller
 	0640  PCI0640
 	0643  PCI0643
 	0646  PCI0646
 	0647  PCI0647
 	0648  PCI0648
-	0649  PCI0649
+	0649  SiI 0649 Ultra ATA/100 PCI to ATA Host Controller
 		0e11 005d  Integrated Ultra ATA-100 Dual Channel Controller
 		0e11 007e  Integrated Ultra ATA-100 IDE RAID Controller
 		101e 0649  AMI MegaRAID IDE 100 Controller
@@ -1925,7 +2810,21 @@
 	0670  USB0670
 		1095 0670  USB0670
 	0673  USB0673
-	0680  PCI0680
+	0680  PCI0680 Ultra ATA-133 Host Controller
+		1095 3680  Winic W-680 (Silicon Image 680 based)
+	3112  SiI 3112 [SATALink/SATARaid] Serial ATA Controller
+		1095 3112  SiI 3112 SATALink Controller
+		1095 6112  SiI 3112 SATARaid Controller
+		9005 0250  SATAConnect 1205SA Host Controller
+	3114  SiI 3114 [SATALink/SATARaid] Serial ATA Controller
+		1095 3114  SiI 3114 SATALink Controller
+		1095 6114  SiI 3114 SATARaid Controller
+	3124  SiI 3124 PCI-X Serial ATA Controller
+		1095 3124  SiI 3124 PCI-X Serial ATA Controller
+	3132  SiI 3132 Serial ATA Raid II Controller
+	3512  SiI 3512 [SATALink/SATARaid] Serial ATA Controller
+		1095 3512  SiI 3512 SATALink Controller
+		1095 6512  SiI 3512 SATARaid Controller
 1096  Alacron
 1097  Appian Technology
 1098  Quantum Designs (H.K.) Ltd
@@ -1937,6 +2836,7 @@
 109c  Megachips Corporation
 109d  Zida Technologies Ltd.
 109e  Brooktree Corporation
+	032e  Bt878 Video Capture
 	0350  Bt848 Video Capture
 	0351  Bt849A Video capture
 	0369  Bt878 Video Capture
@@ -1945,22 +2845,31 @@
 	036c  Bt879(??) Video Capture
 		13e9 0070  Win/TV (Video Section)
 	036e  Bt878 Video Capture
-		0070 13eb  WinTV/GO
+		0070 13eb  WinTV Series
 		0070 ff01  Viewcast Osprey 200
+		0071 0101  DigiTV PCI
+		107d 6606  WinFast TV 2000
+		11bd 0012  PCTV pro (TV + FM stereo receiver)
 		11bd 001c  PCTV Sat (DBC receiver)
 		127a 0001  Bt878 Mediastream Controller NTSC
 		127a 0002  Bt878 Mediastream Controller PAL BG
 		127a 0003  Bt878a Mediastream Controller PAL BG
 		127a 0048  Bt878/832 Mediastream Controller
 		144f 3000  MagicTView CPH060 - Video
+		1461 0002  TV98 Series (TV/No FM/Remote)
+		1461 0003  AverMedia UltraTV PCI 350
 		1461 0004  AVerTV WDM Video Capture
+		1461 0761  AverTV DVB-T
 		14f1 0001  Bt878 Mediastream Controller NTSC
 		14f1 0002  Bt878 Mediastream Controller PAL BG
 		14f1 0003  Bt878a Mediastream Controller PAL BG
 		14f1 0048  Bt878/832 Mediastream Controller
+		1822 0001  VisionPlus DVB card
 		1851 1850  FlyVideo'98 - Video
 		1851 1851  FlyVideo II
 		1852 1852  FlyVideo'98 - Video (with FM Tuner)
+		18ac d500  DViCO FusionHDTV5 Lite
+		270f fc00  Digitop DTT-1000
 		bd11 1200  PCTV pro (TV + FM stereo receiver)
 	036f  Bt879 Video Capture
 		127a 0044  Bt879 Video Capture NTSC
@@ -1997,10 +2906,12 @@
 		1851 1851  FlyVideo'98 EZ - video
 		1852 1852  FlyVideo'98 (with FM Tuner)
 	0878  Bt878 Audio Capture
-		0070 13eb  WinTV/GO
+		0070 13eb  WinTV Series
 		0070 ff01  Viewcast Osprey 200
+		0071 0101  DigiTV PCI
 		1002 0001  TV-Wonder
 		1002 0003  TV-Wonder/VE
+		11bd 0012  PCTV pro (TV + FM stereo receiver, audio section)
 		11bd 001c  PCTV Sat (DBC receiver)
 		127a 0001  Bt878 Video Capture (Audio Section)
 		127a 0002  Bt878 Video Capture (Audio Section)
@@ -2008,11 +2919,16 @@
 		127a 0048  Bt878 Video Capture (Audio Section)
 		13e9 0070  Win/TV (Audio Section)
 		144f 3000  MagicTView CPH060 - Audio
+		1461 0002  Avermedia PCTV98 Audio Capture
 		1461 0004  AVerTV WDM Audio Capture
+		1461 0761  AVerTV DVB-T
 		14f1 0001  Bt878 Video Capture (Audio Section)
 		14f1 0002  Bt878 Video Capture (Audio Section)
 		14f1 0003  Bt878 Video Capture (Audio Section)
 		14f1 0048  Bt878 Video Capture (Audio Section)
+		1822 0001  VisionPlus DVB Card
+		18ac d500  DViCO FusionHDTV5 Lite
+		270f fc00  Digitop DTT-1000
 		bd11 1200  PCTV pro (TV + FM stereo receiver, audio section)
 	0879  Bt879 Audio Capture
 		127a 0044  Bt879 Video Capture (Audio Section)
@@ -2056,6 +2972,7 @@
 10a3  Everex Systems Inc
 10a4  Globe Manufacturing Sales
 10a5  Smart Link Ltd.
+	3052  SmartPCI562 56K Modem
 	5449  SmartPCI561 modem
 10a6  Informtech Industrial Ltd.
 10a7  Benchmarq Microelectronics
@@ -2070,7 +2987,8 @@
 	0006  HPCEX
 	0007  RPCEX
 	0008  DiVO VIP
-	0009  Alteon Gigabit Ethernet
+	0009  AceNIC Gigabit Ethernet
+		10a9 8002  AceNIC Gigabit Ethernet
 	0010  AMP Video I/O
 	0011  GRIP
 	0012  SGH PSHAC GSN
@@ -2082,10 +3000,15 @@
 	1006  Dual JPEG 4
 	1007  Dual JPEG 5
 	1008  Cesium
+	100a  IOC4 I/O controller
 	2001  Fibre Channel
 	2002  ASDE
+	4001  TIO-CE PCI Express Bridge
+	4002  TIO-CE PCI Express Port
 	8001  O2 1394
 	8002  G-net NT
+	8010  Broadcom e-net [SGI IO9/IO10 BaseIO]
+	8018  Broadcom e-net [SGI A330 Server BaseIO]
 10aa  ACC Microelectronics
 	0000  ACCM 2188
 10ab  Digicom
@@ -2117,14 +3040,36 @@
 	1146  VScom 010 1 port parallel adaptor
 	1147  VScom 020 2 port parallel adaptor
 	2724  Thales PCSM Security Card
+	6540  PCI6540/6466 PCI-PCI bridge (transparent mode)
+		4c53 10e0  PSL09 PrPMC
+	6541  PCI6540/6466 PCI-PCI bridge (non-transparent mode, primary side)
+		4c53 10e0  PSL09 PrPMC
+	6542  PCI6540/6466 PCI-PCI bridge (non-transparent mode, secondary side)
+		4c53 10e0  PSL09 PrPMC
+	8516  PEX 8516  Versatile PCI Express Switch
+	8532  PEX 8532  Versatile PCI Express Switch
 	9030  PCI <-> IOBus Bridge Hot Swap
+		10b5 2862  Alpermann+Velte PCL PCI LV (3V/5V): Timecode Reader Board
+		10b5 2906  Alpermann+Velte PCI TS (3V/5V): Time Synchronisation Board
+		10b5 2940  Alpermann+Velte PCL PCI D (3V/5V): Timecode Reader Board
+		10b5 2978  SH ARC-PCIu SOHARD ARCNET card
+		10b5 3025  Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board
+		10b5 3068  Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board
+		1397 3136  4xS0-ISDN PCI Adapter
+		1397 3137  S2M-E1-ISDN PCI Adapter
 		15ed 1002  MCCS 8-port Serial Hot Swap
 		15ed 1003  MCCS 16-port Serial Hot Swap
 	9036  9036
 	9050  PCI <-> IOBus Bridge
+		10b5 1067  IXXAT CAN i165
+		10b5 1172  IK220 (Heidenhain)
 		10b5 2036  SatPak GPS
-		10b5 2273  SH-ARC SoHard ARCnet card
+		10b5 2221  Alpermann+Velte PCL PCI LV: Timecode Reader Board
+		10b5 2273  SH ARC-PCI SOHARD ARCNET card
+		10b5 2431  Alpermann+Velte PCL PCI D: Timecode Reader Board
+		10b5 2905  Alpermann+Velte PCI TS: Time Synchronisation Board
 		10b5 9050  MP9050
+		1498 0362  TPMC866 8 Channel Serial Card
 		1522 0001  RockForce 4 Port V.90 Data/Fax/Voice Modem
 		1522 0002  RockForce 2 Port V.90 Data/Fax/Voice Modem
 		1522 0003  RockForce 6 Port V.90 Data/Fax/Voice Modem
@@ -2135,6 +3080,9 @@
 		15ed 1001  Macrolink MCCS 16-port Serial
 		15ed 1002  Macrolink MCCS 8-port Serial Hot Swap
 		15ed 1003  Macrolink MCCS 16-port Serial Hot Swap
+		5654 2036  OpenSwitch 6 Telephony card
+		5654 3132  OpenSwitch 12 Telephony card
+		5654 5634  OpenLine4 Telephony Card
 		d531 c002  PCIntelliCAN 2xSJA1000 CAN bus
 		d84d 4006  EX-4006 1P
 		d84d 4008  EX-4008 1P EPP/ECP
@@ -2155,13 +3103,30 @@
 		d84d 4078  EX-4078 2S(16C552) RS-232+1P
 	9054  PCI <-> IOBus Bridge
 		10b5 2455  Wessex Techology PHIL-PCI
+		10b5 2696  Innes Corp AM Radcap card
+		10b5 2717  Innes Corp Auricon card
+		10b5 2844  Innes Corp TVS Encoder card
+		12d9 0002  PCI Prosody Card rev 1.5
+		16df 0011  PIKA PrimeNet MM PCI
+		16df 0012  PIKA PrimeNet MM cPCI 8
+		16df 0013  PIKA PrimeNet MM cPCI 8 (without CAS Signaling)
+		16df 0014  PIKA PrimeNet MM cPCI 4
+		16df 0015  PIKA Daytona MM
+		16df 0016  PIKA InLine MM
+	9056  Francois
+		10b5 2979  CellinkBlade 11 - CPCI board VoATM AAL1
 	9060  9060
 	906d  9060SD
 		125c 0640  Aries 16000P
 	906e  9060ES
 	9080  9080
+		103c 10eb  (Agilent) E2777B 83K Series Optical Communication Interface
+		103c 10ec  (Agilent) E6978-66442 PCI CIC
 		10b5 9080  9080 [real subsystem ID not set]
 		129d 0002  Aculab PCI Prosidy card
+		12d9 0002  PCI Prosody Card
+		12df 4422  4422PCI ["Do-All" Telemetry Data Aquisition System]
+	bb04  B&B 3PCIOSD1A Isolated PCI Serial
 10b6  Madge Networks
 	0001  Smart 16/4 PCI Ringnode
 	0002  Smart 16/4 PCI Ringnode Mk2
@@ -2189,19 +3154,29 @@
 	1001  Collage 155 ATM Server Adapter
 10b7  3Com Corporation
 	0001  3c985 1000BaseSX (SX/TX)
+	0013  AR5212 802.11abg NIC (3CRDAG675)
+		10b7 2031  3CRDAG675 11a/b/g Wireless PCI Adapter
+	0910  3C910-A01
 	1006  MINI PCI type 3B Data Fax Modem
 	1007  Mini PCI 56k Winmodem
 		10b7 615c  Mini PCI 56K Modem
+	1201  3c982-TXM 10/100baseTX Dual Port A [Hydra]
+	1202  3c982-TXM 10/100baseTX Dual Port B [Hydra]
+	1700  3c940 10/100/1000Base-T [Marvell]
+		1043 80eb  P4P800/K8V Deluxe motherboard
+		10b7 0010  3C940 Gigabit LOM Ethernet Adapter
+		10b7 0020  3C941 Gigabit LOM Ethernet Adapter
+		147b 1407  KV8-MAX3 motherboard
 	3390  3c339 TokenLink Velocity
 	3590  3c359 TokenLink Velocity XL
 		10b7 3590  TokenLink Velocity XL Adapter (3C359/359B)
-	4500  3c450 Cyclone/unknown
+	4500  3c450 HomePNA [Tornado]
 	5055  3c555 Laptop Hurricane
-	5057  3c575 [Megahertz] 10/100 LAN CardBus
+	5057  3c575 Megahertz 10/100 LAN CardBus [Boomerang]
 		10b7 5a57  3C575 Megahertz 10/100 LAN Cardbus PC Card
-	5157  3c575 [Megahertz] 10/100 LAN CardBus
+	5157  3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone]
 		10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card
-	5257  3CCFE575CT Cyclone CardBus
+	5257  3cCFE575CT CardBus [Cyclone]
 		10b7 5c57  FE575C-3Com 10/100 LAN CardBus-Fast Ethernet
 	5900  3c590 10BaseT [Vortex]
 	5920  3c592 EISA 10mbps Demon/Vortex
@@ -2209,33 +3184,37 @@
 	5951  3c595 100BaseT4 [Vortex]
 	5952  3c595 100Base-MII [Vortex]
 	5970  3c597 EISA Fast Demon/Vortex
-	5b57  3c595 [Megahertz] 10/100 LAN CardBus
+	5b57  3c595 Megahertz 10/100 LAN CardBus [Boomerang]
 		10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card
-	6055  3c556 Hurricane CardBus
-	6056  3c556B Hurricane CardBus
+	6000  3CRSHPW796 [OfficeConnect Wireless CardBus]
+	6001  3com 3CRWE154G72 [Office Connect Wireless LAN Adapter]
+	6055  3c556 Hurricane CardBus [Cyclone]
+	6056  3c556B CardBus [Tornado]
 		10b7 6556  10/100 Mini PCI Ethernet Adapter
-	6560  3CCFE656 Cyclone CardBus
+	6560  3cCFE656 CardBus [Cyclone]
 		10b7 656a  3CCFEM656 10/100 LAN+56K Modem CardBus
-	6561  3CCFEM656 10/100 LAN+56K Modem CardBus
+	6561  3cCFEM656 10/100 LAN+56K Modem CardBus
 		10b7 656b  3CCFEM656 10/100 LAN+56K Modem CardBus
-	6562  3CCFEM656 [id 6562] Cyclone CardBus
+	6562  3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone]
 		10b7 656b  3CCFEM656B 10/100 LAN+56K Modem CardBus
-	6563  3CCFEM656B 10/100 LAN+56K Modem CardBus
+	6563  3cCFEM656B 10/100 LAN+56K Modem CardBus
 		10b7 656b  3CCFEM656 10/100 LAN+56K Modem CardBus
-	6564  3CCFEM656 [id 6564] Cyclone CardBus
+	6564  3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado]
 	7646  3cSOHO100-TX Hurricane
+	7770  3CRWE777 PCI(PLX) Wireless Adaptor [Airconnect]
 	7940  3c803 FDDILink UTP Controller
 	7980  3c804 FDDILink SAS Controller
 	7990  3c805 FDDILink DAS Controller
+	80eb  3c940B 10/100/1000Base-T
 	8811  Token ring
 	9000  3c900 10BaseT [Boomerang]
-	9001  3c900 Combo [Boomerang]
-	9004  3c900B-TPO [Etherlink XL TPO]
+	9001  3c900 10Mbps Combo [Boomerang]
+	9004  3c900B-TPO Etherlink XL [Cyclone]
 		10b7 9004  3C900B-TPO Etherlink XL TPO 10Mb
-	9005  3c900B-Combo [Etherlink XL Combo]
+	9005  3c900B-Combo Etherlink XL [Cyclone]
 		10b7 9005  3C900B-Combo Etherlink XL Combo
-	9006  3c900B-TPC [Etherlink XL TPC]
-	900a  3c900B-FL [Etherlink XL FL]
+	9006  3c900B-TPC Etherlink XL [Cyclone]
+	900a  3c900B-FL 10base-FL [Cyclone]
 	9050  3c905 100BaseTX [Boomerang]
 	9051  3c905 100BaseT4 [Boomerang]
 	9055  3c905B 100BaseTX [Cyclone]
@@ -2260,20 +3239,29 @@
 		1028 0098  3C905B Fast Etherlink XL 10/100
 		1028 0099  3C905B Fast Etherlink XL 10/100
 		10b7 9055  3C905B Fast Etherlink XL 10/100
-	9056  3c905B-T4 [Fast EtherLink XL 10/100]
-	9058  3c905B-Combo [Deluxe Etherlink XL 10/100]
-	905a  3c905B-FX [Fast Etherlink XL FX 10/100]
+	9056  3c905B-T4 Fast EtherLink XL [Cyclone]
+	9058  3c905B Deluxe Etherlink 10/100/BNC [Cyclone]
+	905a  3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone]
 	9200  3c905C-TX/TX-M [Tornado]
-		1028 0095  Integrated 3C905C-TX Fast Etherlink for PC Management NIC
+		1028 0095  3C920 Integrated Fast Ethernet Controller
+		1028 0097  3C920 Integrated Fast Ethernet Controller
+		1028 00fe  Optiplex GX240
+		1028 012a  3C920 Integrated Fast Ethernet Controller [Latitude C640]
 		10b7 1000  3C905C-TX Fast Etherlink for PC Management NIC
 		10b7 7000  10/100 Mini PCI Ethernet Adapter
-	9300  3CSOHO100B-TX  [910-A01]
-	9800  3c980-TX [Fast Etherlink XL Server Adapter]
+		10f1 2466  Tiger MPX S2466 (3C920 Integrated Fast Ethernet Controller)
+	9201  3C920B-EMB Integrated Fast Ethernet Controller [Tornado]
+		1043 80ab  A7N8X Deluxe onboard 3C920B-EMB Integrated Fast Ethernet Controller
+	9202  3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller
+	9210  3C920B-EMB-WNM Integrated Fast Ethernet Controller
+	9300  3CSOHO100B-TX 910-A01 [tulip]
+	9800  3c980-TX Fast Etherlink XL Server Adapter [Cyclone]
 		10b7 9800  3c980-TX Fast Etherlink XL Server Adapter
-	9805  3c980-TX 10/100baseTX NIC [Python-T]
-		10b7 1201  3c982-TXM 10/100baseTX Dual Port A [Hydra]
-		10b7 1202  3c982-TXM 10/100baseTX Dual Port B [Hydra]
+	9805  3c980-C 10/100baseTX NIC [Python-T]
+		10b7 1201  EtherLink Server 10/100 Dual Port A
+		10b7 1202  EtherLink Server 10/100 Dual Port B
 		10b7 9805  3c980 10/100baseTX NIC [Python-T]
+		10f1 2462  Thunder K7 S2462
 	9900  3C990-TX [Typhoon]
 	9902  3CR990-TX-95 [Typhoon 56-bit]
 	9903  3CR990-TX-97 [Typhoon 168-bit]
@@ -2287,9 +3275,10 @@
 		10b7 2102  3CR990-FX-97 Server [Typhoon Fiber 168-bit]
 	9908  3CR990SVR95 [Typhoon Server 56-bit]
 	9909  3CR990SVR97 [Typhoon Server 168-bit]
+	990a  3C990SVR [Typhoon Server]
 	990b  3C990SVR [Typhoon Server]
 10b8  Standard Microsystems Corp [SMC]
-	0005  83C170QF
+	0005  83c170 EPIC/100 Fast Ethernet Adapter
 		1055 e000  LANEPIC 10/100 [EVB171Q-PCI]
 		1055 e002  LANEPIC 10/100 [EVB171G-PCI]
 		10b8 a011  EtherPower II 10/100
@@ -2297,7 +3286,7 @@
 		10b8 a015  EtherPower II 10/100
 		10b8 a016  EtherPower II 10/100
 		10b8 a017  EtherPower II 10/100
-	0006  LANEPIC
+	0006  83c175 EPIC/100 Fast Ethernet Adapter
 		1055 e100  LANEPIC Cardbus Fast Ethernet Adapter
 		1055 e102  LANEPIC Cardbus Fast Ethernet Adapter
 		1055 e300  LANEPIC Cardbus Fast Ethernet Adapter
@@ -2307,11 +3296,15 @@
 		13a2 8006  LANEPIC Cardbus Fast Ethernet Adapter
 	1000  FDC 37c665
 	1001  FDC 37C922
+	2802  SMC2802W [EZ Connect g]
 	a011  83C170QF
 	b106  SMC34C90
 10b9  ALi Corporation
+	0101  CMI8338/C3DX PCI Audio Device
 	0111  C-Media CMI8738/C3DX Audio Device (OEM)
 		10b9 0111  C-Media CMI8738/C3DX Audio Device (OEM)
+	0780  Multi-IO Card
+	0782  Multi-IO Card
 	1435  M1435
 	1445  M1445
 	1449  M1449
@@ -2327,11 +3320,13 @@
 		10b9 1523  ALI M1523 ISA Bridge
 	1531  M1531 [Aladdin IV]
 	1533  M1533 PCI to ISA Bridge [Aladdin IV]
+		1014 053b  ThinkPad R40e (2684-HVG) PCI to ISA Bridge
 		10b9 1533  ALI M1533 Aladdin IV ISA Bridge
 	1541  M1541
 		10b9 1541  ALI M1541 Aladdin V/V+ AGP System Controller
 	1543  M1543
 	1563  M1563 HyperTransport South Bridge
+	1573  PCI to LPC Controller
 	1621  M1621
 	1631  ALI M1631 PCI North Bridge Aladdin Pro III
 	1632  M1632M Northbridge+Trident
@@ -2341,8 +3336,11 @@
 	1647  M1647 Northbridge [MAGiK 1 / MobileMAGiK 1]
 	1651  M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM]
 	1671  M1671 Super P4 Northbridge [AGP4X,PCI and SDR/DDR]
+	1672  M1672 Northbridge [CyberALADDiN-P4]
 	1681  M1681 P4 Northbridge [AGP8X,HyperTransport and SDR/DDR]
 	1687  M1687 K8 Northbridge [AGP8X and HyperTransport]
+	1689  M1689 K8 Northbridge [Super K8 Single Chip]
+	1695  M1695 K8 Northbridge [PCI Express and HyperTransport]
 	3141  M3141
 	3143  M3143
 	3145  M3145
@@ -2351,34 +3349,61 @@
 	3151  M3151
 	3307  M3307
 	3309  M3309
+	3323  M3325 Video/Audio Decoder
 	5212  M4803
 	5215  MS4803
 	5217  M5217H
 	5219  M5219
 	5225  M5225
+	5228  M5228 ALi ATA/RAID Controller
 	5229  M5229 IDE
+		1014 050f  ThinkPad R30
+		1014 053d  ThinkPad R40e (2684-HVG) builtin IDE
+		103c 0024  Pavilion ze4400 builtin IDE
 		1043 8053  A7A266 Motherboard IDE
 	5235  M5225
 	5237  USB 1.1 Controller
+		1014 0540  ThinkPad R40e (2684-HVG) builtin USB
+		103c 0024  Pavilion ze4400 builtin USB
+		104d 810f  VAIO PCG-U1 USB/OHCI Revision 1.0
 	5239  USB 2.0 Controller
 	5243  M1541 PCI to AGP Controller
+	5246  AGP8X Controller
 	5247  PCI to AGP Controller
 	5249  M5249 HTT to PCI Bridge
 	5251  M5251 P1394 OHCI 1.0 Controller
 	5253  M5253 P1394 OHCI 1.1 Controller
 	5261  M5261 Ethernet Controller
+	5263  M5263 Ethernet Controller
+	5281  ALi M5281 Serial ATA / RAID Host Controller
+	5287  ULi 5287 SATA
+	5288  ULi M5288 SATA
+	5289  ULi 5289 SATA
+	5450  Lucent Technologies Soft Modem AMR
 	5451  M5451 PCI AC-Link Controller Audio Device
 		1014 0506  ThinkPad R30
+		1014 053e  ThinkPad R40e (2684-HVG) builtin Audio
+		103c 0024  Pavilion ze4400 builtin Audio
+		10b9 5451  HP Compaq nc4010 (DY885AA#ABN)
 	5453  M5453 PCI AC-Link Controller Modem Device
 	5455  M5455 PCI AC-Link Controller Audio Device
-	5457  Intel 537 [M5457 AC-Link Modem]
-	5459  SmartPCI561 56K Modem
+	5457  M5457 AC'97 Modem Controller
+		1014 0535  ThinkPad R40e (2684-HVG) builtin modem
+		103c 0024  Pavilion ze4400 builtin Modem Device
+	5459  SmartLink SmartPCI561 56K Modem
+	545a  SmartLink SmartPCI563 56K Modem
+	5461  High Definition Audio/AC'97 Host Controller
 	5471  M5471 Memory Stick Controller
 	5473  M5473 SD-MMC Controller
-	7101  M7101 PMU
-		10b9 7101  ALI M7101 Power Management Controller
+	7101  M7101 Power Management Controller [PMU]
+		1014 0510  ThinkPad R30
+		1014 053c  ThinkPad R40e (2684-HVG) Power Management Controller
+		103c 0024  Pavilion ze4400
 10ba  Mitsubishi Electric Corp.
 	0301  AccelGraphics AccelECLIPSE
+	0304  AccelGALAXY A2100 [OEM Evans & Sutherland]
+	0308  Tornado 3000 [OEM Evans & Sutherland]
+	1002  VG500 [VolumePro Volume Rendering Accelerator]
 10bb  Dapha Electronics Corporation
 10bc  Advanced Logic Research
 10bd  Surecom Technology
@@ -2419,6 +3444,7 @@
 		10f7 8312  MagicGraph 128XD
 	0005  NM2200 [MagicGraph 256AV]
 		1014 00dd  ThinkPad 570
+		1028 0088  Latitude CPi A
 	0006  NM2360 [MagicMedia 256ZX]
 	0016  NM2380 [MagicMedia 256XL+]
 		10c8 0016  MagicMedia 256XL+
@@ -2429,6 +3455,7 @@
 		0e11 b126  MagicMedia 256AV Audio Device on Durango
 		1014 00dd  MagicMedia 256AV Audio Device on BlackTip Thinkpad
 		1025 1003  MagicMedia 256AV Audio Device on TravelMate 720
+		1028 0088  Latitude CPi A
 		1028 008f  MagicMedia 256AV Audio Device on Colorado Inspiron
 		103c 0007  MagicMedia 256AV Audio Device on Voyager II
 		103c 0008  MagicMedia 256AV Audio Device on Voyager III
@@ -2441,7 +3468,10 @@
 10c9  Dataexpert Corporation
 10ca  Fujitsu Microelectr., Inc.
 10cb  Omron Corporation
-10cc  Mentor ARC Inc
+# nee Mentor ARC Inc
+10cc  Mai Logic Incorporated
+	0660  Articia S Host Bridge
+	0661  Articia S PCI Bridge
 10cd  Advanced System Products, Inc
 	1100  ASC1100
 	1200  ASC1200 [(abp940) Fast SCSI-II]
@@ -2450,9 +3480,9 @@
 	2300  ABP940-UW
 	2500  ABP940-U2W
 10ce  Radius
-10cf  Citicorp TTI
+# nee Citicorp TTI
+10cf  Fujitsu Limited.
 	2001  mb86605
-10d0  Fujitsu Limited
 10d1  FuturePlus Systems Corp.
 10d2  Molex Incorporated
 10d3  Jabil Circuit Inc
@@ -2462,10 +3492,12 @@
 10d7  BCM Advanced Research
 10d8  Advanced Peripherals Labs
 10d9  Macronix, Inc. [MXIC]
+	0431  MX98715
 	0512  MX98713
 	0531  MX987x5
 		1186 1200  DFE-540TX ProFAST 10/100 Adapter
 	8625  MX86250
+	8626  Macronix MX86251 + 3Dfx Voodoo Rush
 	8888  MX86200
 10da  Compaq IPG-Austin
 	0508  TC4048 Token Ring 4/16
@@ -2482,10 +3514,12 @@
 	0008  NV1 [EDGE 3D]
 	0009  NV1 [EDGE 3D]
 	0010  NV2 [Mutara V08]
-	0020  NV4 [Riva TnT]
+	0020  NV4 [RIVA TNT]
 		1043 0200  V3400 TNT
 		1048 0c18  Erazor II SGRAM
+		1048 0c19  Erazor II
 		1048 0c1b  Erazor II
+		1048 0c1c  Erazor II
 		1092 0550  Viper V550
 		1092 0552  Viper V550
 		1092 4804  Viper V550
@@ -2504,11 +3538,21 @@
 		10de 0020  Riva TNT
 		1102 1015  Graphics Blaster CT6710
 		1102 1016  Graphics Blaster RIVA TNT
-	0028  NV5 [Riva TnT2]
+	0028  NV5 [RIVA TNT2/TNT2 Pro]
 		1043 0200  AGP-V3800 SGRAM
 		1043 0201  AGP-V3800 SDRAM
 		1043 0205  PCI-V3800
 		1043 4000  AGP-V3800PRO
+		1048 0c21  Synergy II
+		1048 0c28  Erazor III
+		1048 0c29  Erazor III
+		1048 0c2a  Erazor III
+		1048 0c2b  Erazor III
+		1048 0c31  Erazor III Pro
+		1048 0c32  Erazor III Pro
+		1048 0c33  Erazor III Pro
+		1048 0c34  Erazor III Pro
+		107d 2134  WinFast 3D S320 II + TV-Out
 		1092 4804  Viper V770
 		1092 4a00  Viper V770
 		1092 4a02  Viper V770 Ultra
@@ -2520,121 +3564,473 @@
 		1102 1020  3D Blaster RIVA TNT2
 		1102 1026  3D Blaster RIVA TNT2 Digital
 		14af 5810  Maxi Gamer Xentor
-	0029  NV5 [Riva TnT2 Ultra]
+	0029  NV5 [RIVA TNT2 Ultra]
 		1043 0200  AGP-V3800 Deluxe
 		1043 0201  AGP-V3800 Ultra SDRAM
 		1043 0205  PCI-V3800 Ultra
+		1048 0c2e  Erazor III Ultra
+		1048 0c2f  Erazor III Ultra
+		1048 0c30  Erazor III Ultra
 		1102 1021  3D Blaster RIVA TNT2 Ultra
 		1102 1029  3D Blaster RIVA TNT2 Ultra
 		1102 102f  3D Blaster RIVA TNT2 Ultra
 		14af 5820  Maxi Gamer Xentor 32
 	002a  NV5 [Riva TnT2]
 	002b  NV5 [Riva TnT2]
-	002c  NV6 [Vanta]
+	002c  NV6 [Vanta/Vanta LT]
 		1043 0200  AGP-V3800 Combat SDRAM
 		1043 0201  AGP-V3800 Combat
+		1048 0c20  TNT2 Vanta
+		1048 0c21  TNT2 Vanta
 		1092 6820  Viper V730
 		1102 1031  CT6938 VANTA 8MB
 		1102 1034  CT6894 VANTA 16MB
 		14af 5008  Maxi Gamer Phoenix 2
-	002d  RIVA TNT2 Model 64
+	002d  NV5M64 [RIVA TNT2 Model 64/Model 64 Pro]
 		1043 0200  AGP-V3800M
 		1043 0201  AGP-V3800M
 		1048 0c3a  Erazor III LT
+		1048 0c3b  Erazor III LT
+		10de 001e  M64 AGP4x
 		1102 1023  CT6892 RIVA TNT2 Value
 		1102 1024  CT6932 RIVA TNT2 Value 32Mb
 		1102 102c  CT6931 RIVA TNT2 Value [Jumper]
 		1462 8808  MSI-8808
-		1554 1041  PixelView RIVA TNT2 M64 32MB
+		1554 1041  Pixelview RIVA TNT2 M64
+		1569 002d  Palit Microsystems Daytona TNT2 M64
 	002e  NV6 [Vanta]
 	002f  NV6 [Vanta]
-	006a  nForce MultiMedia audio [Via VT82C686B]
-	006b  nForce MultiMedia audio [Via VT82C686B]
-	00a0  NV5 [Riva TNT2]
+	0034  MCP04 SMBus
+	0035  MCP04 IDE
+	0036  MCP04 Serial ATA Controller
+	0037  MCP04 Ethernet Controller
+	0038  MCP04 Ethernet Controller
+	003a  MCP04 AC'97 Audio Controller
+	003b  MCP04 USB Controller
+	003c  MCP04 USB Controller
+	003d  MCP04 PCI Bridge
+	003e  MCP04 Serial ATA Controller
+	0040  nv40 [GeForce 6800 Ultra]
+	0041  NV40 [GeForce 6800]
+		1043 817b  V9999 Gamer Edition
+	0042  NV40.2 [GeForce 6800 LE]
+	0043  NV40.3
+	0045  NV40 [GeForce 6800 GT]
+	0049  NV40GL
+	004e  NV40GL [Quadro FX 4000]
+	0050  CK804 ISA Bridge
+		1043 815a  K8N4-E Mainboard
+	0051  CK804 ISA Bridge
+	0052  CK804 SMBus
+		1043 815a  K8N4-E Mainboard
+	0053  CK804 IDE
+		1043 815a  K8N4-E Mainboard
+	0054  CK804 Serial ATA Controller
+	0055  CK804 Serial ATA Controller
+		1043 815a  K8N4-E Mainboard
+	0056  CK804 Ethernet Controller
+	0057  CK804 Ethernet Controller
+		1043 8141  K8N4-E Mainboard
+	0058  CK804 AC'97 Modem
+	0059  CK804 AC'97 Audio Controller
+		1043 812a  K8N4-E Mainboard
+	005a  CK804 USB Controller
+		1043 815a  K8N4-E Mainboard
+	005b  CK804 USB Controller
+		1043 815a  K8N4-E Mainboard
+	005c  CK804 PCI Bridge
+	005d  CK804 PCIE Bridge
+	005e  CK804 Memory Controller
+	005f  CK804 Memory Controller
+	0060  nForce2 ISA Bridge
+		1043 80ad  A7N8X Mainboard
+	0064  nForce2 SMBus (MCP)
+	0065  nForce2 IDE
+	0066  nForce2 Ethernet Controller
+		1043 80a7  A7N8X Mainboard onboard nForce2 Ethernet
+	0067  nForce2 USB Controller
+		1043 0c11  A7N8X Mainboard
+	0068  nForce2 USB Controller
+		1043 0c11  A7N8X Mainboard
+	006a  nForce2 AC97 Audio Controler (MCP)
+	006b  nForce Audio Processing Unit
+		10de 006b  nForce2 MCP Audio Processing Unit
+	006c  nForce2 External PCI Bridge
+	006d  nForce2 PCI Bridge
+	006e  nForce2 FireWire (IEEE 1394) Controller
+	0080  MCP2A ISA bridge
+	0084  MCP2A SMBus
+	0085  MCP2A IDE
+	0086  MCP2A Ethernet Controller
+	0087  MCP2A USB Controller
+	0088  MCP2A USB Controller
+	008a  MCP2S AC'97 Audio Controller
+	008b  MCP2A PCI Bridge
+	008c  MCP2A Ethernet Controller
+	008e  nForce2 Serial ATA Controller
+	0091  GeForce 7800 GTX
+	00a0  NV5 [Aladdin TNT2]
 		14af 5810  Maxi Gamer Xentor
+	00c0  NV41.0
+	00c1  NV41.1 [GeForce 6800]
+	00c2  NV41.2 [GeForce 6800 LE]
+	00c8  NV41.8 [GeForce Go 6800]
+	00c9  NV41.9 [GeForce Go 6800 Ultra]
+	00cc  NV41 [Quadro FX Go1400]
+	00cd  NV41 [Quadro FX 3450/4000 SDI]
+	00ce  NV41GL [Quadro FX 1400]
+	00d0  nForce3 LPC Bridge
+	00d1  nForce3 Host Bridge
+	00d2  nForce3 AGP Bridge
+	00d3  CK804 Memory Controller
+	00d4  nForce3 SMBus
+	00d5  nForce3 IDE
+	00d6  nForce3 Ethernet
+	00d7  nForce3 USB 1.1
+	00d8  nForce3 USB 2.0
+	00da  nForce3 Audio
+	00dd  nForce3 PCI Bridge
+	00df  CK8S Ethernet Controller
+		147b 1c0b  NF8 Mainboard
+	00e0  nForce3 250Gb LPC Bridge
+		147b 1c0b  NF8 Mainboard
+	00e1  nForce3 250Gb Host Bridge
+		147b 1c0b  NF8 Mainboard
+	00e2  nForce3 250Gb AGP Host to PCI Bridge
+	00e3  CK8S Serial ATA Controller (v2.5)
+		147b 1c0b  NF8 Mainboard
+	00e4  nForce 250Gb PCI System Management
+		147b 1c0b  NF8 Mainboard
+	00e5  CK8S Parallel ATA Controller (v2.5)
+		147b 1c0b  NF8 Mainboard
+	00e6  CK8S Ethernet Controller
+	00e7  CK8S USB Controller
+		147b 1c0b  NF8 Mainboard
+	00e8  nForce3 EHCI USB 2.0 Controller
+		147b 1c0b  NF8 Mainboard
+	00ea  nForce3 250Gb AC'97 Audio Controller
+		147b 1c0b  NF8 Mainboard
+	00ed  nForce3 250Gb PCI-to-PCI Bridge
+	00ee  CK8S Serial ATA Controller (v2.5)
+	00f0  NV40 [GeForce 6800/GeForce 6800 Ultra]
+	00f1  NV43 [GeForce 6600/GeForce 6600 GT]
+	00f2  NV43 [GeForce 6600/GeForce 6600 GT]
+	00f3  NV43 [GeForce 6200]
+	00f8  NV45GL [Quadro FX 3400/4400]
+	00f9  NV40 [GeForce 6800 Ultra/GeForce 6800 GT]
+		1682 2120  GEFORCE 6800 GT PCI-E
+	00fa  NV36 [GeForce PCX 5750]
+	00fb  NV35 [GeForce PCX 5900]
+	00fc  NV37GL [Quadro FX 330/GeForce PCX 5300]
+	00fd  NV37GL [Quadro FX 330]
+	00fe  NV38GL [Quadro FX 1300]
+	00ff  NV18 [GeForce PCX 4300]
 	0100  NV10 [GeForce 256 SDR]
 		1043 0200  AGP-V6600 SGRAM
 		1043 0201  AGP-V6600 SDRAM
 		1043 4008  AGP-V6600 SGRAM
 		1043 4009  AGP-V6600 SDRAM
+		1048 0c41  Erazor X
+		1048 0c43  ERAZOR X PCI
+		1048 0c48  Synergy Force
 		1102 102d  CT6941 GeForce 256
 		14af 5022  3D Prophet SE
-	0101  NV10 [GeForce 256 DDR]
+	0101  NV10DDR [GeForce 256 DDR]
 		1043 0202  AGP-V6800 DDR
 		1043 400a  AGP-V6800 DDR SGRAM
 		1043 400b  AGP-V6800 DDR SDRAM
+		1048 0c42  Erazor X
+		107d 2822  WinFast GeForce 256
 		1102 102e  CT6971 GeForce 256 DDR
 		14af 5021  3D Prophet DDR-DVI
-	0103  NV10 [Quadro]
-	0110  NV11 [GeForce2 MX]
+	0103  NV10GL [Quadro]
+		1048 0c40  GLoria II-64
+		1048 0c44  GLoria II
+		1048 0c45  GLoria II
+		1048 0c4a  GLoria II-64 Pro
+		1048 0c4b  GLoria II-64 Pro DVII
+	0110  NV11 [GeForce2 MX/MX 400]
 		1043 4015  AGP-V7100 Pro
 		1043 4031  V7100 Pro with TV output
+		1048 0c60  Gladiac MX
+		1048 0c61  Gladiac 511PCI
+		1048 0c63  Gladiac 511TV-OUT 32MB
+		1048 0c64  Gladiac 511TV-OUT 64MB
+		1048 0c65  Gladiac 511TWIN
+		1048 0c66  Gladiac 311
+		10de 0091  Dell OEM GeForce 2 MX 400
+		10de 00a1  Apple OEM GeForce2 MX
+		1462 8817  MSI GeForce2 MX400 Pro32S [MS-8817]
 		14af 7102  3D Prophet II MX
 		14af 7103  3D Prophet II MX Dual-Display
-	0111  NV11 [GeForce2 MX DDR]
+	0111  NV11DDR [GeForce2 MX 100 DDR/200 DDR]
 	0112  NV11 [GeForce2 Go]
-	0113  NV11 [GeForce2 MXR]
-	0150  NV15 [GeForce2 GTS]
+	0113  NV11GL [Quadro2 MXR/EX/Go]
+	0140  NV43 [GeForce 6600 GT]
+	0141  NV43 [GeForce 6600]
+		1458 3124  GV-NX66128DP Turboforce Edition
+	0144  NV43 [GeForce Go 6600]
+	0145  NV43 [GeForce 6610 XL]
+	0146  NV43 [Geforce Go 6600TE/6200TE]
+	0148  NV43 [GeForce Go 6600]
+	014e  NV43GL [Quadro FX 540]
+	014f  NV43 [GeForce 6200]
+	0150  NV15 [GeForce2 GTS/Pro]
 		1043 4016  V7700 AGP Video Card
+		1048 0c50  Gladiac
+		1048 0c52  Gladiac-64
 		107d 2840  WinFast GeForce2 GTS with TV output
+		107d 2842  WinFast GeForce 2 Pro
 		1462 8831  Creative GeForce2 Pro
-	0151  NV15 [GeForce2 Ti]
+	0151  NV15DDR [GeForce2 Ti]
 		1043 405f  V7700Ti
-	0152  NV15 [GeForce2 Ultra, Bladerunner]
+		1462 5506  Creative 3D Blaster Geforce2 Titanium
+	0152  NV15BR [GeForce2 Ultra, Bladerunner]
 		1048 0c56  GLADIAC Ultra
-	0153  NV15 [Quadro2 Pro]
-	0170  NV17 [GeForce4 MX460]
-	0171  NV17 [GeForce4 MX440]
+	0153  NV15GL [Quadro2 Pro]
+	0161  GeForce 6200 TurboCache(TM)
+	0164  NV44 [GeForce Go 6200]
+	0165  NV44 [Quadro NVS 285]
+	0167  GeForce Go 6200 TurboCache
+	0170  NV17 [GeForce4 MX 460]
+	0171  NV17 [GeForce4 MX 440]
+		10b0 0002  Gainward Pro/600 TV
+		10de 0008  Apple OEM GeForce4 MX 440
 		1462 8661  G4MX440-VTP
-	0172  NV17 [GeForce4 MX420]
-	0173  NV1x
+		1462 8730  MX440SES-T (MS-8873)
+		147b 8f00  Abit Siluro GeForce4MX440
+	0172  NV17 [GeForce4 MX 420]
+	0173  NV17 [GeForce4 MX 440-SE]
 	0174  NV17 [GeForce4 440 Go]
 	0175  NV17 [GeForce4 420 Go]
 	0176  NV17 [GeForce4 420 Go 32M]
-	0178  Quadro4 500XGL
-	0179  NV17 [GeForce4 440 Go 64M]
-	017a  Quadro4 200/400NVS
-	017b  Quadro4 550XGL
-	017c  Quadro4 550 GoGL
-	0181  NV18 [GeForce4 MX440 AGP 8x]
-	01a0  NV15 [GeForce2 - nForce GPU]
+		4c53 1090  Cx9 / Vx9 mainboard
+	0177  NV17 [GeForce4 460 Go]
+	0178  NV17GL [Quadro4 550 XGL]
+	0179  NV17 [GeForce4 420 Go 32M]
+		10de 0179  GeForce4 MX (Mac)
+	017a  NV17GL [Quadro4 200/400 NVS]
+	017b  NV17GL [Quadro4 550 XGL]
+	017c  NV17GL [Quadro4 500 GoGL]
+	017d  NV17 [GeForce4 410 Go 16M]
+	0181  NV18 [GeForce4 MX 440 AGP 8x]
+		1043 806f  V9180 Magic
+		1462 8880  MS-StarForce GeForce4 MX 440 with AGP8X
+		1462 8900  MS-8890 GeForce 4 MX440 AGP8X
+		1462 9350  MSI Geforce4 MX T8X with AGP8X
+		147b 8f0d  Siluro GF4 MX-8X
+	0182  NV18 [GeForce4 MX 440SE AGP 8x]
+	0183  NV18 [GeForce4 MX 420 AGP 8x]
+	0185  NV18 [GeForce4 MX 4000 AGP 8x]
+	0186  NV18M [GeForce4 448 Go]
+	0187  NV18M [GeForce4 488 Go]
+	0188  NV18GL [Quadro4 580 XGL]
+	018a  NV18GL [Quadro4 NVS AGP 8x]
+	018b  NV18GL [Quadro4 380 XGL]
+	018d  NV18M [GeForce4 448 Go]
+	01a0  NVCrush11 [GeForce2 MX Integrated Graphics]
 	01a4  nForce CPU bridge
 	01ab  nForce 420 Memory Controller (DDR)
 	01ac  nForce 220/420 Memory Controller
 	01ad  nForce 220/420 Memory Controller
+	01b0  nForce Audio
 	01b1  nForce Audio
 	01b2  nForce ISA Bridge
 	01b4  nForce PCI System Management
 	01b7  nForce AGP to PCI Bridge
 	01b8  nForce PCI-to-PCI bridge
 	01bc  nForce IDE
-	01c1  Intel 537 [nForce MC97 Modem]
+	01c1  nForce AC'97 Modem Controller
 	01c2  nForce USB Controller
 	01c3  nForce Ethernet Controller
+	01e0  nForce2 AGP (different version?)
+	01e8  nForce2 AGP
+	01ea  nForce2 Memory Controller 0
+	01eb  nForce2 Memory Controller 1
+	01ec  nForce2 Memory Controller 2
+	01ed  nForce2 Memory Controller 3
+	01ee  nForce2 Memory Controller 4
+	01ef  nForce2 Memory Controller 5
+	01f0  NV18 [GeForce4 MX - nForce GPU]
 	0200  NV20 [GeForce3]
 		1043 402f  AGP-V8200 DDR
-	0201  NV20 [GeForce3 Ti200]
-	0202  NV20 [GeForce3 Ti500]
+		1048 0c70  GLADIAC 920
+	0201  NV20 [GeForce3 Ti 200]
+	0202  NV20 [GeForce3 Ti 500]
 		1043 405b  V8200 T5
 		1545 002f  Xtasy 6964
-	0203  NV20 [Quadro DCC]
-	0250  NV25 [GeForce4 Ti4600]
-	0251  NV25 [GeForce4 Ti4400]
-	0253  NV25 [GeForce4 Ti4200]
+	0203  NV20DCC [Quadro DCC]
+	0221  GeForce 6200
+	0240  C51 PCI Express Bridge
+	0241  C51 PCI Express Bridge
+	0242  C51 PCI Express Bridge
+	0243  C51 PCI Express Bridge
+	0244  C51 PCI Express Bridge
+	0245  C51 PCI Express Bridge
+	0246  C51 PCI Express Bridge
+	0247  C51 PCI Express Bridge
+	0248  C51 PCI Express Bridge
+	0249  C51 PCI Express Bridge
+	024a  C51 PCI Express Bridge
+	024b  C51 PCI Express Bridge
+	024c  C51 PCI Express Bridge
+	024d  C51 PCI Express Bridge
+	024e  C51 PCI Express Bridge
+	024f  C51 PCI Express Bridge
+	0250  NV25 [GeForce4 Ti 4600]
+	0251  NV25 [GeForce4 Ti 4400]
+		1043 8023  v8440 GeForce 4 Ti4400
+	0252  NV25 [GeForce4 Ti]
+	0253  NV25 [GeForce4 Ti 4200]
 		107d 2896  WinFast A250 LE TD (Dual VGA/TV-out/DVI)
 		147b 8f09  Siluro (Dual VGA/TV-out/DVI)
-	0258  Quadro4 900XGL
-	0259  Quadro4 750XGL
-	025b  Quadro4 700XGL
+	0258  NV25GL [Quadro4 900 XGL]
+	0259  NV25GL [Quadro4 750 XGL]
+	025b  NV25GL [Quadro4 700 XGL]
+	0260  MCP51 LPC Bridge
+	0261  MCP51 LPC Bridge
+	0262  MCP51 LPC Bridge
+	0263  MCP51 LPC Bridge
+	0264  MCP51 SMBus
+	0265  MCP51 IDE
+	0266  MCP51 Serial ATA Controller
+	0267  MCP51 Serial ATA Controller
+	0268  MCP51 Ethernet Controller
+	0269  MCP51 Ethernet Controller
+	026a  MCP51 MCI
+	026b  MCP51 AC97 Audio Controller
+	026c  MCP51 High Definition Audio
+	026d  MCP51 USB Controller
+	026e  MCP51 USB Controller
+	026f  MCP51 PCI Bridge
+	0270  MCP51 Host Bridge
+	0271  MCP51 PMU
+	0272  MCP51 Memory Controller 0
+	027e  C51 Memory Controller 2
+	027f  C51 Memory Controller 3
+	0280  NV28 [GeForce4 Ti 4800]
+	0281  NV28 [GeForce4 Ti 4200 AGP 8x]
+	0282  NV28 [GeForce4 Ti 4800 SE]
+	0286  NV28 [GeForce4 Ti 4200 Go AGP 8x]
+	0288  NV28GL [Quadro4 980 XGL]
+	0289  NV28GL [Quadro4 780 XGL]
+	028c  NV28GLM [Quadro4 700 GoGL]
+# NV2A Xbox Graphics Processing Unit (Intergrated). GeForce3 derivative (NV20 < NV2A < NV25)
+	02a0  NV2A [XGPU]
+	02f0  C51 Host Bridge
+	02f1  C51 Host Bridge
+	02f2  C51 Host Bridge
+	02f3  C51 Host Bridge
+	02f4  C51 Host Bridge
+	02f5  C51 Host Bridge
+	02f6  C51 Host Bridge
+	02f7  C51 Host Bridge
+	02f8  C51 Memory Controller 5
+	02f9  C51 Memory Controller 4
+	02fa  C51 Memory Controller 0
+	02fb  C51 PCI Express Bridge
+	02fc  C51 PCI Express Bridge
+	02fd  C51 PCI Express Bridge
+	02fe  C51 Memory Controller 1
+	02ff  C51 Host Bridge
+	0300  NV30 [GeForce FX]
+	0301  NV30 [GeForce FX 5800 Ultra]
+	0302  NV30 [GeForce FX 5800]
+	0308  NV30GL [Quadro FX 2000]
+	0309  NV30GL [Quadro FX 1000]
+	0311  NV31 [GeForce FX 5600 Ultra]
+	0312  NV31 [GeForce FX 5600]
+	0313  NV31
+	0314  NV31 [GeForce FX 5600XT]
+		1043 814a  V9560XT/TD
+	0316  NV31M
+	0317  NV31M Pro
+	031a  NV31M [GeForce FX Go5600]
+	031b  NV31M [GeForce FX Go5650]
+	031c  NVIDIA Quadro FX Go700
+	031d  NV31GLM
+	031e  NV31GLM Pro
+	031f  NV31GLM Pro
+	0320  NV34 [GeForce FX 5200]
+	0321  NV34 [GeForce FX 5200 Ultra]
+	0322  NV34 [GeForce FX 5200]
+		1462 9171  MS-8917 (FX5200-T128)
+	0323  NV34 [GeForce FX 5200LE]
+	0324  NV34M [GeForce FX Go5200]
+		1028 0196  Inspiron 5160
+		1071 8160  MIM2000
+	0325  NV34M [GeForce FX Go5250]
+	0326  NV34 [GeForce FX 5500]
+	0327  NV34 [GeForce FX 5100]
+	0328  NV34M [GeForce FX Go5200 32M/64M]
+	0329  NV34M [GeForce FX Go5200]
+	032a  NV34GL [Quadro NVS 280 PCI]
+	032b  NV34GL [Quadro FX 500/600 PCI]
+	032c  NV34GLM [GeForce FX Go 5300]
+	032d  NV34 [GeForce FX Go5100]
+	032f  NV34GL
+	0330  NV35 [GeForce FX 5900 Ultra]
+	0331  NV35 [GeForce FX 5900]
+		1043 8145  V9950GE
+	0332  NV35 [GeForce FX 5900XT]
+	0333  NV38 [GeForce FX 5950 Ultra]
+	0334  NV35 [GeForce FX 5900ZT]
+	0338  NV35GL [Quadro FX 3000]
+	033f  NV35GL [Quadro FX 700]
+	0341  NV36.1 [GeForce FX 5700 Ultra]
+	0342  NV36.2 [GeForce FX 5700]
+	0343  NV36 [GeForce FX 5700LE]
+	0344  NV36.4 [GeForce FX 5700VE]
+	0345  NV36.5
+	0347  NV36 [GeForce FX Go5700]
+	0348  NV36 [GeForce FX Go5700]
+	0349  NV36M Pro
+	034b  NV36MAP
+	034c  NV36 [Quadro FX Go1000]
+	034e  NV36GL [Quadro FX 1100]
+	034f  NV36GL
+	0360  MCP55 LPC Bridge
+	0361  MCP55 LPC Bridge
+	0362  MCP55 LPC Bridge
+	0363  MCP55 LPC Bridge
+	0364  MCP55 LPC Bridge
+	0365  MCP55 LPC Bridge
+	0366  MCP55 LPC Bridge
+	0367  MCP55 LPC Bridge
+	0368  MCP55 SMBus
+	0369  MCP55 Memory Controller
+	036a  MCP55 Memory Controller
+	036c  MCP55 USB Controller
+	036d  MCP55 USB Controller
+	036e  MCP55 IDE
+	0372  MCP55 Ethernet
+	0373  MCP55 Ethernet
+	037a  MCP55 Memory Controller
+	037e  MCP55 SATA Controller
+	037f  MCP55 SATA Controller
 10df  Emulex Corporation
 	1ae5  LP6000 Fibre Channel Host Adapter
-	f085  LP850 Fibre Channel Adapter
-	f095  LP952 Fibre Channel Adapter
-	f098  LP982 Fibre Channel Adapter
+	1ae6  LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)
+	1ae7  LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:2-3)
+	f005  LP1150e Fibre Channel Host Adapter
+	f085  LP850 Fibre Channel Host Adapter
+	f095  LP952 Fibre Channel Host Adapter
+	f098  LP982 Fibre Channel Host Adapter
+	f0a5  LP1050 Fibre Channel Host Adapter
+	f0d5  LP1150 Fibre Channel Host Adapter
+	f100  LP11000e Fibre Channel Host Adapter
 	f700  LP7000 Fibre Channel Host Adapter
+	f701  LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)
 	f800  LP8000 Fibre Channel Host Adapter
+	f801  LP8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)
 	f900  LP9000 Fibre Channel Host Adapter
-	f980  LP9802 Fibre Channel Adapter
+	f901  LP9000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)
+	f980  LP9802 Fibre Channel Host Adapter
+	f981  LP9802 Fibre Channel Host Adapter Alternate ID
+	f982  LP9802 Fibre Channel Host Adapter Alternate ID
+	fa00  LP10000 Fibre Channel Host Adapter
+	fa01  LP101 Fibre Channel Host Adapter
+	fd00  LP11000 Fibre Channel Host Adapter
 10e0  Integrated Micro Solutions Inc.
 	5026  IMS5026/27/28
 	5027  IMS5027
@@ -2651,11 +4047,15 @@
 10e3  Tundra Semiconductor Corp.
 	0000  CA91C042 [Universe]
 	0860  CA91C860 [QSpan]
+	0862  CA91C862A [QSpan-II]
+	8260  CA91L8200B [Dual PCI PowerSpan II]
+	8261  CA91L8260B [Single PCI PowerSpan II]
 10e4  Tandem Computers
 10e5  Micro Industries Corporation
 10e6  Gainbery Computer Products Inc.
 10e7  Vadem
 10e8  Applied Micro Circuits Corp.
+	1072  INES GPIB-PCI (AMCC5920 based)
 	2011  Q-Motion Video Capture/Edit board
 	4750  S5930 [Matchmaker]
 	5920  S5920
@@ -2669,8 +4069,19 @@
 	80d9  PCI-9118
 	80da  PCI-9812
 	811a  PCI-IEEE1355-DS-DE Interface
+	814c  Fastcom ESCC-PCI (Commtech, Inc.)
 	8170  S5933 [Matchmaker] (Chipset Development Tool)
+# sold with Roper Scientifc(Photometrics) CoolSnap HQ camera
+	81e6  Multimedia video controller
+	8291  Fastcom 232/8-PCI (Commtech, Inc.)
+	82c4  Fastcom 422/4-PCI (Commtech, Inc.)
+	82c5  Fastcom 422/2-PCI (Commtech, Inc.)
+	82c6  Fastcom IG422/1-PCI (Commtech, Inc.)
+	82c7  Fastcom IG232/2-PCI (Commtech, Inc.)
+	82ca  Fastcom 232/4-PCI (Commtech, Inc.)
 	82db  AJA HDNTV HD SDI Framestore
+	82e2  Fastcom DIO24H-PCI (Commtech, Inc.)
+	8851  S5933 on Innes Corp FM Radio Capture card
 10e9  Alps Electric Co., Ltd.
 10ea  Intergraphics Systems
 	1680  IGA-1680
@@ -2680,6 +4091,9 @@
 	2010  CyberPro 2000A
 	5000  CyberPro 5000
 	5050  CyberPro 5050
+	5202  CyberPro 5202
+# CyberPro5202 Audio Function
+	5252  CyberPro5252
 10eb  Artists Graphics
 	0101  3GA
 	8111  Twist3 Frame Grabber
@@ -2695,10 +4109,14 @@
 	8138  RT8139 (B/C) Cardbus Fast Ethernet Adapter
 		10ec 8138  RT8139 (B/C) Fast Ethernet Adapter
 	8139  RTL-8139/8139C/8139C+
+		0357 000a  TTP-Monitoring Card V2.0
+		1025 005a  TravelMate 290
 		1025 8920  ALN-325
 		1025 8921  ALN-325
+		1071 8160  MIM2000
 		10bd 0320  EP-320X-R
 		10ec 8139  RT8139
+		1113 ec01  FNC-0107TX
 		1186 1300  DFE-538TX
 		1186 1320  SN5200
 		1186 8139  DRN-32TX
@@ -2708,26 +4126,37 @@
 		1429 d010  ND010
 		1432 9130  EN-9130TX
 		1436 8139  RT8139
+		1458 e000  GA-7VM400M/7VT600 Motherboard
 		146c 1439  FE-1439TX
 		1489 6001  GF100TXRII
 		1489 6002  GF100TXRA
 		149c 139a  LFE-8139ATX
 		149c 8139  LFE-8139TX
+		14cb 0200  LNR-100 Family 10/100 Base-TX Ethernet
+		1799 5000  F5D5000 PCI Card/Desktop Network PCI Card
 		2646 0001  EtheRx
 		8e2e 7000  KF-230TX
 		8e2e 7100  KF-230TX/2
 		a0a0 0007  ALN-325C
-	8169  RTL-8169
+	8169  RTL-8169 Gigabit Ethernet
+		1259 c107  CG-LAPCIGT
+		1371 434e  ProG-2000L
+		1458 e000  GA-K8VT800 Pro Motherboard
+		1462 702c  K8T NEO 2 motherboard
+	8180  RTL8180L 802.11b MAC
 	8197  SmartLAN56 56K Modem
 10ed  Ascii Corporation
 	7310  V7310
 10ee  Xilinx Corporation
+	0314  Wildcard TE405P/TE410P (1st Gen)
 	3fc0  RME Digi96
 	3fc1  RME Digi96/8
 	3fc2  RME Digi96/8 Pro
 	3fc3  RME Digi96/8 Pad
 	3fc4  RME Digi9652 (Hammerfall)
 	3fc5  RME Hammerfall DSP
+	3fc6  RME Hammerfall DSP MADI
+	8381  Ellips Santos Frame Grabber
 10ef  Racore Computer Products, Inc.
 	8154  M815x Token Ring Adapter
 10f0  Peritek Corporation
@@ -2743,7 +4172,7 @@
 10f9  PC Direct
 10fa  Truevision
 	000c  TARGA 1000
-10fb  Thesys Gesellschaft für Mikroelektronik mbH
+10fb  Thesys Gesellschaft fuer Mikroelektronik mbH
 	186f  TH 6255
 10fc  I-O Data Device, Inc.
 # What's in the cardbus end of a Sony ACR-A01 card, comes with newer Vaio CD-RW drives
@@ -2759,6 +4188,7 @@
 	9400  INI-940
 	9401  INI-950
 	9500  360P
+	9502  Initio INI-9100UW Ultra Wide SCSI Controller INIC-950P chip
 1102  Creative Labs
 	0002  SB Live! EMU10k1
 		1102 0020  CT4850 SBLive! Value
@@ -2776,10 +4206,22 @@
 		1102 8040  CT4760 SBLive!
 		1102 8051  CT4850 SBLive! Value
 		1102 8061  SBLive! Player 5.1
+		1102 8064  SBLive! 5.1 Model SB0100
+		1102 8065  SBLive! 5.1 Digital Model SB0220
+		1102 8067  SBLive! 5.1 eMicro 28028
 	0004  SB Audigy
 		1102 0051  SB0090 Audigy Player
 		1102 0053  SB0090 Audigy Player/OEM
+		1102 0058  SB0090 Audigy Player/OEM
+		1102 1007  SB0240 Audigy 2 Platinum 6.1
+		1102 2002  SB Audigy 2 ZS (SB0350)
 	0006  [SB Live! Value] EMU10k1X
+	0007  SB Audigy LS
+		1102 0007  SBLive! 24bit
+		1102 1001  SB0310 Audigy LS
+		1102 1002  SB0312 Audigy LS
+		1102 1006  SB0410 SBLive! 24-bit
+	0008  SB0400 Audigy2 Value
 	4001  SB Audigy FireWire Port
 		1102 0010  SB Audigy FireWire Port
 	7002  SB Live! MIDI/Game Port
@@ -2787,41 +4229,97 @@
 	7003  SB Audigy MIDI/Game port
 		1102 0040  SB Audigy MIDI/Game Port
 	7004  [SB Live! Value] Input device controller
-	8938  ES1371
+	7005  SB Audigy LS MIDI/Game port
+		1102 1001  SB0310 Audigy LS MIDI/Game port
+		1102 1002  SB0312 Audigy LS MIDI/Game port
+	8064  SB0100 [SBLive! 5.1 OEM]
+	8938  Ectiva EV1938
+		1033 80e5  SlimTower-Jim (NEC)
+		1071 7150  Mitac 7150
+		110a 5938  Siemens Scenic Mobile 510PIII
+		13bd 100c  Ceres-C (Sharp, Intel BX)
+		13bd 100d  Sharp, Intel Banister
+		13bd 100e  TwinHead P09S/P09S3 (Sharp)
+		13bd f6f1  Marlin (Sharp)
+		14ff 0e70  P88TE (TWINHEAD INTERNATIONAL Corp)
+		14ff c401  Notebook 9100/9200/2000 (TWINHEAD INTERNATIONAL Corp)
+		156d b400  G400 - Geo (AlphaTop (Taiwan))
+		156d b550  G560  (AlphaTop (Taiwan))
+		156d b560  G560  (AlphaTop (Taiwan))
+		156d b700  G700/U700  (AlphaTop (Taiwan))
+		156d b795  G795  (AlphaTop (Taiwan))
+		156d b797  G797  (AlphaTop (Taiwan))
 1103  Triones Technologies, Inc.
 	0003  HPT343
-# Revisions: 01=HPT366, 03=HPT370, 04=HPT370A, 05=HPT372
-	0004  HPT366/368/370/370A/372
+	0004  HPT366/368/370/370A/372/372N
 		1103 0001  HPT370A
+		1103 0003  HPT343 / HPT345 / HPT363 UDMA33
+		1103 0004  HPT366 UDMA66 (r1) / HPT368 UDMA66 (r2) / HPT370 UDMA100 (r3) / HPT370 UDMA100 RAID (r4)
 		1103 0005  HPT370 UDMA100
-	0005  HPT372A
+		1103 0006  HPT302
+		1103 0007  HPT371 UDMA133
+		1103 0008  HPT374 UDMA/ATA133 RAID Controller
+	0005  HPT372A/372N
 	0006  HPT302
-	0007  HPT371
+	0007  HPT371/371N
 	0008  HPT374
+	0009  HPT372N
 1104  RasterOps Corp.
 1105  Sigma Designs, Inc.
 	1105  REALmagic Xcard MPEG 1/2/3/4 DVD Decoder
 	8300  REALmagic Hollywood Plus DVD Decoder
 	8400  EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder
+	8401  EM8401 REALmagic DVD/MPEG-2 A/V Decoder
+	8470  EM8470 REALmagic DVD/MPEG-4 A/V Decoder
+	8471  EM8471 REALmagic DVD/MPEG-4 A/V Decoder
+	8475  EM8475 REALmagic DVD/MPEG-4 A/V Decoder
+		1105 0001  REALmagic X-Card
+	8476  EM8476 REALmagic DVD/MPEG-4 A/V Decoder
+		127d 0000  CineView II
+	8485  EM8485 REALmagic DVD/MPEG-4 A/V Decoder
+	8486  EM8486 REALmagic DVD/MPEG-4 A/V Decoder
 1106  VIA Technologies, Inc.
 	0102  Embedded VIA Ethernet Controller
 	0130  VT6305 1394.A Controller
+# Wrong ID found on Jetway K8M8MS
+	0204  K8M800 Host Bridge
+	0238  K8T890 Host Bridge
+	0259  CN400/PM880 Host Bridge
+	0269  KT880 Host Bridge
+	0282  K8T800Pro Host Bridge
+	0290  K8M890 Host Bridge
+	0296  P4M800 Host Bridge
 	0305  VT8363/8365 [KT133/KM133]
 		1043 8033  A7V Mainboard
+		1043 803e  A7V-E Mainboard
 		1043 8042  A7V133/A7V133-C Mainboard
 		147b a401  KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard
+	0308  PT894 Host Bridge
+	0314  P4M800CE Host Bridge
 	0391  VT8371 [KX133]
 	0501  VT8501 [Apollo MVP4]
 	0505  VT82C505
-	0561  VT82C561
-	0571  VT82C586/B/686A/B PIPC Bus Master IDE
+# Shares chip with :0576. The VT82C576M has :1571 instead of :0561.
+	0561  VT82C576MV
+	0571  VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE
+		1019 0985  P6VXA Motherboard
+		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)
 		1043 8052  VT8233A Bus Master ATA100/66/33 IDE
-		1106 0571  VT8235 Bus Master ATA133/100/66/33 IDE
+		1043 808c  A7V8X / A7V333 motherboard
+		1043 80a1  A7V8X-X motherboard rev. 1.01
+		1043 80ed  A7V600/K8V-X motherboard
+		1106 0571  VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE
+		1179 0001  Magnia Z310
+		1297 f641  FX41 motherboard
 		1458 5002  GA-7VAX Mainboard
+		1462 7020  K8T NEO 2 motherboard
+		147b 1407  KV8-MAX3 motherboard
+		1849 0571  K7VT2 / K7VT4 motherboard
 	0576  VT82C576 3V [Apollo Master]
 	0585  VT82C585VP [Apollo VP1/VPX]
 	0586  VT82C586/A/B PCI-to-ISA [Apollo VP]
 		1106 0000  MVP3 ISA Bridge
+	0591  VT8237A SATA 2-Port Controller
 	0595  VT82C595 [Apollo VP2]
 	0596  VT82C596 ISA [Mobile South]
 		1106 0000  VT82C596/A/B PCI to ISA Bridge
@@ -2830,76 +4328,247 @@
 	0598  VT82C598 [Apollo MVP3]
 	0601  VT8601 [Apollo ProMedia]
 	0605  VT8605 [ProSavage PM133]
+		1043 802c  CUV4X mainboard
 	0680  VT82C680 [Apollo P6]
 	0686  VT82C686 [Apollo Super South]
+		1019 0985  P6VXA Motherboard
+		1043 802c  CUV4X mainboard
 		1043 8033  A7V Mainboard
+		1043 803e  A7V-E Mainboard
 		1043 8040  A7M266 Mainboard
 		1043 8042  A7V133/A7V133-C Mainboard
 		1106 0000  VT82C686/A PCI to ISA Bridge
 		1106 0686  VT82C686/A PCI to ISA Bridge
+		1179 0001  Magnia Z310
+		147b a702  KG7-Lite Mainboard
 	0691  VT82C693A/694x [Apollo PRO133x]
+		1019 0985  P6VXA Motherboard
+		1179 0001  Magnia Z310
 		1458 0691  VT82C691 Apollo Pro System Controller
 	0693  VT82C693 [Apollo Pro Plus]
 	0698  VT82C693A [Apollo Pro133 AGP]
 	0926  VT82C926 [Amazon]
 	1000  VT82C570MV
 	1106  VT82C570MV
-	1571  VT82C416MV
+	1204  K8M800 Host Bridge
+	1208  PT890 Host Bridge
+	1238  K8T890 Host Bridge
+	1258  PT880 Host Bridge
+	1259  CN400/PM880 Host Bridge
+	1269  KT880 Host Bridge
+	1282  K8T800Pro Host Bridge
+	1290  K8M890 Host Bridge
+	1296  P4M800 Host Bridge
+	1308  PT894 Host Bridge
+	1314  P4M800CE Host Bridge
+	1571  VT82C576M/VT82C586
 	1595  VT82C595/97 [Apollo VP2/97]
-	3038  USB
+	2204  K8M800 Host Bridge
+	2208  PT890 Host Bridge
+	2238  K8T890 Host Bridge
+	2258  PT880 Host Bridge
+	2259  CN400/PM880 Host Bridge
+	2269  KT880 Host Bridge
+	2282  K8T800Pro Host Bridge
+	2290  K8M890 Host Bridge
+	2296  P4M800 Host Bridge
+	2308  PT894 Host Bridge
+	2314  P4M800CE Host Bridge
+	287a  VT8251 PCI to PCI Bridge
+	287b  VT8251 PCI to PCIE Bridge
+	287c  VT8251 PCIE Root Port
+	287d  VT8251 PCIE Root Port
+	287e  VT8251 Ultra VLINK Controller
+	3022  CLE266
+	3038  VT82xxxxx UHCI USB 1.1 Controller
 		0925 1234  USB Controller
+		1019 0985  P6VXA Motherboard
+		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)
+		1043 8080  A7V333 motherboard
+		1043 808c  VT6202 USB2.0 4 port controller
+		1043 80a1  A7V8X-X motherboard
+		1043 80ed  A7V600/K8V-X motherboard
+		1179 0001  Magnia Z310
+		1458 5004  GA-7VAX Mainboard
+		1462 7020  K8T NEO 2 motherboard
+		147b 1407  KV8-MAX3 motherboard
+		182d 201d  CN-029 USB2.0 4 port PCI Card
+		1849 3038  K7VT4 motherboard
 	3040  VT82C586B ACPI
 	3043  VT86C100A [Rhine]
 		10bd 0000  VT86C100A Fast Ethernet Adapter
 		1106 0100  VT86C100A Fast Ethernet Adapter
 		1186 1400  DFE-530TX rev A
 	3044  IEEE 1394 Host Controller
+		1025 005a  TravelMate 290
+		1458 1000  GA-7VT600-1394 Motherboard
+		1462 702d  K8T NEO 2 motherboard
+		1462 971d  MS-6917
 	3050  VT82C596 Power Management
 	3051  VT82C596 Power Management
+	3053  VT6105M [Rhine-III]
 	3057  VT82C686 [Apollo Super ACPI]
+		1019 0985  P6VXA Motherboard
 		1043 8033  A7V Mainboard
+		1043 803e  A7V-E Mainboard
 		1043 8040  A7M266 Mainboard
 		1043 8042  A7V133/A7V133-C Mainboard
+		1179 0001  Magnia Z310
 	3058  VT82C686 AC97 Audio Controller
+		0e11 0097  SoundMax Digital Integrated Audio
 		0e11 b194  Soundmax integrated digital audio
+		1019 0985  P6VXA Motherboard
+		1043 1106  A7V133/A7V133-C Mainboard
 		1106 4511  Onboard Audio on EP7KXA
 		1458 7600  Onboard Audio
 		1462 3091  MS-6309 Onboard Audio
+		1462 3300  MS-6330 Onboard Audio
 		15dd 7609  Onboard Audio
-	3059  VT8233 AC97 Audio Controller
+	3059  VT8233/A/8235/8237 AC97 Audio Controller
+		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)
+		1043 8095  A7V8X Motherboard (Realtek ALC650 codec)
+		1043 80a1  A7V8X-X Motherboard
+		1043 80b0  A7V600/K8V Deluxe motherboard (ADI AD1980 codec [SoundMAX])
+		1106 3059  L7VMM2 Motherboard
+		1106 4161  K7VT2 motherboard
+		1297 c160  FX41 motherboard (Realtek ALC650 codec)
 		1458 a002  GA-7VAX Onboard Audio (Realtek ALC650)
+		1462 0080  K8T NEO 2 motherboard
+		1462 3800  KT266 onboard audio
+		147b 1407  KV8-MAX3 motherboard
+		1849 9761  K7VT4 motherboard
+		4005 4710  MSI K7T266 Pro2-RU (MSI-6380 v2) onboard audio (Realtek/ALC 200/200P)
 	3065  VT6102 [Rhine-II]
+		1043 80a1  A7V8X-X Motherboard
 		1106 0102  VT6102 [Rhine II] Embeded Ethernet Controller on VT8235
 		1186 1400  DFE-530TX rev A
 		1186 1401  DFE-530TX rev B
-	3068  Intel 537 [AC97 Modem]
+		13b9 1421  LD-10/100AL PCI Fast Ethernet Adapter (rev.B)
+		1695 3005  VT6103
+		1695 300c  Realtek ALC655 sound chip
+		1849 3065  K7VT4 motherboard
+# This hosts more than just the Intel 537 codec, it also hosts PCtel (SIL33) and SmartLink (SIL34) codecs
+	3068  AC'97 Modem Controller
+		1462 309e  MS-6309 Saturn Motherboard
 	3074  VT8233 PCI to ISA Bridge
 		1043 8052  VT8233A
 	3091  VT8633 [Apollo Pro266]
 	3099  VT8366/A/7 [Apollo KT266/A/333]
 		1043 8064  A7V266-E Mainboard
 		1043 807f  A7V333 Mainboard
+		1849 3099  K7VT2 motherboard
 	3101  VT8653 Host Bridge
 	3102  VT8662 Host Bridge
 	3103  VT8615 Host Bridge
 	3104  USB 2.0
+		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)
+		1043 808c  A7V8X motherboard
+		1043 80a1  A7V8X-X motherboard rev 1.01
+		1043 80ed  A7V600/K8V-X motherboard
+		1297 f641  FX41 motherboard
 		1458 5004  GA-7VAX Mainboard
+		1462 7020  K8T NEO 2 motherboard
+		147b 1407  KV8-MAX3 motherboard
+		182d 201d  CN-029 USB 2.0 4 port PCI Card
+		1849 3104  K7VT4 motherboard
 	3106  VT6105 [Rhine-III]
+		1186 1403  DFE-530TX rev C
+	3108  S3 Unichrome Pro VGA Adapter
 	3109  VT8233C PCI to ISA Bridge
 	3112  VT8361 [KLE133] Host Bridge
-	3116  VT8375 [KM266] Host Bridge
+	3113  VPX/VPX2 PCI to PCI Bridge Controller
+	3116  VT8375 [KM266/KL266] Host Bridge
+		1297 f641  FX41 motherboard
+	3118  S3 Unichrome Pro VGA Adapter
+	3119  VT6120/VT6121/VT6122 Gigabit Ethernet Adapter
+	3122  VT8623 [Apollo CLE266] integrated CastleRock graphics
+	3123  VT8623 [Apollo CLE266]
 	3128  VT8753 [P4X266 AGP]
 	3133  VT3133 Host Bridge
 	3147  VT8233A ISA Bridge
+		1043 808c  A7V333 motherboard
 	3148  P4M266 Host Bridge
+	3149  VIA VT6420 SATA RAID Controller
+		1043 80ed  A7V600/K8V Deluxe/K8V-X motherboard
+		1458 b003  GA-7VM400AM(F) Motherboard
+		1462 7020  K8T Neo 2 Motherboard
+		147b 1407  KV8-MAX3 motherboard
+		1849 3149  K7VT4 motherboard
 	3156  P/KN266 Host Bridge
+	3164  VT6410 ATA133 RAID controller
+		1462 7028  915P/G Neo2
 	3168  VT8374 P4X400 Host Controller/AGP Bridge
 	3177  VT8235 ISA Bridge
+		1019 0a81  L7VTA v1.0 Motherboard (KT400-8235)
+		1043 808c  A7V8X motherboard
+		1043 80a1  A7V8X-X motherboard
+		1297 f641  FX41 motherboard
 		1458 5001  GA-7VAX Mainboard
-	3189  VT8377 [KT400 AGP] Host Bridge
+		1849 3177  K7VT2 motherboard
+	3178  ProSavageDDR P4N333 Host Bridge
+	3188  VT8385 [K8T800 AGP] Host Bridge
+		1043 80a3  K8V Deluxe/K8V-X motherboard
+		147b 1407  KV8-MAX3 motherboard
+	3189  VT8377 [KT400/KT600 AGP] Host Bridge
+		1043 807f  A7V8X motherboard
 		1458 5000  GA-7VAX Mainboard
+		1849 3189  K7VT4 motherboard
+	3204  K8M800 Host Bridge
+	3205  VT8378 [KM400/A] Chipset Host Bridge
+		1458 5000  GA-7VM400M Motherboard
+	3208  PT890 Host Bridge
+	3213  VPX/VPX2 PCI to PCI Bridge Controller
+	3218  K8T800M Host Bridge
+	3227  VT8237 ISA bridge [KT600/K8T800/K8T890 South]
+		1043 80ed  A7V600/K8V-X motherboard
+		1106 3227  DFI KT600-AL Motherboard
+		1458 5001  GA-7VT600 Motherboard
+		147b 1407  KV8-MAX3 motherboard
+		1849 3227  K7VT4 motherboard
+	3238  K8T890 Host Bridge
+	3249  VT6421 IDE RAID Controller
+	3258  PT880 Host Bridge
+	3259  CN400/PM880 Host Bridge
+	3269  KT880 Host Bridge
+	3282  K8T800Pro Host Bridge
+	3288  VIA High Definition Audio Controller
+	3290  K8M890 Host Bridge
+	3296  P4M800 Host Bridge
+	3337  VT8237A PCI to ISA Bridge
+	3349  VT8251 AHCI/SATA 4-Port Controller
+	337a  VT8237A PCI to PCI Bridge
+	337b  VT8237A PCI to PCIE Bridge
+	4149  VIA VT6420 (ATA133) Controller
+	4204  K8M800 Host Bridge
+	4208  PT890 Host Bridge
+	4238  K8T890 Host Bridge
+	4258  PT880 Host Bridge
+	4259  CN400/PM880 Host Bridge
+	4269  KT880 Host Bridge
+	4282  K8T800Pro Host Bridge
+	4290  K8M890 Host Bridge
+	4296  P4M800 Host Bridge
+	4308  PT894 Host Bridge
+	4314  P4M800CE Host Bridge
 	5030  VT82C596 ACPI [Apollo PRO]
+	5208  PT890 I/O APIC Interrupt Controller
+	5238  K8T890 I/O APIC Interrupt Controller
+	5290  K8M890 I/O APIC Interrupt Controller
+	5308  PT894 I/O APIC Interrupt Controller
 	6100  VT85C100A [Rhine II]
+	7204  K8M800 Host Bridge
+	7205  VT8378 [S3 UniChrome] Integrated Video
+		1458 d000  Gigabyte GA-7VM400(A)M(F) Motherboard
+	7208  PT890 Host Bridge
+	7238  K8T890 Host Bridge
+	7258  PT880 Host Bridge
+	7259  CN400/PM880 Host Bridge
+	7269  KT880 Host Bridge
+	7282  K8T800Pro Host Bridge
+	7290  K8M890 Host Bridge
+	7296  P4M800 Host Bridge
+	7308  PT894 Host Bridge
+	7314  P4M800CE Host Bridge
 	8231  VT8231 [PCI-to-ISA Bridge]
 	8235  VT8235 ACPI
 	8305  VT8363/8365 [KT133/KM133 AGP]
@@ -2908,17 +4577,36 @@
 	8596  VT82C596 [Apollo PRO AGP]
 	8597  VT82C597 [Apollo VP3 AGP]
 	8598  VT82C598/694x [Apollo MVP3/Pro133x AGP]
+		1019 0985  P6VXA Motherboard
 	8601  VT8601 [Apollo ProMedia AGP]
 	8605  VT8605 [PM133 AGP]
 	8691  VT82C691 [Apollo Pro]
 	8693  VT82C693 [Apollo Pro Plus] PCI Bridge
+	a208  PT890 PCI to PCI Bridge Controller
+	a238  K8T890 PCI to PCI Bridge Controller
 	b091  VT8633 [Apollo Pro266 AGP]
 	b099  VT8366/A/7 [Apollo KT266/A/333 AGP]
 	b101  VT8653 AGP Bridge
 	b102  VT8362 AGP Bridge
 	b103  VT8615 AGP Bridge
 	b112  VT8361 [KLE133] AGP Bridge
+	b113  VPX/VPX2 I/O APIC Interrupt Controller
+	b115  VT8363/8365 [KT133/KM133] PCI Bridge
 	b168  VT8235 PCI Bridge
+	b188  VT8237 PCI bridge [K8T800/K8T890 South]
+		147b 1407  KV8-MAX3 motherboard
+	b198  VT8237 PCI Bridge
+	b213  VPX/VPX2 I/O APIC Interrupt Controller
+	c208  PT890 PCI to PCI Bridge Controller
+	c238  K8T890 PCI to PCI Bridge Controller
+	d104  VT8237 Integrated Fast Ethernet Controller
+	d208  PT890 PCI to PCI Bridge Controller
+	d213  VPX/VPX2 PCI to PCI Bridge Controller
+	d238  K8T890 PCI to PCI Bridge Controller
+	e208  PT890 PCI to PCI Bridge Controller
+	e238  K8T890 PCI to PCI Bridge Controller
+	f208  PT890 PCI to PCI Bridge Controller
+	f238  K8T890 PCI to PCI Bridge Controller
 1107  Stratus Computers
 	0576  VIA VT82C570MV [Apollo] (Wrong vendor ID!)
 1108  Proteon, Inc.
@@ -2935,7 +4623,19 @@
 110a  Siemens Nixdorf AG
 	0002  Pirahna 2-port
 	0005  Tulip controller, power management, switch extender
-	2102  DSCC4 WAN adapter
+	0006  FSC PINC (I/O-APIC)
+	0015  FSC Multiprocessor Interrupt Controller
+	001d  FSC Copernicus Management Controller
+	007b  FSC Remote Service Controller, mailbox device
+	007c  FSC Remote Service Controller, shared memory device
+	007d  FSC Remote Service Controller, SMIC device
+	2101  HST SAPHIR V Primary PCI (ISDN/PMx)
+# Superfastcom-PCI (Commtech, Inc.) or DSCC4 WAN Adapter
+	2102  DSCC4 PEB/PEF 20534 DMA Supported Serial Communication Controller with 4 Channels
+	2104  Eicon Diva 2.02 compatible passive ISDN card
+	3142  SIMATIC NET CP 5613A1 (Profibus Adapter)
+	4021  SIMATIC NET CP 5512 (Profibus and MPI Cardbus Adapter)
+	4029  SIMATIC NET CP 5613A2 (Profibus Adapter)
 	4942  FPGA I-Bus Tracer for MBD
 	6120  SZB6120
 110b  Chromatic Research Inc.
@@ -2960,13 +4660,17 @@
 		103c 1207  EN-1207D Fast Ethernet Adapter
 		1113 1211  EN-1207D Fast Ethernet Adapter
 	1216  EN-1216 Ethernet Adapter
+		1113 2242  EN2242 10/100 Ethernet Mini-PCI Card
 		111a 1020  SpeedStream 1020 PCI 10/100 Ethernet Adaptor [EN-1207F-TX ?]
 	1217  EN-1217 Ethernet Adapter
 	5105  10Mbps Network card
 	9211  EN-1207D Fast Ethernet Adapter
 		1113 9211  EN-1207D Fast Ethernet Adapter
-	9511  Fast Ethernet Adapter
+	9511  21x4x DEC-Tulip compatible Fast Ethernet
+	d301  CPWNA100 (Philips wireless PCMCIA)
+	ec02  SMC 1244TX v3
 1114  Atmel Corporation
+	0506  at76c506 802.11b Wireless Network Adaptor
 1115  3D Labs
 1116  Data Translation
 	0022  DT3001
@@ -2987,14 +4691,18 @@
 	0003  GDT 6120/6520
 	0004  GDT 6530
 	0005  GDT 6550
-	0006  GDT 6x17
-	0007  GDT 6x27
+	0006  GDT 6117/6517
+	0007  GDT 6127/6527
 	0008  GDT 6537
-	0009  GDT 6557
+	0009  GDT 6557/6557-ECC
 	000a  GDT 6115/6515
 	000b  GDT 6125/6525
 	000c  GDT 6535
 	000d  GDT 6555
+	0010  GDT 6115/6515
+	0011  GDT 6125/6525
+	0012  GDT 6535
+	0013  GDT 6555/6555-ECC
 	0100  GDT 6117RP/6517RP
 	0101  GDT 6127RP/6527RP
 	0102  GDT 6537RP
@@ -3049,7 +4757,8 @@
 	0211  GDT 6529RD/6629RD
 	0260  GDT 7519RN/7619RN
 	0261  GDT 7529RN/7629RN
-	0300  GDT Raid Controller
+	02ff  GDT MAXRP
+	0300  GDT NEWRX
 111a  Efficient Networks, Inc
 	0000  155P-MF1 (FPGA)
 	0002  155P-MF1 (ASIC)
@@ -3065,12 +4774,15 @@
 		111a 0a09  ENI-3060 ADSL (VPI=<0..15>)
 	0007  SpeedStream ADSL
 		111a 1001  ENI-3061 ADSL [ASIC]
+	1203  SpeedStream 1023 Wireless PCI Adapter
 111b  Teledyne Electronic Systems
 111c  Tricord Systems Inc.
 	0001  Powerbis Bridge
-111d  Integrated Device Tech
-	0001  IDT77211 ATM Adapter
-	0003  IDT77252 ATM network controller
+111d  Integrated Device Technology, Inc.
+	0001  IDT77201/77211 155Mbps ATM SAR Controller [NICStAR]
+	0003  IDT77222/77252 155Mbps ATM MICRO ABR SAR Controller
+	0004  IDT77V252 155Mbps ATM MICRO ABR SAR Controller
+	0005  IDT77V222 155Mbps ATM MICRO ABR SAR Controller
 111e  Eldec
 111f  Precision Digital Images
 	4a47  Precision MX Video engine interface
@@ -3101,17 +4813,94 @@
 	0001  MVC IM-PCI Video frame grabber/processor
 1130  Computervision
 1131  Philips Semiconductors
+	1561  USB 1.1 Host Controller
+	1562  USB 2.0 Host Controller
 	3400  SmartPCI56(UCB1500) 56K Modem
+	5400  TriMedia TM1000/1100
+	5402  TriMedia TM-1300
+		1244 0f00  Fritz!Card DSL
 	7130  SAA7130 Video Broadcast Decoder
-# PCI audio and video broadcast decoder (http://www.semiconductors.philips.com/pip/saa7134hl)
-	7134  SAA7134
+		102b 48d0  Matrox CronosPlus
+		1048 226b  ELSA EX-VISION 500TV
+		1131 2001  10MOONS PCI TV CAPTURE CARD
+		1461 050c  Nagase Sangyo TransGear 3000TV
+		1461 10ff  AVerMedia DVD EZMaker
+		1461 2108  AverMedia AverTV/305
+		1461 2115  AverMedia AverTV Studio 305
+		153b 1152  Terratec Cinergy 200 TV
+		185b c100  Compro VideoMate TV PVR/FM
+		5168 0138  LifeView FlyVIDEO2000
+	7133  SAA7133 Video Broadcast Decoder
+		1019 4cb5  Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM)
+		1043 0210  MiniPCI TV Card
+		1043 4843  ASUS TV-FM 7133
+		1131 2001  Proteus Pro [philips reference design]
+		1461 f31f  Avermedia AVerTV GO 007 FM
+		1489 0214  LifeView FlyTV Platinum FM/Genius VideoWonder ProTV
+		153b 1162  Terratec Cinergy 400 mobile
+		185b c100  Compro VideoMate TV Gold+
+		5168 0138  LifeView FlyVideo 3000
+		5168 0212  LifeView FlyTV Platinum mini
+		5168 0214  LifeView FlyTV Platinum
+		5168 0306  LifeView FlyDVB-T DUO
+		5168 0502  LifeView FlyDVB-T Duo CardBus
+	7134  SAA7134 Video Broadcast Decoder
+		1019 4cb4  Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM)
+		1043 4840  ASUS TV-FM 7134
+		1043 4842  TV-FM Card 7134
+		1131 4e85  SKNet Monster TV
+		1131 6752  EMPRESS
+		1131 7133  AOPEN VA1000 POWER
+		11bd 002b  Pinnacle PCTV Stereo (saa7134)
+		11bd 002d  Pinnacle PCTV 300i DVB-T + PAL
+		1461 9715  Avermedia AVerTV Studio 307
+		1461 a70a  Avermedia AVerTV 307
+		1461 a70b  AverMedia M156 / Medion 2819
+		1461 d6ee  AVerMedia Cardbus TV/Radio
+		153b 1142  Terratec Cinergy 400 TV
+		153b 1143  Terratec Cinergy 600 TV
+		153b 1158  Terratec Cinergy 600 TV MK3
+		1540 9524  ProVideo PV952
+		16be 0003  Medion 7134
+		185b c200  Compro VideoMate Gold+ Pal
+		1894 a006  KNC One TV-Station DVR
+		1894 fe01  KNC One TV-Station RDS / Typhoon TV Tuner RDS
+	7135  SAA7135 Video Broadcast Decoder
+		1421 0350  ADS Tech Instant TV
+		1421 0370  ADS Tech Instant TV (cardbus version)
+		5168 0212  LifeView FlyTV Platinum Mini
 	7145  SAA7145
 	7146  SAA7146
+		110a 0000  Fujitsu/Siemens DVB-C card rev1.5
+		110a ffff  Fujitsu/Siemens DVB-C card rev1.5
+		1131 4f56  KNC1 DVB-S Budget
+		1131 4f60  Fujitsu-Siemens Activy DVB-S Budget Rev AL
+		1131 4f61  Activy DVB-S Budget Rev GR
+# It has an LSI companion chip.
+		1131 5f61  Activy DVB-T Budget
 		114b 2003  DVRaptor Video Edit/Capture Card
 		11bd 0006  DV500 Overlay
 		11bd 000a  DV500 Overlay
+		11bd 000f  DV500 Overlay
+		13c2 0000  Siemens/Technotrend/Hauppauge DVB card rev1.3 or rev1.5
+		13c2 0001  Technotrend/Hauppauge DVB card rev1.3 or rev1.6
+		13c2 0002  Technotrend/Hauppauge DVB card rev2.1
+		13c2 0003  Technotrend/Hauppauge DVB card rev2.1
+		13c2 0004  Technotrend/Hauppauge DVB card rev2.1
+		13c2 0006  Technotrend/Hauppauge DVB card rev1.3 or rev1.6
+		13c2 0008  Technotrend/Hauppauge DVB-T
+		13c2 000a  Octal/Technotrend DVB-C for iTV
+		13c2 1003  Technotrend-Budget / Hauppauge WinTV-NOVA-S DVB card
+		13c2 1004  Technotrend-Budget / Hauppauge WinTV-NOVA-C DVB card
+		13c2 1005  Technotrend-Budget / Hauppauge WinTV-NOVA-T DVB card
+		13c2 100c  Technotrend-Budget / Hauppauge WinTV-NOVA-CI DVB card
+		13c2 100f  Technotrend-Budget / Hauppauge WinTV-NOVA-CI DVB card
+		13c2 1011  Technotrend-Budget / Hauppauge WinTV-NOVA-T DVB card
+		13c2 1013  SATELCO Multimedia DVB
+		13c2 1102  Technotrend/Hauppauge DVB card rev2.1
+	9730  SAA9730 Integrated Multimedia and Peripheral Controller
 1132  Mitel Corp.
-1133  Eicon Technology Corporation
+1133  Eicon Networks Corporation
 	7901  EiconCard S90
 	7902  EiconCard S90
 	7911  EiconCard S91
@@ -3123,26 +4912,67 @@
 	b921  EiconCard P92
 	b922  EiconCard P92
 	b923  EiconCard P92
-	e001  DIVA 20PRO
-		1133 e001  DIVA Pro 2.0 S/T
-	e002  DIVA 20
-		1133 e002  DIVA 2.0 S/T
-	e003  DIVA 20PRO_U
-		1133 e003  DIVA Pro 2.0 U
-	e004  DIVA 20_U
-		1133 e004  DIVA 2.0 U
-	e005  DIVA LOW
-		1133 e005  DIVA 2.01 S/T
-	e00b  DIVA 2.02
-	e010  DIVA Server BRI-2M
-		1133 e010  DIVA Server BRI-2M
-	e012  DIVA Server BRI-8M
-		1133 e012  DIVA Server BRI-8M
-	e014  DIVA Server PRI-30M
-		1133 e014  DIVA Server PRI-30M
-	e018  DIVA Server BRI-2M/-2F
+	e001  Diva Pro 2.0 S/T
+	e002  Diva 2.0 S/T PCI
+	e003  Diva Pro 2.0 U
+	e004  Diva 2.0 U PCI
+	e005  Diva 2.01 S/T PCI
+	e006  Diva CT S/T PCI
+	e007  Diva CT U PCI
+	e008  Diva CT Lite S/T PCI
+	e009  Diva CT Lite U PCI
+	e00a  Diva ISDN+V.90 PCI
+	e00b  Diva 2.02 PCI S/T
+	e00c  Diva 2.02 PCI U
+	e00d  Diva ISDN Pro 3.0 PCI
+	e00e  Diva ISDN+CT S/T PCI Rev 2
+	e010  Diva Server BRI-2M PCI
+		110a 0021  Fujitsu Siemens ISDN S0
+	e011  Diva Server BRI S/T Rev 2
+	e012  Diva Server 4BRI-8M PCI
+	e013  Diva Server 4BRI Rev 2
+		1133 1300  Diva Server V-4BRI-8
+		1133 e013  Diva Server 4BRI-8M 2.0 PCI
+	e014  Diva Server PRI-30M PCI
+	e015  DIVA Server PRI Rev 2
+		1133 e015  Diva Server PRI 2.0 PCI
+	e016  Diva Server Voice 4BRI PCI
+	e017  Diva Server Voice 4BRI Rev 2
+		1133 e017  Diva Server Voice 4BRI-8M 2.0 PCI
+	e018  Diva Server BRI-2M 2.0 PCI
+		1133 1800  Diva Server V-BRI-2
+		1133 e018  Diva Server BRI-2M 2.0 PCI
+	e019  Diva Server Voice PRI Rev 2
+		1133 e019  Diva Server Voice PRI 2.0 PCI
+	e01a  Diva Server 2FX
+	e01b  Diva Server Voice BRI-2M 2.0 PCI
+		1133 e01b  Diva Server Voice BRI-2M 2.0 PCI
+	e01c  Diva Server PRI Rev 3
+		1133 1c01  Diva Server PRI/E1/T1-8
+		1133 1c02  Diva Server PRI/T1-24
+		1133 1c03  Diva Server PRI/E1-30
+		1133 1c04  Diva Server PRI/E1/T1
+		1133 1c05  Diva Server V-PRI/T1-24
+		1133 1c06  Diva Server V-PRI/E1-30
+		1133 1c07  Diva Server PRI/E1/T1-8 Cornet NQ
+		1133 1c08  Diva Server PRI/T1-24 Cornet NQ
+		1133 1c09  Diva Server PRI/E1-30 Cornet NQ
+		1133 1c0a  Diva Server PRI/E1/T1 Cornet NQ
+		1133 1c0b  Diva Server V-PRI/T1-24 Cornet NQ
+		1133 1c0c  Diva Server V-PRI/E1-30 Cornet NQ
+	e01e  Diva Server 2PRI
+	e020  Diva Server 4PRI
+	e024  Diva Server Analog-4P
+		1133 2400  Diva Server V-Analog-4P
+		1133 e024  Diva Server Analog-4P
+	e028  Diva Server Analog-8P
+		1133 2800  Diva Server V-Analog-8P
+		1133 e028  Diva Server Analog-8P
+	e02a  Diva Server IPM-300
+	e02c  Diva Server IPM-600
 1134  Mercury Computer Systems
 	0001  Raceway Bridge
+	0002  Dual PCI to RapidIO Bridge
 1135  Fuji Xerox Co Ltd
 	0001  Printer controller
 1136  Momentum Data Systems
@@ -3188,9 +5018,11 @@
 	f012  NinjaSCSI-32 Logitec
 	f013  NinjaSCSI-32 Logitec
 	f015  NinjaSCSI-32 Melco
+	f020  NinjaSCSI-32 Sony PCGA-DVD51
 1146  Force Computers
 1147  Interface Corp
-1148  Syskonnect (Schneider & Koch)
+# Nee Schneider & Koch
+1148  SysKonnect
 	4000  FDDI Adapter
 		0e11 b03b  Netelligent 100 FDDI DAS Fibre SC
 		0e11 b03c  Netelligent 100 FDDI SAS Fibre SC
@@ -3208,16 +5040,56 @@
 		1148 5843  FDDI SK-5843 (SK-NET FDDI-LP64)
 		1148 5844  FDDI SK-5844 (SK-NET FDDI-LP64 DAS)
 	4200  Token Ring adapter
-	4300  Gigabit Ethernet
-		1148 9821  SK-9821 (1000Base-T single link)
-		1148 9822  SK-9822 (1000Base-T dual link)
-		1148 9841  SK-9841 (1000Base-LX single link)
-		1148 9842  SK-9842 (1000Base-LX dual link)
-		1148 9843  SK-9843 (1000Base-SX single link)
-		1148 9844  SK-9844 (1000Base-SX dual link)
-		1148 9861  SK-9861 (1000Base-SX VF45 single link)
-		1148 9862  SK-9862 (1000Base-SX VF45 dual link)
-	4400  Gigabit Ethernet
+	4300  SK-98xx Gigabit Ethernet Server Adapter
+		1148 9821  SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T)
+		1148 9822  SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link)
+		1148 9841  SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX)
+		1148 9842  SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link)
+		1148 9843  SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX)
+		1148 9844  SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link)
+		1148 9861  SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition)
+		1148 9862  SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link)
+		1148 9871  SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX)
+		1148 9872  SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link)
+		1259 2970  AT-2970SX Gigabit Ethernet Adapter
+		1259 2971  AT-2970LX Gigabit Ethernet Adapter
+		1259 2972  AT-2970TX Gigabit Ethernet Adapter
+		1259 2973  AT-2971SX Gigabit Ethernet Adapter
+		1259 2974  AT-2971T Gigabit Ethernet Adapter
+		1259 2975  AT-2970SX/2SC Gigabit Ethernet Adapter
+		1259 2976  AT-2970LX/2SC Gigabit Ethernet Adapter
+		1259 2977  AT-2970TX/2TX Gigabit Ethernet Adapter
+	4320  SK-98xx V2.0 Gigabit Ethernet Adapter
+		1148 0121  Marvell RDK-8001 Adapter
+		1148 0221  Marvell RDK-8002 Adapter
+		1148 0321  Marvell RDK-8003 Adapter
+		1148 0421  Marvell RDK-8004 Adapter
+		1148 0621  Marvell RDK-8006 Adapter
+		1148 0721  Marvell RDK-8007 Adapter
+		1148 0821  Marvell RDK-8008 Adapter
+		1148 0921  Marvell RDK-8009 Adapter
+		1148 1121  Marvell RDK-8011 Adapter
+		1148 1221  Marvell RDK-8012 Adapter
+		1148 3221  SK-9521 V2.0 10/100/1000Base-T Adapter
+		1148 5021  SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter
+		1148 5041  SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter
+		1148 5043  SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter
+		1148 5051  SK-9851 V2.0 Gigabit Ethernet 1000Base-SX Adapter
+		1148 5061  SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter
+		1148 5071  SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter
+		1148 9521  SK-9521 10/100/1000Base-T Adapter
+	4400  SK-9Dxx Gigabit Ethernet Adapter
+	4500  SK-9Mxx Gigabit Ethernet Adapter
+	9000  SK-9Sxx Gigabit Ethernet Server Adapter PCI-X
+	9843  [Fujitsu] Gigabit Ethernet
+	9e00  SK-9Exx 10/100/1000Base-T Adapter
+		1148 2100  SK-9E21 Server Adapter
+		1148 21d0  SK-9E21D 10/100/1000Base-T Adapter
+		1148 2200  SK-9E22 Server Adapter
+		1148 8100  SK-9E81 Server Adapter
+		1148 8200  SK-9E82 Server Adapter
+		1148 9100  SK-9E91 Server Adapter
+		1148 9200  SK-9E92 Server Adapter
 1149  Win System Corporation
 114a  VMIC
 	5579  VMIPCI-5579 (Reflective Memory Card)
@@ -3258,14 +5130,28 @@
 		114f 0031  DataFire RAS BRI S/T Adapter
 	0026  AccelePort 4r 920
 	0027  AccelePort Xr 920
+	0028  ClassicBoard 4
+	0029  ClassicBoard 8
 	0034  AccelePort 2r 920
 	0035  DataFire DSP T1/E1/PRI cPCI
 	0040  AccelePort Xp
-	0042  AccelePort 2p PCI
+	0042  AccelePort 2p
+	0043  AccelePort 4p
+	0044  AccelePort 8p
+	0045  AccelePort 16p
+	004e  AccelePort 32p
 	0070  Datafire Micro V IOM2 (Europe)
 	0071  Datafire Micro V (Europe)
 	0072  Datafire Micro V IOM2 (North America)
 	0073  Datafire Micro V (North America)
+	00b0  Digi Neo 4
+	00b1  Digi Neo 8
+	00c8  Digi Neo 2 DB9
+	00c9  Digi Neo 2 DB9 PRI
+	00ca  Digi Neo 2 RJ45
+	00cb  Digi Neo 2 RJ45 PRI
+	00d0  ClassicBoard 4 422
+	00d1  ClassicBoard 8 422
 	6001  Avanstar
 1150  Thinking Machines Corp
 1151  JAE Electronics Inc.
@@ -3312,6 +5198,7 @@
 	000f  Cardbus Ethernet 10/100
 		1014 0183  10/100 EtherJet Cardbus Adapter
 		115d 0183  Cardbus Ethernet 10/100
+	00d4  Mini-PCI K56Flex Modem
 	0101  Cardbus 56k modem
 		115d 1081  Cardbus 56k Modem
 	0103  Cardbus Ethernet + 56k Modem
@@ -3331,29 +5218,58 @@
 1164  Advanced Peripherals Technologies
 1165  Imagraph Corporation
 	0001  Motion TPEG Recorder/Player with audio
-1166  ServerWorks
+# nee ServerWorks
+1166  Broadcom
+	0000  CMIC-LE
 	0005  CNB20-LE Host Bridge
+	0006  CNB20HE Host Bridge
 	0007  CNB20-LE Host Bridge
 	0008  CNB20HE Host Bridge
 	0009  CNB20LE Host Bridge
 	0010  CIOB30
 	0011  CMIC-HE
-	0012  CMIC-LE
+	0012  CMIC-WS Host Bridge (GC-LE chipset)
 	0013  CNB20-HE Host Bridge
-	0014  CNB20-HE Host Bridge
+	0014  CMIC-LE Host Bridge (GC-LE chipset)
 	0015  CMIC-GC Host Bridge
 	0016  CMIC-GC Host Bridge
 	0017  GCNB-LE Host Bridge
+	0036  HT1000 PCI/PCI-X bridge
+	0101  CIOB-X2 PCI-X I/O Bridge
+	0104  HT1000 PCI/PCI-X bridge
+	0110  CIOB-E I/O Bridge with Gigabit Ethernet
+	0130  HT1000 PCI-X bridge
+	0132  HT1000 PCI-Express bridge
 	0200  OSB4 South Bridge
 	0201  CSB5 South Bridge
+		4c53 1080  CT8 mainboard
 	0203  CSB6 South Bridge
+		1734 1012  Primergy RX300
+	0205  HT1000 Legacy South Bridge
 	0211  OSB4 IDE Controller
 	0212  CSB5 IDE Controller
+		4c53 1080  CT8 mainboard
 	0213  CSB6 RAID/IDE Controller
+		1028 c134  Poweredge SC600
+		1734 1012  Primergy RX300
+	0214  HT1000 Legacy IDE controller
+	0217  CSB6 IDE Controller
+		1028 4134  Poweredge SC600
 	0220  OSB4/CSB5 OHCI USB Controller
+		4c53 1080  CT8 mainboard
 	0221  CSB6 OHCI USB Controller
-	0225  GCLE Host Bridge
+		1734 1012  Primergy RX300
+	0223  HT1000 USB Controller
+	0225  CSB5 LPC bridge
 	0227  GCLE-2 Host Bridge
+		1734 1012  Primergy RX300
+	0230  CSB5 LPC bridge
+		4c53 1080  CT8 mainboard
+	0234  HT1000 LPC Bridge
+	0240  K2 SATA
+	0241  RAIDCore RC4000
+	0242  RAIDCore BC4000
+	024a  BCM5785 (HT1000) SATA Native SATA Mode
 1167  Mutoh Industries Inc
 1168  Thine Electronics Inc
 1169  Centre for Development of Advanced Computing
@@ -3378,15 +5294,18 @@
 1178  Alfa, Inc.
 	afa1  Fast Ethernet Adapter
 1179  Toshiba America Info Systems
+	0102  Extended IDE Controller
 	0103  EX-IDE Type-B
 	0404  DVD Decoder card
 	0406  Tecra Video Capture device
 	0407  DVD Decoder card (Version 2)
-	0601  601
+	0601  CPU to PCI bridge
+		1179 0001  Satellite Pro
 	0603  ToPIC95 PCI to CardBus Bridge for Notebooks
 	060a  ToPIC95
+		1179 0001  Satellite Pro
 	060f  ToPIC97
-	0617  ToPIC95 PCI to Cardbus Bridge with ZV Support
+	0617  ToPIC100 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
@@ -3397,6 +5316,9 @@
 117a  A-Trend Technology
 117b  L G Electronics, Inc.
 117c  Atto Technology
+	0030  Ultra320 SCSI Host Adapter
+		117c 8013  ExpressPCI UL4D
+		117c 8014  ExpressPCI UL4S
 117d  Becton & Dickinson
 117e  T/R Systems
 117f  Integrated Circuit Systems
@@ -3407,8 +5329,10 @@
 		144d c006  vpr Matrix 170B4 CardBus bridge
 	0476  RL5c476 II
 		1014 0185  ThinkPad A/T/X Series
+		1028 0188  Inspiron 6000 laptop
 		104d 80df  Vaio PCG-FX403
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+		14ef 0220  PCD-RP-220S
 	0477  RL5c477
 	0478  RL5c478
 		1014 0184  ThinkPad A30p (2653-64G)
@@ -3418,6 +5342,12 @@
 		144d c006  vpr Matrix 170B4
 	0552  R5C552 IEEE 1394 Controller
 		1014 0511  ThinkPad A/T/X Series
+	0575  R5C575 SD Bus Host Adapter
+	0576  R5C576 SD Bus Host Adapter
+	0592  R5C592 Memory Stick Bus Host Adapter
+	0822  R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter
+		1028 0188  Inspiron 6000 laptop
+	0852  xD-Picture Card Controller
 1181  Telmatics International
 1183  Fujikura Ltd
 1184  Forks Inc
@@ -3427,12 +5357,35 @@
 	1002  DL10050 Sundance Ethernet
 		1186 1002  DFE-550TX
 		1186 1012  DFE-580TX
+	1025  AirPlus Xtreme G DWL-G650 Adapter
+	1026  AirXpert DWL-AG650 Wireless Cardbus Adapter
+	1043  AirXpert DWL-AG650 Wireless Cardbus Adapter
 	1300  RTL8139 Ethernet
 		1186 1300  DFE-538TX 10/100 Ethernet Adapter
 		1186 1301  DFE-530TX+ 10/100 Ethernet Adapter
+		1186 1303  DFE-528TX 10/100 Fast Ethernet PCI Adapter
 	1340  DFE-690TXD CardBus PC Card
+	1541  DFE-680TXD CardBus PC Card
 	1561  DRP-32TXD Cardbus PC Card
-	4000  DL2K Ethernet
+	2027  AirPlus Xtreme G DWL-G520 Adapter
+	3203  AirPlus Xtreme G DWL-G520 Adapter
+	3300  DWL-510 2.4GHz Wireless PCI Adapter
+	3a03  AirPro DWL-A650 Wireless Cardbus Adapter(rev.B)
+	3a04  AirPro DWL-AB650 Multimode Wireless Cardbus Adapter
+	3a05  AirPro DWL-AB520 Multimode Wireless PCI Adapter
+	3a07  AirXpert DWL-AG650 Wireless Cardbus Adapter
+	3a08  AirXpert DWL-AG520 Wireless PCI Adapter
+	3a10  AirXpert DWL-AG650 Wireless Cardbus Adapter(rev.B)
+	3a11  AirXpert DWL-AG520 Wireless PCI Adapter(rev.B)
+	3a12  AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C)
+	3a13  AirPlus DWL-G520 Wireless PCI Adapter(rev.B)
+	3a14  AirPremier DWL-AG530 Wireless PCI Adapter
+	3a63  AirXpert DWL-AG660 Wireless Cardbus Adapter
+	4000  DL2000-based Gigabit Ethernet
+	4300  DGE-528T Gigabit Ethernet Adapter
+	4c00  Gigabit Ethernet Adapter
+		1186 4c00  DGE-530T Gigabit Ethernet Adapter
+	8400  D-Link DWL-650+ CardBus PC Card
 1187  Advanced Technology Laboratories, Inc.
 1188  Shima Seiki Manufacturing Ltd.
 1189  Matsushita Electronics Co Ltd
@@ -3477,6 +5430,10 @@
 	8030  AEC6712S SCSI
 	8040  AEC6712D SCSI
 	8050  AEC6712SUW SCSI
+	8060  AEC6712 SCSI
+	8080  AEC67160 SCSI
+	8081  AEC67160S SCSI
+	808a  AEC67162 2-ch. LVD SCSI
 1192  Densan Company Ltd
 1193  Zeitnet Inc.
 	0001  1221
@@ -3485,6 +5442,7 @@
 1195  Ratoc System Inc
 1196  Hytec Electronics Ltd
 1197  Gage Applied Sciences, Inc.
+	010c  CompuScope 82G 8bit 2GS/s Analog Input Card
 1198  Lambda Systems Inc
 1199  Attachmate Corporation
 119a  Mind Share, Inc.
@@ -3508,11 +5466,131 @@
 11a9  InnoSys Inc.
 	4240  AMCC S933Q Intelligent Serial Card
 11aa  Actel
-11ab  Galileo Technology Ltd.
+# Nee Galileo Technology, Inc.
+11ab  Marvell Technology Group Ltd.
 	0146  GT-64010/64010A System Controller
+	138f  W8300 802.11 Adapter (rev 07)
+	1fa6  Marvell W8300 802.11 Adapter
+	1fa7  88W8310 and 88W8000G [Libertas] 802.11g client chipset
+	1faa  88w8335 [Libertas] 802.11b/g Wireless
+	4320  88E8001 Gigabit Ethernet Controller
+		1019 0f38  Marvell 88E8001 Gigabit Ethernet Controller (ECS)
+		1019 8001  Marvell 88E8001 Gigabit Ethernet Controller (ECS)
+		1043 173c  Marvell 88E8001 Gigabit Ethernet Controller (Asus)
+		1043 811a  Marvell 88E8001 Gigabit Ethernet Controller (Asus)
+		105b 0c19  Marvell 88E8001 Gigabit Ethernet Controller (Foxconn)
+		10b8 b452  EZ Card 1000 (SMC9452TXV.2)
+		11ab 0121  Marvell RDK-8001
+		11ab 0321  Marvell RDK-8003
+		11ab 1021  Marvell RDK-8010
+		11ab 5021  Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (64 bit)
+		11ab 9521  Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (32 bit)
+		1458 e000  Marvell 88E8001 Gigabit Ethernet Controller (Gigabyte)
+		147b 1406  Marvell 88E8001 Gigabit Ethernet Controller (Abit)
+		15d4 0047  Marvell 88E8001 Gigabit Ethernet Controller (Iwill)
+		1695 9025  Marvell 88E8001 Gigabit Ethernet Controller (Epox)
+		17f2 1c03  Marvell 88E8001 Gigabit Ethernet Controller (Albatron)
+		270f 2803  Marvell 88E8001 Gigabit Ethernet Controller (Chaintech)
+	4350  88E8035 Fast Ethernet Controller
+		1179 0001  Marvell 88E8035 Fast Ethernet Controller (Toshiba)
+		11ab 3521  Marvell RDK-8035
+		1854 000d  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 000e  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 000f  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 0011  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 0012  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 0016  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 0017  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 0018  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 0019  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 001c  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 001e  Marvell 88E8035 Fast Ethernet Controller (LGE)
+		1854 0020  Marvell 88E8035 Fast Ethernet Controller (LGE)
+	4351  88E8036 Fast Ethernet Controller
+		107b 4009  Marvell 88E8036 Fast Ethernet Controller (Wistron)
+		10f7 8338  Marvell 88E8036 Fast Ethernet Controller (Panasonic)
+		1179 0001  Marvell 88E8036 Fast Ethernet Controller (Toshiba)
+		1179 ff00  Marvell 88E8036 Fast Ethernet Controller (Compal)
+		1179 ff10  Marvell 88E8036 Fast Ethernet Controller (Inventec)
+		11ab 3621  Marvell RDK-8036
+		13d1 ac12  Abocom EFE3K - 10/100 Ethernet Expresscard
+		161f 203d  Marvell 88E8036 Fast Ethernet Controller (Arima)
+		1854 000d  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 000e  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 000f  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 0011  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 0012  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 0016  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 0017  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 0018  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 0019  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 001c  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 001e  Marvell 88E8036 Fast Ethernet Controller (LGE)
+		1854 0020  Marvell 88E8036 Fast Ethernet Controller (LGE)
+	4360  88E8052 Gigabit Ethernet Controller
+		1043 8134  Marvell 88E8052 Gigabit Ethernet Controller (Asus)
+		107b 4009  Marvell 88E8052 Gigabit Ethernet Controller (Wistron)
+		11ab 5221  Marvell RDK-8052
+		1458 e000  Marvell 88E8052 Gigabit Ethernet Controller (Gigabyte)
+		1462 052c  Marvell 88E8052 Gigabit Ethernet Controller (MSI)
+		1849 8052  Marvell 88E8052 Gigabit Ethernet Controller (ASRock)
+		a0a0 0509  Marvell 88E8052 Gigabit Ethernet Controller (Aopen)
+	4361  88E8050 Gigabit Ethernet Controller
+		107b 3015  Marvell 88E8050 Gigabit Ethernet Controller (Gateway)
+		11ab 5021  Marvell 88E8050 Gigabit Ethernet Controller (Intel)
+		8086 3063  D925XCVLK mainboard
+	4362  88E8053 Gigabit Ethernet Controller
+		103c 2a0d  Marvell 88E8053 Gigabit Ethernet Controller (Asus)
+		1043 8142  Marvell 88E8053 Gigabit Ethernet Controller (Asus)
+		109f 3197  Marvell 88E8053 Gigabit Ethernet Controller (Trigem)
+		10f7 8338  Marvell 88E8053 Gigabit Ethernet Controller (Panasonic)
+		10fd a430  Marvell 88E8053 Gigabit Ethernet Controller (SOYO)
+		1179 0001  Marvell 88E8053 Gigabit Ethernet Controller (Toshiba)
+		1179 ff00  Marvell 88E8053 Gigabit Ethernet Controller (Compal)
+		1179 ff10  Marvell 88E8053 Gigabit Ethernet Controller (Inventec)
+		11ab 5321  Marvell RDK-8053
+		1297 c240  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
+		1297 c241  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
+		1297 c242  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
+		1297 c243  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
+		1297 c244  Marvell 88E8053 Gigabit Ethernet Controller (Shuttle)
+		13d1 ac11  EGE5K - Giga Ethernet Expresscard
+		1458 e000  Marvell 88E8053 Gigabit Ethernet Controller (Gigabyte)
+		1462 058c  Marvell 88E8053 Gigabit Ethernet Controller (MSI)
+		14c0 0012  Marvell 88E8053 Gigabit Ethernet Controller (Compal)
+		1558 04a0  Marvell 88E8053 Gigabit Ethernet Controller (Clevo)
+		15bd 1003  Marvell 88E8053 Gigabit Ethernet Controller (DFI)
+		161f 203c  Marvell 88E8053 Gigabit Ethernet Controller (Arima)
+		161f 203d  Marvell 88E8053 Gigabit Ethernet Controller (Arima)
+		1695 9029  Marvell 88E8053 Gigabit Ethernet Controller (Epox)
+		17f2 2c08  Marvell 88E8053 Gigabit Ethernet Controller (Albatron)
+		17ff 0585  Marvell 88E8053 Gigabit Ethernet Controller (Quanta)
+		1849 8053  Marvell 88E8053 Gigabit Ethernet Controller (ASRock)
+		1854 000b  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 000c  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 0010  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 0013  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 0014  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 0015  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 001a  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 001b  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 001d  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 001f  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 0021  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		1854 0022  Marvell 88E8053 Gigabit Ethernet Controller (LGE)
+		270f 2801  Marvell 88E8053 Gigabit Ethernet Controller (Chaintech)
+		a0a0 0506  Marvell 88E8053 Gigabit Ethernet Controller (Aopen)
 	4611  GT-64115 System Controller
 	4620  GT-64120/64120A/64121A System Controller
 	4801  GT-48001
+	5005  Belkin F5D5005 Gigabit Desktop Network PCI Card
+	5040  MV88SX5040 4-port SATA I PCI-X Controller
+	5041  MV88SX5041 4-port SATA I PCI-X Controller
+	5080  MV88SX5080 8-port SATA I PCI-X Controller
+	5081  MV88SX5081 8-port SATA I PCI-X Controller
+	6041  MV88SX6041 4-port SATA II PCI-X Controller
+	6081  MV88SX6081 8-port SATA II PCI-X Controller
+	6460  MV64360/64361/64362 System Controller
 	f003  GT-64010 Primary Image Piranha Image Generator
 11ac  Canon Information Systems Research Aust.
 11ad  Lite-On Communications Inc
@@ -3526,6 +5604,8 @@
 		11ad c001  LNE100TX [ver 2.0]
 11ae  Aztech System Ltd
 11af  Avid Technology Inc.
+	0001  Cinema
+	ee40  Digidesign Audiomedia III
 11b0  V3 Semiconductor Inc.
 	0002  V300PSC
 	0292  V292PBC [Am29030/40 Bridge]
@@ -3550,7 +5630,8 @@
 11be  International Microcircuits Inc
 11bf  Astrodesign, Inc.
 11c0  Hewlett Packard
-11c1  Lucent Microelectronics
+# Nee Lucent Microelectronics
+11c1  Agere Systems
 	0440  56k WinModem
 		1033 8015  LT WinModem 56k Data+Fax+Voice+Dsvd
 		1033 8047  LT WinModem 56k Data+Fax+Voice+Dsvd
@@ -3605,6 +5686,8 @@
 	0443  LT WinModem
 	0444  LT WinModem
 	0445  LT WinModem
+		8086 2203  PRO/100+ MiniPCI (probably an Ambit U98.003.C.00 combo card)
+		8086 2204  PRO/100+ MiniPCI on Armada E500
 	0446  LT WinModem
 	0447  LT WinModem
 	0448  WinModem 56k
@@ -3634,7 +5717,9 @@
 	044e  LT WinModem
 	044f  V90 WildWire Modem
 	0450  LT WinModem
+		1033 80a8  Versa Note Vxi
 		144f 4005  Magnia SG20
+		4005 144f  LifeBook C Series
 	0451  LT WinModem
 	0452  LT WinModem
 	0453  LT WinModem
@@ -3649,10 +5734,26 @@
 	0461  V90 WildWire Modem
 	0462  V90 WildWire Modem
 	0480  Venus Modem (V90, 56KFlex)
+	048c  V.92 56K WinModem
+# InPorte Home Internal 56k Modem/fax/answering machine/SMS Features
+	048f  V.92 56k WinModem
 	5801  USB
 	5802  USS-312 USB Controller
+	5803  USS-344S USB Controller
 	5811  FW323
+		8086 524c  D865PERL mainboard
 		dead 0800  FireWire Host Bus Adapter
+	8110  T8110 H.100/H.110 TDM switch
+	ab10  WL60010 Wireless LAN MAC
+	ab11  WL60040 Multimode Wireles LAN MAC
+		11c1 ab12  WaveLAN 11abg Cardbus card (Model 1102)
+		11c1 ab13  WaveLAN 11abg MiniPCI card (Model 0512)
+		11c1 ab15  WaveLAN 11abg Cardbus card (Model 1106)
+		11c1 ab16  WaveLAN 11abg MiniPCI card (Model 0516)
+	ab20  ORiNOCO PCI Adapter
+	ab21  Agere Wireless PCI Adapter
+	ab30  Hermes2 Mini-PCI WaveLAN a/b/g
+		14cd 2012  Hermes2 Mini-PCI WaveLAN a/b/g
 11c2  Sand Microelectronics
 11c3  NEC Corporation
 11c4  Document Technologies, Inc
@@ -3683,8 +5784,10 @@
 11d2  Intercom Inc.
 11d3  Trancell Systems Inc
 11d4  Analog Devices
+	1535  Blackfin BF535 processor
 	1805  SM56 PCI modem
 	1889  AD1889 sound chip
+	5340  AD1881 sound chip
 11d5  Ikon Corporation
 	0115  10115
 	0117  10117
@@ -3700,9 +5803,11 @@
 	6057  ZR36057PQC Video cutting chipset
 		1031 7efe  DC10 Plus
 		1031 fc00  MiroVIDEO DC50, Motion JPEG Capture/CODEC Board
+		12f8 8a02  Tekram Video Kit
 		13ca 4231  JPEG/TV Card
 	6120  ZR36120
 		1328 f001  Cinemaster C DVD Decoder
+		1de1 9fff  Video Kit C210
 11df  New Wave PDG
 11e0  Cray Communications A/S
 11e1  GEC Plessey Semi Inc.
@@ -3743,7 +5848,7 @@
 		11f6 2011  RL100-ATX
 	2201  ReadyLink 100TX (Winbond W89C840)
 		11f6 2011  ReadyLink 100TX
-	9881  RL100TX
+	9881  RL100TX Fast Ethernet
 11f7  Scientific Atlanta
 11f8  PMC-Sierra Inc.
 	7375  PM7375 [LASAR-155 ATM SAR]
@@ -3753,23 +5858,40 @@
 11fc  Silicon Magic
 11fd  High Street Consultants
 11fe  Comtrol Corporation
-	0001  RocketPort 8 Oct
-	0002  RocketPort 8 Intf
-	0003  RocketPort 16 Intf
-	0004  RocketPort 32 Intf
-	0005  RocketPort Octacable
-	0006  RocketPort 8J
-	0007  RocketPort 4-port
-	0008  RocketPort 8-port
-	0009  RocketPort 16-port
-	000a  RocketPort Plus Quadcable
-	000b  RocketPort Plus Octacable
-	000c  RocketPort 8-port Modem
+	0001  RocketPort 32 port w/external I/F
+	0002  RocketPort 8 port w/external I/F
+	0003  RocketPort 16 port w/external I/F
+	0004  RocketPort 4 port w/quad cable
+	0005  RocketPort 8 port w/octa cable
+	0006  RocketPort 8 port w/RJ11 connectors
+	0007  RocketPort 4 port w/RJ11 connectors
+	0008  RocketPort 8 port w/ DB78 SNI (Siemens) connector
+	0009  RocketPort 16 port w/ DB78 SNI (Siemens) connector
+	000a  RocketPort Plus 4 port
+	000b  RocketPort Plus 8 port
+	000c  RocketModem 6 port
+	000d  RocketModem 4-port
+	000e  RocketPort Plus 2 port RS232
+	000f  RocketPort Plus 2 port RS422
+	0801  RocketPort UPCI 32 port w/external I/F
+	0802  RocketPort UPCI 8 port w/external I/F
+	0803  RocketPort UPCI 16 port w/external I/F
+	0805  RocketPort UPCI 8 port w/octa cable
+	080c  RocketModem III 8 port
+	080d  RocketModem III 4 port
+	0812  RocketPort UPCI Plus 8 port RS422
+	0903  RocketPort Compact PCI 16 port w/external I/F
 	8015  RocketPort 4-port UART 16954
 11ff  Scion Corporation
+	0003  AG-5
 1200  CSS Corporation
 1201  Vista Controls Corp
 1202  Network General Corp.
+	4300  Gigabit Ethernet Adapter
+		1202 9841  SK-9841 LX
+		1202 9842  SK-9841 LX dual link
+		1202 9843  SK-9843 SX
+		1202 9844  SK-9843 SX dual link
 1203  Bayer Corporation, Agfa Division
 1204  Lattice Semiconductor Corporation
 1205  Array Corporation
@@ -3809,13 +5931,29 @@
 1217  O2 Micro, Inc.
 	6729  OZ6729
 	673a  OZ6730
-	6832  OZ6832/6833 Cardbus Controller
-	6836  OZ6836/6860 Cardbus Controller
-	6872  OZ6812 Cardbus Controller
-	6925  OZ6922 Cardbus Controller
-	6933  OZ6933 Cardbus Controller
+	6832  OZ6832/6833 CardBus Controller
+	6836  OZ6836/6860 CardBus Controller
+	6872  OZ6812 CardBus Controller
+	6925  OZ6922 CardBus Controller
+	6933  OZ6933/711E1 CardBus/SmartCardBus Controller
 		1025 1016  Travelmate 612 TX
-	6972  OZ6912 Cardbus Controller
+	6972  OZ601/6912/711E0 CardBus/SmartCardBus Controller
+		1014 020c  ThinkPad R30
+		1179 0001  Magnia Z310
+	7110  OZ711Mx 4-in-1 MemoryCardBus Accelerator
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+	7112  OZ711EC1/M1 SmartCardBus/MemoryCardBus Controller
+	7113  OZ711EC1 SmartCardBus Controller
+	7114  OZ711M1/MC1 4-in-1 MemoryCardBus Controller
+	7134  OZ711MP1/MS1 MemoryCardBus Controller
+	71e2  OZ711E2 SmartCardBus Controller
+	7212  OZ711M2 4-in-1 MemoryCardBus Controller
+	7213  OZ6933E CardBus Controller
+	7223  OZ711M3/MC3 4-in-1 MemoryCardBus Controller
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+	7233  OZ711MP3/MS3 4-in-1 MemoryCardBus Controller
 1218  Hybricon Corp.
 1219  First Virtual Corporation
 121a  3Dfx Interactive, Inc.
@@ -3843,7 +5981,7 @@
 		121a 0030  Voodoo3 AGP
 		121a 0031  Voodoo3 AGP
 		121a 0034  Voodoo3 AGP
-		121a 0036  Voodoo3
+		121a 0036  Voodoo3 2000 PCI
 		121a 0037  Voodoo3 AGP
 		121a 0038  Voodoo3 AGP
 		121a 003a  Voodoo3 AGP
@@ -3858,6 +5996,7 @@
 		121a 0061  Voodoo3 3500 TV (PAL)
 		121a 0062  Voodoo3 3500 TV (SECAM)
 	0009  Voodoo 4 / Voodoo 5
+		121a 0003  Voodoo5 PCI 5500
 		121a 0009  Voodoo5 AGP 5500/6000
 	0057  Voodoo 3/3000 [Avenger]
 121b  Advanced Telecommunications Modules
@@ -3883,6 +6022,7 @@
 1224  Interactive Images
 1225  Power I/O, Inc.
 1227  Tech-Source
+	0006  Raptor GFX 8P
 1228  Norsk Elektro Optikk A/S
 1229  Data Kinesis Inc.
 122a  Integrated Telecom
@@ -3890,6 +6030,7 @@
 122c  Sican GmbH
 122d  Aztech System Ltd
 	1206  368DSP
+	1400  Trident PCI288-Q3DII (NX)
 	50dc  3328 Audio
 		122d 0001  3328 Audio
 	80da  3328 Audio
@@ -3900,6 +6041,7 @@
 1231  Woodward McCoach, Inc.
 1232  GPT Limited
 1233  Bus-Tech, Inc.
+# Also Bochs uses this for virtual VGA...
 1234  Technical Corp.
 1235  Risq Modular Systems, Inc.
 1236  Sigma Designs Corporation
@@ -3921,6 +6063,7 @@
 	8120  E4?
 		11bd 0006  DV500 E4
 		11bd 000a  DV500 E4
+		11bd 000f  DV500 E4
 	8888  Cinemaster C 3.0 DVD Decoder
 		1002 0001  Cinemaster C 3.0 DVD Decoder
 		1002 0002  Cinemaster C 3.0 DVD Decoder
@@ -3933,6 +6076,8 @@
 		1242 6562  FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter
 		1242 656a  FCX-6562 PCI-X Fibre Channel Adapter
 	4643  FCI-1063 Fibre Channel Adapter
+	6562  FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter
+	656a  FCX-6562 PCI-X Fibre Channel Adapter
 1243  Delphax
 1244  AVM Audiovisuelles MKTG & Computer System GmbH
 	0700  B1 ISDN
@@ -3942,6 +6087,8 @@
 	0e00  Fritz!PCI v2.0 ISDN
 	1100  C2 ISDN
 	1200  T1 ISDN
+	2700  Fritz!Card DSL SL
+	2900  Fritz!Card DSL v2.0
 1245  A.P.D., S.A.
 1246  Dipix Technologies, Inc.
 1247  Xylon Research, Inc.
@@ -3958,7 +6105,7 @@
 	0003  EasyIO
 	0004  EasyConnection/RA
 124e  Cylink
-124f  Infotrend Technology, Inc.
+124f  Infortrend Technology, Inc.
 	0041  IFT-2000 Series RAID Controller
 1250  Hitachi Microcomputer System Ltd
 1251  VLSI Solutions Oy
@@ -3978,10 +6125,14 @@
 1258  Gilbarco, Inc.
 1259  Allied Telesyn International
 	2560  AT-2560 Fast Ethernet Adapter (i82557B)
+	a117  RTL81xx Fast Ethernet
+	a120  21x4x DEC-Tulip compatible 10/100 Ethernet
 125a  ABB Power Systems
 125b  Asix Electronics Corporation
-	1400  ALFA GFC2204
+	1400  ALFA GFC2204 Fast Ethernet
+		1186 1100  AX8814X Based PCI Fast Ethernet Adapter
 125c  Aurora Technologies, Inc.
+	0101  Saturn 4520P
 	0640  Aries 16000P
 125d  ESS Technology
 	0000  ES336H Fax Modem (Early Model)
@@ -3992,7 +6143,9 @@
 	1969  ES1969 Solo-1 Audiodrive
 		1014 0166  ES1969 SOLO-1 AudioDrive on IBM Aptiva Mainboard
 		125d 8888  Solo-1 Audio Adapter
+		153b 111b  Terratec 128i PCI
 	1978  ES1978 Maestro 2E
+		0e11 b112  Armada M700/E500
 		1033 803c  ES1978 Maestro-2E Audiodrive
 		1033 8058  ES1978 Maestro-2E Audiodrive
 		1092 4000  Monster Sound MX400
@@ -4003,6 +6156,7 @@
 	1989  ESS Modem
 		125d 1989  ESS Modem
 	1998  ES1983S Maestro-3i PCI Audio Accelerator
+		1028 00b1  Latitude C600
 		1028 00e6  ES1983S Maestro-3i (Dell Inspiron 8100)
 	1999  ES1983S Maestro-3i PCI Modem Accelerator
 	199a  ES1983S Maestro-3i PCI Audio Accelerator
@@ -4021,14 +6175,36 @@
 		14fe 0429  ES56-PI Data Fax Modem
 125e  Specialvideo Engineering SRL
 125f  Concurrent Technologies, Inc.
-1260  Harris Semiconductor
+1260  Intersil Corporation
+	3872  Prism 2.5 Wavelan chipset
+		1468 0202  LAN-Express IEEE 802.11b Wireless LAN
 	3873  Prism 2.5 Wavelan chipset
 		1186 3501  DWL-520 Wireless PCI Adapter
+		1186 3700  DWL-520 Wireless PCI Adapter, Rev E1
+		1385 4105  MA311 802.11b wireless adapter
 		1668 0414  HWP01170-01 802.11b PCI Wireless Adapter
+		16a5 1601  AIR.mate PC-400 PCI Wireless LAN Adapter
 		1737 3874  WMP11 Wireless 802.11b PCI Adapter
 		8086 2513  Wireless 802.11b MiniPCI Adapter
+	3886  ISL3886 [Prism Javelin/Prism Xbow]
+		17cf 0037  Z-Com XG-901 and clones Wireless Adapter
+	3890  Intersil ISL3890 [Prism GT/Prism Duette]
+		10b8 2802  SMC2802W Wireless PCI Adapter
+		10b8 2835  SMC2835W Wireless Cardbus Adapter
+		10b8 a835  SMC2835W V2 Wireless Cardbus Adapter
+		1113 4203  WN4201B
+		1113 ee03  SMC2802W V2 Wireless PCI Adapter
+		1113 ee08  SMC2835W V3 EU Wireless Cardbus Adapter
+		1186 3202  DWL-G650 A1 Wireless Adapter
+		1259 c104  CG-WLCB54GT Wireless Adapter
+		1385 4800  WG511 Wireless Adapter
+		16a5 1605  ALLNET ALL0271 Wireless PCI Adapter
+		17cf 0014  Z-Com XG-600 and clones Wireless Adapter
+		17cf 0020  Z-Com XG-900 and clones Wireless Adapter
 	8130  HMP8130 NTSC/PAL Video Decoder
 	8131  HMP8131 NTSC/PAL Video Decoder
+# This is probably more likely a HW fault, but I am keeping it for now --mj
+	ffff  ISL3886IK
 1261  Matsushita-Kotobuki Electronics Industries, Ltd.
 1262  ES Computer Company, Ltd.
 1263  Sonic Solutions
@@ -4046,12 +6222,16 @@
 126a  Lexmark International, Inc.
 126b  Adax, Inc.
 126c  Northern Telecom
+	1211  10/100BaseTX [RTL81xx]
+	126c  802.11b Wireless Ethernet Adapter
 126d  Splash Technology, Inc.
 126e  Sumitomo Metal Industries, Ltd.
 126f  Silicon Motion, Inc.
+	0501  SM501 VoyagerGX
 	0710  SM710 LynxEM
 	0712  SM712 LynxEM+
 	0720  SM720 Lynx3DM
+	0730  SM731 Cougar3DR
 	0810  SM810 LynxE
 	0811  SM811 LynxE
 	0820  SM820 Lynx3D
@@ -4062,6 +6242,7 @@
 1273  Hughes Network Systems
 	0002  DirecPC
 1274  Ensoniq
+	1171  ES1373 [AudioPCI] (also Creative Labs CT5803)
 	1371  ES1371 [AudioPCI-97]
 		0e11 0024  AudioPCI on Motherboard Compaq Deskpro
 		0e11 b1a7  ES1371, ES1373 AudioPCI
@@ -4069,6 +6250,7 @@
 		1042 1854  Tazer
 		107b 8054  Tabor2
 		1274 1371  Creative Sound Blaster AudioPCI64V, AudioPCI128
+		1274 8001  CT4751 board
 		1462 6470  ES1371, ES1373 AudioPCI On Motherboard MS-6147 1.1A
 		1462 6560  ES1371, ES1373 AudioPCI On Motherboard MS-6156 1.10
 		1462 6630  ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 1.0A
@@ -4108,6 +6290,7 @@
 		8086 425a  ES1371, ES1373 AudioPCI On Motherboard BZ440ZX
 		8086 4341  ES1371, ES1373 AudioPCI On Motherboard Cayman
 		8086 4343  ES1371, ES1373 AudioPCI On Motherboard Cape Cod
+		8086 4541  D815EEA Motherboard
 		8086 4649  ES1371, ES1373 AudioPCI On Motherboard Fire Island
 		8086 464a  ES1371, ES1373 AudioPCI On Motherboard FJ440ZX
 		8086 4d4f  ES1371, ES1373 AudioPCI On Motherboard Montreal
@@ -4121,6 +6304,7 @@
 		1274 2000  Creative Sound Blaster AudioPCI128
 		1274 2003  Creative SoundBlaster AudioPCI 128
 		1274 5880  Creative Sound Blaster AudioPCI128
+		1274 8001  Sound Blaster 16PCI 4.1ch
 		1458 a000  5880 AudioPCI On Motherboard 6OXET
 		1462 6880  5880 AudioPCI On Motherboard MS-6188 1.00
 		270f 2001  5880 AudioPCI On Motherboard 6CTR
@@ -4131,7 +6315,10 @@
 1277  Comstream
 1278  Transtech Parallel Systems Ltd.
 	0701  TPE3/TM3 PowerPC Node
+	0710  TPE5 PowerPC PCI board
 1279  Transmeta Corporation
+	0060  TM8000 Northbridge
+	0061  TM8000 AGP bridge
 	0295  Northbridge
 	0395  LongRun Northbridge
 	0396  SDRAM controller
@@ -4163,6 +6350,7 @@
 		1048 1500  MicroLink 56k Modem
 		10cf 1059  Fujitsu 229-DFRT
 	1005  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
+		1005 127a  AOpen FM56-P
 		1033 8029  229-DFSV
 		1033 8054  Modem
 		10cf 103c  Fujitsu
@@ -4259,12 +6447,16 @@
 1281  Yokogawa Electric Corporation
 1282  Davicom Semiconductor, Inc.
 	9009  Ethernet 100/10 MBit
-	9100  Ethernet 100/10 MBit
-	9102  Ethernet 100/10 MBit
+	9100  21x4x DEC-Tulip compatible 10/100 Ethernet
+	9102  21x4x DEC-Tulip compatible 10/100 Ethernet
 	9132  Ethernet 100/10 MBit
 1283  Integrated Technology Express, Inc.
 	673a  IT8330G
+	8211  ITE 8211F Single Channel UDMA 133 (ASUS 8211 (ITE IT8212 ATA RAID Controller))
+	8212  IT/ITE8212 Dual channel ATA RAID controller (PCI version seems to be IT8212, embedded seems to be ITE8212)
+		1283 0001  IT/ITE8212 Dual channel ATA RAID controller
 	8330  IT8330G
+	8872  IT8874F PCI Dual Serial Port Controller
 	8888  IT8888F PCI to ISA Bridge with SMB
 	8889  IT8889F PCI to ISA Bridge
 	e886  IT8330G
@@ -4310,6 +6502,7 @@
 12a1  Simpact Associates, Inc.
 12a2  Newgen Systems Corporation
 12a3  Lucent Technologies
+	8105  T8105 H100 Digital Switch
 12a4  NTT Electronics Technology Company
 12a5  Vision Dynamics Ltd.
 12a6  Scalable Networks, Inc.
@@ -4318,15 +6511,19 @@
 12a9  Xiotech Corporation
 12aa  SDL Communications, Inc.
 12ab  Yuan Yuan Enterprise Co., Ltd.
+	0002  AU8830 [Vortex2] Based Sound Card With A3D Support
 	3000  MPG-200C PCI DVD Decoder Card
 12ac  Measurex Corporation
 12ad  Multidata GmbH
 12ae  Alteon Networks Inc.
 	0001  AceNIC Gigabit Ethernet
+		1014 0104  Gigabit Ethernet-SX PCI Adapter
 		12ae 0001  Gigabit Ethernet-SX (Universal)
 		1410 0104  Gigabit Ethernet-SX PCI Adapter
 	0002  AceNIC Gigabit Ethernet (Copper)
+		10a9 8002  Acenic Gigabit Ethernet
 		12ae 0002  Gigabit Ethernet-T (3C986-T)
+	00fa  Farallon PN9100-T Gigabit Ethernet
 12af  TDK USA Corp
 12b0  Jorge Scientific Corp
 12b1  GammaLink
@@ -4337,7 +6534,8 @@
 12b6  Natural Microsystems
 12b7  Cognex Modular Vision Systems Div. - Acumen Inc.
 12b8  Korg
-12b9  US Robotics/3Com
+# Nee US Robotics
+12b9  3Com Corp, Modem Division
 	1006  WinModem
 		12b9 005c  USR 56k Internal Voice WinModem (Model 3472)
 		12b9 005e  USR 56k Internal WinModem (Models 662975)
@@ -4372,6 +6570,34 @@
 	0058  PCI NE2K Ethernet
 	5598  PCI NE2K Ethernet
 12c4  Connect Tech Inc
+	0001  Blue HEAT/PCI 8 (RS232/CL/RJ11)
+	0002  Blue HEAT/PCI 4 (RS232)
+	0003  Blue HEAT/PCI 2 (RS232)
+	0004  Blue HEAT/PCI 8 (UNIV, RS485)
+	0005  Blue HEAT/PCI 4+4/6+2 (UNIV, RS232/485)
+	0006  Blue HEAT/PCI 4 (OPTO, RS485)
+	0007  Blue HEAT/PCI 2+2 (RS232/485)
+	0008  Blue HEAT/PCI 2 (OPTO, Tx, RS485)
+	0009  Blue HEAT/PCI 2+6 (RS232/485)
+	000a  Blue HEAT/PCI 8 (Tx, RS485)
+	000b  Blue HEAT/PCI 4 (Tx, RS485)
+	000c  Blue HEAT/PCI 2 (20 MHz, RS485)
+	000d  Blue HEAT/PCI 2 PTM
+	0100  NT960/PCI
+	0201  cPCI Titan - 2 Port
+	0202  cPCI Titan - 4 Port
+	0300  CTI PCI UART 2 (RS232)
+	0301  CTI PCI UART 4 (RS232)
+	0302  CTI PCI UART 8 (RS232)
+	0310  CTI PCI UART 1+1 (RS232/485)
+	0311  CTI PCI UART 2+2 (RS232/485)
+	0312  CTI PCI UART 4+4 (RS232/485)
+	0320  CTI PCI UART 2
+	0321  CTI PCI UART 4
+	0322  CTI PCI UART 8
+	0330  CTI PCI UART 2 (RS485)
+	0331  CTI PCI UART 4 (RS485)
+	0332  CTI PCI UART 8 (RS485)
 12c5  Picture Elements Incorporated
 	007e  Imaging/Scanning Subsystem Engine
 	007f  Imaging/Scanning Subsystem Engine
@@ -4420,16 +6646,24 @@
 	00a0  ITNT2
 12d3  Vingmed Sound A/S
 12d4  Ulticom (Formerly DGM&S)
-12d5  Equator Technologies
+	0200  T1 Card
+12d5  Equator Technologies Inc
+	0003  BSP16
+	1000  BSP15
 12d6  Analogic Corp
 12d7  Biotronic SRL
 12d8  Pericom Semiconductor
+	8150  PCI to PCI Bridge
 12d9  Aculab PLC
+	0002  PCI Prosody
+	0004  cPCI Prosody
+	0005  Aculab E1/T1 PCI card
 12da  True Time Inc.
 12db  Annapolis Micro Systems, Inc
 12dc  Symicron Computer Communication Ltd.
 12dd  Management Graphics
 12de  Rainbow Technologies
+	0200  CryptoSwift CS200
 12df  SBS Technologies Inc
 12e0  Chase Research
 	0010  ST16C654 Quad UART
@@ -4496,6 +6730,20 @@
 	0002  VideoMaker
 12f9  Four Fold Ltd
 12fb  Spectrum Signal Processing
+	0001  PMC-MAI
+	00f5  F5 Dakar
+	02ad  PMC-2MAI
+	2adc  ePMC-2ADC
+	3100  PRO-3100
+	3500  PRO-3500
+	4d4f  Modena
+	8120  ePMC-8120
+	da62  Daytona C6201 PCI (Hurricane)
+	db62  Ingliston XBIF
+	dc62  Ingliston PLX9054
+	dd62  Ingliston JTAG/ISP
+	eddc  ePMC-MSDDC
+	fa01  ePMC-FPGA
 12fc  Capital Equipment Corp
 12fd  I2S
 12fe  ESD Electronic System Design GmbH
@@ -4506,7 +6754,8 @@
 1304  Juniper Networks
 1305  Netphone, Inc
 1306  Duet Technologies
-1307  Computer Boards
+# Nee ComputerBoards
+1307  Measurement Computing
 	0001  PCI-DAS1602/16
 	000b  PCI-DIO48H
 	000c  PCI-PDISO8
@@ -4542,6 +6791,10 @@
 	0036  PCI-DAS64/M2/16
 	0037  PCI-DAS64/M3/16
 	004c  PCI-DAS1000
+	004d  PCI-QUAD04
+	0052  PCI-DAS4020/12
+	0054  PCI-DIO96
+	005e  PCI-DAS6025
 1308  Jato Technologies Inc.
 	0001  NetCelerator Adapter
 		1308 0001  NetCelerator Adapter
@@ -4558,11 +6811,17 @@
 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
+	0981  21x4x DEC-Tulip compatible 10/100 Ethernet
+	0985  NC100 Network Everywhere Fast Ethernet 10/100
+	1985  21x4x DEC-Tulip compatible 10/100 Ethernet
+	2850  HSP MicroModem 56
+	8201  ADMtek ADM8211 802.11b Wireless Interface
+		10b8 2635  SMC2635W 802.11b (11Mbps) wireless lan pcmcia (cardbus) card
+		1317 8201  SMC2635W 802.11b (11mbps) wireless lan pcmcia (cardbus) card
+	8211  ADMtek ADM8211 802.11b Wireless Interface
+	9511  21x4x DEC-Tulip compatible 10/100 Ethernet
 1318  Packet Engines Inc.
-	0911  PCI Ethernet Adapter
+	0911  GNIC-II PCI Gigabit Ethernet [Hamachi]
 1319  Fortemedia, Inc
 	0801  Xwave QS3000A [FM801]
 	0802  Xwave QS3000A [FM801 game port]
@@ -4611,6 +6870,7 @@
 	2060  Trio 2S(16550)+1P
 	2061  Trio 2S(16650)+1P
 	2062  Trio 2S(16850)+1P
+	2081  CyberSerial (8-port) ST16654
 1320  Crypto AG
 1321  Arcobel Graphics BV
 1322  MTT Co., Ltd
@@ -4627,8 +6887,15 @@
 132d  Integrated Silicon Solution, Inc.
 1330  MMC Networks
 1331  Radisys Corp.
+	0030  ENP-2611
+	8200  82600 Host Bridge
+	8201  82600 IDE
+	8202  82600 USB
+	8210  82600 PCI Bridge
 1332  Micro Memory
 	5415  MM-5415CN PCI Memory Module with Battery Backup
+	5425  MM-5425CN PCI 64/66 Memory Module with Battery Backup
+	6140  MM-6140D
 1334  Redcreek Communications, Inc
 1335  Videomail, Inc
 1337  Third Planet Publishing
@@ -4653,7 +6920,10 @@
 134b  ARK Research Corp.
 134c  Chori Joho System Co. Ltd
 134d  PCTel Inc
+	2189  HSP56 MicroModem
+	2486  2304WT V.92 MDC Modem
 	7890  HSP MicroModem 56
+		134d 0001  PCT789 adapter
 	7891  HSP MicroModem 56
 		134d 0001  HSP MicroModem 56
 	7892  HSP MicroModem 56
@@ -4693,6 +6963,7 @@
 	01c0  SSCLP-200/300
 135d  ABB Network Partner AB
 135e  Sealevel Systems Inc
+	5101  Route 56.PCI - Multi-Protocol Serial Interface (Zilog Z16C32)
 	7101  Single Port RS-232/422/485/530
 	7201  Dual Port RS-232/422/485 Interface
 	7202  Dual Port RS-232 Interface
@@ -4702,6 +6973,14 @@
 	8001  8001 Digital I/O Adapter
 135f  I-Data International A-S
 1360  Meinberg Funkuhren
+	0101  PCI32 DCF77 Radio Clock
+	0102  PCI509 DCF77 Radio Clock
+	0103  PCI510 DCF77 Radio Clock
+	0201  GPS167PCI GPS Receiver
+	0202  GPS168PCI GPS Receiver
+	0203  GPS169PCI GPS Receiver
+	0301  TCR510PCI IRIG Timecode Reader
+	0302  TCR167PCI IRIG Timecode Reader
 1361  Soliton Systems K.K.
 1362  Fujifacom Corporation
 1363  Phoenix Technology Ltd
@@ -4713,11 +6992,14 @@
 1369  Digigram
 136a  High Soft Tech
 136b  Kawasaki Steel Corporation
+	ff01  KL5A72002 Motion JPEG
 136c  Adtek System Science Co Ltd
 136d  Gigalabs Inc
 136f  Applied Magic Inc
 1370  ATL Products
 1371  CNet Technology Inc
+	434e  GigaCard Network Adapter
+		1371 434e  N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L)
 1373  Silicon Vision Inc
 1374  Silicom Ltd
 1375  Argosystems Inc
@@ -4726,6 +7008,7 @@
 1378  Telemann Co. Ltd
 1379  Asahi Kasei Microsystems Co Ltd
 137a  Mark of the Unicorn Inc
+	0001  PCI-324 Audiowire Interface
 137b  PPT Vision
 137c  Iwatsu Electric Co Ltd
 137d  Dynachip Corporation
@@ -4734,14 +7017,33 @@
 1380  Sanritz Automation Co Ltd
 1381  Brains Co. Ltd
 1382  Marian - Electronic & Software
+	0001  ARC88 audio recording card
+	2008  Prodif 96 Pro sound system
+	2088  Marc 8 Midi sound system
+	20c8  Marc A sound system
+	4008  Marc 2 sound system
+	4010  Marc 2 Pro sound system
+	4048  Marc 4 MIDI sound system
+	4088  Marc 4 Digi sound system
+	4248  Marc X sound system
 1383  Controlnet Inc
 1384  Reality Simulation Systems Inc
 1385  Netgear
+# Note: This lists as Atheros Communications, Inc. AR5212 802.11abg NIC because of Madwifi
+	0013  WG311T
+	311a  GA511 Gigabit Ethernet
 	4100  802.11b Wireless Adapter (MA301)
-	620a  GA620
+	4105  MA311 802.11b wireless adapter
+	4400  WAG511 802.11a/b/g Dual Band Wireless PC Card
+	4600  WAG511 802.11a/b/g Dual Band Wireless PC Card
+	4601  WAG511 802.11a/b/g Dual Band Wireless PC Card
+	4610  WAG511 802.11a/b/g Dual Band Wireless PC Card
+	4a00  WAG311 802.11a/g Wireless PCI Adapter
+	4c00  WG311v2 54 Mbps Wireless PCI Adapter
+	620a  GA620 Gigabit Ethernet
 	622a  GA622
-	630a  GA630
-	f311  FA311
+	630a  GA630 Gigabit Ethernet
+	f004  FA310TX
 1386  Video Domain Technologies
 1387  Systran Corp
 1388  Hitachi Information Technology Co Ltd
@@ -4758,6 +7060,7 @@
 1392  Medialight Inc
 1393  Moxa Technologies Co Ltd
 	1040  Smartio C104H/PCI
+	1141  Industrio CP-114
 	1680  Smartio C168H/PCI
 	2040  Intellio CP-204J
 	2180  Intellio C218 Turbo PCI
@@ -4768,7 +7071,10 @@
 1395  Ambicom Inc
 1396  Cipher Systems Inc
 1397  Cologne Chip Designs GmbH
+	16b8  ISDN network Controller [HFC-8S]
 	2bd0  ISDN network controller [HFC-PCI]
+		0675 1704  ISDN Adapter (PCI Bus, D, C)
+		0675 1708  ISDN Adapter (PCI Bus, D, C, ACPI)
 		1397 2bd0  ISDN Board
 		e4bf 1000  CI1-1-Harp
 1398  Clarion co. Ltd
@@ -4794,11 +7100,16 @@
 	0016  8065 Security Processor
 	0017  8165 Security Processor
 	0018  8154 Security Processor
+	001d  7956 Security Processor
+	0020  7955 Security Processor
+	0026  8155 Security Processor
 13a4  Rascom Inc
 13a5  Audio Digital Imaging Inc
 13a6  Videonics Inc
 13a7  Teles AG
 13a8  Exar Corp.
+	0152  XR17C/D152 Dual PCI UART
+	0154  XR17C154 Quad UART
 	0158  XR17C158 Octal UART
 13a9  Siemens Medical Systems, Ultrasound Group
 13aa  Broadband Networks Inc
@@ -4824,16 +7135,23 @@
 13be  Miroku Jyoho Service Co. Ltd
 13bf  Sharewave Inc
 13c0  Microgate Corporation
-	0010  SyncLink WAN Adapter
+	0010  SyncLink Adapter v1
+	0020  SyncLink SCC Adapter
+	0030  SyncLink Multiport Adapter
+	0210  SyncLink Adapter v2
 13c1  3ware Inc
-	1000  3ware ATA-RAID
-	1001  3ware 7000-series ATA-RAID
-	1002  3ware ATA-RAID
+	1000  5xxx/6xxx-series PATA-RAID
+	1001  7xxx/8xxx-series PATA/SATA-RAID
+		13c1 1001  7xxx/8xxx-series PATA/SATA-RAID
+	1002  9xxx-series SATA-RAID
 13c2  Technotrend Systemtechnik GmbH
 13c3  Janz Computer AG
 13c4  Phase Metrics
 13c5  Alphi Technology Corp
 13c6  Condor Engineering Inc
+	0520  CEI-520 A429 Card
+	0620  CEI-620 A429 Card
+	0820  CEI-820 A429 Card
 13c7  Blue Chip Technology Ltd
 13c8  Apptech Inc
 13c9  Eaton Corporation
@@ -4844,9 +7162,13 @@
 13ce  Cocom A/S
 13cf  Studio Audio & Video Ltd
 13d0  Techsan Electronics Co Ltd
+	2103  B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card
+	2200  B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card
 13d1  Abocom Systems Inc
 	ab02  ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter
+	ab03  21x4x DEC-Tulip compatible 10/100 Ethernet
 	ab06  RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter
+	ab08  21x4x DEC-Tulip compatible 10/100 Ethernet
 13d2  Shark Multimedia Inc
 13d3  IMC Networks
 13d4  Graphics Microsystems Inc
@@ -4872,7 +7194,7 @@
 13e6  Argosy research Inc
 13e7  NAC Incorporated
 13e8  Chip Express Corporation
-13e9  Chip Express Corporation
+13e9  Intraserver Technology Inc
 13ea  Dallas Semiconductor
 13eb  Hauppauge Computer Works Inc
 13ec  Zydacron Inc
@@ -4881,6 +7203,7 @@
 13ef  Coppercom Inc
 13f0  Sundance Technology Inc
 	0201  ST201 Sundance Ethernet
+	1023  IC Plus IP1000 Family Gigabit Ethernet
 13f1  Oce' - Technologies B.V.
 13f2  Ford Microelectronics Inc
 13f3  Mcdata Corporation
@@ -4888,15 +7211,18 @@
 	1401  Zentai Fibre Channel Adapter
 13f5  Kansai Electric Co. Ltd
 13f6  C-Media Electronics Inc
+	0011  CMI8738
 	0100  CM8338A
 		13f6 ffff  CMI8338/C3DX PCI Audio Device
 	0101  CM8338B
 		13f6 0101  CMI8338-031 PCI Audio Device
 	0111  CM8738
 		1019 0970  P6STP-FL motherboard
+		1043 8035  CUSI-FX motherboard
 		1043 8077  CMI8738 6-channel audio controller
 		1043 80e2  CMI8738 6ch-MX
 		13f6 0111  CMI8738/C3DX PCI Audio Device
+		1681 a000  Gamesurround MUSE XL
 	0211  CM8738
 13f7  Wildfire Communications
 13f8  Ad Lib Multimedia Inc
@@ -4906,6 +7232,11 @@
 13fc  Computer Peripherals International
 13fd  Micro Science Inc
 13fe  Advantech Co. Ltd
+	1240  PCI-1240 4-channel stepper motor controller card
+	1600  PCI-1612 4-port RS-232/422/485 PCI communication card
+	1733  PCI-1733 32-channel isolated digital input card
+	1752  PCI-1752
+	1754  PCI-1754
 	1756  PCI-1756
 13ff  Silicon Spice Inc
 1400  Artx Inc
@@ -4920,9 +7251,17 @@
 	0100  Lava Dual Serial
 	0101  Lava Quatro A
 	0102  Lava Quatro B
+	0110  Lava DSerial-PCI Port A
+	0111  Lava DSerial-PCI Port B
+	0120  Quattro-PCI A
+	0121  Quattro-PCI B
+	0180  Lava Octo A
+	0181  Lava Octo B
 	0200  Lava Port Plus
 	0201  Lava Quad A
 	0202  Lava Quad B
+	0220  Lava Quattro PCI Ports A/B
+	0221  Lava Quattro PCI Ports C/D
 	0500  Lava Single Serial
 	0600  Lava Port 650
 	8000  Lava Parallel
@@ -4941,22 +7280,55 @@
 140f  Salient Systems Corp
 1410  Midas lab Inc
 1411  Ikos Systems Inc
-1412  IC Ensemble Inc
-	1712  ICE1712 [Envy24]
-	1724  ICE1724 [Envy24HT]
+# Nee IC Ensemble Inc.
+1412  VIA Technologies Inc.
+	1712  ICE1712 [Envy24] PCI Multi-Channel I/O Controller
+		1412 1712  Hoontech ST Audio DSP 24
+		1412 d630  M-Audio Delta 1010
+		1412 d631  M-Audio Delta DiO
+		1412 d632  M-Audio Delta 66
+		1412 d633  M-Audio Delta 44
+		1412 d634  M-Audio Delta Audiophile
+		1412 d635  M-Audio Delta TDIF
+		1412 d637  M-Audio Delta RBUS
+		1412 d638  M-Audio Delta 410
+		1412 d63b  M-Audio Delta 1010LT
+		1412 d63c  Digigram VX442
+		1416 1712  Hoontech ST Audio DSP 24 Media 7.1
+		153b 1115  EWS88 MT
+		153b 1125  EWS88 MT (Master)
+		153b 112b  EWS88 D
+		153b 112c  EWS88 D (Master)
+		153b 1130  EWX 24/96
+		153b 1138  DMX 6fire 24/96
+		153b 1151  PHASE88
+		16ce 1040  Edirol DA-2496
+	1724  VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller
+		1412 1724  AMP Ltd AUDIO2000
+		1412 3630  M-Audio Revolution 7.1
+		153b 1145  Aureon 7.1 Space
+		153b 1147  Aureon 5.1 Sky
+		153b 1153  Aureon 7.1 Universe
+		270f f641  ZNF3-150
+		270f f645  ZNF3-250
 1413  Addonics
 1414  Microsoft Corporation
 1415  Oxford Semiconductor Ltd
 	8403  VScom 011H-EP1 1 port parallel adaptor
 	9501  OX16PCI954 (Quad 16950 UART) function 0
+		131f 2050  CyberPro (4-port)
+# Model IO1085, Part No: JJ-P46012
+		131f 2051  CyberSerial 4S Plus
 		15ed 2000  MCCR Serial p0-3 of 8
 		15ed 2001  MCCR Serial p0-3 of 16
 	950a  EXSYS EX-41092 Dual 16950 Serial adapter
 	950b  OXCB950 Cardbus 16950 UART
+	9510  OX16PCI954 (Quad 16950 UART) function 1 (Disabled)
 	9511  OX16PCI954 (Quad 16950 UART) function 1
 		15ed 2000  MCCR Serial p4-7 of 8
 		15ed 2001  MCCR Serial p4-15 of 16
 	9521  OX16PCI952 (Dual 16950 UART)
+	9523  OX16PCI952 Integrated Parallel Port
 1416  Multiwave Innovation pte Ltd
 1417  Convergenet Technologies Inc
 1418  Kyushu electronics systems Inc
@@ -4967,11 +7339,13 @@
 141e  Fanuc Ltd
 141f  Visiontech Ltd
 1420  Psion Dacom plc
+	8002  Gold Card NetGlobal 56k+10/100Mb CardBus (Ethernet part)
+	8003  Gold Card NetGlobal 56k+10/100Mb CardBus (Modem part)
 1421  Ads Technologies Inc
 1422  Ygrec Systems Co Ltd
 1423  Custom Technology Corp.
 1424  Videoserver Connections
-1425  ASIC Designers Inc
+1425  Chelsio Communications Inc
 1426  Storage Technology Corp.
 1427  Better On-Line Solutions
 1428  Edec Co Ltd
@@ -4981,10 +7355,12 @@
 142c  Minton Optic Industry Co Ltd
 142d  Pix stream Inc
 142e  Vitec Multimedia
+	4020  VM2-2 [Video Maker 2] MPEG1/2 Encoder
 142f  Radicom Research Inc
 1430  ITT Aerospace/Communications Division
 1431  Gilat Satellite Networks
 1432  Edimax Computer Co.
+	9130  RTL81xx Fast Ethernet
 1433  Eltec Elektronik GmbH
 1435  Real Time Devices US Inc.
 1436  CIS Technology Inc
@@ -5014,6 +7390,7 @@
 	7434  PCI-7434
 	7841  PCI-7841
 	8133  PCI-8133
+	8164  PCI-8164
 	8554  PCI-8554
 	9111  PCI-9111
 	9113  PCI-9113
@@ -5031,6 +7408,7 @@
 1456  Advanced Hardware Architectures
 1457  Nuera Communications Inc
 1458  Giga-byte Technology
+	0c11  K8NS Pro Mainboard
 1459  DOOIN Electronics
 145a  Escalate Networks Inc
 145b  PRAIM SRL
@@ -5041,7 +7419,15 @@
 	0001  NextMove PCI
 1460  DYNARC INC
 1461  Avermedia Technologies Inc
-1462  Micro-star International Co Ltd
+1462  Micro-Star International Co., Ltd.
+# MSI CB54G Wireless PC Card that seems to use the Broadcom 4306 Chipset
+	6819  Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [MSI CB54G]
+	6825  PCI Card wireless 11g [PC54G]
+	8725  NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter
+	9000  NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter
+	9110  GeFORCE FX5200
+	9119  NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter
+	9591  nVidia Corporation NV36 [GeForce FX 5700LE]
 1463  Fast Corporation
 1464  Interactive Circuits & Systems Ltd
 1465  GN NETTEST Telecom DIV.
@@ -5052,6 +7438,7 @@
 146a  IFR
 146b  Parascan Technologies Ltd
 146c  Ruby Tech Corp.
+	1430  FE-1430TX Fast Ethernet PCI Adapter
 146d  Tachyon, INC.
 146e  Williams Electronics Games, Inc.
 146f  Multi Dimensional Consulting Inc
@@ -5096,12 +7483,15 @@
 1495  TOKAI Communications Industry Co. Ltd
 1496  JOYTECH Computer Co., Ltd.
 1497  SMA Regelsysteme GmBH
+	1497  SMA Technologie AG
 1498  TEWS Datentechnik GmBH
+	30c8  TPCI200
 1499  EMTEC CO., Ltd
 149a  ANDOR Technology Ltd
 149b  SEIKO Instruments Inc
 149c  OVISLINK Corp.
 149d  NEWTEK Inc
+	0001  Video Toaster for PC
 149e  Mapletree Networks Inc.
 149f  LECTRON Co Ltd
 14a0  SOFTING GmBH
@@ -5128,6 +7518,14 @@
 	0000  DSL NIC
 14b4  PHILIPS Business Electronics B.V.
 14b5  Creamware GmBH
+	0200  Scope
+	0300  Pulsar
+	0400  PulsarSRB
+	0600  Pulsar2
+	0800  DSP-Board
+	0900  DSP-Board
+	0a00  DSP-Board
+	0b00  DSP-Board
 14b6  Quantum Data Corp.
 14b7  PROXIM Inc
 	0001  Symphony 4110
@@ -5137,8 +7535,10 @@
 	0340  PC4800
 	0350  PC4800
 	4500  PC4500
-	4800  PC4800
+	4800  Cisco Aironet 340 802.11b Wireless LAN Adapter/Aironet PC4800
 	a504  Cisco Aironet Wireless 802.11b
+	a505  Cisco Aironet CB20a 802.11a Wireless LAN Adapter
+	a506  Cisco Aironet Mini PCI b/g
 14ba  INTERNIX Inc.
 14bb  SEMTECH Corporation
 14bc  Globespan Semiconductor Inc.
@@ -5147,6 +7547,7 @@
 14bf  SPIDER Communications Inc.
 14c0  COMPAL Electronics Inc
 14c1  MYRICOM Inc.
+	8043  Myrinet 2000 Scalable Cluster Interconnect
 14c2  DTK Computer
 14c3  MEDIATEK Corp.
 14c4  IWASAKI Information Systems Co Ltd
@@ -5186,7 +7587,10 @@
 14d6  Accusys Inc
 14d7  Hirakawa Hewtech Corp
 14d8  HOPF Elektronik GmBH
-14d9  Alpha Processor Inc
+# Formerly SiPackets, Inc., formerly API NetWorks, Inc., formerly Alpha Processor, Inc.
+14d9  Alliance Semiconductor Corporation
+	0010  AP1011/SP1011 HyperTransport-PCI Bridge [Sturgeon]
+	9000  AS90L10204/10208 HyperTransport to PCI-X Bridge
 14da  National Aerospace Laboratories
 14db  AFAVLAB Technology Inc
 	2120  TK9902
@@ -5210,6 +7614,16 @@
 14e2  INFOLIBRIA
 14e3  AMTELCO
 14e4  Broadcom Corporation
+	0800  Sentry5 Chipcommon I/O Controller
+	0804  Sentry5 PCI Bridge
+	0805  Sentry5 MIPS32 CPU
+	0806  Sentry5 Ethernet Controller
+	080b  Sentry5 Crypto Accelerator
+	080f  Sentry5 DDR/SDR RAM Controller
+	0811  Sentry5 External Interface Core
+	0816  BCM3302 Sentry5 MIPS32 CPU
+	1600  NetXtreme BCM5752 Gigabit Ethernet PCI Express
+	1601  NetXtreme BCM5752M Gigabit Ethernet PCI Express
 	1644  NetXtreme BCM5700 Gigabit Ethernet
 		1014 0277  Broadcom Vigil B5700 1000Base-T
 		1028 00d1  Broadcom BCM5700
@@ -5236,6 +7650,14 @@
 		0e11 009a  NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T)
 		0e11 00c1  NC6770 Gigabit Server Adapter (PCI-X, 1000-SX)
 		1028 0121  Broadcom BCM5701 1000Base-T
+		103c 128a  1000Base-T (PCI) [A7061A]
+		103c 128b  1000Base-SX (PCI) [A7073A]
+		103c 12a4  Core Lan 1000Base-T
+		103c 12c1  IOX Core Lan 1000Base-T [A7109AX]
+		103c 1300  Core LAN/SCSI Combo [A6794A]
+		10a9 8010  IO9 Gigabit Ethernet (Copper)
+		10a9 8011  Gigabit Ethernet (Copper)
+		10a9 8012  Gigabit Ethernet (Fiber)
 		10b7 1004  3C996-SX 1000Base-SX
 		10b7 1006  3C996B-T 1000Base-T
 		10b7 1007  3C1000-T 1000Base-T
@@ -5253,6 +7675,7 @@
 	1647  NetXtreme BCM5703 Gigabit Ethernet
 		0e11 0099  NC7780 1000BaseTX
 		0e11 009a  NC7770 1000BaseTX
+		10a9 8010  SGI IO9 Gigabit Ethernet (Copper)
 		14e4 0009  BCM5703 1000BaseTX
 		14e4 000a  BCM5703 1000BaseSX
 		14e4 000b  BCM5703 1000BaseTX
@@ -5265,17 +7688,46 @@
 		10b7 2000  3C998-T Dual Port 10/100/1000 PCI-X
 		10b7 3000  3C999-T Quad Port 10/100/1000 PCI-X
 		1166 1648  NetXtreme CIOB-E 1000Base-T
+		1734 100b  Primergy RX300
+	164a  NetXtreme II BCM5706 Gigabit Ethernet
 	164d  NetXtreme BCM5702FE Gigabit Ethernet
 	1653  NetXtreme BCM5705 Gigabit Ethernet
+		0e11 00e3  NC7761 Gigabit Server Adapter
+	1654  NetXtreme BCM5705_2 Gigabit Ethernet
+		0e11 00e3  NC7761 Gigabit Server Adapter
+		103c 3100  NC1020 HP ProLiant Gigabit Server Adapter 32 PCI
+		103c 3101  NC370T Multifunction Gigabit Server Adapter
+		103c 3102  NC370F Multifunction Gigabit Server Adapter
+		103c 3226  NC150T 4-port Gigabit Combo Switch & Adapter
+	1659  NetXtreme BCM5721 Gigabit Ethernet PCI Express
+		103c 7031  NC320T PCIe Gigabit Server Adapter
+		103c 7032  NC320i PCIe Gigabit Server Adapter
+		1734 1061  Primergy RX300 S2
 	165d  NetXtreme BCM5705M Gigabit Ethernet
+		1028 865d  Latitude D400
+	165e  NetXtreme BCM5705M_2 Gigabit Ethernet
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+	166a  NetXtreme BCM5780 Gigabit Ethernet
+	166b  NetXtreme BCM5780S Gigabit Ethernet
+	166e  570x 10/100 Integrated Controller
+	1677  NetXtreme BCM5751 Gigabit Ethernet PCI Express
+		1028 0179  Optiplex GX280
+		1028 0182  Latitude D610
+		1734 105d  Scenic W620
+	167d  NetXtreme BCM5751M Gigabit Ethernet PCI Express
+	167e  NetXtreme BCM5751F Fast Ethernet PCI Express
 	1696  NetXtreme BCM5782 Gigabit Ethernet
+		103c 12bc  HP d530 CMT (DG746A)
 		14e4 000d  NetXtreme BCM5782 1000Base-T
-	16a6  NetXtreme BCM5702 Gigabit Ethernet
+	169c  NetXtreme BCM5788 Gigabit Ethernet
+	169d  NetLink BCM5789 Gigabit Ethernet PCI Express
+	16a6  NetXtreme BCM5702X Gigabit Ethernet
 		0e11 00bb  NC7760 Gigabit Server Adapter (PCI-X, 10/100/1000-T)
 		1028 0126  BCM5702 1000Base-T
 		14e4 000c  BCM5702 1000Base-T
 		14e4 8009  BCM5702 1000Base-T
-	16a7  NetXtreme BCM5703 Gigabit Ethernet
+	16a7  NetXtreme BCM5703X Gigabit Ethernet
 		0e11 00ca  NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
 		0e11 00cb  NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
 		14e4 0009  NetXtreme BCM5703 1000Base-T
@@ -5284,24 +7736,116 @@
 		14e4 800a  NetXtreme BCM5703 1000Base-T
 	16a8  NetXtreme BCM5704S Gigabit Ethernet
 		10b7 2001  3C998-SX Dual Port 1000-SX PCI-X
-	16c6  NetXtreme BCM5702 Gigabit Ethernet
+	16aa  NetXtreme II BCM5706S Gigabit Ethernet
+	16c6  NetXtreme BCM5702A3 Gigabit Ethernet
 		10b7 1100  3C1000B-T 10/100/1000 PCI
 		14e4 000c  BCM5702 1000Base-T
 		14e4 8009  BCM5702 1000Base-T
 	16c7  NetXtreme BCM5703 Gigabit Ethernet
+		0e11 00ca  NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
+		0e11 00cb  NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T)
+		103c 12c3  Combo FC/GigE-SX [A9782A]
+		103c 12ca  Combo FC/GigE-T [A9784A]
 		14e4 0009  NetXtreme BCM5703 1000Base-T
 		14e4 000a  NetXtreme BCM5703 1000Base-SX
+	16dd  NetLink BCM5781 Gigabit Ethernet PCI Express
+	16f7  NetXtreme BCM5753 Gigabit Ethernet PCI Express
+	16fd  NetXtreme BCM5753M Gigabit Ethernet PCI Express
+	16fe  NetXtreme BCM5753F Fast Ethernet PCI Express
+	170c  BCM4401-B0 100Base-TX
+		1028 0188  Inspiron 6000 laptop
+		1028 0196  Inspiron 5160
+		103c 099c  nx6110
+	170d  NetXtreme BCM5901 100Base-TX
+		1014 0545  ThinkPad R40e (2684-HVG) builtin ethernet controller
+	170e  NetXtreme BCM5901 100Base-TX
+	3352  BCM3352
+	3360  BCM3360
 	4210  BCM4210 iLine10 HomePNA 2.0
 	4211  BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem
 	4212  BCM4212 v.90 56k modem
-	4301  BCM4301 802.11b
+	4301  BCM4303 802.11b Wireless LAN Controller
+		1028 0407  TrueMobile 1180 Onboard WLAN
+		1043 0120  WL-103b Wireless LAN PC Card
+	4305  BCM4307 V.90 56k Modem
+	4306  BCM4307 Ethernet Controller
+	4307  BCM4307 802.11b Wireless LAN Controller
+	4310  BCM4310 Chipcommon I/OController
+	4312  BCM4310 UART
+	4313  BCM4310 Ethernet Controller
+	4315  BCM4310 USB Controller
+	4318  BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller
+		1468 0311  Aspire 3022WLMi
+		14e4 0449  Gateway 7510GX
+	4320  BCM4306 802.11b/g Wireless LAN Controller
+		1028 0001  TrueMobile 1300 WLAN Mini-PCI Card
+		1028 0003  Wireless 1350 WLAN Mini-PCI Card
+		1043 100f  WL-100G
+		1057 7025  WN825G
+		106b 004e  AirPort Extreme
+		14e4 4320  Linksys WMP54G PCI
+		1737 4320  WPC54G
+		1799 7001  Belkin F5D7001 High-Speed Mode Wireless G Network Card
+		1799 7010  Belkin F5D7010 54g Wireless Network card
+	4321  BCM4306 802.11a Wireless LAN Controller
+	4322  BCM4306 UART
+	4324  BCM4309 802.11a/b/g
+		1028 0001  Truemobile 1400
+		1028 0003  Truemobile 1450 MiniPCI
+	4325  BCM43xG 802.11b/g
+		1414 0003  Wireless Notebook Adapter MN-720
+		1414 0004  Wireless PCI Adapter MN-730
+# probably this is a correct ID...
+	4326  BCM4307 Chipcommon I/O Controller?
 	4401  BCM4401 100Base-T
+		1043 80a8  A7V8X motherboard
 	4402  BCM4402 Integrated 10/100BaseT
+	4403  BCM4402 V.90 56k Modem
 	4410  BCM4413 iLine32 HomePNA 2.0
 	4411  BCM4413 V.90 56k modem
-	4412  BCM4413 10/100BaseT
+	4412  BCM4412 10/100BaseT
+	4430  BCM44xx CardBus iLine32 HomePNA 2.0
+	4432  BCM4432 CardBus 10/100BaseT
+	4610  BCM4610 Sentry5 PCI to SB Bridge
+	4611  BCM4610 Sentry5 iLine32 HomePNA 1.0
+	4612  BCM4610 Sentry5 V.90 56k Modem
+	4613  BCM4610 Sentry5 Ethernet Controller
+	4614  BCM4610 Sentry5 External Interface
+	4615  BCM4610 Sentry5 USB Controller
+	4704  BCM4704 PCI to SB Bridge
+	4705  BCM4704 Sentry5 802.11b Wireless LAN Controller
+	4706  BCM4704 Sentry5 Ethernet Controller
+	4707  BCM4704 Sentry5 USB Controller
+	4708  BCM4704 Crypto Accelerator
+	4710  BCM4710 Sentry5 PCI to SB Bridge
+	4711  BCM47xx Sentry5 iLine32 HomePNA 2.0
+	4712  BCM47xx V.92 56k modem
+	4713  Sentry5 Ethernet Controller
+	4714  BCM47xx Sentry5 External Interface
+	4715  Sentry5 USB Controller
+	4716  BCM47xx Sentry5 USB Host Controller
+	4717  BCM47xx Sentry5 USB Device Controller
+	4718  Sentry5 Crypto Accelerator
+	4720  BCM4712 MIPS CPU
+	5365  BCM5365P Sentry5 Host Bridge
+	5600  BCM5600 StrataSwitch 24+2 Ethernet Switch Controller
+	5605  BCM5605 StrataSwitch 24+2 Ethernet Switch Controller
+	5615  BCM5615 StrataSwitch 24+2 Ethernet Switch Controller
+	5625  BCM5625 StrataSwitch 24+2 Ethernet Switch Controller
+	5645  BCM5645 StrataSwitch 24+2 Ethernet Switch Controller
+	5670  BCM5670 8-Port 10GE Ethernet Switch Fabric
+	5680  BCM5680 G-Switch 8 Port Gigabit Ethernet Switch Controller
+	5690  BCM5690 12-port Multi-Layer Gigabit Ethernet Switch
+	5691  BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller
+	5692  BCM5692 12-port Multi-Layer Gigabit Ethernet Switch
 	5820  BCM5820 Crypto Accelerator
 	5821  BCM5821 Crypto Accelerator
+	5822  BCM5822 Crypto Accelerator
+	5823  BCM5823 Crypto Accelerator
+	5824  BCM5824 Crypto Accelerator
+	5840  BCM5840 Crypto Accelerator
+	5841  BCM5841 Crypto Accelerator
+	5850  BCM5850 Crypto Accelerator
 14e5  Pixelfusion Ltd
 14e6  SHINING Technology Inc
 14e7  3CX
@@ -5309,6 +7853,8 @@
 14e9  GARNETS System CO Ltd
 14ea  Planex Communications, Inc
 	ab06  FNW-3603-TX CardBus Fast Ethernet
+	ab07  RTL81xx RealTek Ethernet
+	ab08  FNW-3602-TX CardBus Fast Ethernet
 14eb  SEIKO EPSON Corp
 14ec  ACQIRIS
 14ed  DATAKINETICS Ltd
@@ -5368,6 +7914,7 @@
 	1065  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
 	1066  HCF 56k Data/Fax/Voice/Spkp Modem
 		122d 4033  Dell Athena - MDP3900V-U
+	1085  HCF V90 56k Data/Fax/Voice/Spkp PCI Modem
 	1433  HCF 56k Data/Fax Modem
 	1434  HCF 56k Data/Fax/Voice Modem
 	1435  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
@@ -5384,9 +7931,13 @@
 		122d 4302  Dell MP3930V-W(C) MiniPCI
 	1610  ADSL AccessRunner PCI Arbitration Device
 	1611  AccessRunner PCI ADSL Interface Device
+	1620  AccessRunner V2 PCI ADSL Arbitration Device
+	1621  AccessRunner V2 PCI ADSL Interface Device
+	1622  AccessRunner V2 PCI ADSL Yukon WAN Adapter
 	1803  HCF 56k Modem
 		0e11 0023  623-LAN Grizzly
 		0e11 0043  623-LAN Yogi
+	1811  Conextant MiniPCI Network Adapter
 	1815  HCF 56k Modem
 		0e11 0022  Grizzly
 		0e11 0042  Yogi
@@ -5447,22 +7998,89 @@
 		13e0 8d84  IBM HSFi V.90
 		13e0 8d85  Compaq Stinger
 		14f1 2004  Dynalink 56PMi
+	2f02  HSF 56k HSFi Data/Fax
+	2f11  HSF 56k HSFi Modem
+	2f20  HSF 56k Data/Fax Modem
 	8234  RS8234 ATM SAR Controller [ServiceSAR Plus]
+	8800  CX23880/1/2/3 PCI Video and Audio Decoder
+		0070 2801  Hauppauge WinTV 28xxx (Roslyn) models
+		0070 3401  Hauppauge WinTV 34xxx models
+		0070 9002  Hauppauge Nova-T DVB-T
+		1002 00f8  ATI TV Wonder Pro
+		1043 4823  ASUS PVR-416
+		107d 6613  Leadtek Winfast 2000XP Expert
+		107d 6620  Leadtek Winfast DV2000
+		107d 663c  Leadtek PVR 2000
+		10fc d003  IODATA GV-VCP3/PCI
+		10fc d035  IODATA GV/BCTV7E
+		1461 000b  AverTV Studio 303 (M126)
+		1462 8606  MSI TV-@nywhere Master
+		14c7 0107  GDI Black Gold
+		14f1 0187  Conexant DVB-T reference design
+		14f1 0342  Digital-Logic MICROSPACE Entertainment Center (MEC)
+		1540 2580  Provideo PV259
+		1554 4811  PixelView
+		17de 08a1  XPert DVB-T PCI BDA DVBT 23880 Video Capture
+		17de 08a6  KWorld/VStream XPert DVB-T
+		17de a8a6  digitalnow DNTV Live! DVB-T
+		18ac d500  DViCO FusionHDTV5 Gold
+		18ac d810  DViCO FusionHDTV3 Gold-Q
+		18ac d820  DViCO FusionHDTV3 Gold-T
+		18ac db00  DVICO FusionHDTV DVB-T1
+		18ac db10  DVICO FusionHDTV DVB-T Plus
+		7063 3000  pcHDTV HD3000 HDTV
+	8801  CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port]
+		0070 2801  Hauppauge WinTV 28xxx (Roslyn) models
+	8802  CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port]
+		0070 2801  Hauppauge WinTV 28xxx (Roslyn) models
+		0070 9002  Nova-T DVB-T Model 909
+		1043 4823  ASUS PVR-416
+		107d 663c  Leadtek PVR 2000
+		14f1 0187  Conexant DVB-T reference design
+		17de 08a1  XPert DVB-T PCI BDA DVBT 23880 Transport Stream Capture
+		17de 08a6  KWorld/VStream XPert DVB-T
+		18ac d500  DViCO FusionHDTV5 Gold
+		18ac d810  DViCO FusionHDTV3 Gold-Q
+		18ac d820  DViCO FusionHDTV3 Gold-T
+		18ac db00  DVICO FusionHDTV DVB-T1
+		18ac db10  DVICO FusionHDTV DVB-T Plus
+		7063 3000  pcHDTV HD3000 HDTV
+	8804  CX23880/1/2/3 PCI Video and Audio Decoder [IR Port]
+		0070 9002  Nova-T DVB-T Model 909
+	8811  CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port]
+		0070 3401  Hauppauge WinTV 34xxx models
+		1462 8606  MSI TV-@nywhere Master
+		18ac d500  DViCO FusionHDTV5 Gold
+		18ac d810  DViCO FusionHDTV3 Gold-Q
+		18ac d820  DViCO FusionHDTV3 Gold-T
+		18ac db00  DVICO FusionHDTV DVB-T1
 14f2  MOBILITY Electronics
-14f3  BROADLOGIC
+	0120  EV1000 bridge
+	0121  EV1000 Parallel port
+	0122  EV1000 Serial port
+	0123  EV1000 Keyboard controller
+	0124  EV1000 Mouse controller
+14f3  BroadLogic
+	2030  2030 DVB-S Satellite Reciever
+	2050  2050 DVB-T Terrestrial (Cable) Reciever
+	2060  2060 ATSC Terrestrial (Cable) Reciever
 14f4  TOKYO Electronic Industry CO Ltd
 14f5  SOPAC Ltd
 14f6  COYOTE Technologies LLC
 14f7  WOLF Technology Inc
 14f8  AUDIOCODES Inc
+	2077  TP-240 dual span E1 VoIP PCI card
 14f9  AG COMMUNICATIONS
 14fa  WANDEL & GOCHERMANN
 14fb  TRANSAS MARINE (UK) Ltd
-14fc  QUADRICS Supercomputers World
+14fc  Quadrics Ltd
+	0000  QsNet Elan3 Network Adapter
+	0001  QsNetII Elan4 Network Adapter
 14fd  JAPAN Computer Industry Inc
 14fe  ARCHTEK TELECOM Corp
 14ff  TWINHEAD INTERNATIONAL Corp
 1500  DELTA Electronics, Inc
+	1360  RTL81xx RealTek Ethernet
 1501  BANKSOFT CANADA Ltd
 1502  MITSUBISHI ELECTRIC LOGISTICS SUPPORT Co Ltd
 1503  KAWASAKI LSI USA Inc
@@ -5495,8 +8113,10 @@
 1514  TFL LAN Inc
 1515  Advent design
 1516  MYSON Technology Inc
+	0800  MTD-8xx 100/10M Ethernet PCI Adapter
 	0803  SURECOM EP-320X-S 100/10M Ethernet PCI Adapter
 		1320 10bd  SURECOM EP-320X-S 100/10M Ethernet PCI Adapter
+	0891  MTD-8xx 100/10M Ethernet PCI Adapter
 1517  ECHOTEK Corp
 1518  PEP MODULAR Computers GmbH
 1519  TELEFON AKTIEBOLAGET LM Ericsson
@@ -5506,6 +8126,8 @@
 	1008  PCI-1008
 151b  COMBOX Ltd
 151c  DIGITAL AUDIO LABS Inc
+	0003  Prodif T 2496
+	4000  Prodif 88
 151d  Fujitsu Computer Products Of America
 151e  MATRIX Corp
 151f  TOPIC SEMICONDUCTOR Corp
@@ -5519,12 +8141,26 @@
 		1522 0400  RockForceDUO+ 2 Port V.92/V.44 Data/Fax/Voice Modem
 		1522 0500  RockForceQUATRO+ 4 Port V.92/V.44 Data/Fax/Voice Modem
 		1522 0600  RockForce+ 2 Port V.90 Data/Fax/Voice Modem
+		1522 0700  RockForce+ 4 Port V.90 Data/Fax/Voice Modem
+		1522 0800  RockForceOCTO+ 8 Port V.92/V.44 Data/Fax/Voice Modem
+		1522 0c00  RockForceDUO+ 2 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem
+		1522 0d00  RockForceQUATRO+ 4 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem
+		1522 1d00  RockForceOCTO+ 8 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem
 1523  MUSIC Semiconductors
 1524  ENE Technology Inc
+	0510  CB710 Memory Card Reader Controller
+	0530  ENE PCI Memory Stick Card Reader Controller
+	0550  ENE PCI Secure Digital Card Reader Controller
+	0610  PCI Smart Card Reader Controller
 	1211  CB1211 Cardbus Controller
 	1225  CB1225 Cardbus Controller
 	1410  CB1410 Cardbus Controller
+		1025 005a  TravelMate 290
+	1411  CB-710/2/4 Cardbus Controller
+	1412  CB-712/4 Cardbus Controller
 	1420  CB1420 Cardbus Controller
+	1421  CB-720/2/4 Cardbus Controller
+	1422  CB-722/4 Cardbus Controller
 1525  IMPACT Technologies
 1526  ISS, Inc
 1527  SOLECTRON
@@ -5544,13 +8180,19 @@
 1535  EVERGREEN Technologies Inc
 1537  DATALEX COMMUNCATIONS
 1538  ARALION Inc
+	0303  ARS106S Ultra ATA 133/100/66 Host Controller
 1539  ATELIER INFORMATIQUES et ELECTRONIQUE ETUDES S.A.
 153a  ONO SOKKI
 153b  TERRATEC Electronic GmbH
+	1144  Aureon 5.1
+# Terratec seems to use several IDs for the same card.
+	1147  Aureon 5.1 Sky
+	1158  Philips Semiconductors SAA7134 (rev 01) [Terratec Cinergy 600 TV]
 153c  ANTAL Electronic
 153d  FILANET Corp
 153e  TECHWELL Inc
-153f  MIPS DENMARK
+153f  MIPS Technologies, Inc.
+	0001  SOC-it 101 System Controller
 1540  PROVIDEO MULTIMEDIA Co Ltd
 1541  MACHONE Communications
 1542  VIVID Technology Inc
@@ -5628,6 +8270,7 @@
 1575  Voltaire Advanced Data Security Ltd
 1576  Viewcast COM
 1578  HITT
+	5615  VPMK3 [Video Processor Mk III]
 1579  Dual Technology Corp
 157a  Japan Elecronics Ind Inc
 157b  Star Multimedia Corp
@@ -5689,14 +8332,24 @@
 15aa  Moreton Bay
 15ab  Bluesteel Networks Inc
 15ac  North Atlantic Instruments
-15ad  VMWare Inc
+15ad  VMware Inc
+	0405  [VMware SVGA II] PCI Display Adapter
 	0710  Virtual SVGA
+	0720  VMware High-Speed Virtual NIC [vmxnet]
 15ae  Amersham Pharmacia Biotech
 15b0  Zoltrix International Ltd
 15b1  Source Technology Inc
 15b2  Mosaid Technologies Inc
-15b3  Mellanox Technology
+15b3  Mellanox Technologies
 	5274  MT21108 InfiniBridge
+	5a44  MT23108 InfiniHost
+	5a45  MT23108 [Infinihost HCA Flash Recovery]
+	5a46  MT23108 PCI Bridge
+	5e8d  MT25204 [InfiniHost III Lx HCA Flash Recovery]
+	6274  MT25204 [InfiniHost III Lx HCA]
+	6278  MT25208 InfiniHost III Ex (Tavor compatibility mode)
+	6279  MT25208 [InfiniHost III Ex HCA Flash Recovery]
+	6282  MT25208 InfiniHost III Ex
 15b4  CCI/TRIAD
 15b5  Cimetrics Inc
 15b6  Texas Memory Systems Inc
@@ -5706,7 +8359,10 @@
 15ba  Impacct Technology Corp
 15bb  Portwell Inc
 15bc  Agilent Technologies
-	2929  E2929A PCI/PCI-X Bus Analyzer
+	1100  E8001-66442 PCI Express CIC
+	2922  64 Bit, 133MHz PCI-X Exerciser & Protocol Checker
+	2928  64 Bit, 66MHz PCI Exerciser & Analyzer
+	2929  64 Bit, 133MHz PCI-X Analyzer & Exerciser
 15bd  DFI Inc
 15be  Sola Electronics
 15bf  High Tech Computer Corp (HTC)
@@ -5716,6 +8372,7 @@
 15c3  Taiwan Mycomp Co Ltd
 15c4  EVSX Inc
 15c5  Procomp Informatics Ltd
+	8010  1394b - 1394 Firewire 3-Port Host Adapter Card
 15c6  Technical University of Budapest
 15c7  Tateyama System Laboratory Co Ltd
 	0349  Tateyama C-PCI PLC/NC card Rev.01A
@@ -5754,9 +8411,12 @@
 15e8  National Datacomm Corp
 	0130  Wireless PCI Card
 15e9  Pacific Digital Corp
+	1841  ADMA-100 DiscStaQ ATA Controller
 15ea  Tokyo Denshi Sekei K.K.
 15eb  Drsearch GmbH
 15ec  Beckhoff GmbH
+	3101  FC3101 Profibus DP 1 Channel PCI
+	5102  FC5102
 15ed  Macrolink Inc
 15ee  In Win Development Inc
 15ef  Intelligent Paradigm Inc
@@ -5790,12 +8450,24 @@
 1619  FarSite Communications Ltd
 	0400  FarSync T2P (2 port X.21/V.35/V.24)
 	0440  FarSync T4P (4 port X.21/V.35/V.24)
+	0610  FarSync T1U (1 port X.21/V.35/V.24)
+	0620  FarSync T2U (1 port X.21/V.35/V.24)
+	0640  FarSync T4U (4 port X.21/V.35/V.24)
+	1610  FarSync TE1 (T1,E1)
+	2610  FarSync DSL-S1 (SHDSL)
+161f  Rioworks
+1626  TDK Semiconductor Corp.
+	8410  RTL81xx Fast Ethernet
 1629  Kongsberg Spacetec AS
 	1003  Format synchronizer v3.0
 	2002  Fast Universal Data Output
+# This seems to occur on their 802.11b Wireless card WMP-11
+1637  Linksys
+	3874  Linksys 802.11b WMP11 PCI Wireless card
 1638  Standard Microsystems Corp [SMC]
-	1100  SMC2602W EZConnect / Addtron AWA-100
+	1100  SMC2602W EZConnect / Addtron AWA-100 / Eumitcom PCI WL11000
 163c  Smart Link Ltd.
+	3052  SmartLink SmartPCI562 56K Modem
 	5449  SmartPCI561 Modem
 1657  Brocade Communications Systems, Inc.
 165a  Epix Inc
@@ -5803,26 +8475,111 @@
 	d200  PIXCI(R) D2X Digital Video Capture Board [custom QL5232]
 	d300  PIXCI(R) D3X Digital Video Capture Board [custom QL5232]
 165d  Hsing Tech. Enterprise Co., Ltd.
+165f  Linux Media Labs, LLC
+	1020  LMLM4 MPEG-4 encoder
 1661  Worldspace Corp.
 1668  Actiontec Electronics Inc
+	0100  Mini-PCI bridge
+# Formerly SiByte, Inc.
+166d  Broadcom Corporation
+	0001  SiByte BCM1125/1125H/1250 System-on-a-Chip PCI
+	0002  SiByte BCM1125H/1250 System-on-a-Chip HyperTransport
+1677  Bernecker + Rainer
+	104e  5LS172.6 B&R Dual CAN Interface Card
+	12d7  5LS172.61 B&R Dual CAN Interface Card
+167b  ZyDAS Technology Corp.
+	2102  ZyDAS ZD1202
+		187e 3406  ZyAIR B-122 CardBus 11Mbs Wireless LAN Card
 1681  Hercules
+	0010  Hercules 3d Prophet II Ultra 64MB (350 MHz NV15BR core)
+1682  XFX Pine Group Inc.
+1688  CastleNet Technology Inc.
+	1170  WLAN 802.11b card
+168c  Atheros Communications, Inc.
+	0007  AR5000 802.11a Wireless Adapter
+	0011  AR5210 802.11a NIC
+	0012  AR5211 802.11ab NIC
+	0013  AR5212 802.11abg NIC
+		1113 d301  Philips CPWNA100 Wireless CardBus adapter
+		1186 3202  D-link DWL-G650 (Rev B3,B5) Wireless cardbus adapter
+		1186 3203  DWL-G520 Wireless PCI Adapter
+		1186 3a13  DWL-G520 Wireless PCI Adapter rev. B
+		1186 3a94  C54C Wireless 801.11g cardbus
+		1385 4d00  Netgear WG311T Wireless PCI Adapter
+		14b7 0a60  8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter
+		168c 0013  WG511T Wireless CardBus Adapter
+		168c 1025  DWL-G650B2 Wireless CardBus Adapter
+		168c 1027  Netgate NL-3054CB ARIES b/g CardBus Adapter
+		168c 2026  Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter
+		168c 2041  Netgate 5354MP Plus ARIES2 b/g MiniPCI Adapter
+		168c 2042  Netgate 5354MP Plus ARIES2 a/b/g MiniPCI Adapter
+		16ab 7302  Trust Speedshare Turbo Pro Wireless PCI Adapter
+	1014  AR5212 802.11abg NIC
+1695  EPoX Computer Co., Ltd.
+169c  Netcell Corporation
+	0044  Revolution Storage Processing Card
+16a5  Tekram Technology Co.,Ltd.
 16ab  Global Sun Technology Inc
+	1100  GL24110P
+	1101  PLX9052 PCMCIA-to-PCI Wireless LAN
 	1102  PCMCIA-to-PCI Wireless Network Bridge
+	8501  WL-8305 Wireless LAN PCI Adapter
+16ae  Safenet Inc
+	1141  SafeXcel-1141
+16af  SparkLAN Communications, Inc.
+16b4  Aspex Semiconductor Ltd
+16b8  Sonnet Technologies, Inc.
 16be  Creatix Polymedia GmbH
+16ca  CENATEK Inc
+	0001  Rocket Drive DL
+16cd  Densitron Technologies
+16ce  Roland Corp.
+16df  PIKA Technologies Inc.
+16e3  European Space Agency
+	1e0f  LEON2FT Processor
 16ec  U.S. Robotics
+	00ff  USR997900 10/100 Mbps PCI Network Card
+	0116  USR997902 10/100/1000 Mbps PCI Network Card
 	3685  Wireless Access PCI Adapter Model 022415
+16ed  Sycron N. V.
+	1001  UMIO communication card
+16f3  Jetway Information Co., Ltd.
+16f4  Vweb Corp
+	8000  VW2010
 16f6  VideoTele.com, Inc.
+1702  Internet Machines Corporation (IMC)
 1705  Digital First, Inc.
-170b  NetOctave Inc
+170b  NetOctave
+	0100  NSP2000-SSL crypto accelerator
 170c  YottaYotta Inc.
+# Seems to be a 2nd ID for Vitesse Semiconductor
+1725  Vitesse Semiconductor
+	7174  VSC7174 PCI/PCI-X Serial ATA Host Bus Controller
 172a  Accelerated Encryption
+	13c8  AEP SureWare Runner 1000V3
+1734  Fujitsu Siemens Computer GmbH
 1737  Linksys
+	0013  WMP54G Wireless Pci Card
+	0015  WMP54GS Wireless Pci Card
+	1032  Gigabit Network Adapter
+		1737 0015  EG1032 v2 Instant Gigabit Network Adapter
+		1737 0024  EG1032 v3 Instant Gigabit Network Adapter
+	1064  Gigabit Network Adapter
+		1737 0016  EG1064 v2 Instant Gigabit Network Adapter
+	ab08  21x4x DEC-Tulip compatible 10/100 Ethernet
+	ab09  21x4x DEC-Tulip compatible 10/100 Ethernet
 173b  Altima (nee Broadcom)
 	03e8  AC1000 Gigabit Ethernet
+	03e9  AC1001 Gigabit Ethernet
 	03ea  AC9100 Gigabit Ethernet
+		173b 0001  AC1002
+	03eb  AC1003 Gigabit Ethernet
 1743  Peppercon AG
 	8139  ROL/F-100 Fast Ethernet Adapter with ROL
+1749  RLX Technologies
 174b  PC Partner Limited
+174d  WellX Telecom SA
+175c  AudioScience Inc
 175e  Sanera Systems, Inc.
 1787  Hightech Information System Ltd.
 # also used by Struck Innovative Systeme for joint developments
@@ -5833,15 +8590,132 @@
 	0004  CAMAC Controller
 	0005  PROFIBUS
 	0006  AMCC HOTlink
+1797  JumpTec h, GMBH
 1799  Belkin
+	6001  Wireless PCI Card - F5D6001
+	6020  Wireless PCMCIA Card - F5D6020
+	6060  Wireless PDA Card - F5D6060
+	7000  Wireless PCI Card - F5D7000
+	7010  BCM4306 802.11b/g Wireless Lan Controller F5D7010
+17a0  Genesys Logic, Inc
+	8033  GL880S USB 1.1 controller
+	8034  GL880S USB 2.0 controller
+17aa  Lenovo
 17af  Hightech Information System Ltd.
+17b3  Hawking Technologies
+	ab08  PN672TX 10/100 Ethernet
+17b4  Indra Networks, Inc.
+	0011  WebEnhance 100 GZIP Compression Card
+17c0  Wistron Corp.
+17c2  Newisys, Inc.
+17cb  Airgo Networks Inc
+17cc  NetChip Technology, Inc
+	2280  USB 2.0
+17cf  Z-Com, Inc.
+17d3  Areca Technology Corp.
+	1110  ARC-1110 4-Port PCI-X to SATA RAID Controller
+	1120  ARC-1120 8-Port PCI-X to SATA RAID Controller
+	1130  ARC-1130 12-Port PCI-X to SATA RAID Controller
+	1160  ARC-1160 16-Port PCI-X to SATA RAID Controller
+	1210  ARC-1210 4-Port PCI-Express to SATA RAID Controller
+	1220  ARC-1220 8-Port PCI-Express to SATA RAID Controller
+	1230  ARC-1230 12-Port PCI-Express to SATA RAID Controller
+	1260  ARC-1260 16-Port PCI-Express to SATA RAID Controller
+17d5  S2io Inc.
+	5831  Xframe 10 Gigabit Ethernet PCI-X
+		103c 12d5  HP PCI-X 133MHz 10GbE SR Fiber
+17de  KWorld Computer Co. Ltd.
+17ee  Connect Components Ltd
+17f2  Albatron Corp.
+17fe  Linksys, A Division of Cisco Systems
+	2120  WMP11v4 802.11b PCI card
+	2220  [AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01)
+		17fe 2220  WPC54G ver. 4
+17ff  Benq Corporation
 1813  Ambient Technologies Inc
 	4000  HaM controllerless modem
 		16be 0001  V9x HAM Data Fax Modem
 	4100  HaM plus Data Fax Modem
 		16be 0002  V9x HAM 1394
+1814  RaLink
+	0101  Wireless PCI Adpator RT2400 / RT2460
+		1043 0127  WiFi-b add-on Card
+	0201  Ralink RT2500 802.11 Cardbus Reference Card
+		1371 001e  CWC-854 Wireless-G CardBus Adapter
+		1371 001f  CWM-854 Wireless-G Mini PCI Adapter
+		1371 0020  CWP-854 Wireless-G PCI Adapter
+		1458 e381  GN-WMKG 802.11b/g Wireless CardBus Adapter
+		1462 6835  MSI Wireless 11G CardBus CB54G2
+		1737 0032  Linksys WMP54G 2.0 PCI Adapter
+		185f 22a0  CN-WF513 Wireless Cardbus Adapter
+1820  InfiniCon Systems Inc.
+1822  Twinhan Technology Co. Ltd
+	4e35  Mantis DTV PCI Bridge Controller [Ver 1.0]
+182d  SiteCom Europe BV
+# HFC-based ISDN card
+	3069  ISDN PCI DC-105V2
+	9790  WL-121 Wireless Network Adapter 100g+ [Ver.3]
+1830  Credence Systems Corporation
+183b  MikroM GmbH
+	08a7  MVC100 DVI
+	08a8  MVC101 SDI
+	08a9  MVC102 DVI+Audio
+1849  ASRock Incorporation
 1851  Microtune, Inc.
 1852  Anritsu Corp.
+1854  LG Electronics, Inc.
+185b  Compro Technology, Inc.
+185f  Wistron NeWeb Corp.
+1867  Topspin Communications
+	5a44  MT23108 PCI-X HCA
+	5a45  MT23108 PCI-X HCA flash recovery
+	5a46  MT23108 PCI-X HCA bridge
+	6278  MT25208 InfiniHost III Ex (Tavor compatibility mode)
+	6282  MT25208 InfiniHost III Ex
+187e  ZyXEL Communication Corporation
+1888  Varisys Ltd
+	0301  VMFX1 FPGA PMC module
+	0601  VSM2 dual PMC carrier
+	0710  VS14x series PowerPC PCI board
+	0720  VS24x series PowerPC PCI board
+1894  KNC One
+1896  B&B Electronics Manufacturing Company, Inc.
+18a1  Astute Networks Inc.
+18ac  DViCO Corporation
+	d500  FusionHDTV 5
+	d810  FusionHDTV 3 Gold
+	d820  FusionHDTV 3 Gold-T
+18b8  Ammasso
+	b001  AMSO 1100 iWARP/RDMA Gigabit Ethernet Coprocessor
+18bc  Info-Tek Corp.
+# Nee Octigabay System
+18c8  Cray Inc
+18c9  ARVOO Engineering BV
+18ca  XGI - Xabre Graphics Inc
+	0020  Volari Z7
+	0040  Volari V3XT/V5/V8
+18d2  Sitecom
+# Sitecom HFC-S based ISDN controller card DC-105v2
+	3069  DC-105v2 ISDN controller
+18dd  Artimi Inc
+	4c6f  Artimi RTMI-100 UWB adapter
+18e6  MPL AG
+	0001  OSCI [Octal Serial Communication Interface]
+18f7  Commtech, Inc.
+	0001  Fastcom ESCC-PCI-335
+	0002  Fastcom 422/4-PCI-335
+	0004  Fastcom 422/2-PCI-335
+	0005  Fastcom IGESCC-PCI-ISO/1
+	000a  Fastcom 232/4-PCI-335
+18fb  Resilience Corporation
+1924  Level 5 Networks Inc.
+1931  Option N.V.
+1966  Orad Hi-Tec Systems
+	1975  DVG64 family
+1993  Innominate Security Technologies AG
+19ae  Progeny Systems Corporation
+	0520  4135 HFT Interface Controller
+19d4  Quixant Limited
 1a08  Sierra semiconductor
 	0000  SC15064
 1b13  Jaton Corp
@@ -5854,6 +8728,10 @@
 	2020  DC-390
 	690c  690c
 	dc29  DC290
+1fc0  Tumsan Oy
+	0300  E2200 Dual E1/Rawpipe Card
+1fc1  PathScale, Inc
+	000d  InfiniPath HT-400
 2000  Smart Link Ltd.
 2001  Temporal Research Ltd
 2003  Smart Link Ltd.
@@ -5869,7 +8747,20 @@
 3000  Hansol Electronics Inc.
 3142  Post Impression Systems.
 3388  Hint Corp
-	0021  HB1-SE33 PCI-PCI Bridge
+	0013  HiNT HC4 PCI to ISDN bridge, Multimedia audio controller
+	0014  HiNT HC4 PCI to ISDN bridge, Network controller
+	0020  HB6 Universal PCI-PCI bridge (transparent mode)
+	0021  HB6 Universal PCI-PCI bridge (non-transparent mode)
+		4c53 1050  CT7 mainboard
+		4c53 1080  CT8 mainboard
+		4c53 1090  Cx9 mainboard
+		4c53 10a0  CA3/CR3 mainboard
+		4c53 3010  PPCI mezzanine (32-bit PMC)
+		4c53 3011  PPCI mezzanine (64-bit PMC)
+	0022  HiNT HB4 PCI-PCI Bridge (PCI6150)
+	0026  HB2 PCI-PCI Bridge
+	101a  E.Band [AudioTrak Inca88]
+	101b  E.Band [AudioTrak Inca88]
 	8011  VXPro II Chipset
 		3388 8011  VXPro II Chipset CPU to PCI Bridge
 	8012  VXPro II Chipset
@@ -5878,18 +8769,27 @@
 		3388 8013  VXPro II Chipset EIDE Controller
 3411  Quantum Designs (H.K.) Inc
 3513  ARCOM Control Systems Ltd
+3842  eVga.com. Corp.
+	c370  e-GeFORCE 6600 256 DDR PCI-e
 38ef  4Links
 3d3d  3DLabs
 	0001  GLINT 300SX
 	0002  GLINT 500TX
+		0000 0000  GLoria L
 	0003  GLINT Delta
+		0000 0000  GLoria XL
 	0004  Permedia
 	0005  Permedia
 	0006  GLINT MX
+		0000 0000  GLoria XL
+		1048 0a42  GLoria XXL
 	0007  3D Extreme
 	0008  GLINT Gamma G1
+		1048 0a42  GLoria XXL
 	0009  Permedia II 2D+3D
 		1040 0011  AccelStar II
+		1048 0a42  GLoria XXL
+		13e9 1000  6221L-4U
 		3d3d 0100  AccelStar II 3D Accelerator
 		3d3d 0111  Permedia 3:16
 		3d3d 0114  Santa Ana
@@ -5902,7 +8802,17 @@
 		3d3d 0121  Oxygen VX1
 	000c  GLINT R3 [Oxygen VX1]
 		3d3d 0144  Oxygen VX1-4X AGP [Permedia 4]
+	000d  GLint R4 rev A
+	0011  GLint R4 rev B
+	0012  GLint R5 rev A
+	0013  GLint R5 rev B
+	0020  VP10 visual processor
+	0022  VP10 visual processor
+	0024  VP9 visual processor
 	0100  Permedia II 2D+3D
+	07a1  Wildcat III 6210
+	07a2  Sun XVR-500 Graphics Accelerator
+	07a3  Wildcat IV 7210
 	1004  Permedia
 	3d04  Permedia
 	ffff  Glint VGA
@@ -5925,10 +8835,20 @@
 4033  Addtron Technology Co, Inc.
 	1360  RTL8139 Ethernet
 4143  Digital Equipment Corp
+4144  Alpha Data
+	0044  ADM-XRCIIPro
 416c  Aladdin Knowledge Systems
 	0100  AladdinCARD
 	0200  CPC
 4444  Internext Compression Inc
+	0016  iTVC16 (CX23416) MPEG-2 Encoder
+		0070 4009  WinTV PVR 250
+		0070 8003  WinTV PVR 150
+	0803  iTVC15 MPEG-2 Encoder
+		0070 4000  WinTV PVR-350
+		0070 4001  WinTV PVR-250
+# video capture card
+		1461 a3cf  M179
 4468  Bridgeport machines
 4594  Cogetec Informatique Inc
 45fb  Baldor Electric Company
@@ -5937,6 +8857,8 @@
 4916  RedCreek Communications Inc
 	1960  RedCreek PCI adapter
 4943  Growth Networks
+494f  ACCES I/O Products, Inc.
+	10e8  LPCI-COM-8SM
 4978  Axil Computer Inc
 4a14  NetVin
 	5000  NV5000SC
@@ -5944,6 +8866,11 @@
 4b10  Buslogic Inc.
 4c48  LUNG HWA Electronics
 4c53  SBS Technologies
+	0000  PLUSTEST device
+		4c53 3000  PLUSTEST card (PC104+)
+		4c53 3001  PLUSTEST card (PMC)
+	0001  PLUSTEST-MM device
+		4c53 3002  PLUSTEST-MM card (PMC)
 4ca1  Seanix Technology Inc
 4d51  MediaQ Inc.
 	0200  MQ-200
@@ -5974,6 +8901,7 @@
 5143  Qualcomm Inc
 5145  Ensoniq (Old)
 	3031  Concert AudioPCI
+5168  Animation Technologies Inc.
 5301  Alliance Semiconductor Corp.
 	0001  ProMotion aT3D
 5333  S3 Inc.
@@ -6045,6 +8973,7 @@
 	8a22  Savage 4
 		1033 8068  Savage 4
 		1033 8069  Savage 4
+		1033 8110  Savage 4 LT
 		105d 0018  SR9 8Mb SDRAM
 		105d 002a  SR9 Pro 16Mb SDRAM
 		105d 003a  SR9 Pro 32Mb SDRAM
@@ -6083,7 +9012,9 @@
 	8c11  82C270-294 Savage/MX
 	8c12  86C270-294 Savage/IX-MV
 		1014 017f  ThinkPad T20
+		1179 0001  86C584 SuperSavage/IXC Toshiba
 	8c13  86C270-294 Savage/IX
+		1179 0001  Magnia Z310
 	8c22  SuperSavage MX/128
 	8c24  SuperSavage MX/64
 	8c26  SuperSavage MX/64C
@@ -6094,10 +9025,10 @@
 	8c2e  SuperSavage IX/C SDR
 		1014 01fc  ThinkPad T23 (2647-4MG)
 	8c2f  SuperSavage IX/C DDR
-# Integrated in VIA ProSavage PN133 North Bridge
-	8d01  VT8603 [ProSavage PN133] AGP4X VGA Controller (Twister)
+	8d01  86C380 [ProSavageDDR K4M266]
 	8d02  VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK)
-	8d04  VT8751 [ProSavageDDR P4M266] VGA Controller
+	8d03  VT8751 [ProSavageDDR P4M266]
+	8d04  VT8375 [ProSavage8 KM266/KL266]
 	9102  86C410 Savage 2000
 		1092 5932  Viper II Z200
 		1092 5934  Viper II Z200
@@ -6109,6 +9040,7 @@
 		1092 5a57  Viper II Z200
 	ca00  SonicVibes
 544c  Teralogic Inc
+	0350  TL880-based HDTV/ATSC tuner
 5455  Technische University Berlin
 	4458  S5933
 5519  Cnet Technologies, Inc.
@@ -6116,32 +9048,89 @@
 	0001  I-30xx Scanner Interface
 5555  Genroco, Inc
 	0003  TURBOstor HFP-832 [HiPPI NIC]
+5654  VoiceTronix Pty Ltd
+	3132  OpenSwitch12
 5700  Netpower
+5851  Exacq Technologies
 6356  UltraStor
-6374  c't Magazin für Computertechnik
+6374  c't Magazin fuer Computertechnik
 	6773  GPPCI
 6409  Logitec Corp.
 6666  Decision Computer International Co.
 	0001  PCCOM4
 	0002  PCCOM8
+	0004  PCCOM2
+7063  pcHDTV
+	2000  HD-2000
+	3000  HD-3000
 7604  O.N. Electronic Co Ltd.
 7bde  MIDAC Corporation
 7fed  PowerTV
 8008  Quancom Electronic GmbH
 	0010  WDOG1 [PCI-Watchdog 1]
 	0011  PWDOG2 [PCI-Watchdog 2]
-8086  Intel Corp.
+# Wrong ID used in subsystem ID of AsusTek PCI-USB2 PCI card.
+807d  Asustek Computer, Inc.
+8086  Intel Corporation
 	0007  82379AB
 	0008  Extended Express System Support Controller
-	0039  21145
+	0039  21145 Fast Ethernet
 	0122  82437FX
-	0482  82375EB
-	0483  82424ZX [Saturn]
-	0484  82378IB [SIO ISA Bridge]
-	0486  82430ZX [Aries]
-	04a3  82434LX [Mercury/Neptune]
+	0309  80303 I/O Processor PCI-to-PCI Bridge
+	030d  80312 I/O Companion Chip PCI-to-PCI Bridge
+	0326  6700/6702PXH I/OxAPIC Interrupt Controller A
+	0327  6700PXH I/OxAPIC Interrupt Controller B
+	0329  6700PXH PCI Express-to-PCI Bridge A
+	032a  6700PXH PCI Express-to-PCI Bridge B
+	032c  6702PXH PCI Express-to-PCI Bridge A
+	0330  80332 [Dobson] I/O processor (A-Segment Bridge)
+	0331  80332 [Dobson] I/O processor (A-Segment IOAPIC)
+	0332  80332 [Dobson] I/O processor (B-Segment Bridge)
+	0333  80332 [Dobson] I/O processor (B-Segment IOAPIC)
+	0334  80332 [Dobson] I/O processor (ATU)
+	0335  80331 [Lindsay] I/O processor (PCI-X Bridge)
+	0336  80331 [Lindsay] I/O processor (ATU)
+	0340  41210 [Lanai] Serial to Parallel PCI Bridge (A-Segment Bridge)
+	0341  41210 [Lanai] Serial to Parallel PCI Bridge (B-Segment Bridge)
+	0370  80333 Segment-A PCI Express-to-PCI Express Bridge
+	0371  80333 A-Bus IOAPIC
+	0372  80333 Segment-B PCI Express-to-PCI Express Bridge
+	0373  80333 B-Bus IOAPIC
+	0374  80333 Address Translation Unit
+	0482  82375EB/SB PCI to EISA Bridge
+	0483  82424TX/ZX [Saturn] CPU to PCI bridge
+	0484  82378ZB/IB, 82379AB (SIO, SIO.A) PCI to ISA Bridge
+	0486  82425EX/ZX [Aries] PCIset with ISA bridge
+	04a3  82434LX/NX [Mercury/Neptune] Processor to PCI bridge
 	04d0  82437FX [Triton FX]
+	0500  E8870 Processor bus control
+	0501  E8870 Memory controller
+# and registers common to both SPs
+	0502  E8870 Scalability Port 0
+# and global performance monitoring
+	0503  E8870 Scalability Port 1
+	0510  E8870IO Hub Interface Port 0 registers (8-bit compatibility port)
+	0511  E8870IO Hub Interface Port 1 registers
+	0512  E8870IO Hub Interface Port 2 registers
+	0513  E8870IO Hub Interface Port 3 registers
+	0514  E8870IO Hub Interface Port 4 registers
+	0515  E8870IO General SIOH registers
+	0516  E8870IO RAS registers
+	0530  E8870SP Scalability Port 0 registers
+	0531  E8870SP Scalability Port 1 registers
+	0532  E8870SP Scalability Port 2 registers
+	0533  E8870SP Scalability Port 3 registers
+	0534  E8870SP Scalability Port 4 registers
+	0535  E8870SP Scalability Port 5 registers
+# (bi-interleave 0) and global registers that are neither per-port nor per-interleave
+	0536  E8870SP Interleave registers 0 and 1
+# (bi-interleave 1)
+	0537  E8870SP Interleave registers 2 and 3
 	0600  RAID Controller
+		8086 01c1  ICP Vortex GDT8546RZ
+		8086 01f7  SCRU32
+# uninitialized SRCU32 RAID Controller
+	061f  80303 I/O Processor
 	0960  80960RP [i960 RP Microprocessor/Bridge]
 	0962  80960RM [i960RM Bridge]
 	0964  80960RP [i960 RP Microprocessor/Bridge]
@@ -6154,6 +9143,7 @@
 	1001  82543GC Gigabit Ethernet Controller (Fiber)
 		0e11 004a  NC6136 Gigabit Server Adapter
 		1014 01ea  Netfinity Gigabit Ethernet SX Adapter
+		8086 1002  PRO/1000 F Server Adapter
 		8086 1003  PRO/1000 F Server Adapter
 	1002  Pro 100 LAN+Modem 56 Cardbus II
 		8086 200e  Pro 100 LAN+Modem 56 Cardbus II
@@ -6166,28 +9156,101 @@
 		8086 1004  PRO/1000 T Server Adapter
 		8086 2004  PRO/1000 T Server Adapter
 	1008  82544EI Gigabit Ethernet Controller (Copper)
+		1014 0269  iSeries 1000/100/10 Ethernet Adapter
+		1028 011c  PRO/1000 XT Network Connection
 		8086 1107  PRO/1000 XT Server Adapter
 		8086 2107  PRO/1000 XT Server Adapter
 		8086 2110  PRO/1000 XT Server Adapter
+		8086 3108  PRO/1000 XT Network Connection
 	1009  82544EI Gigabit Ethernet Controller (Fiber)
+		1014 0268  iSeries Gigabit Ethernet Adapter
 		8086 1109  PRO/1000 XF Server Adapter
 		8086 2109  PRO/1000 XF Server Adapter
+	100a  82540EM Gigabit Ethernet Controller
 	100c  82544GC Gigabit Ethernet Controller (Copper)
 		8086 1112  PRO/1000 T Desktop Adapter
 		8086 2112  PRO/1000 T Desktop Adapter
 	100d  82544GC Gigabit Ethernet Controller (LOM)
+		1028 0123  PRO/1000 XT Network Connection
+		1079 891f  82544GC Based Network Connection
+		4c53 1080  CT8 mainboard
+		8086 110d  82544GC Based Network Connection
 	100e  82540EM Gigabit Ethernet Controller
+		1014 0265  PRO/1000 MT Network Connection
+		1014 0267  PRO/1000 MT Network Connection
+		1014 026a  PRO/1000 MT Network Connection
+		1024 0134  Poweredge SC600
+		1028 002e  Optiplex GX260
+		1028 0151  PRO/1000 MT Network Connection
+		107b 8920  PRO/1000 MT Desktop Adapter
 		8086 001e  PRO/1000 MT Desktop Adapter
 		8086 002e  PRO/1000 MT Desktop Adapter
+		8086 1376  PRO/1000 GT Desktop Adapter
+		8086 1476  PRO/1000 GT Desktop Adapter
 	100f  82545EM Gigabit Ethernet Controller (Copper)
+		1014 0269  iSeries 1000/100/10 Ethernet Adapter
+		1014 028e  PRO/1000 MT Network Connection
+		8086 1000  PRO/1000 MT Network Connection
 		8086 1001  PRO/1000 MT Server Adapter
 	1010  82546EB Gigabit Ethernet Controller (Copper)
+		0e11 00db  NC7170 Gigabit Server Adapter
+		1014 027c  PRO/1000 MT Dual Port Network Adapter
+		18fb 7872  RESlink-X
+		1fc1 0026  Niagara 2260 Bypass Card
+		4c53 1080  CT8 mainboard
+		4c53 10a0  CA3/CR3 mainboard
 		8086 1011  PRO/1000 MT Dual Port Server Adapter
+		8086 1012  Primergy RX300
+		8086 101a  PRO/1000 MT Dual Port Network Adapter
+		8086 3424  SE7501HG2 Mainboard
 	1011  82545EM Gigabit Ethernet Controller (Fiber)
+		1014 0268  iSeries Gigabit Ethernet Adapter
 		8086 1002  PRO/1000 MF Server Adapter
+		8086 1003  PRO/1000 MF Server Adapter (LX)
 	1012  82546EB Gigabit Ethernet Controller (Fiber)
+		0e11 00dc  NC6170 Gigabit Server Adapter
 		8086 1012  PRO/1000 MF Dual Port Server Adapter
+	1013  82541EI Gigabit Ethernet Controller (Copper)
+		8086 0013  PRO/1000 MT Network Connection
+		8086 1013  IBM ThinkCentre Network Card
+		8086 1113  PRO/1000 MT Desktop Adapter
+	1014  82541ER Gigabit Ethernet Controller
 	1015  82540EM Gigabit Ethernet Controller (LOM)
+	1016  82540EP Gigabit Ethernet Controller (LOM)
+		1014 052c  PRO/1000 MT Mobile Connection
+		1179 0001  PRO/1000 MT Mobile Connection
+		8086 1016  PRO/1000 MT Mobile Connection
+	1017  82540EP Gigabit Ethernet Controller (LOM)
+		8086 1017  PR0/1000 MT Desktop Connection
+	1018  82541EI Gigabit Ethernet Controller
+		8086 1018  PRO/1000 MT Desktop Adapter
+	1019  82547EI Gigabit Ethernet Controller (LOM)
+		1458 1019  GA-8IPE1000 Pro2 motherboard (865PE)
+		1458 e000  Intel Gigabit Ethernet (Kenai II)
+		8086 1019  PRO/1000 CT Desktop Connection
+		8086 301f  D865PERL mainboard
+		8086 3427  S875WP1-E mainboard
+	101a  82547EI Gigabit Ethernet Controller (Mobile)
+	101d  82546EB Gigabit Ethernet Controller
+		8086 1000  PRO/1000 MT Quad Port Server Adapter
+	101e  82540EP Gigabit Ethernet Controller (Mobile)
+		1014 0549  PRO/1000 MT Mobile Connection
+		1179 0001  PRO/1000 MT Mobile Connection
+		8086 101e  PRO/1000 MT Mobile Connection
+	1026  82545GM Gigabit Ethernet Controller
+		1028 0169  Precision 470
+		8086 1000  PRO/1000 MT Server Connection
+		8086 1001  PRO/1000 MT Server Adapter
+		8086 1002  PRO/1000 MT Server Adapter
+		8086 1026  PRO/1000 MT Server Connection
+	1027  82545GM Gigabit Ethernet Controller
+		103c 3103  NC310F PCI-X Gigabit Server Adapter
+		8086 1001  PRO/1000 MF Server Adapter(LX)
+		8086 1002  PRO/1000 MF Server Adapter(LX)
+		8086 1003  PRO/1000 MF Server Adapter(LX)
+		8086 1027  PRO/1000 MF Server Adapter
+	1028  82545GM Gigabit Ethernet Controller
+		8086 1028  PRO/1000 MB Server Adapter
 	1029  82559 Ethernet Controller
 	1030  82559 InBusiness 10/100
 	1031  82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller
@@ -6206,31 +9269,115 @@
 	1036  82801CAM (ICH3) 82562EH Ethernet Controller
 	1037  82801CAM (ICH3) Chipset Ethernet Controller
 	1038  82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller
-	1039  82801BD PRO/100 VE (LOM) Ethernet Controller
-	103a  82801BD PRO/100 VE (CNR) Ethernet Controller
-	103b  82801BD PRO/100 VM (LOM) Ethernet Controller
-	103c  82801BD PRO/100 VM (CNR) Ethernet Controller
-	103d  82801BD PRO/100 VE (MOB) Ethernet Controller
-	103e  82801BD PRO/100 VM (MOB) Ethernet Controller
+	1039  82801DB PRO/100 VE (LOM) Ethernet Controller
+		1014 0267  NetVista A30p
+	103a  82801DB PRO/100 VE (CNR) Ethernet Controller
+	103b  82801DB PRO/100 VM (LOM) Ethernet Controller
+	103c  82801DB PRO/100 VM (CNR) Ethernet Controller
+	103d  82801DB PRO/100 VE (MOB) Ethernet Controller
+	103e  82801DB PRO/100 VM (MOB) Ethernet Controller
 	1040  536EP Data Fax Modem
 		16be 1040  V.9X DSP Data Fax Modem
+	1043  PRO/Wireless LAN 2100 3B Mini PCI Adapter
+		8086 2527  MIM2000/Centrino
+	1048  PRO/10GbE LR Server Adapter
+		8086 a01f  PRO/10GbE LR Server Adapter
+		8086 a11f  PRO/10GbE LR Server Adapter
+	1050  82562EZ 10/100 Ethernet Controller
+		1462 728c  865PE Neo2 (MS-6728)
+		1462 758c  MS-6758 (875P Neo)
+		8086 3020  D865PERL mainboard
+		8086 302f  Desktop Board D865GBF
+		8086 3427  S875WP1-E mainboard
+	1051  82801EB/ER (ICH5/ICH5R) integrated LAN Controller
+	1052  PRO/100 VM Network Connection
+	1053  PRO/100 VM Network Connection
 	1059  82551QM Ethernet Controller
+	1064  82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller
+	1065  82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller
+	1066  82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller
+	1067  82562 EM/EX/GX - PRO/100 VM Ethernet Controller
+	1068  82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile
+	1069  82562EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile
+	106a  82562G - PRO/100 VE (LOM) Ethernet Controller
+	106b  82562G - PRO/100 VE Ethernet Controller Mobile
+	1075  82547GI Gigabit Ethernet Controller
+		1028 0165  PowerEdge 750
+		8086 0075  PRO/1000 CT Network Connection
+		8086 1075  PRO/1000 CT Network Connection
+	1076  82541GI/PI Gigabit Ethernet Controller
+		1028 0165  PowerEdge 750
+		1028 019a  PowerEdge SC1425
+		8086 0076  PRO/1000 MT Network Connection
+		8086 1076  PRO/1000 MT Network Connection
+		8086 1176  PRO/1000 MT Desktop Adapter
+		8086 1276  PRO/1000 MT Desktop Adapter
+	1077  82541GI Gigabit Ethernet Controller
+		1179 0001  PRO/1000 MT Mobile Connection
+		8086 0077  PRO/1000 MT Mobile Connection
+		8086 1077  PRO/1000 MT Mobile Connection
+	1078  82541EI Gigabit Ethernet Controller
+		8086 1078  PRO/1000 MT Network Connection
+	1079  82546GB Gigabit Ethernet Controller
+		103c 12a6  HP Dual Port 1000Base-T [A9900A]
+		103c 12cf  HP Core Dual Port 1000Base-T [AB352A]
+		1fc1 0027  Niagara 2261 Failover NIC
+		4c53 1090  Cx9 / Vx9 mainboard
+		4c53 10b0  CL9 mainboard
+		8086 0079  PRO/1000 MT Dual Port Network Connection
+		8086 1079  PRO/1000 MT Dual Port Network Connection
+		8086 1179  PRO/1000 MT Dual Port Network Connection
+		8086 117a  PRO/1000 MT Dual Port Server Adapter
+	107a  82546GB Gigabit Ethernet Controller
+		103c 12a8  HP Dual Port 1000base-SX [A9899A]
+		8086 107a  PRO/1000 MF Dual Port Server Adapter
+		8086 127a  PRO/1000 MF Dual Port Server Adapter
+	107b  82546GB Gigabit Ethernet Controller
+		8086 007b  PRO/1000 MB Dual Port Server Connection
+		8086 107b  PRO/1000 MB Dual Port Server Connection
+	107c  82541PI Gigabit Ethernet Controller
+	1080  FA82537EP 56K V.92 Data/Fax Modem PCI
+	1081  Enterprise Southbridge LAN Copper
+	1082  Enterprise Southbridge LAN fiber
+	1083  Enterprise Southbridge LAN SERDES
+	1084  Enterprise Southbridge IDE Redirection
+	1085  Enterprise Southbridge Serial Port Redirection
+	1086  Enterprise Southbridge IPMI/KCS0
+	1087  Enterprise Southbridge UHCI Redirection
+	1089  Enterprise Southbridge BT
+	108a  82546EB Gigabit Ethernet Controller
+	108b  82573V Gigabit Ethernet Controller (Copper)
+	108c  82573E Gigabit Ethernet Controller (Copper)
+	1096  Enterprise Southbridge DPT LAN Copper
+	1097  Enterprise Southbridge DPT LAN fiber
+	1098  Enterprise Southbridge DPT LAN SERDES
+	1099  82546GB Quad Port Server Adapter
+	109a  82573L Gigabit Ethernet Controller
+	1107  PRO/1000 MF Server Adapter (LX)
 	1130  82815 815 Chipset Host Bridge and Memory Controller Hub
 		1025 1016  Travelmate 612 TX
 		1043 8027  TUSL2-C Mainboard
 		104d 80df  Vaio PCG-FX403
+		8086 4532  D815EEA2 mainboard
+		8086 4557  D815EGEW Mainboard
 	1131  82815 815 Chipset AGP Bridge
 	1132  82815 CGC [Chipset Graphics Controller]
 		1025 1016  Travelmate 612 TX
 		104d 80df  Vaio PCG-FX403
+		8086 4532  D815EEA2 Mainboard
+		8086 4541  D815EEA Motherboard
+		8086 4557  D815EGEW Mainboard
 	1161  82806AA PCI64 Hub Advanced Programmable Interrupt Controller
 		8086 1161  82806AA PCI64 Hub APIC
 	1162  Xscale 80200 Big Endian Companion Chip
 	1200  Intel IXP1200 Network Processor
 		172a 0000  AEP SSL Accelerator
-	1209  82559ER
-	1221  82092AA_0
-	1222  82092AA_1
+	1209  8255xER/82551IT Fast Ethernet Controller
+		4c53 1050  CT7 mainboard
+		4c53 1051  CE7 mainboard
+		4c53 1070  PC6 mainboard
+	1221  82092AA PCI to PCMCIA Bridge
+	1222  82092AA IDE Controller
 	1223  SAA7116
 	1225  82452KX/GX [Orion]
 	1226  82596 PRO/10 PCI
@@ -6276,7 +9423,8 @@
 		1014 605c  10/100 EtherJet Secure Management Adapter
 		1014 705c  10/100 Netfinity 10/100 Ethernet Security Adapter
 		1014 805c  10/100 Netfinity 10/100 Ethernet Security Adapter
-		1028 009b  PowerEdge 2550
+		1028 009b  PowerEdge 2500/2550
+		1028 00ce  PowerEdge 1400
 		1033 8000  PC-9821X-B06
 		1033 8016  PK-UG-X006
 		1033 801f  PK-UG-X006
@@ -6290,18 +9438,23 @@
 		103c 10e3  NetServer 10/100TX
 		103c 10e4  NetServer 10/100TX
 		103c 1200  NetServer 10/100TX
+		108e 10cf  EtherExpress PRO/100(B)
 		10c3 1100  SmartEther100 SC1100
 		10cf 1115  8255x-based Ethernet Adapter (10/100)
 		10cf 1143  8255x-based Ethernet Adapter (10/100)
+		110a 008b  82551QM Fast Ethernet Multifuction PCI/CardBus Controller
 		1179 0001  8255x-based Ethernet Adapter (10/100)
 		1179 0002  PCI FastEther LAN on Docker
 		1179 0003  8255x-based Fast Ethernet
 		1259 2560  AT-2560 100
 		1259 2561  AT-2560 100 FX Ethernet Adapter
 		1266 0001  NE10/100 Adapter
+		13e9 1000  6221L-4U
 		144d 2501  SEM-2000 MiniPCI LAN Adapter
 		144d 2502  SEM-2100IL MiniPCI LAN Adapter
 		1668 1100  EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem)
+		4c53 1080  CT8 mainboard
+		4c53 10e0  PSL09 PrPMC
 		8086 0001  EtherExpress PRO/100B (TX)
 		8086 0002  EtherExpress PRO/100B (T4)
 		8086 0003  EtherExpress PRO/10+
@@ -6386,6 +9539,7 @@
 		8086 3010  EtherExpress PRO/100 S Network Connection
 		8086 3011  EtherExpress PRO/100 S Network Connection
 		8086 3012  EtherExpress PRO/100 Network Connection
+		8086 3411  SDS2 Mainboard
 	122d  430FX - 82437FX TSC [Triton I]
 	122e  82371FB PIIX ISA [Triton I]
 	1230  82371FB PIIX IDE [Triton I]
@@ -6393,13 +9547,15 @@
 	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
-	123c  82380AB
+	1239  82371FB PIIX IDE Interface
+	123b  82380PB PCI to PCI Docking Bridge
+	123c  82380AB (MISA) Mobile PCI-to-ISA Bridge
 	123d  683053 Programmable Interrupt Device
+# in" hidden" mode
+	123e  82466GX (IHPC) Integrated Hot-Plug Controller
 	123f  82466GX Integrated Hot-Plug Controller (IHPC)
-	1240  752 AGP
-	124b  82380FB
+	1240  82752 (752) AGP Graphics Accelerator
+	124b  82380FB (MPCI2) Mobile Docking Controller
 	1250  430HX - 82439HX TXC [Triton II]
 	1360  82806AA PCI64 Hub PCI Bridge
 	1361  82806AA PCI64 Hub Controller (HRes)
@@ -6407,6 +9563,8 @@
 		8086 8000  82806AA PCI64 Hub Controller (HRes)
 	1460  82870P2 P64H2 Hub PCI Bridge
 	1461  82870P2 P64H2 I/OxAPIC
+		15d9 3480  P4DP6
+		4c53 1090  Cx9/Vx9 mainboard
 	1462  82870P2 P64H2 Hot Plug Controller
 	1960  80960RP [i960RP Microprocessor]
 		101e 0431  MegaRAID 431 RAID Controller
@@ -6429,22 +9587,31 @@
 		1111 1111  MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC
 		1111 1112  PowerEdge Expandable RAID Controller 2/SC
 		113c 03a2  MegaRAID
+		e4bf 1010  CG1-RADIO
+		e4bf 1020  CU2-QUARTET
+		e4bf 1040  CU1-CHORUS
+		e4bf 3100  CX1-BAND
 	1962  80960RM [i960RM Microprocessor]
 		105a 0000  SuperTrak SX6000 I2O CPU
 	1a21  82840 840 (Carmel) Chipset Host Bridge (Hub A)
 	1a23  82840 840 (Carmel) Chipset AGP Bridge
 	1a24  82840 840 (Carmel) Chipset PCI Bridge (Hub B)
 	1a30  82845 845 (Brookdale) Chipset Host Bridge
+		1028 010e  Optiplex GX240
 	1a31  82845 845 (Brookdale) Chipset AGP Bridge
+	1a38  Server DMA Controller
+	1a48  PRO/10GbE SR Server Adapter
 	2410  82801AA ISA Bridge (LPC)
 	2411  82801AA IDE
 	2412  82801AA USB
 	2413  82801AA SMBus
 	2415  82801AA AC'97 Audio
 		1028 0095  Precision Workstation 220 Integrated Digital Audio
+		110a 0051  Activy 2xx
 		11d4 0040  SoundMAX Integrated Digital Audio
 		11d4 0048  SoundMAX Integrated Digital Audio
 		11d4 5340  SoundMAX Integrated Digital Audio
+		1734 1025  Activy 3xx
 	2416  82801AA AC'97 Modem
 	2418  82801AA PCI Bridge
 	2420  82801AB ISA Bridge (LPC)
@@ -6458,26 +9625,43 @@
 	2428  82801AB PCI Bridge
 	2440  82801BA ISA Bridge (LPC)
 	2442  82801BA/BAM USB (Hub #1)
+		1014 01c6  Netvista A40/A40p
+		1025 1016  Travelmate 612 TX
+		1028 010e  Optiplex GX240
+		1043 8027  TUSL2-C Mainboard
 		104d 80df  Vaio PCG-FX403
 		147b 0507  TH7II-RAID
+		8086 4532  D815EEA2 mainboard
+		8086 4557  D815EGEW Mainboard
 	2443  82801BA/BAM SMBus
+		1014 01c6  Netvista A40/A40p
 		1025 1016  Travelmate 612 TX
+		1028 010e  Optiplex GX240
 		1043 8027  TUSL2-C Mainboard
 		104d 80df  Vaio PCG-FX403
 		147b 0507  TH7II-RAID
+		8086 4532  D815EEA2 mainboard
+		8086 4557  D815EGEW Mainboard
 	2444  82801BA/BAM USB (Hub #2)
 		1025 1016  Travelmate 612 TX
+		1028 010e  Optiplex GX240
+		1043 8027  TUSL2-C Mainboard
 		104d 80df  Vaio PCG-FX403
 		147b 0507  TH7II-RAID
+		8086 4532  D815EEA2 mainboard
 	2445  82801BA/BAM AC'97 Audio
+		1014 01c6  Netvista A40/A40p
 		1025 1016  Travelmate 612 TX
 		104d 80df  Vaio PCG-FX403
 		1462 3370  STAC9721 AC
 		147b 0507  TH7II-RAID
-	2446  Intel 537 [82801BA/BAM AC'97 Modem]
+		8086 4557  D815EGEW Mainboard
+	2446  82801BA/BAM AC'97 Modem
 		1025 1016  Travelmate 612 TX
 		104d 80df  Vaio PCG-FX403
-	2448  82801BAM/CAM PCI Bridge
+	2448  82801 Mobile PCI Bridge
+		103c 099c  nx6110
+		1734 1055  Amilo M1420
 	2449  82801BA/BAM/CA/CAM Ethernet Controller
 		0e11 0012  EtherExpress PRO/100 VM
 		0e11 0091  EtherExpress PRO/100 VE
@@ -6492,8 +9676,12 @@
 		1014 023d  EtherExpress PRO/100 VE
 		1014 0244  EtherExpress PRO/100 VE
 		1014 0245  EtherExpress PRO/100 VE
+		1014 0265  PRO/100 VE Desktop Connection
+		1014 0267  PRO/100 VE Desktop Connection
+		1014 026a  PRO/100 VE Desktop Connection
 		109f 315d  EtherExpress PRO/100 VE
 		109f 3181  EtherExpress PRO/100 VE
+		1179 ff01  PRO/100 VE Network Connection
 		1186 7801  EtherExpress PRO/100 VE
 		144d 2602  HomePNA 1M CNR
 		8086 3010  EtherExpress PRO/100 VE
@@ -6509,10 +9697,15 @@
 		1025 1016  Travelmate 612TX
 		104d 80df  Vaio PCG-FX403
 	244b  82801BA IDE U100
+		1014 01c6  Netvista A40/A40p
+		1028 010e  Optiplex GX240
 		1043 8027  TUSL2-C Mainboard
 		147b 0507  TH7II-RAID
+		8086 4532  D815EEA2 mainboard
+		8086 4557  D815EGEW Mainboard
 	244c  82801BAM ISA Bridge (LPC)
-	244e  82801BA/CA/DB PCI Bridge
+	244e  82801 PCI Bridge
+		1014 0267  NetVista A30p
 	2450  82801E ISA Bridge (LPC)
 	2452  82801E USB
 	2453  82801E SMBus
@@ -6520,52 +9713,264 @@
 	245b  82801E IDE U100
 	245d  82801E Ethernet Controller 1
 	245e  82801E PCI Bridge
-	2480  82801CA ISA Bridge (LPC)
+	2480  82801CA LPC Interface Controller
 	2482  82801CA/CAM USB (Hub #1)
 		1014 0220  ThinkPad A/T/X Series
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+		15d9 3480  P4DP6
 		8086 1958  vpr Matrix 170B4
-	2483  82801CA/CAM SMBus
+		8086 3424  SE7501HG2 Mainboard
+		8086 4541  Latitude C640
+	2483  82801CA/CAM SMBus Controller
 		1014 0220  ThinkPad A/T/X Series
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+		15d9 3480  P4DP6
 		8086 1958  vpr Matrix 170B4
 	2484  82801CA/CAM USB (Hub #2)
 		1014 0220  ThinkPad A/T/X Series
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+		15d9 3480  P4DP6
 		8086 1958  vpr Matrix 170B4
-	2485  82801CA/CAM AC'97 Audio
-		1014 0222  ThinkPad T23 (2647-4MG) or A30p (2653-64G)
+	2485  82801CA/CAM AC'97 Audio Controller
+		1013 5959  Crystal WMD Audio Codec
+		1014 0222  ThinkPad T23 (2647-4MG) or A30/A30p (2652/2653)
 		1014 0508  ThinkPad T30
 		1014 051c  ThinkPad A/T/X Series
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 		144d c006  vpr Matrix 170B4
-	2486  82801CA/CAM AC'97 Modem
+	2486  82801CA/CAM AC'97 Modem Controller
 		1014 0223  ThinkPad A/T/X Series
 		1014 0503  ThinkPad R31 2656BBG
 		1014 051a  ThinkPad A/T/X Series
+		101f 1025  Acer 620 Series
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+		1179 0001  Toshiba Satellite 1110 Z15 internal Modem
 		134d 4c21  Dell Inspiron 2100 internal modem
 		144d 2115  vpr Matrix 170B4 internal modem
 		14f1 5421  MD56ORD V.92 MDC Modem
 	2487  82801CA/CAM USB (Hub #3)
 		1014 0220  ThinkPad A/T/X Series
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
+		15d9 3480  P4DP6
 		8086 1958  vpr Matrix 170B4
 	248a  82801CAM IDE U100
 		1014 0220  ThinkPad A/T/X Series
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
 		8086 1958  vpr Matrix 170B4
-	248b  82801CA IDE U100
+		8086 4541  Latitude C640
+	248b  82801CA Ultra ATA Storage Controller
+		15d9 3480  P4DP6
 	248c  82801CAM ISA Bridge (LPC)
-	24c0  82801DB ISA Bridge (LPC)
-	24c2  82801DB USB (Hub #1)
-	24c3  82801DB SMBus
-	24c4  82801DB USB (Hub #2)
-	24c5  82801DB AC'97 Audio
-	24c6  82801DB AC'97 Modem
-	24c7  82801DB USB (Hub #3)
-	24cb  82801DB ICH4 IDE
-	24cd  82801DB USB EHCI Controller
+	24c0  82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge
+		1014 0267  NetVista A30p
+		1462 5800  845PE Max (MS-6580)
+	24c1  82801DBL (ICH4-L) IDE Controller
+	24c2  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1
+		1014 0267  NetVista A30p
+		1025 005a  TravelMate 290
+		1028 0126  Optiplex GX260
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+		1071 8160  MIM2000
+		1462 5800  845PE Max (MS-6580)
+		1509 2990  Averatec 5110H laptop
+		1734 1055  Amilo M1420
+		4c53 1090  Cx9 / Vx9 mainboard
+		8086 4541  Latitude D400
+	24c3  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller
+		1014 0267  NetVista A30p
+		1025 005a  TravelMate 290
+		1028 0126  Optiplex GX260
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+		1071 8160  MIM2000
+		1458 24c2  GA-8PE667 Ultra
+		1462 5800  845PE Max (MS-6580)
+		1734 1055  Amilo M1420
+		4c53 1090  Cx9 / Vx9 mainboard
+	24c4  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2
+		1014 0267  NetVista A30p
+		1025 005a  TravelMate 290
+		1028 0126  Optiplex GX260
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+		1071 8160  MIM2000
+		1462 5800  845PE Max (MS-6580)
+		1509 2990  Averatec 5110H
+		4c53 1090  Cx9 / Vx9 mainboard
+		8086 4541  Latitude D400
+	24c5  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller
+		0e11 00b8  Analog Devices Inc. codec [SoundMAX]
+		1014 0267  NetVista A30p
+		1025 005a  TravelMate 290
+		1028 0139  Latitude D400
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+		1071 8160  MIM2000
+		1458 a002  GA-8PE667 Ultra
+		1462 5800  845PE Max (MS-6580)
+		1734 1055  Amilo M1420
+	24c6  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller
+		1025 005a  TravelMate 290
+		1028 0196  Inspiron 5160
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+		1071 8160  MIM2000
+	24c7  82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3
+		1014 0267  NetVista A30p
+		1025 005a  TravelMate 290
+		1028 0126  Optiplex GX260
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+		1071 8160  MIM2000
+		1462 5800  845PE Max (MS-6580)
+		1509 2990  Averatec 5110H
+		4c53 1090  Cx9 / Vx9 mainboard
+		8086 4541  Latitude D400
+	24ca  82801DBM (ICH4-M) IDE Controller
+		1025 005a  TravelMate 290
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+		1071 8160  MIM2000
+		1734 1055  Amilo M1420
+		8086 4541  Latitude D400
+	24cb  82801DB (ICH4) IDE Controller
+		1014 0267  NetVista A30p
+		1028 0126  Optiplex GX260
+		1458 24c2  GA-8PE667 Ultra
+		1462 5800  845PE Max (MS-6580)
+		4c53 1090  Cx9 / Vx9 mainboard
+	24cc  82801DBM (ICH4-M) LPC Interface Bridge
+		1734 1055  Amilo M1420
+	24cd  82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller
+		1014 0267  NetVista A30p
+		1025 005a  TravelMate 290
+		1028 0126  Optiplex GX260
+		1028 0139  Latitude D400
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+		1071 8160  MIM2000
+		1462 3981  845PE Max (MS-6580)
+		1509 1968  Averatec 5110H
+		1734 1055  Amilo M1420
+		4c53 1090  Cx9 / Vx9 mainboard
+	24d0  82801EB/ER (ICH5/ICH5R) LPC Interface Bridge
+	24d1  82801EB (ICH5) SATA Controller
+		1028 0169  Precision 470
+		1028 019a  PowerEdge SC1425
+		103c 12bc  d530 CMT (DG746A)
+		1458 24d1  GA-8IPE1000 Pro2 motherboard (865PE)
+		1462 7280  865PE Neo2 (MS-6728)
+		15d9 4580  P4SCE Mainboard
+		8086 3427  S875WP1-E mainboard
+		8086 4246  Desktop Board D865GBF
+		8086 524c  D865PERL mainboard
+	24d2  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1
+		1028 0169  Precision 470
+		1028 0183  PowerEdge 1800
+		1028 019a  PowerEdge SC1425
+		103c 12bc  d530 CMT (DG746A)
+		1043 80a6  P4P800 Mainboard
+		1458 24d2  GA-8IPE1000/8KNXP motherboard
+		1462 7280  865PE Neo2 (MS-6728)
+		15d9 4580  P4SCE Mainboard
+		1734 101c  Primergy RX300 S2
+		8086 3427  S875WP1-E mainboard
+		8086 4246  Desktop Board D865GBF
+		8086 524c  D865PERL mainboard
+	24d3  82801EB/ER (ICH5/ICH5R) SMBus Controller
+		1028 0169  Precision 470
+		1043 80a6  P4P800 Mainboard
+		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)
+		1462 7280  865PE Neo2 (MS-6728)
+		15d9 4580  P4SCE Mainboard
+		1734 101c  Primergy RX300 S2
+		8086 3427  S875WP1-E mainboard
+		8086 524c  D865PERL mainboard
+	24d4  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2
+		1028 0169  Precision 470
+		1028 0183  PowerEdge 1800
+		1028 019a  PowerEdge SC1425
+		103c 12bc  d530 CMT (DG746A)
+		1043 80a6  P4P800 Mainboard
+		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)
+		1462 7280  865PE Neo2 (MS-6728)
+		15d9 4580  P4SCE Mainboard
+		1734 101c  Primergy RX300 S2
+		8086 3427  S875WP1-E mainboard
+		8086 4246  Desktop Board D865GBF
+		8086 524c  D865PERL mainboard
+	24d5  82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller
+		1028 0169  Precision 470
+		103c 12bc  Analog Devices codec [SoundMAX Integrated Digital Audio]
+		1043 80f3  P4P800 Mainboard
+		1458 a002  GA-8IPE1000/8KNXP motherboard
+		1462 7280  865PE Neo2 (MS-6728)
+		8086 a000  D865PERL mainboard
+		8086 e000  D865PERL mainboard
+		8086 e001  Desktop Board D865GBF
+	24d6  82801EB/ER (ICH5/ICH5R) AC'97 Modem Controller
+	24d7  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3
+		1028 0169  Precision 470
+		1028 0183  PowerEdge 1800
+		103c 12bc  d530 CMT (DG746A)
+		1043 80a6  P4P800 Mainboard
+		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)
+		1462 7280  865PE Neo2 (MS-6728)
+		15d9 4580  P4SCE Mainboard
+		1734 101c  Primergy RX300 S2
+		8086 3427  S875WP1-E mainboard
+		8086 4246  Desktop Board D865GBF
+		8086 524c  D865PERL mainboard
+	24db  82801EB/ER (ICH5/ICH5R) IDE Controller
+		1028 0169  Precision 470
+		1028 019a  PowerEdge SC1425
+		103c 12bc  d530 CMT (DG746A)
+		1043 80a6  P4P800 Mainboard
+		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)
+		1462 7280  865PE Neo2 (MS-6728)
+		1462 7580  MSI 875P
+		15d9 4580  P4SCE Mainboard
+		1734 101c  Primergy RX300 S2
+		8086 24db  P4C800 Mainboard
+		8086 3427  S875WP1-E mainboard
+		8086 4246  Desktop Board D865GBF
+		8086 524c  D865PERL mainboard
+	24dc  82801EB (ICH5) LPC Interface Bridge
+	24dd  82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller
+		1028 0169  Precision 470
+		1028 0183  PowerEdge 1800
+		1028 019a  PowerEdge SC1425
+		103c 12bc  d530 CMT (DG746A)
+		1043 80a6  P4P800 Mainboard
+		1458 5006  GA-8IPE1000 Pro2 motherboard (865PE)
+		1462 7280  865PE Neo2 (MS-6728)
+		8086 3427  S875WP1-E mainboard
+		8086 4246  Desktop Board D865GBF
+		8086 524c  D865PERL mainboard
+	24de  82801EB/ER (ICH5/ICH5R) USB UHCI Controller #4
+		1028 0169  Precision 470
+		1043 80a6  P4P800 Mainboard
+		1458 24d2  GA-8IPE1000 Pro2 motherboard (865PE)
+		1462 7280  865PE Neo2 (MS-6728)
+		15d9 4580  P4SCE Mainboard
+		1734 101c  Primergy RX300 S2
+		8086 3427  S875WP1-E mainboard
+		8086 4246  Desktop Board D865GBF
+		8086 524c  D865PERL mainboard
+	24df  82801ER (ICH5R) SATA Controller
 	2500  82820 820 (Camino) Chipset Host Bridge (MCH)
 		1028 0095  Precision Workstation 220 Chipset
 		1043 801c  P3C-2000 system chipset
@@ -6581,18 +9986,298 @@
 	2532  82850 850 (Tehama) Chipset AGP Bridge
 	2533  82860 860 (Wombat) Chipset AGP Bridge
 	2534  82860 860 (Wombat) Chipset PCI Bridge
-	2540  e7500 [Plumas] DRAM Controller
-	2541  e7500 [Plumas] DRAM Controller Error Reporting
-	2543  e7500 [Plumas] HI_B Virtual PCI Bridge (F0)
-	2544  e7500 [Plumas] HI_B Virtual PCI Bridge (F1)
-	2545  e7500 [Plumas] HI_C Virtual PCI Bridge (F0)
-	2546  e7500 [Plumas] HI_C Virtual PCI Bridge (F1)
-	2547  e7500 [Plumas] HI_D Virtual PCI Bridge (F0)
-	2548  e7500 [Plumas] HI_D Virtual PCI Bridge (F1)
-	2560  82845G/GL [Brookdale-G] Chipset Host Bridge
-	2561  82845G/GL [Brookdale-G] Chipset AGP Bridge
-	2562  82845G/GL [Brookdale-G] Chipset Integrated Graphics Device
+	2540  E7500 Memory Controller Hub
+		15d9 3480  P4DP6
+	2541  E7500/E7501 Host RASUM Controller
+		15d9 3480  P4DP6
+		4c53 1090  Cx9 / Vx9 mainboard
+		8086 3424  SE7501HG2 Mainboard
+	2543  E7500/E7501 Hub Interface B PCI-to-PCI Bridge
+	2544  E7500/E7501 Hub Interface B RASUM Controller
+		4c53 1090  Cx9 / Vx9 mainboard
+	2545  E7500/E7501 Hub Interface C PCI-to-PCI Bridge
+	2546  E7500/E7501 Hub Interface C RASUM Controller
+	2547  E7500/E7501 Hub Interface D PCI-to-PCI Bridge
+	2548  E7500/E7501 Hub Interface D RASUM Controller
+	254c  E7501 Memory Controller Hub
+		4c53 1090  Cx9 / Vx9 mainboard
+		8086 3424  SE7501HG2 Mainboard
+	2550  E7505 Memory Controller Hub
+	2551  E7505/E7205 Series RAS Controller
+	2552  E7505/E7205 PCI-to-AGP Bridge
+	2553  E7505 Hub Interface B PCI-to-PCI Bridge
+	2554  E7505 Hub Interface B PCI-to-PCI Bridge RAS Controller
+	255d  E7205 Memory Controller Hub
+	2560  82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface
+		1028 0126  Optiplex GX260
+		1458 2560  GA-8PE667 Ultra
+		1462 5800  845PE Max (MS-6580)
+	2561  82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge
+	2562  82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device
+		1014 0267  NetVista A30p
+	2570  82865G/PE/P DRAM Controller/Host-Hub Interface
+		1043 80f2  P4P800 Mainboard
+		1458 2570  GA-8IPE1000 Pro2 motherboard (865PE)
+	2571  82865G/PE/P PCI to AGP Controller
+	2572  82865G Integrated Graphics Controller
+		1028 019d  Dimension 3000
+	2573  82865G/PE/P PCI to CSA Bridge
+	2576  82865G/PE/P Processor to I/O Memory Interface
+	2578  82875P/E7210 Memory Controller Hub
+		1458 2578  GA-8KNXP motherboard (875P)
+		1462 7580  MS-6758 (875P Neo)
+		15d9 4580  P4SCE Motherboard
+	2579  82875P Processor to AGP Controller
+	257b  82875P/E7210 Processor to PCI to CSA Bridge
+	257e  82875P/E7210 Processor to I/O Memory Interface
+	2580  915G/P/GV/GL/PL/910GL Processor to I/O Controller
+		1462 7028  915P/G Neo2
+		1734 105b  Scenic W620
+	2581  915G/P/GV/GL/PL/910GL PCI Express Root Port
+	2582  82915G/GV/910GL Express Chipset Family Graphics Controller
+		1028 1079  Optiplex GX280
+		1734 105b  Scenic W620
+	2584  925X/XE Memory Controller Hub
+	2585  925X/XE PCI Express Root Port
+	2588  E7220/E7221 Memory Controller Hub
+	2589  E7220/E7221 PCI Express Root Port
+	258a  E7221 Integrated Graphics Controller
+	2590  Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller
+		103c 099c  nx6110
+		a304 81b7  Vaio VGN-S3XP
+	2591  Mobile 915GM/PM Express PCI Express Root Port
+	2592  Mobile 915GM/GMS/910GML Express Graphics Controller
+		103c 099c  nx6110
+	25a1  6300ESB LPC Interface Controller
+	25a2  6300ESB PATA Storage Controller
+		4c53 10b0  CL9 mainboard
+		4c53 10e0  PSL09 PrPMC
+	25a3  6300ESB SATA Storage Controller
+		4c53 10b0  CL9 mainboard
+		4c53 10d0  Telum ASLP10 Processor AMC
+		4c53 10e0  PSL09 PrPMC
+	25a4  6300ESB SMBus Controller
+		4c53 10b0  CL9 mainboard
+		4c53 10d0  Telum ASLP10 Processor AMC
+		4c53 10e0  PSL09 PrPMC
+	25a6  6300ESB AC'97 Audio Controller
+		4c53 10b0  CL9 mainboard
+	25a7  6300ESB AC'97 Modem Controller
+	25a9  6300ESB USB Universal Host Controller
+		4c53 10b0  CL9 mainboard
+		4c53 10d0  Telum ASLP10 Processor AMC
+		4c53 10e0  PSL09 PrPMC
+	25aa  6300ESB USB Universal Host Controller
+		4c53 10b0  CL9 mainboard
+		4c53 10e0  PSL09 PrPMC
+	25ab  6300ESB Watchdog Timer
+		4c53 10b0  CL9 mainboard
+		4c53 10d0  Telum ASLP10 Processor AMC
+		4c53 10e0  PSL09 PrPMC
+	25ac  6300ESB I/O Advanced Programmable Interrupt Controller
+		4c53 10b0  CL9 mainboard
+		4c53 10d0  Telum ASLP10 Processor AMC
+		4c53 10e0  PSL09 PrPMC
+	25ad  6300ESB USB2 Enhanced Host Controller
+		4c53 10b0  CL9 mainboard
+		4c53 10d0  Telum ASLP10 Processor AMC
+		4c53 10e0  PSL09 PrPMC
+	25ae  6300ESB 64-bit PCI-X Bridge
+	25b0  6300ESB SATA RAID Controller
+		4c53 10d0  Telum ASLP10 Processor AMC
+		4c53 10e0  PSL09 PrPMC
+	25c0  Workstation Memory Controller Hub
+	25d0  Server Memory Controller Hub
+	25d8  Server Memory Controller Hub
+	25e2  Server PCI Express x4 Port 2
+	25e3  Server PCI Express x4 Port 3
+	25e4  Server PCI Express x4 Port 4
+	25e5  Server PCI Express x4 Port 5
+	25e6  Server PCI Express x4 Port 6
+	25e7  Server PCI Express x4 Port 7
+	25e8  Server AMB Memory Mapped Registers
+	25f0  Server Error Reporting Registers
+	25f5  Server FBD Registers
+	25f6  Server FBD Registers
+	25f7  Server PCI Express x8 Port 2-3
+	25f8  Server PCI Express x8 Port 4-5
+	25f9  Server PCI Express x8 Port 6-7
+	25fa  Server PCI Express x16 Port 4-7
+	2600  E8500 Hub Interface 1.5
+	2601  E8500 PCI Express x4 Port D
+	2602  E8500 PCI Express x4 Port C0
+	2603  E8500 PCI Express x4 Port C1
+	2604  E8500 PCI Express x4 Port B0
+	2605  E8500 PCI Express x4 Port B1
+	2606  E8500 PCI Express x4 Port A0
+	2607  E8500 PCI Express x4 Port A1
+	2608  E8500 PCI Express x8 Port C
+	2609  E8500 PCI Express x8 Port B
+	260a  E8500 PCI Express x8 Port A
+	260c  E8500 IMI Registers
+	2610  E8500 Front Side Bus, Boot, and Interrupt Registers
+	2611  E8500 Address Mapping Registers
+	2612  E8500 RAS Registers
+	2613  E8500 Reserved Registers
+	2614  E8500 Reserved Registers
+	2615  E8500 Miscellaneous Registers
+	2617  E8500 Reserved Registers
+	2618  E8500 Reserved Registers
+	2619  E8500 Reserved Registers
+	261a  E8500 Reserved Registers
+	261b  E8500 Reserved Registers
+	261c  E8500 Reserved Registers
+	261d  E8500 Reserved Registers
+	261e  E8500 Reserved Registers
+	2620  E8500 eXternal Memory Bridge
+	2621  E8500 XMB Miscellaneous Registers
+	2622  E8500 XMB Memory Interleaving Registers
+	2623  E8500 XMB DDR Initialization and Calibration
+	2624  E8500 XMB Reserved Registers
+	2625  E8500 XMB Reserved Registers
+	2626  E8500 XMB Reserved Registers
+	2627  E8500 XMB Reserved Registers
+	2640  82801FB/FR (ICH6/ICH6R) LPC Interface Bridge
+		1462 7028  915P/G Neo2
+		1734 105c  Scenic W620
+	2641  82801FBM (ICH6M) LPC Interface Bridge
+		103c 099c  nx6110
+	2642  82801FW/FRW (ICH6W/ICH6RW) LPC Interface Bridge
+	2651  82801FB/FW (ICH6/ICH6W) SATA Controller
+		1028 0179  Optiplex GX280
+		1734 105c  Scenic W620
+	2652  82801FR/FRW (ICH6R/ICH6RW) SATA Controller
+		1462 7028  915P/G Neo2
+	2653  82801FBM (ICH6M) SATA Controller
+	2658  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1
+		1028 0179  Optiplex GX280
+		103c 099c  nx6110
+		1462 7028  915P/G Neo2
+		1734 105c  Scenic W620
+	2659  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2
+		1028 0179  Optiplex GX280
+		103c 099c  nx6110
+		1462 7028  915P/G Neo2
+		1734 105c  Scenic W620
+	265a  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3
+		1028 0179  Optiplex GX280
+		103c 099c  nx6110
+		1462 7028  915P/G Neo2
+		1734 105c  Scenic W620
+	265b  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4
+		1028 0179  Optiplex GX280
+		103c 099c  nx6110
+		1462 7028  915P/G Neo2
+		1734 105c  Scenic W620
+	265c  82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller
+		1028 0179  Optiplex GX280
+		103c 099c  nx6110
+		1462 7028  915P/G Neo2
+		1734 105c  Scenic W620
+	2660  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1
+	2662  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2
+	2664  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3
+	2666  82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 4
+	2668  82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller
+	266a  82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller
+		1028 0179  Optiplex GX280
+		1462 7028  915P/G Neo2
+		1734 105c  Scenic W620
+	266c  82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller
+	266d  82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller
+		103c 099c  nx6110
+	266e  82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller
+		1028 0179  Optiplex GX280
+		1028 0188  Inspiron 6000 laptop
+		103c 099c  nx6110
+		1734 105a  Scenic W620
+	266f  82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller
+		103c 099c  nx6110
+		1462 7028  915P/G Neo2
+		1734 105c  Scenic W620
+	2670  Enterprise Southbridge LPC
+	2680  Enterprise Southbridge SATA cc=IDE
+	2681  Enterprise Southbridge SATA cc=AHCI
+	2682  Enterprise Southbridge SATA cc=RAID
+	2683  Enterprise Southbridge SATA cc=RAID
+	2688  Enterprise Southbridge UHCI USB #1
+	2689  Enterprise Southbridge UHCI USB #2
+	268a  Enterprise Southbridge UHCI USB #3
+	268b  Enterprise Southbridge UHCI USB #4
+	268c  Enterprise Southbridge EHCI USB
+	2690  Enterprise Southbridge PCI Express Root Port 1
+	2692  Enterprise Southbridge PCI Express Root Port 2
+	2694  Enterprise Southbridge PCI Express Root Port 3
+	2696  Enterprise Southbridge PCI Express Root Port 4
+	2698  Enterprise Southbridge AC '97 Audio
+	2699  Enterprise Southbridge AC '97 Modem
+	269a  Enterprise Southbridge High Definition Audio
+	269b  Enterprise Southbridge SMBus
+	269e  Enterprise Southbridge PATA
+	2770  945G/P Memory Controller Hub
+	2771  945G/P PCI Express Graphics Port
+	2772  945G Integrated Graphics Controller
+	2774  955X Memory Controller Hub
+	2775  955X PCI Express Graphics Port
+	2776  945G Integrated Graphics Controller
+	2778  E7230 Memory Controller Hub
+	2779  E7230 PCI Express Root Port
+	277a  PCI Express Graphics Port
+	277d  PCI Express Graphics Port
+	2782  82915G Express Chipset Family Graphics Controller
+		1734 105b  Scenic W620
+	2792  Mobile 915GM/GMS/910GML Express Graphics Controller
+		103c 099c  nx6110
+	27a0  Mobile Memory Controller Hub
+	27a1  Mobile PCI Express Graphics Port
+	27a2  Mobile Integrated Graphics Controller
+	27a6  Mobile Integrated Graphics Controller
+	27b0  82801GH (ICH7DH) LPC Interface Bridge
+	27b8  82801GB/GR (ICH7 Family) LPC Interface Bridge
+	27b9  82801GBM (ICH7-M) LPC Interface Bridge
+	27bd  82801GHM (ICH7-M DH) LPC Interface Bridge
+	27c0  82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controllers cc=IDE
+	27c1  82801GR/GH (ICH7 Family) Serial ATA Storage Controllers cc=AHCI
+	27c3  82801GR/GH (ICH7 Family) Serial ATA Storage Controllers cc=RAID
+	27c4  82801GBM/GHM (ICH7 Family) Serial ATA Storage Controllers cc=IDE
+	27c5  82801GBM/GHM (ICH7 Family) Serial ATA Storage Controllers cc=AHCI
+	27c6  82801GHM (ICH7-M DH) Serial ATA Storage Controllers cc=RAID
+	27c8  82801G (ICH7 Family) USB UHCI #1
+	27c9  82801G (ICH7 Family) USB UHCI #2
+	27ca  82801G (ICH7 Family) USB UHCI #3
+	27cb  82801G (ICH7 Family) USB UHCI #4
+	27cc  82801G (ICH7 Family) USB2 EHCI Controller
+	27d0  82801G (ICH7 Family) PCI Express Port 1
+	27d2  82801G (ICH7 Family) PCI Express Port 2
+	27d4  82801G (ICH7 Family) PCI Express Port 3
+	27d6  82801G (ICH7 Family) PCI Express Port 4
+	27d8  82801G (ICH7 Family) High Definition Audio Controller
+	27da  82801G (ICH7 Family) SMBus Controller
+	27dc  82801G (ICH7 Family) LAN Controller
+	27dd  82801G (ICH7 Family) AC'97 Modem Controller
+	27de  82801G (ICH7 Family) AC'97 Audio Controller
+	27df  82801G (ICH7 Family) IDE Controller
+	27e0  82801GR/GH/GHM (ICH7 Family) PCI Express Port 5
+	27e2  82801GR/GH/GHM (ICH7 Family) PCI Express Port 6
 	3092  Integrated RAID
+	3200  GD31244 PCI-X SATA HBA
+	3340  82855PM Processor to I/O Controller
+		1025 005a  TravelMate 290
+		103c 088c  nc8000 laptop
+		103c 0890  nc6000 laptop
+	3341  82855PM Processor to AGP Controller
+	3500  Enterprise Southbridge PCI Express Upstream Port
+	3501  Enterprise Southbridge PCI Express Upstream Port
+	3504  Enterprise Southbridge IOxAPIC
+	3505  Enterprise Southbridge IOxAPIC
+	350c  Enterprise Southbridge PCI Express to PCI-X Bridge
+	350d  Enterprise Southbridge PCI Express to PCI-X Bridge
+	3510  Enterprise Southbridge PCI Express Downstream Port E1
+	3511  Enterprise Southbridge PCI Express Downstream Port E1
+	3514  Enterprise Southbridge PCI Express Downstream Port E2
+	3515  Enterprise Southbridge PCI Express Downstream Port E2
+	3518  Enterprise Southbridge PCI Express Downstream Port E3
+	3519  Enterprise Southbridge PCI Express Downstream Port E3
 	3575  82830 830 Chipset Host Bridge
 		1014 021d  ThinkPad A/T/X Series
 		104d 80e7  VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP
@@ -6600,6 +10285,57 @@
 	3577  82830 CGC [Chipset Graphics Controller]
 		1014 0513  ThinkPad A/T/X Series
 	3578  82830 830 Chipset Host Bridge
+	3580  82852/82855 GM/GME/PM/GMV Processor to I/O Controller
+		1028 0139  Latitude D400
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		1734 1055  Amilo M1420
+		4c53 10b0  CL9 mainboard
+		4c53 10e0  PSL09 PrPMC
+	3581  82852/82855 GM/GME/PM/GMV Processor to AGP Controller
+		1734 1055  Amilo M1420
+	3582  82852/855GM Integrated Graphics Device
+		1028 0139  Latitude D400
+		1028 0163  Latitude D505
+		4c53 10b0  CL9 mainboard
+		4c53 10e0  PSL09 PrPMC
+	3584  82852/82855 GM/GME/PM/GMV Processor to I/O Controller
+		1028 0139  Latitude D400
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		1734 1055  Amilo M1420
+		4c53 10b0  CL9 mainboard
+		4c53 10e0  PSL09 PrPMC
+	3585  82852/82855 GM/GME/PM/GMV Processor to I/O Controller
+		1028 0139  Latitude D400
+		1028 0163  Latitude D505
+		1028 0196  Inspiron 5160
+		1734 1055  Amilo M1420
+		4c53 10b0  CL9 mainboard
+		4c53 10e0  PSL09 PrPMC
+	3590  E7520 Memory Controller Hub
+		1028 019a  PowerEdge SC1425
+		1734 103e  Primergy RX300 S2
+		4c53 10d0  Telum ASLP10 Processor AMC
+	3591  E7525/E7520 Error Reporting Registers
+		1028 0169  Precision 470
+		4c53 10d0  Telum ASLP10 Processor AMC
+	3592  E7320 Memory Controller Hub
+	3593  E7320 Error Reporting Registers
+	3594  E7520 DMA Controller
+		4c53 10d0  Telum ASLP10 Processor AMC
+	3595  E7525/E7520/E7320 PCI Express Port A
+	3596  E7525/E7520/E7320 PCI Express Port A1
+	3597  E7525/E7520 PCI Express Port B
+	3598  E7520 PCI Express Port B1
+	3599  E7520 PCI Express Port C
+	359a  E7520 PCI Express Port C1
+	359b  E7525/E7520/E7320 Extended Configuration Registers
+	359e  E7525 Memory Controller Hub
+		1028 0169  Precision 470
+	4220  PRO/Wireless 2200BG
+	4223  PRO/Wireless 2915ABG MiniPCI Adapter
+	4224  PRO/Wireless 2915ABG MiniPCI Adapter
 	5200  EtherExpress PRO/100 Intelligent Server
 	5201  EtherExpress PRO/100 Intelligent Server
 		8086 0001  EtherExpress PRO/100 Server Ethernet Adapter
@@ -6608,13 +10344,24 @@
 	7010  82371SB PIIX3 IDE [Natoma/Triton II]
 	7020  82371SB PIIX3 USB [Natoma/Triton II]
 	7030  430VX - 82437VX TVX [Triton VX]
+	7050  Intercast Video Capture Card
+	7051  PB 642365-003 (Business Video Conferencing Card)
 	7100  430TX - 82439TX MTXC
 	7110  82371AB/EB/MB PIIX4 ISA
+		15ad 1976  virtualHW v3
 	7111  82371AB/EB/MB PIIX4 IDE
+		15ad 1976  virtualHW v3
 	7112  82371AB/EB/MB PIIX4 USB
+		15ad 1976  virtualHW v3
 	7113  82371AB/EB/MB PIIX4 ACPI
+		15ad 1976  virtualHW v3
 	7120  82810 GMCH [Graphics Memory Controller Hub]
+		4c53 1040  CL7 mainboard
+		4c53 1060  PC7 mainboard
 	7121  82810 CGC [Chipset Graphics Controller]
+		4c53 1040  CL7 mainboard
+		4c53 1060  PC7 mainboard
+		8086 4341  Cayman (CA810) Mainboard
 	7122  82810 DC-100 GMCH [Graphics Memory Controller Hub]
 	7123  82810 DC-100 CGC [Chipset Graphics Controller]
 	7124  82810E DC-133 GMCH [Graphics Memory Controller Hub]
@@ -6626,12 +10373,20 @@
 	7181  440LX/EX - 82443LX/EX AGP bridge
 	7190  440BX/ZX/DX - 82443BX/ZX/DX Host bridge
 		0e11 0500  Armada 1750 Laptop System Chipset
+		0e11 b110  Armada M700/E500
 		1179 0001  Toshiba Tecra 8100 Laptop System Chipset
+		15ad 1976  virtualHW v3
+		4c53 1050  CT7 mainboard
+		4c53 1051  CE7 mainboard
 	7191  440BX/ZX/DX - 82443BX/ZX/DX AGP bridge
 	7192  440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled)
 		0e11 0460  Armada 1700 Laptop System Chipset
+		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard
 	7194  82440MX Host Bridge
+		1033 0000  Versa Note Vxi
+		4c53 10a0  CA3/CR3 mainboard
 	7195  82440MX AC'97 Audio Controller
+		1033 80cc  Versa Note VXi
 		10cf 1099  QSound_SigmaTel Stac97 PCI Audio
 		11d4 0040  SoundMAX Integrated Digital Audio
 		11d4 0048  SoundMAX Integrated Digital Audio
@@ -6641,13 +10396,16 @@
 	719a  82440MX USB Universal Host Controller
 	719b  82440MX Power Management Controller
 	71a0  440GX - 82443GX Host bridge
+		4c53 1050  CT7 mainboard
+		4c53 1051  CE7 mainboard
 	71a1  440GX - 82443GX AGP bridge
 	71a2  440GX - 82443GX Host bridge (AGP disabled)
+		4c53 1000  CC7/CR7/CP7/VC7/VP7/VR7 mainboard
 	7600  82372FB PIIX5 ISA
 	7601  82372FB PIIX5 IDE
 	7602  82372FB PIIX5 USB
 	7603  82372FB PIIX5 SMBus
-	7800  i740
+	7800  82740 (i740) AGP Graphics Accelerator
 		003d 0008  Starfighter AGP
 		003d 000b  Starfighter AGP
 		1092 0100  Stealth II G460
@@ -6666,6 +10424,13 @@
 	84e4  460GX - 84460GX Memory Data Controller (MDC)
 	84e6  460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB)
 	84ea  460GX - 84460GX AGP Bridge (GXB function 1)
+	8500  IXP4XX Intel Network Processor (IXP420/421/422/425/IXC1100)
+		1993 0ded  mGuard-PCI AV#2
+		1993 0dee  mGuard-PCI AV#1
+		1993 0def  mGuard-PCI AV#0
+	9000  IXP2000 Family Network Processor
+	9001  IXP2400 Network Processor
+	9004  IXP2800 Network Processor
 	9621  Integrated RAID
 	9622  Integrated RAID
 	9641  Integrated RAID
@@ -6674,16 +10439,24 @@
 # observed, and documented in Intel revision note; new mask of 1011:0026
 	b154  21154 PCI-to-PCI Bridge
 	b555  21555 Non transparent PCI-to-PCI Bridge
+		12d9 000a  PCI VoIP Gateway
+		4c53 1050  CT7 mainboard
+		4c53 1051  CE7 mainboard
 		e4bf 1000  CC8-1-BLUES
-	ffff  450NX/GX [Orion] - 82453KX/GX Memory controller [BUG]
+8401  TRENDware International Inc.
 8800  Trigem Computer Inc.
 	2008  Video assistent component
 8866  T-Square Design Inc.
 8888  Silicon Magic
+8912  TRX
+# 8c4a is not Winbond but there is a board misprogrammed
+8c4a  Winbond
+	1980  W89C940 misprogrammed [ne2k]
 8e0e  Computone Corporation
 8e2e  KTI
 	3000  ET32P2
 9004  Adaptec
+	0078  AHA-2940U_CN
 	1078  AIC-7810
 	1160  AIC-1160 [Family Fibre Channel Adapter]
 	2178  AIC-7821
@@ -6746,6 +10519,8 @@
 	7478  AHA-2944/2944W / AIC-7874
 	7578  AHA-3944/3944W / AIC-7875
 	7678  AHA-4944W/UW / AIC-7876
+	7710  ANA-7711F Network Accelerator Card (NAC) - Optical
+	7711  ANA-7711C Network Accelerator Card (NAC) - Copper
 	7778  AIC-787x
 	7810  AIC-7810
 	7815  AIC-7815 RAID+Memory Controller IC
@@ -6794,11 +10569,13 @@
 	0010  AHA-2940U2/U2W
 		9005 2180  AHA-2940U2 SCSI Controller
 		9005 8100  AHA-2940U2B SCSI Controller
+		9005 a100  AHA-2940U2B SCSI Controller
 		9005 a180  AHA-2940U2W SCSI Controller
 		9005 e100  AHA-2950U2B SCSI Controller
 	0011  AHA-2930U2
 	0013  78902
 		9005 0003  AAA-131U2 Array1000 1 Channel RAID Controller
+		9005 000f  AIC7890_ARO
 	001f  AHA-2940U2/U2W / 7890/7891
 		9005 000f  2940U2W SCSI Controller
 		9005 a180  2940U2W SCSI Controller
@@ -6808,6 +10585,7 @@
 	003f  AIC-7890
 	0050  AHA-3940U2x/395U2x
 		9005 f500  AHA-3950U2B
+		9005 ffff  AHA-3950U2B
 	0051  AHA-3950U2D
 		9005 b500  AHA-3950U2D
 	0053  AIC-7896 SCSI Controller
@@ -6815,6 +10593,7 @@
 	005f  AIC-7896U2/7897U2
 	0080  AIC-7892A U160/m
 		0e11 e2a0  Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter
+		9005 6220  AHA-29160C
 		9005 62a0  29160N Ultra160 SCSI Controller
 		9005 e220  29160LP Low Profile Ultra160 SCSI Controller
 		9005 e2a0  29160 Ultra160 SCSI Controller
@@ -6822,36 +10601,107 @@
 		9005 62a1  19160 Ultra160 SCSI Controller
 	0083  AIC-7892D U160/m
 	008f  AIC-7892P U160/m
+		1179 0001  Magnia Z310
+		15d9 9005  Onboard SCSI Host Adapter
 	00c0  AHA-3960D / AIC-7899A U160/m
 		0e11 f620  Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter
 		9005 f620  AHA-3960D U160/m
 	00c1  AIC-7899B U160/m
 	00c3  AIC-7899D U160/m
 	00c5  RAID subsystem HBA
-		1028 00c5  PowerEdge 2550
+		1028 00c5  PowerEdge 2400,2500,2550,4400
 	00cf  AIC-7899P U160/m
+		1028 00ce  PowerEdge 1400
 		1028 00d1  PowerEdge 2550
+		1028 00d9  PowerEdge 2500
+		10f1 2462  Thunder K7 S2462
+		15d9 9005  Onboard SCSI Host Adapter
+		8086 3411  SDS2 Mainboard
+	0241  Serial ATA II RAID 1420SA
 	0250  ServeRAID Controller
 		1014 0279  ServeRAID-xx
 		1014 028c  ServeRAID-xx
+	0279  ServeRAID 6M
+	0283  AAC-RAID
+		9005 0283  Catapult
+	0284  AAC-RAID
+		9005 0284  Tomcat
 	0285  AAC-RAID
+		0e11 0295  SATA 6Ch (Bearcat)
+		1014 02f2  ServeRAID 8i
 		1028 0287  PowerEdge Expandable RAID Controller 320/DC
+		1028 0291  CERC SATA RAID 2 PCI SATA 6ch (DellCorsair)
+		103c 3227  AAR-2610SA
+		17aa 0286  Legend S220 (Legend Crusader)
+		17aa 0287  Legend S230 (Legend Vulcan)
+		9005 0285  2200S (Vulcan)
+		9005 0286  2120S (Crusader)
+		9005 0287  2200S (Vulcan-2m)
+		9005 0288  3230S (Harrier)
+		9005 0289  3240S (Tornado)
+		9005 028a  ASR-2020S PCI-X ZCR (Skyhawk)
+		9005 028b  ASR-2025S (Terminator)
+		9005 028e  ASR-2020SA (Skyhawk)
+		9005 028f  ASR-2025SA
+		9005 0290  AAR-2410SA PCI SATA 4ch (Jaguar II)
+		9005 0292  AAR-2810SA PCI SATA 8ch (Corsair-8)
+		9005 0293  AAR-21610SA PCI SATA 16ch (Corsair-16)
+		9005 0294  ESD SO-DIMM PCI-X SATA ZCR (Prowler)
+		9005 0296  ASR-2240S
+		9005 0297  ASR-4005SAS
+		9005 0298  ASR-4000SAS
+		9005 0299  ASR-4800SAS
+		9005 029a  ASR-4805SAS
+	0286  AAC-RAID (Rocket)
+		1014 9540  ServeRAID 8k/8k-l4
+		1014 9580  ServeRAID 8k/8k-l8
+		9005 028c  ASR-2230S + ASR-2230SLP PCI-X (Lancer)
+		9005 028d  ASR-2130S
+		9005 029b  ASR-2820SA
+		9005 029c  ASR-2620SA
+		9005 029d  ASR-2420SA
+		9005 029e  ICP ICP9024R0
+		9005 029f  ICP ICP9014R0
+		9005 02a0  ICP ICP9047MA
+		9005 02a1  ICP ICP9087MA
+		9005 02a2  ASR-4810SAS
+		9005 02a3  ICP ICP5085AU
+		9005 02a4  ICP ICP5085LI
+		9005 02a5  ICP ICP5085BR
+		9005 02a6  ICP9067MA
+		9005 0800  Callisto
+	0503  Scamp chipset SCSI controller
+	0910  AUA-3100B
+	091e  AUA-3100B
 	8000  ASC-29320A U320
 	800f  AIC-7901 U320
 	8010  ASC-39320 U320
-	8011  ASC-32320D U320
-		0e11 00ac  U320
+	8011  ASC-39320D
+		0e11 00ac  ASC-39320D U320
 		9005 0041  ASC-39320D U320
 	8012  ASC-29320 U320
 	8013  ASC-29320B U320
 	8014  ASC-29320LP U320
+	8015  ASC-39320B U320
+	8016  ASC-39320A U320
+	8017  ASC-29320ALP U320
+	801c  ASC-39320D U320
+	801d  AIC-7902B U320
 	801e  AIC-7901A U320
 	801f  AIC-7902 U320
+		1734 1011  Primergy RX300
+	8080  ASC-29320A U320 w/HostRAID
+	808f  AIC-7901 U320 w/HostRAID
 	8090  ASC-39320 U320 w/HostRAID
 	8091  ASC-39320D U320 w/HostRAID
 	8092  ASC-29320 U320 w/HostRAID
 	8093  ASC-29320B U320 w/HostRAID
 	8094  ASC-29320LP U320 w/HostRAID
+	8095  ASC-39320(B) U320 w/HostRAID
+	8096  ASC-39320A U320 w/HostRAID
+	8097  ASC-29320ALP U320 w/HostRAID
+	809c  ASC-39320D(B) U320 w/HostRAID
+	809d  AIC-7902(B) U320 w/HostRAID
 	809e  AIC-7901A U320 w/HostRAID
 	809f  AIC-7902 U320 w/HostRAID
 907f  Atronics
@@ -6862,8 +10712,22 @@
 9699  Omni Media Technology Inc
 	6565  6565
 9710  NetMos Technology
-	9815  VScom 021H-EP2 2 port parallel adaptor
-	9835  222N-2 I/O Card (2S+1P)
+	7780  USB IRDA-port
+	9805  PCI 1 port parallel adapter
+	9815  PCI 9815 Multi-I/O Controller
+		1000 0020  2P0S (2 port parallel adaptor)
+	9835  PCI 9835 Multi-I/O Controller
+		1000 0002  2S (16C550 UART)
+		1000 0012  1P2S
+	9845  PCI 9845 Multi-I/O Controller
+		1000 0004  0P4S (4 port 16550A serial card)
+		1000 0006  0P6S (6 port 16550a serial card)
+	9855  PCI 9855 Multi-I/O Controller
+		1000 0014  1P4S
+9902  Stargen Inc.
+	0001  SG2010 PCI over Starfabric Bridge
+	0002  SG2010 PCI to Starfabric Gateway
+	0003  SG1010 Starfabric Switch and PCI Bridge
 a0a0  AOPEN Inc.
 a0f1  UNISYS Corporation
 a200  NEC Corporation
@@ -6871,8 +10735,12 @@
 a25b  Hewlett Packard GmbH PL24-MKT
 a304  Sony
 a727  3Com Corporation
+	0013  3CRPAG175 Wireless PC Card
 aa42  Scitex Digital Video
 ac1e  Digital Receiver Technology Inc
+ac3d  Actuality Systems
+aecb  Adrienne Electronics Corporation
+	6250  VITC/LTC Timecode Reader card [PCI-VLTC/RDR]
 b1b3  Shiva Europe Limited
 # Pinnacle should be 11bd, but they got it wrong several times --mj
 bd11  Pinnacle Systems, Inc. (Wrong ID)
@@ -6886,19 +10754,30 @@
 cddd  Tyzx, Inc.
 	0101  DeepSea 1 High Speed Stereo Vision Frame Grabber
 	0200  DeepSea 2 High Speed Stereo Vision Frame Grabber
+d161  Digium, Inc.
+	0205  Wildcard TE205P
+	0210  Wildcard TE210P
+	0405  Wildcard TE405P (2nd Gen)
+	0410  Wildcard TE410P (2nd Gen)
 d4d4  Dy4 Systems Inc
 	0601  PCI Mezzanine Card
 d531  I+ME ACTIA GmbH
 d84d  Exsys
 dead  Indigita Corporation
+deaf  Middle Digital Inc.
+	9050  PC Weasel Virtual VGA
+	9051  PC Weasel Serial Port
+	9052  PC Weasel Watchdog Timer
 e000  Winbond
 	e000  W89C940
 e159  Tiger Jet Network Inc.
-	0001  Intel 537
+	0001  Tiger3XX Modem/ISDN interface
 		0059 0001  128k ISDN-S/T Adapter
 		0059 0003  128k ISDN-U Adapter
 	0002  Tiger100APC ISDN chipset
 e4bf  EKF Elektronik GmbH
+# Innovative and scalable network IC vendor
+e55e  Essence Technology, Inc.
 ea01  Eagle Technology
 # The main chip of all these devices is by Xilinx -> It could also be a Xilinx ID.
 ea60  RME
@@ -6921,29 +10800,31 @@
 ec80  Belkin Corporation
 	ec00  F5D6000
 ecc0  Echo Digital Audio Corporation
-	0050  Gina24_301
-	0051  Gina24_361
-	0060  Layla24
-	0070  Mona_301_80
-	0071  Mona_301_66
-	0072  Mona_361
-	0080  Mia
 edd8  ARK Logic Inc
 	a091  1000PV [Stingray]
 	a099  2000PV [Stingray]
 	a0a1  2000MT
 	a0a9  2000MI
 f1d0  AJA Video
-# All boards I have seen have this ID not efac, though all docs say efac...
-	cafe  KONA SD SMPTE 259M I/O
-	efac  KONA SD SMPTE 259M I/O
-	facd  KONA HD SMPTE 292M I/O
-fa57  Fast Search & Transfer ASA
+	c0fe  Xena HS/HD-R
+	c0ff  Kona/Xena 2
+	cafe  Kona SD
+	cfee  Xena LS/SD-22-DA/SD-DA
+	dcaf  Kona HD
+	dfee  Xena HD-DA
+	efac  Xena SD-MM/SD-22-MM
+	facd  Xena HD-MM
+fa57  Interagon AS
+	0001  PMC [Pattern Matching Chip]
 febd  Ultraview Corp.
-feda  Broadcom Inc (nee Epigram)
+# Nee Epigram
+feda  Broadcom Inc
 	a0fa  BCM4210 iLine10 HomePNA 2.0
 	a10e  BCM4230 iLine10 HomePNA 2.0
+fede  Fedetec Inc.
+	0003  TABIC PCI v3
 fffe  VMWare Inc
+	0405  Virtual SVGA 4.0
 	0710  Virtual SVGA
 ffff  Illegal Vendor ID
 
@@ -6964,7 +10845,7 @@
 	02  Floppy disk controller
 	03  IPI bus controller
 	04  RAID bus controller
-	80  Unknown mass storage controller
+	80  Mass storage controller
 C 02  Network controller
 	00  Ethernet controller
 	01  Token ring network controller
diff -ruN pciutils-2.1.11/pciutils.h pciutils-2.2.0/pciutils.h
--- pciutils-2.1.11/pciutils.h	2002-03-30 16:39:24 +0100
+++ pciutils-2.2.0/pciutils.h	2004-08-13 22:46:50 +0200
@@ -1,48 +1,40 @@
 /*
- *	$Id: pciutils.h,v 1.14 2002/03/30 15:39:24 mj Exp $
+ *	The PCI Utilities -- Declarations
  *
- *	Linux PCI Utilities -- Declarations
- *
- *	Copyright (c) 1997--1999 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1997--2004 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
 
 #include "lib/pci.h"
+#include "lib/sysdep.h"
 
-#define PCIUTILS_VERSION PCILIB_VERSION
-
-#if !defined(__GNUC__)
-#define __attribute__(x)
-#define inline
+#ifdef PCI_OS_WINDOWS
+#include "compat/getopt.h"
 #endif
 
-void __attribute__((noreturn)) die(char *msg, ...);
+#define PCIUTILS_VERSION PCILIB_VERSION
+
+void die(char *msg, ...) NONRET;
 void *xmalloc(unsigned int howmuch);
+void *xrealloc(void *ptr, unsigned int howmuch);
 int parse_generic_option(int i, struct pci_access *pacc, char *optarg);
 
-#ifdef HAVE_PM_LINUX_PROC
+#ifdef PCI_HAVE_PM_LINUX_PROC
 #define GENOPT_PROC "P:"
-#define GENHELP_PROC "-P <dir>\tUse specified directory instead of " PATH_PROC_BUS_PCI "\n"
+#define GENHELP_PROC "-P <dir>\tUse specified directory instead of " PCI_PATH_PROC_BUS_PCI "\n"
 #else
 #define GENOPT_PROC
 #define GENHELP_PROC
 #endif
-#ifdef HAVE_PM_INTEL_CONF
+#ifdef PCI_HAVE_PM_INTEL_CONF
 #define GENOPT_INTEL "H:"
 #define GENHELP_INTEL "-H <mode>\tUse direct hardware access (<mode> = 1 or 2)\n"
 #else
 #define GENOPT_INTEL
 #define GENHELP_INTEL
 #endif
-#ifdef HAVE_PM_SYSCALLS
-#define GENOPT_SYSCALLS "S"
-#define GENHELP_SYSCALLS "-S\t\tUse direct hardware access via syscalls\n"
-#else
-#define GENOPT_SYSCALLS
-#define GENHELP_SYSCALLS
-#endif
-#ifdef HAVE_PM_DUMP
+#ifdef PCI_HAVE_PM_DUMP
 #define GENOPT_DUMP "F:"
 #define GENHELP_DUMP "-F <file>\tRead configuration data from given file\n"
 #else
@@ -50,6 +42,6 @@
 #define GENHELP_DUMP
 #endif
 
-#define GENERIC_OPTIONS "G" GENOPT_PROC GENOPT_INTEL GENOPT_SYSCALLS GENOPT_DUMP
-#define GENERIC_HELP GENHELP_PROC GENHELP_INTEL GENHELP_SYSCALLS GENHELP_DUMP \
+#define GENERIC_OPTIONS "G" GENOPT_PROC GENOPT_INTEL GENOPT_DUMP
+#define GENERIC_HELP GENHELP_PROC GENHELP_INTEL GENHELP_DUMP \
 	"-G\t\tEnable PCI access debugging\n"
diff -ruN pciutils-2.1.11/pciutils.lsm pciutils-2.2.0/pciutils.lsm
--- pciutils-2.1.11/pciutils.lsm	2003-01-04 12:32:58 +0100
+++ pciutils-2.2.0/pciutils.lsm	2005-09-21 14:08:42 +0200
@@ -1,14 +1,14 @@
 Begin3
-Title:          Linux PCI Utilities
-Version:        2.1.11
-Entered-date:   030104
+Title:          The PCI Utilities
+Version:        2.2.0
+Entered-date:   050921
 Description:    This package contains various utilities for inspecting and
 		setting of devices connected to the PCI bus.
 Keywords:       kernel, pci, lspci, setpci, libpci
 Author:         mj@ucw.cz (Martin Mares)
 Maintained-by:  mj@ucw.cz (Martin Mares)
-Primary-site:   atrey.karlin.mff.cuni.cz pub/linux/pci/pciutils-2.1.11.tar.gz
-Alternate-site: ftp.kernel.org pub/software/utils/pciutils/pciutils-2.1.11.tar.gz
-Alternate-site: metalab.unc.edu pub/Linux/hardware/pciutils-2.1.11.tar.gz
+Primary-site:   atrey.karlin.mff.cuni.cz pub/linux/pci/pciutils-2.2.0.tar.gz
+Alternate-site: ftp.kernel.org pub/software/utils/pciutils/pciutils-2.2.0.tar.gz
+Alternate-site: metalab.unc.edu pub/Linux/hardware/pciutils-2.2.0.tar.gz
 Copying-policy: GPL
 End
diff -ruN pciutils-2.1.11/pciutils.spec pciutils-2.2.0/pciutils.spec
--- pciutils-2.1.11/pciutils.spec	2003-01-04 13:26:10 +0100
+++ pciutils-2.2.0/pciutils.spec	2005-09-21 14:08:42 +0200
@@ -1,11 +1,11 @@
 Name:		pciutils
-Version:	2.1.11
+Version:	2.2.0
 Release: 	1
 Source:		ftp://atrey.karlin.mff.cuni.cz/pub/linux/pci/%{name}-%{version}.tar.gz
 Copyright:	GNU GPL
 Buildroot: 	/tmp/%{name}-%{version}-root
 ExclusiveOS: 	Linux
-Summary: 	Linux PCI Utilities
+Summary: 	The PCI Utilities
 Summary(pl): 	Narzêdzia do manipulacji ustawieniami urz±dzeñ PCI
 Group: 		Utilities/System
 
@@ -35,7 +35,7 @@
 %files
 %defattr(0644, root, root, 0755)
 %attr(0644, root, man) %{_mandir}/man8/*
-%attr(0711, root, root) /sbin/*
+%attr(0711, root, root) /usr/sbin/*
 %config /usr/share/pci.ids
 %doc README ChangeLog pciutils.lsm
 
diff -ruN pciutils-2.1.11/setpci.c pciutils-2.2.0/setpci.c
--- pciutils-2.1.11/setpci.c	2002-03-30 16:39:24 +0100
+++ pciutils-2.2.0/setpci.c	2004-06-27 13:02:09 +0200
@@ -1,9 +1,7 @@
 /*
- *	$Id: setpci.c,v 1.12 2002/03/30 15:39:24 mj Exp $
+ *	The PCI Utilities -- Manipulate PCI Configuration Registers
  *
- *	Linux PCI Utilities -- Manipulate PCI Configuration Registers
- *
- *	Copyright (c) 1998 Martin Mares <mj@ucw.cz>
+ *	Copyright (c) 1998--2004 Martin Mares <mj@ucw.cz>
  *
  *	Can be freely distributed and used under the terms of the GNU GPL.
  */
@@ -22,16 +20,22 @@
 
 static struct pci_access *pacc;
 
+struct value {
+  unsigned int value;
+  unsigned int mask;
+};
+
 struct op {
   struct op *next;
   struct pci_dev **dev_vector;
   unsigned int addr;
   unsigned int width;			/* Byte width of the access */
   int num_values;			/* Number of values to write; <0=read */
-  unsigned int values[0];
+  struct value values[0];
 };
 
 static struct op *first_op, **last_op = &first_op;
+static unsigned int max_values[] = { 0, 0xff, 0xffff, 0, 0xffffffff };
 
 static struct pci_dev **
 select_devices(struct pci_filter *filt)
@@ -53,62 +57,88 @@
 static void
 exec_op(struct op *op, struct pci_dev *dev)
 {
-  char *mm[] = { NULL, "%02x", "%04x", NULL, "%08x" };
-  char *m = mm[op->width];
-  unsigned int x;
+  char *formats[] = { NULL, "%02x", "%04x", NULL, "%08x" };
+  char *mask_formats[] = { NULL, "%02x->(%02x:%02x)->%02x", "%04x->(%04x:%04x)->%04x", NULL, "%08x->(%08x:%08x)->%08x" };
+  unsigned int x, y;
   int i, addr;
+  int width = op->width;
 
   if (verbose)
     printf("%02x:%02x.%x:%02x", dev->bus, dev->dev, dev->func, op->addr);
   addr = op->addr;
   if (op->num_values >= 0)
-    for(i=0; i<op->num_values; i++)
-      {
-	if (verbose)
-	  {
-	    putchar(' ');
-	    printf(m, op->values[i]);
-	  }
-	if (demo_mode)
-	  continue;
-	switch (op->width)
-	  {
-	  case 1:
-	    pci_write_byte(dev, addr, op->values[i]);
-	    break;
-	  case 2:
-	    pci_write_word(dev, addr, op->values[i]);
-	    break;
-	  default:
-	    pci_write_long(dev, addr, op->values[i]);
-	    break;
-	  }
-	addr += op->width;
-      }
+    {
+      for(i=0; i<op->num_values; i++)
+	{
+	  if ((op->values[i].mask & max_values[width]) == max_values[width])
+	    {
+	      x = op->values[i].value;
+	      if (verbose)
+		{
+		  putchar(' ');
+		  printf(formats[width], op->values[i].value);
+		}
+	    }
+	  else
+	    {
+	      switch (width)
+		{
+		case 1:
+		  y = pci_read_byte(dev, addr);
+		  break;
+		case 2:
+		  y = pci_read_word(dev, addr);
+		  break;
+		default:
+		  y = pci_read_long(dev, addr);
+		  break;
+		}
+	      x = (y & ~op->values[i].mask) | op->values[i].value;
+	      if (verbose)
+		{
+		  putchar(' ');
+		  printf(mask_formats[width], y, op->values[i].value, op->values[i].mask, x);
+		}
+	    }
+	  if (!demo_mode)
+	    {
+	      switch (width)
+		{
+		case 1:
+		  pci_write_byte(dev, addr, x);
+		  break;
+		case 2:
+		  pci_write_word(dev, addr, x);
+		  break;
+		default:
+		  pci_write_long(dev, addr, x);
+		  break;
+		}
+	    }
+	  addr += width;
+	}
+      if (verbose)
+	putchar('\n');
+    }
   else
     {
       if (verbose)
 	printf(" = ");
-      if (!demo_mode)
+      switch (width)
 	{
-	  switch (op->width)
-	    {
-	    case 1:
-	      x = pci_read_byte(dev, addr);
-	      break;
-	    case 2:
-	      x = pci_read_word(dev, addr);
-	      break;
-	    default:
-	      x = pci_read_long(dev, addr);
-	      break;
-	    }
-	  printf(m, x);
+	case 1:
+	  x = pci_read_byte(dev, addr);
+	  break;
+	case 2:
+	  x = pci_read_word(dev, addr);
+	  break;
+	default:
+	  x = pci_read_long(dev, addr);
+	  break;
 	}
-      else
-	putchar('?');
+      printf(formats[width], x);
+      putchar('\n');
     }
-  putchar('\n');
 }
 
 static void
@@ -141,12 +171,12 @@
 }
 
 struct reg_name {
-  int offset;
-  int width;
-  char *name;
+  unsigned int offset;
+  unsigned int width;
+  const char *name;
 };
 
-static struct reg_name pci_reg_names[] = {
+static const struct reg_name pci_reg_names[] = {
   { 0x00, 2, "VENDOR_ID", },
   { 0x02, 2, "DEVICE_ID", },
   { 0x04, 2, "COMMAND", },
@@ -214,23 +244,30 @@
   { 0x00, 0, NULL }
 };
 
-static void usage(void) __attribute__((noreturn));
-
-static void
-usage(void)
+static void NONRET
+usage(char *msg, ...)
 {
+  va_list args;
+  va_start(args, msg);
+  if (msg)
+    {
+      fprintf(stderr, "setpci: ");
+      vfprintf(stderr, msg, args);
+      fprintf(stderr, "\n\n");
+    }
   fprintf(stderr,
 "Usage: setpci [<options>] (<device>+ <reg>[=<values>]*)*\n\
 -f\t\tDon't complain if there's nothing to do\n\
 -v\t\tBe verbose\n\
 -D\t\tList changes, don't commit them\n"
 GENERIC_HELP
-"<device>:\t-s [[<bus>]:][<slot>][.[<func>]]\n\
-\t|\t-d [<vendor>]:[<device>]\n\
-<reg>:\t\t<number>[.(B|W|L)]\n\
-     |\t\t<name>\n\
-<values>:\t<value>[,<value>...]\n\
-");
+"<device>:\t-s [[[<domain>]:][<bus>]:][<slot>][.[<func>]]\n"
+"\t|\t-d [<vendor>]:[<device>]\n"
+"<reg>:\t\t<number>[.(B|W|L)]\n"
+"     |\t\t<name>\n"
+"<values>:\t<value>[,<value>...]\n"
+"<value>:\t<hex>\n"
+"       |\t<hex>:<mask>\n");
   exit(1);
 }
 
@@ -290,18 +327,18 @@
 			argc--; argv++;
 		      }
 		    else
-		      usage();
+		      usage(NULL);
 		    c = "";
 		  }
 		else
 		  arg = NULL;
 		if (!parse_generic_option(*e, pacc, arg))
-		  usage();
+		  usage(NULL);
 	      }
 	    else
 	      {
 		if (c != d)
-		  usage();
+		  usage(NULL);
 		goto next;
 	      }
 	  }
@@ -319,12 +356,13 @@
       char *d, *e, *f;
       int n, i;
       struct op *op;
-      unsigned long ll, lim;
+      unsigned long ll;
+      unsigned int lim;
 
       if (*c == '-')
 	{
 	  if (!c[1] || !strchr("sd", c[1]))
-	    usage();
+	    usage(NULL);
 	  if (c[2])
 	    d = (c[2] == '=') ? c+3 : c+2;
 	  else if (argc > 1)
@@ -334,7 +372,7 @@
 	      d = argv[0];
 	    }
 	  else
-	    usage();
+	    usage(NULL);
 	  if (state != STATE_GOT_FILTER)
 	    {
 	      pci_filter_init(pacc, &filter);
@@ -351,11 +389,11 @@
 		die("-d: %s", d);
 	      break;
 	    default:
-	      usage();
+	      usage(NULL);
 	    }
 	}
       else if (state == STATE_INIT)
-	usage();
+	usage(NULL);
       else
 	{
 	  if (state == STATE_GOT_FILTER)
@@ -363,16 +401,17 @@
 	  if (!selected_devices[0] && !force)
 	    fprintf(stderr, "setpci: Warning: No devices selected for `%s'.\n", c);
 	  state = STATE_GOT_OP;
+	  /* look for setting of values and count how many */
 	  d = strchr(c, '=');
 	  if (d)
 	    {
 	      *d++ = 0;
 	      if (!*d)
-		usage();
+		usage("Missing value");
 	      for(e=d, n=1; *e; e++)
 		if (*e == ',')
 		  n++;
-	      op = xmalloc(sizeof(struct op) + n*sizeof(unsigned int));
+	      op = xmalloc(sizeof(struct op) + n*sizeof(struct value));
 	    }
 	  else
 	    {
@@ -386,7 +425,7 @@
 	    {
 	      *e++ = 0;
 	      if (e[1])
-		usage();
+		usage("Missing width");
 	      switch (*e & 0xdf)
 		{
 		case 'B':
@@ -396,7 +435,7 @@
 		case 'L':
 		  op->width = 4; break;
 		default:
-		  usage();
+		  usage("Invalid width \"%s\"", *e);
 		}
 	    }
 	  else
@@ -404,31 +443,48 @@
 	  ll = strtol(c, &f, 16);
 	  if (f && *f)
 	    {
-	      struct reg_name *r;
+	      const struct reg_name *r;
 	      for(r = pci_reg_names; r->name; r++)
 		if (!strcasecmp(r->name, c))
 		  break;
-	      if (!r->name || e)
-		usage();
+	      if (!r->name)
+		usage("Unknown register \"%s\"", c);
+	      if (e && op->width != r->width)
+		usage("Explicit width doesn't correspond with the named register \"%s\"", c);
 	      ll = r->offset;
 	      op->width = r->width;
 	    }
-	  if (ll > 0x100 || ll + op->width*((n < 0) ? 1 : n) > 0x100)
+	  if (ll > 0x1000 || ll + op->width*((n < 0) ? 1 : n) > 0x1000)
 	    die("Register number out of range!");
 	  if (ll & (op->width - 1))
 	    die("Unaligned register address!");
 	  op->addr = ll;
+	  /* read in all the values to be set */
 	  for(i=0; i<n; i++)
 	    {
 	      e = strchr(d, ',');
 	      if (e)
 		*e++ = 0;
 	      ll = strtoul(d, &f, 16);
-	      lim = (2 << ((op->width << 3) - 1)) - 1;
-	      if (f && *f ||
-		  (ll > lim && ll < ~0UL - lim))
-		usage();
-	      op->values[i] = ll;
+	      lim = max_values[op->width];
+	      if (f && *f && *f != ':')
+		usage("Invalid value \"%s\"", d);
+	      if (ll > lim && ll < ~0UL - lim)
+		usage("Value \"%s\" is out of range", d);
+	      op->values[i].value = ll;
+	      if (f && *f == ':')
+		{
+		  d = ++f;
+		  ll = strtoul(d, &f, 16);
+		  if (f && *f)
+		    usage("Invalid mask \"%s\"", d);
+		  if (ll > lim && ll < ~0UL - lim)
+		    usage("Mask \"%s\" is out of range", d);
+		  op->values[i].mask = ll;
+		  op->values[i].value &= ll;
+		}
+	      else
+		op->values[i].mask = ~0U;
 	      d = e;
 	    }
 	  *last_op = op;
@@ -439,7 +495,7 @@
       argv++;
     }
   if (state == STATE_INIT)
-    usage();
+    usage("No operation specified");
 
   scan_ops(first_op);
   execute(first_op);
diff -ruN pciutils-2.1.11/setpci.man pciutils-2.2.0/setpci.man
--- pciutils-2.1.11/setpci.man	2003-01-04 13:52:01 +0100
+++ pciutils-2.2.0/setpci.man	2005-08-23 22:56:28 +0200
@@ -1,4 +1,4 @@
-.TH setpci 8 "@TODAY@" "@VERSION@" "Linux PCI Utilities"
+.TH setpci 8 "@TODAY@" "@VERSION@" "The PCI Utilities"
 .IX setpci
 .SH NAME
 setpci \- configure PCI devices
@@ -15,6 +15,12 @@
 
 All numbers are entered in hexadecimal notation.
 
+Root privileges are necessary for almost all operations, excluding reads
+of the standard header of the configuration space on some operating systems.
+Please see
+.BR lspci(8)
+for details on access rights.
+
 .SH OPTIONS
 .TP
 .B -v
@@ -31,7 +37,7 @@
 or not.
 .TP
 .B -D
-`Demo mode' -- simulate configuration space accesses instead of really doing them.
+`Demo mode' -- don't write anything to the configuration registers.
 It's useful to try
 .B setpci -vD
 to see what your complex sequence of
@@ -41,24 +47,25 @@
 .B --version
 Shows
 .I setpci
-version. This option should be used standalone.
-
+version. This option should be used stand-alone.
 
 .SH DEVICE SELECTION
 .PP
 Before each sequence of operations you need to select which devices you wish that
 operation to affect.
 .TP
-.B -s [[<bus>]:][<slot>][.[<func>]]
-Select devices in specified bus, slot and function. Each component of the device
-address can be omitted or set as "*" meaning "any value". All numbers are
+.B -s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]]
+Show only devices in the specified domain (in case your machine has several host bridges,
+they can either share a common bus number space or each of them can address a PCI domain
+of its own; domains are numbered from 0 to ffff), bus (0 to ff), slot (0 to 1f) and function (0 to 7).
+Each component of the device address can be omitted or set to "*", both meaning "any value". All numbers are
 hexadecimal.  E.g., "0:" means all devices on bus 0, "0" means all functions of device 0
-on any bus, "0.3" selects third function of device 0 on all busses and ".4" selects only
-fourth function of each device.
+on any bus, "0.3" selects third function of device 0 on all buses and ".4" shows only
+the fourth function of each device.
 .TP
 .B -d [<vendor>]:[<device>]
 Select devices with specified vendor and device ID. Both ID's are given in
-hexadecimal and may be omitted or given as "*" meaning "any value".
+hexadecimal and may be omitted or given as "*", both meaning "any value".
 
 .SH OPERATIONS
 .PP
@@ -74,18 +81,27 @@
 .BR reg = values
 where
 .B reg
-is the same you would use to query the register and
+is the same as you would use to query the register and
 .B values
 is a comma-separated list of values you want to write starting with the given
-address.
+address. Each value to be written can be specified either as a hexadecimal number
+or as a
+.BR bits : mask
+pair which causes the bits corresponding to binary ones in the
+.B mask
+to be changed to values of the corresponding bits in the
+.B bits
+.
 
 .SH REGISTER NAMES
 .PP
 .B setpci
-knows the following configuration register names. See PCI bus specs for their precise
+knows the following configuration register names. See PCI bus specifications for their precise
 meaning or consult
+.B header.h
+or
 .B /usr/include/linux/pci.h
-for few comments.
+for a couple of comments.
 .PP
 .nf
 VENDOR_ID
@@ -155,49 +171,27 @@
 
 .SH PCILIB OPTIONS
 The PCI utilities use PCILIB (a portable library providing platform-independent
-functions for PCI configuration space access) to talk to the PCI cards. The following
-options control parameters of the library, especially what access method it uses.
-By default, PCILIB uses the first available access method and displays no debugging
-messages. Each switch is accompanied by a list of hardware/software configurations
-it's supported in.
-
-.TP
-.B -P <dir>
-Force use of Linux /proc/bus/pci style configuration access, using
-.B <dir>
-instead of /proc/bus/pci. (Linux 2.1 or newer only)
-.TP
-.B -H1
-Use direct hardware access via Intel configuration mechanism 1. (i386 and compatible only)
-.TP
-.B -H2
-Use direct hardware access via Intel configuration mechanism 2. Warning: This method
-is able to address only first 16 devices on any bus and it seems to be very
-unrealiable in many cases. (i386 and compatible only)
-.TP
-.B -S
-Use PCI access syscalls. (Linux on Alpha and UltraSparc only)
-.TP
-.B -F <file>
-Extract all information from given file containing output of lspci -x. This is very
-useful for analysis of user-supplied bug reports, because you can display the
-hardware configuration in any way you want without disturbing the user with
-requests for more dumps. (All systems)
-.TP
-.B -G
-Increase debug level of the library. (All systems)
+functions for PCI configuration space access) to talk to the PCI cards. Please
+see
+.BR lspci(8)
+for a list of switches controlling behavior of the library.
 
 .SH EXAMPLES
 .PP
 `setpci -d *:* latency_timer=40' sets the latency timer to 64 (40 hexadecimal).
 .PP
-`setpci -s 0 device_id vendor_id' lists ID's of devices in slot 0 in all busses.
+`setpci -s 0 device_id vendor_id' lists ID's of devices in slot 0 in all buses.
 .PP
 `setpci -s 12:3.4 3c.l=1,2,3' writes longword 1 to register 3c, 2 to register 3d
 and 3 to register 3e of device at bus 12, slot 3, function 4.
+.PP
+`setpci -s 13:8.4 40.b=50:d0,04:0c,ff' works on bus 13, device 8, function
+4: turns bit 7 off and bits 6 and 4 on in the byte register 40; turns
+bit 3 off and bit 2 on in the byte register 41; sets byte register
+42 to ff.
 
 .SH SEE ALSO
 .BR lspci (8)
 
 .SH AUTHOR
-The Linux PCI Utilities are maintained by Martin Mares <mj@ucw.cz>.
+The PCI Utilities are maintained by Martin Mares <mj@ucw.cz>.
diff -ruN pciutils-2.1.11/update-pciids.man pciutils-2.2.0/update-pciids.man
--- pciutils-2.1.11/update-pciids.man	2003-01-04 13:48:15 +0100
+++ pciutils-2.2.0/update-pciids.man	2005-08-23 23:24:27 +0200
@@ -1,4 +1,4 @@
-.TH update-pciids 8 "@TODAY@" "@VERSION@" "Linux PCI Utilities"
+.TH update-pciids 8 "@TODAY@" "@VERSION@" "The PCI Utilities"
 .IX update-pciids
 
 .SH NAME
@@ -17,11 +17,12 @@
 
 .SH FILES
 .TP
-.B @SHAREDIR@/pci.ids
+.B @IDSDIR@/pci.ids
 Here we install the new list.
 
 .SH SEE ALSO
-.BR lspci (8), setpci (8)
+.BR lspci (8),
+.BR setpci (8)
 
 .SH AUTHOR
-The Linux PCI Utilities are maintained by Martin Mares <mj@ucw.cz>.
+The PCI Utilities are maintained by Martin Mares <mj@ucw.cz>.
diff -ruN pciutils-2.1.11/update-pciids.sh pciutils-2.2.0/update-pciids.sh
--- pciutils-2.1.11/update-pciids.sh	2003-01-04 13:15:35 +0100
+++ pciutils-2.2.0/update-pciids.sh	2005-09-10 14:12:23 +0200
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 set -e
-SRC="http://pciids.sourceforge.net/pci.ids"
+SRC="http://pciids.sourceforge.net/v2.2/pci.ids"
 DEST=pci.ids
 
 if which bzip2 >/dev/null ; then
@@ -41,6 +41,8 @@
 
 if [ -f $DEST ] ; then
 	mv $DEST $DEST.old
+	# --reference is supported only by chmod from GNU file, so let's ignore any errors
+	chmod -f --reference=$DEST.old $DEST.neww 2>/dev/null || true
 fi
 mv $DEST.neww $DEST
 rm $DEST.new
diff -ruN pciutils-2.1.11/win32/config.h pciutils-2.2.0/win32/config.h
--- pciutils-2.1.11/win32/config.h	1970-01-01 01:00:00 +0100
+++ pciutils-2.2.0/win32/config.h	2005-09-21 14:08:42 +0200
@@ -0,0 +1,5 @@
+#define PCI_ARCH_I386
+#define PCI_OS_WINDOWS
+#define PCI_HAVE_PM_INTEL_CONF
+#define PCI_PATH_IDS "pci.ids"
+#define PCILIB_VERSION "2.2.0"
